我是 x86 汇编程序的新手,很难正确解释所有条件跳转和测试。我有这个代码:
sbb dx, dx
test dx, dx
jg short loc_17C7
这就是我阅读该代码的方式:在sbb,之前CF设置或未设置,因此结果sbb dx, dx是您在dx.
但是这样test dx, dx永远不会导致任何可以jg跳转的 FLAGS 组合。维基百科说
TEST 操作将标志 CF 和 OF 设置为零。SF 设置为 AND 结果的 MSB。如果 AND 的结果为 0,则 ZF 设置为 1,否则设置为 0。
如果dx是-1,那将导致OF=0 SF=1 ZF=0(-1在二进制中应该全是1,所以MSB必须是1,因此SF=1)
如果dx为 0,那将导致OF=0 SF=0 ZF=1
但jg只跳 iff ZF=0 and SF=OF。在情况 1 中,SF!=OF。在情况 2 中,ZF!=0。
那么我在这里错过了什么?