2014-12-05 2 views
0
.386 
    .MODEL FLAT 
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD 
Include io.h 
cr  equ 0DH 
Lf  equ 0AH 

     .STACK 4096 
     .DATA 

string byte 40 Dup (?) 
number dword ? 
rejected byte cr, Lf, "Rejected", 0 

    .code 
_start: 

forever: input string, 40 
     atod string 
     mov number, eax 
     cmp number,0 
     jne processing 
     je finish 

processing: 
    cmp number,10 
     jg message 

    cmp number,-10 
     jl message 

     jmp forever 

message: output rejected 
     jmp forever 

finish: 
    INVOKE ExitProcess, 0 

PUBLIC _start 
     END 

Я с трудом свыкается это задание выполнить это условие: Убедитесь, что вы прыгаете вперед к нижней части цикла, а оттуда обратно к вершине, так что каждый прыжок к началу происходит из одного и того же места.ассемблер MASM прыжки

Я выполнил задачу, но, похоже, я прыгаю из нескольких мест. Как настроить программу для соответствия этому условию.

+1

Создайте ярлык после 'message' (то есть для' jmp forever') и сделайте вместо этого более ранний переход jmp forever' на эту метку. – Jester

+0

'je finish' перейдет на метку' finish', если число равно 0. В противном случае оно перейдет в 'processing'. Поэтому 'jne processing' не требуется. –

ответ

1

Вам необходимо изменить код, который точно указан jmp forever. С этикеткой вы можете перепрыгнуть с нескольких мест на это jmp forever. Мое предложение:

processing: 
     cmp number,10 
     jg message 

     cmp number,-10 
     jl message 

     jmp skipmsg 

message: output rejected 
skipmsg: jmp forever 
+0

Измените сообщение 'jl' на' jnl skipmsg', и вы можете удалить инструкцию 'jmp skipmsg'. –

Смежные вопросы