-1

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

无论如何,我在Chapter 6里面,我无法弄清楚处理器用来进行条件跳转的标志的情况。我知道标志的基本作用,例如,我知道如果在最后一条指令中发生或没有溢出,溢出标志会设置或重置。但我无法弄清楚它们是如何适应跳跃的条件的。

有符号条件跳转 无符号条件跳转

如果有人帮助我了解使用标志寄存器来实现条件跳转,那将非常有帮助。

4

1 回答 1

4

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

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

cmp eax, ebx
ja AOverB

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

那有帮助吗?你了解进位和借位的概念,以及它们的近亲溢出吗?

于 2019-06-12T18:05:54.920 回答