有人能给我一个x85辅助携带的例子吗?

时间:2014-07-24 15:13:15

标签: architecture cpu-registers microprocessors

最近遇到了x85辅助携带。如果从结果的第3位到第4位执行,教科书会说 - 设置。 为什么应该有一个状态寄存器检查从第3位到第4位的进位?有人可以通过一个例子向我解释一下吗?

1 个答案:

答案 0 :(得分:0)

辅助进位标志(也称为调整标志)表示在binary-coded decimal (BCD)运算期间发生了进位或借位。在BCD中,四位用于存储十进制数字0-9,其他六个值(十六进制A-F)被认为是无效的。在对BCD值执行算术运算后,必须对它们进行调整以确保结果已正确编码。处理器可以检测总是调整的四位中的非十进制(A-F)值,但某些操作将产生有效值;处理器使用adjust标志来确定是否更正该值。

例如,9 16 +8 16 = 11 16 = 0001 0001 2 ,这是一个有效的BCD值 - 但它是错误的结果,因为9 10 +8 10 = 17 10 。处理器知道调整该值,因为从一个4位BCD值到另一个4位BCD值发生了进位。在没有BCD算术特殊指令的处理器中,常规二进制算术指令设置辅助进位标志以指示需要进行BCD调整。

我不熟悉x85,但它似乎是x86的缩减版本。 x86中的BCD数学运算使用常规二进制算术指令,以及特定于BCD的指令DAA,DAS,AAA,AAS,AAM和AAD,如果需要可以执行调整,并且可以是(正常)进位标志(用于条件跳转)。 x86支持解压缩(每个字节一个BCD数字)和压缩(每个字节两个BCD数字)格式,因此它需要这么多调整指令。

Intel x86 manuals有关于x86 BCD支持的更多信息,尽管它分散在整个手册中,而不是分散在一个部分中。维基百科在half-carry flag文章中有一个更广泛的例子。