2

我刚开始组装,一切都很好,但有一点我不明白。条件跳转是如何工作的?

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

TEST EAX, EAX
FCLEX
JGE SHORT 004022B1

我看到当某个条件大于等于时,会跳转到004022B1。
但是那个条件是什么,在哪里检查呢?
我假设条件必须是 TEST EAX,EAX。但我不确定它的作用。

谁能向我解释条件跳转是如何工作的以及条件是在哪里检查/存储的?

4

1 回答 1

5

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

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

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

于 2012-06-14T14:36:22.433 回答