【问题标题】:Can someone give me an example of Auxiliary Carry in x85?有人可以给我一个 x85 中辅助进位的例子吗?
【发布时间】:2014-07-24 15:13:14
【问题描述】:

最近遇到了 x85 辅助进位。教科书说 - 它设置了结果的第 3 位到第 4 位是否有进位为什么应该有一个状态寄存器来检查从第 3 位到第 4 位的进位?有人可以举个例子给我解释一下吗?

【问题讨论】:

    标签: architecture cpu-registers microprocessors


    【解决方案1】:

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

    例如,916+816 = 1116 = 0001 00012,这是一个有效的 BCD 值——但它是错误的结果,因为 910+810 = 1710。处理器知道要调整该值,因为从一个 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 文章中有一个更扩展的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-07
      相关资源
      最近更新 更多