1
我想知道是否可以使用与cmp相同的测试指令。比方说:测试工作是否与cmp一样?
cmp %eax,%ebx
jg some_random_place
跳转至some_random_place提供EBX%比%EAX大,现在如果我这样做:
test %eax, %ebx
jg some_random_place
在哪些情况下是不会跳?
我想知道是否可以使用与cmp相同的测试指令。比方说:测试工作是否与cmp一样?
cmp %eax,%ebx
jg some_random_place
跳转至some_random_place提供EBX%比%EAX大,现在如果我这样做:
test %eax, %ebx
jg some_random_place
在哪些情况下是不会跳?
不!
cmp %eax,%ebx
说明书与sub %eax,%ebx
指令相似,但在cmp
指令执行后的寄存器保持不变,除了标志寄存器。
test %eax,%ebx
指令与and %eax,%ebx
指令相似,但在test
指令执行后的寄存器保持不变,除了标志寄存器。 的efected标志是进位= 0,零= X,溢出= 0,注册= X
的jg
指令寻址应该执行跳跃,如果零标志= 0和符号标志=溢出
所以,如果...
test %eax, %ebx
jg some_random_place
...如果and %eax,%ebx
结果是肯定的跳跃,应执行的,而不是0
谢谢!在问了这个问题后,我得到了我自己研究的旗子部分,但是我不能不明白一个二进制码可以如何提高溢出标记,但仍然不会。你介意给我解释最后一部分吗?除此之外,这是一个非常好而明确的答案! – Setzer22
'和'或'test'指令永远不会溢出溢出标志,但正如我写入的只是在指令执行后清除。 –
哦,所以sign_flag = overflow可以翻译成sign_flag等于零,这意味着数字是正数,对吗?现在我懂了! 谢谢 – Setzer22