2014-03-04 22 views
1

我想知道是否可以使用与cmp相同的测试指令。比方说:测试工作是否与cmp一样?

cmp %eax,%ebx 
jg some_random_place 

跳转至some_random_place提供EBX%比%EAX大,现在如果我这样做:

test %eax, %ebx 
jg some_random_place 

在哪些情况下是不会跳?

回答

3

不!

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

+0

谢谢!在问了这个问题后,我得到了我自己研究的旗子部分,但是我不能不明白一个二进制码可以如何提高溢出标记,但仍然不会。你介意给我解释最后一部分吗?除此之外,这是一个非常好而明确的答案! – Setzer22

+0

'和'或'test'指令永远不会溢出溢出标志,但正如我写入的只是在指令执行后清除。 –

+0

哦,所以sign_flag = overflow可以翻译成sign_flag等于零,这意味着数字是正数,对吗?现在我懂了! 谢谢 – Setzer22

相关问题