首页 > 解决方案 > 为什么即使ebx中的值大于eax中的值,我的代码也会跳转到return1

问题描述

所以这是代码,即使 ebx 中的值大于 eax 中的值,它也总是跳转到 return1

我尝试使用 ret,但它会导致内存冲突。

mov eax, 5
mov edx, 5
mov ebx, 11
add eax, edx
cmp eax, ebx
jg return1
mov eax, 0
return1:
mov eax, 1

我希望输出为“0”,但实际输出为“1”

标签: assembly

解决方案


您的代码会覆盖 EAX 寄存器,而忽略所采用的分支。

在 (EAX > EBX) 的情况下,执行的代码将是:

mov eax, 0 // eax = 0
mov eax, 1 // eax = 1

除此以外:

mov eax, 1 // eax = 1

尝试在“return1”标签之前立即插入无条件跳转(跳转)到退出代码,以消除对 EAX 寄存器的覆盖:

mov eax, 5
mov edx, 5
mov ebx, 11
add eax, edx
cmp eax, ebx
jg return1
mov eax, 0
jmp return2
return1:
mov eax, 1
return2:

推荐阅读