mov %p09, %rdi
mov %rbx, %rsi
callq strcmp
test %eax, $eax
jne 890epj9
我的程序中经过上述两个字符串相同,strcmp
检查两个字符串是否相同,如果相同则返回0。
在strcmp
之后进行测试,考虑到strcmp
会得出两个字符串相同的结论,因此jne
不应该实现,因为仅当不相等时才实现。
但是jne
恰好发生在我的程序中,我被定向到890epj9
。这是怎么回事?
我不太明白让您感到困惑的地方。
strcmp
通话后,您在0
中有%eax
。指令test %eax, %eax
在其操作数上执行逻辑与,并相应地设置标志寄存器。由于0 AND 0 = 0
,ZF
被重置为0
。最后,如果是jne
,则ZF = 0
指令执行跳转。