装配条件跳转

Rob*_*bin 2 assembly conditional

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

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

TEST EAX, EAX
FCLEX
JGE SHORT 004022B1
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以向我解释条件跳转如何工作以及检查/存储条件的位置?

har*_*old 5

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

jge测试*sign标志的值是否等于溢出标志.test a, b将overflow标志设置为零,并将sign标志设置为结果的signbit and a, b.因此,如果eax是积极的话,将采取跳跃.

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