我刚刚开始组装,它很棒,但有一件事我不明白。 条件跳转如何工作?
我这里有一个汇编代码示例。
TEST EAX, EAX
FCLEX
JGE SHORT 004022B1
我看到当某个条件大于或等于时,将跳转到004022B1。
但那是什么条件,在哪里检查?
我假设条件必须是TEST EAX,EAX。但我不确定它的作用
任何人都可以向我解释条件跳转的工作原理以及检查/存储条件的位置吗?
答案 0 :(得分:5)
条件跳转(以及一些其他指令)使用标志。这些标志是(E / R)FLAGS寄存器中的位。 test a, b
根据and a, b
的结果设置标记,而不用结果更新a
。 fclex
不会更改任何正常标志(当然它会更改FPU标志)。
jge
测试* sign标志的值是否等于溢出标志。 test a, b
将溢出标志设置为零,并将符号标志设置为and a, b
结果的signbit。因此,如果eax
为正数,则会进行跳转。
*:请注意,它不会测试“更大或相等”。在cmp
(和其他一些指令)之后检查标志时,该解释是有效的。它只是看着旗帜。