我是汇编语言的新手,正在阅读Assembly Language Programming By Ytha Yu, Charles Marut
无论如何,我在Chapter 6
中,我无法弄清楚处理器用于进行条件跳转的标志的情况。我知道这些标志的基本作用,例如,我知道如果在最后一条指令中发生或未发生任何溢出,则溢出标志会置位或复位。但是我无法弄清楚它们是如何在跳跃条件下发挥作用的。
如果有人帮助我了解标志寄存器的使用以实现条件跳转,那将真的很有帮助。
答案 0 :(得分:3)
总体思路是:有一些操作可以设置或清除各个标志-算术,按位,比较。然后,您可以根据这些操作的结果随意执行条件跳转。
让我们考虑最基本的情况-如果一个变量大于另一个变量则跳转。假设变量位于通用寄存器中,并且代码为32位,则代码为:
cmp eax, ebx
ja AOverB
现在,这是怎么做的? CMP行计算值EAX-EBX
,不将其存储在任何地方,而是设置标志。具体而言,如果减法的结果为零(即EAX-EBX=0
,即EAX=EBX
),则置零标志,否则将其清零。如果EAX<EBX
设置进位标志(即减去它们将需要借位)。因此,JA命令执行以下操作:如果未设置零标志且未设置进位标志(即EAX=EBX
和EAX<EBX
都没有)。通过明显的数学运算,如果未设置这些标志,则表示EAX>EBX
。
有帮助吗?您了解进位和借位的概念,以及它们的相对相对溢位吗?