Loops 汇编语言MASM

Loops 汇编语言MASM,loops,assembly,x86,masm,Loops,Assembly,X86,Masm,我很难调整这个任务来满足这个条件:确保你向前跳到循环的底部,然后从那里跳回到顶部,这样每次跳到顶部都来自完全相同的位置 我已经完成了任务,但我似乎是从多个地方跳出来的。如何调整程序以满足条件 你需要改变你的代码,你有一个永远jmp。有了一个标签,你可以从几个地方跳到这个jmp,直到永远。我的建议是: .386 .MODEL FLAT ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD Include io.h cr equ

我很难调整这个任务来满足这个条件:确保你向前跳到循环的底部,然后从那里跳回到顶部,这样每次跳到顶部都来自完全相同的位置


我已经完成了任务,但我似乎是从多个地方跳出来的。如何调整程序以满足条件

你需要改变你的代码,你有一个永远
jmp
。有了一个标签,你可以从几个地方跳到这个
jmp,直到永远
。我的建议是:

   .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

消息
之后创建一个标签(即,对于
jmp forever
),并使您以前的
jmp forever
跳转到该标签。
je finish
将跳转到
finish
标签(如果数字为0)。否则,它将通过
处理
。因此,
jne处理
是不必要的。将
jl消息
更改为
jnl skipmsg
,您可以删除
jmp skipmsg
指令。
processing:
         cmp number,10
         jg message

         cmp number,-10
         jl message

         jmp skipmsg

message: output rejected
skipmsg: jmp forever