我想知道测试指令是否可以和cmp一样使用。让我们说:
cmp %eax,%ebx
jg some_random_place
如果%ebx大于%eax,则跳转到some_random_place,现在如果我这样做:
test %eax, %ebx
jg some_random_place
跳跃的条件是什么?
答案 0 :(得分:3)
没有!
cmp %eax,%ebx
指令与sub %eax,%ebx
指令类似,但在cmp
指令处执行后的寄存器保持不变,除了标志寄存器。
test %eax,%ebx
指令与and %eax,%ebx
指令类似,但在test
指令处执行后的寄存器保持不变,除了标志寄存器。
被感知的标志是Carry = 0,Zero = x,Overflow = 0和Sign = x
如果零标志= 0且符号标志=溢出
,则jg
指令应执行跳转
以防万一...
test %eax, %ebx
jg some_random_place
...如果and %eax,%ebx
的结果为正且不为0,则应执行跳转。