汇编语言 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 跳跃的主要内容,如果未能解决你的问题,请参考以下文章
Win10 + MASM32 + EditPlus 汇编语言编程环境设置