汇编语言 MASM 跳跃

Posted

技术标签:

【中文标题】汇编语言 MASM 跳跃【英文标题】:Assembly Language MASM jumping 【发布时间】:2014-12-05 19:16:04 【问题描述】:
   .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

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

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

【问题讨论】:

message 之后创建一个标签(即jmp forever)并让您之前的@​​987654324@ 跳转到该标签。 如果数字为 0,je finish 将跳转到 finish 标签。否则将跳转到 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

【讨论】:

jl message改成jnl skipmsg,就可以去掉jmp skipmsg指令了。

以上是关于汇编语言 MASM 跳跃的主要内容,如果未能解决你的问题,请参考以下文章

MASM 32位汇编 32与16汇编区别

Win10 + MASM32 + EditPlus 汇编语言编程环境设置

汇编语言 (MASM) 和 Spectre:变体 2 (CVE-2017-5715) 分支目标注入

masm32基本配置与写出第一个汇编程序

求一个汇编语言课程设计的MASM32时钟的程序

用批处理干掉汇编masm link六回车