我刚刚开始组装,进展顺利,但有一件事我不明白。 条件跳转如何工作?
我这里有一个汇编代码示例。
TEST EAX, EAX
FCLEX
JGE SHORT 004022B1
我看到当某个条件大于或等于时,就会跳转到004022B1。
但是这个条件是什么以及在哪里检查?
我假设条件必须是TEST EAX,EAX。但我不确定它的作用。
谁能向我解释条件跳转如何工作以及检查/存储条件的位置?
最佳答案
条件跳转(以及其他一些指令)使用标志。这些标志是 (E/R) FLAGS 中的位。登记。 test a, b
根据和a, b
的结果设置标志,而不用结果更新a
。 fclex
不会更改任何普通标志(当然它会更改 FPU 标志)。
jge
测试*符号标志的值是否等于溢出标志。 test a, b
将溢出标志设置为零,将符号标志设置为和 a, b
结果的符号位。因此,如果eax
为正,则跳转。
*:请注意,它不测试“大于或等于”。当在 cmp
(以及其他一些指令)之后检查标志时,该解释是有效的。它实际上只是查看标志。
关于汇编条件跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035220/