Assembly 为什么即使ebx中的值大于eax中的值,我的代码也会跳转到return1
这就是代码,它总是跳转到return1,即使ebx中的值大于eax中的值 我尝试使用ret,但它会导致内存冲突Assembly 为什么即使ebx中的值大于eax中的值,我的代码也会跳转到return1,assembly,Assembly,这就是代码,它总是跳转到return1,即使ebx中的值大于eax中的值 我尝试使用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”您的代码覆盖EAX寄存器,而不考虑执行的分支 在(EAX>EBX)的情况下,执行的代码为: mov eax, 0 // eax = 0 mov
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”您的代码覆盖EAX寄存器,而不考虑执行的分支 在(EAX>EBX)的情况下,执行的代码为:
mov eax, 0 // eax = 0
mov eax, 1 // eax = 1
否则:
mov eax, 1 // eax = 1
尝试将无条件跳转(jump)插入“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:
您的代码将覆盖EAX寄存器,而不考虑执行的分支 在(EAX>EBX)的情况下,执行的代码为:
mov eax, 0 // eax = 0
mov eax, 1 // eax = 1
否则:
mov eax, 1 // eax = 1
尝试将无条件跳转(jump)插入“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:
你能解释一下你用
ret
试过什么吗?无论如何,它是一个常见问题的例子:在mov eax,0
之后,mov eax,1
也被执行,因为你没有告诉它不要这样做。你能解释一下你用ret
做了什么吗?无论如何,它是一个常见问题的例子:在mov eax之后,0
,mov eax,1
也被执行,因为您没有告诉它不要这样做。您还可以用指令setg al
movzx eax替换jg return1 mov eax,0 jmp return2 return1:mov eax,1 return2:
,al您也可以使用说明设置al
movzx eax,al
替换jg return1 mov eax,0 jmp return2 return1:mov eax,1 return2: