汇编程序中的条件跳转总是给出相同的结果

问题描述

我正在尝试进入汇编器,并且正在阅读一个简短介绍的文档。有一个任务可以将以下代码转换为纯汇编代码

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 (将#修改为@)