我想知道测试指令是否可以与cmp一样使用。让我们说:
cmp %eax,%ebx
jg some_random_place
Run Code Online (Sandbox Code Playgroud)
如果 %ebx 大于 %eax,则跳转到 some_random_place,现在如果我这样做:
test %eax, %ebx
jg some_random_place
Run Code Online (Sandbox Code Playgroud)
在什么条件下会跳转?
不!
所述cmp %eax,%ebxinstuction是像sub %eax,%ebx指令,但与cmp指令执行之后寄存器保持不变,除了标志寄存器。
所述test %eax,%ebxinstuction是像and %eax,%ebx指令,但与test指令执行之后寄存器保持不变,除了标志寄存器。受影响的标志是进位 = 0、零 = x、溢出 = 0 和符号 = x
jg如果零标志 = 0 和符号标志 = 溢出,指令应该执行跳转
所以万一...
test %eax, %ebx
jg some_random_place
Run Code Online (Sandbox Code Playgroud)
...如果结果and %eax,%ebx为正数而不是 0,则应执行跳转。