解释标志如何在汇编语言的条件跳转中工作

Explain how the flags work in conditional jumps in Assembly language

我是汇编语言的新手,我正在阅读 Assembly Language Programming By Ytha Yu, Charles Marut

无论如何,我在 Chapter 6 中,我无法弄清楚处理器用来进行条件跳转的标志的情况。我知道这些标志基本上是做什么的,例如,我知道如果在最后一条指令中发生或不发生任何溢出,则溢出标志会设置或重置。但是我不知道它们是如何影响跳跃的条件的。

It would be really helpful if anyone helped me understand the uses of flag registers to implement conditional jumps.

大意是:有一些设置或清除单个标志的操作 - 算术、按位、比较。然后您可以根据这些操作的结果自由执行条件跳转。

让我们考虑最基本的情况——如果一个变量大于另一个变量则跳转。假设变量在通用寄存器中,代码是 32 位的,这将是:

cmp eax, ebx
ja AOverB

现在,那有什么作用? CMP 行计算值 EAX-EBX,不将其存储在任何地方,而是设置标志。具体来说,如果减法的结果为零(即 EAX-EBX=0,即 EAX=EBX),则设置零标志,否则清除。如果 EAX<EBX 则设置进位标志(即减去它们需要借位)。所以 JA 命令是这样的:如果没有设置零标志并且也没有设置进位标志(即既没有 EAX=EBX 也没有 EAX<EBX),则跳转。通过明显的数学计算,如果这些标志都没有设置,则意味着 EAX>EBX.

有帮助吗?进位和借位及其近亲溢出的概念你懂了吗?