装配条件跳转

时间:2012-06-14 14:26:34

标签: assembly conditional

我刚刚开始组装,它很棒,但有一件事我不明白。 条件跳转如何工作?

我这里有一个汇编代码示例。

TEST EAX, EAX
FCLEX
JGE SHORT 004022B1

我看到当某个条件大于或等于时,将跳转到004022B1。
但那是什么条件,在哪里检查? 我假设条件必须是TEST EAX,EAX。但我不确定它的作用
任何人都可以向我解释条件跳转的工作原理以及检查/存储条件的位置吗?

1 个答案:

答案 0 :(得分:5)

条件跳转(以及一些其他指令)使用标志。这些标志是(E / R)FLAGS寄存器中的位。 test a, b根据and a, b的结果设置标记,而不用结果更新afclex不会更改任何正常标志(当然它会更改FPU标志)。

jge测试* sign标志的值是否等于溢出标志。 test a, b将溢出标志设置为零,并将符号标志设置为and a, b结果的signbit。因此,如果eax为正数,则会进行跳转。

*:请注意,它不会测试“更大或相等”。在cmp(和其他一些指令)之后检查标志时,该解释是有效的。它只是看着旗帜。