汇编条件跳转

标签 assembly conditional-statements

我刚刚开始组装,进展顺利,但有一件事我不明白。 条件跳转如何工作?

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

TEST EAX, EAX
FCLEX
JGE SHORT 004022B1

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

谁能向我解释条件跳转如何工作以及检查/存储条件的位置?

最佳答案

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

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

*:请注意,它不测试“大于或等于”。当在 cmp(以及其他一些指令)之后检查标志时,该解释是有效的。它实际上只是查看标志。

关于汇编条件跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035220/

相关文章:

assembly - JS和JL x86指令的区别

MYSQL 条件总是评估为 Else

javascript - JS 和其他语言的较短比较

mysql - SQL 条件排序

macos - 为什么 %eax 在调用 printf 之前归零?

assembly - 什么是可重定位和绝对机器代码?

c - 这两条指令在下面的函数中做了什么?

linux - Intel x86与x64系统调用

javascript - `if (idx < arr.length)` 相当于 `if (arr[idx])` 吗?

python - 有没有办法在 for 循环中添加多个条件?