2014-12-05 102 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