如何解决汇编程序中的条件跳转总是给出相同的结果
我正在尝试进入汇编器,并且正在阅读一个简短介绍的文档。有一个任务可以将以下代码转换为纯汇编代码:
mov bx,30
if (bx <= 4) {
mov al,’A’
} else if (bx < 40) {
mov al,’B’
} else {
mov al,’C’
}
mov ah,0x0e
int 0x10 ; print the character in al
jmp $
; Padding and magic number.
times 510-($-$$) db 0
dw 0xaa55
我创建了以下汇编代码:
mov bx,30
cmp bx,4
jle if_branch
cmp bx,40
jl elif_branch
mov al,'C'
if_branch:
mov al,'A'
elif_branch:
mov al,'B'
mov ah,0x0e
int 0x10
jmp $
times 510-($-$$) db 0
dw 0xaa55
无论我在第1行中将什么放入bx中,输出始终为'B'。我在那里想念什么?
我的设置:我正在代码块中编写汇编代码,并使用nasm创建bin文件。然后,我使用qemu执行该bin文件。
解决方案感谢ecm和barny的评论:问题是在if_branch标签中的动作'A'之后,执行将继续并执行动作'B'。最后定义一个空标签并跳转到该标签即可解决该问题。 加上一些额外的改进,这就是最终的代码:
mov bx,40
mov al,'A'
cmp bx,4
jle the_end
mov al,'B'
cmp bx,40
jl the_end
mov al,'C'
the_end:
mov ah,0x0e
int 0x10
jmp $
times 510-($-$$) db 0
dw 0xaa55
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。