Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么即使ebx中的值大于eax中的值,我的代码也会跳转到return1_Assembly - Fatal编程技术网

Assembly 为什么即使ebx中的值大于eax中的值,我的代码也会跳转到return1

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

这就是代码,它总是跳转到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 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: