2014-12-05 72 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 2014-12-05 19:28:46

+0

如果数字为0,那么'je finish'将跳转到'finish'标签。否则,它将落入'处理'中。所以'处理'是不必要的。 – 2014-12-06 05:51:59

回答

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 message'更改为'jnl skipmsg',您可以删除'jmp skipmsg'指令。 – 2014-12-06 05:49:09