x86标志寄存器中的辅助进位和公共进位有什么区别?

x86标志寄存器中的辅助进位和公共进位有什么区别?,x86,cpu-architecture,flags,cpu-registers,X86,Cpu Architecture,Flags,Cpu Registers,我想知道这个x86寄存器标志在DOS/Windows程序调试中的含义: 辅助进位AC=1或NA=0 它和普通进位有相同的含义吗?CY=1或NC=0当指令导致位3进位或借出时,设置辅助进位标志。与CY相同,但用于字节中较低半字节的高位。缩写AC是旧式,在英特尔处理器手册中,该标志名为AF,是Adjust标志的缩写。它由执行BCD计算调整的精选x86指令使用,如AAC Ascii Adjust after Addition和DAA Decimal Adjust after Addition。这些指令

我想知道这个x86寄存器标志在DOS/Windows程序调试中的含义:

辅助进位AC=1或NA=0


它和普通进位有相同的含义吗?CY=1或NC=0

当指令导致位3进位或借出时,设置辅助进位标志。与CY相同,但用于字节中较低半字节的高位。缩写AC是旧式,在英特尔处理器手册中,该标志名为AF,是Adjust标志的缩写。它由执行BCD计算调整的精选x86指令使用,如AAC Ascii Adjust after Addition和DAA Decimal Adjust after Addition。这些指令可以追溯到石器时代的计算机时代,当时在BCD编码中提供操作数仍然很常见。它在一个半字节中编码一个十进制数字。就像十进制99是BCD中的10011001


在当时,处理器对涉及BCD的计算提供专用硬件支持是很常见的。这是一段古老的历史,程序员习惯于用二进制编码数字。最重要的是编译器。值得注意的是,这些指令不再出现在x64指令集中。为更有用的64位特定操作码腾出空间。

当指令导致第3位进位或借出时,将设置辅助进位标志。与CY相同,但用于字节中较低半字节的高位。缩写AC是旧式,在英特尔处理器手册中,该标志名为AF,是Adjust标志的缩写。它由执行BCD计算调整的精选x86指令使用,如AAC Ascii Adjust after Addition和DAA Decimal Adjust after Addition。这些指令可以追溯到石器时代的计算机时代,当时在BCD编码中提供操作数仍然很常见。它在一个半字节中编码一个十进制数字。就像十进制99是BCD中的10011001


在当时,处理器对涉及BCD的计算提供专用硬件支持是很常见的。这是一段古老的历史,程序员习惯于用二进制编码数字。最重要的是编译器。值得注意的是,这些指令不再出现在x64指令集中。为更有用的64位特定操作码腾出空间。

辅助进位标志AF监视4位半字节进位,而公共进位标志CF监视从操作数大小的MSB执行的进位。如果使用8位寄存器,例如al或ah,则可能是8位进位;如果使用16位寄存器ax,则可能是16位进位;如果分别使用相应寄存器,例如eax或rax,则可能是32位或64位进位。

辅助进位标志AF监视4位半字节进位,而公共进位标志CF监视从操作数大小的MSB执行的进位。如果使用8位寄存器(如al或ah),则可能是8位进位;如果使用16位寄存器ax,则可能是16位进位;如果使用相应的寄存器(如eax或rax),则可能是32位或64位进位。

这将有助于了解您所说的CPU…我在这里猜测一下,并假设您指的是x86?请适当标记。是的,它是x86。我应该把x86标签放进去吗?没关系,我已经给你贴上标签了。请记住,当谈论诸如汇编或CPU体系结构之类的低级内容时,有比x86多得多的CPU,因此正确标记很重要。这将有助于了解您所谈论的CPU…我在这里猜测一下,并假设您指的是x86?请适当标记。是的,它是x86。我应该把x86标签放进去吗?没关系,我已经给你贴上标签了。请记住,在讨论汇编或CPU体系结构之类的低级内容时,有比x86多得多的CPU,因此适当标记很重要。CF的描述仅适用于操作数大小=8位的情况。对于像加法/减法这样设置AF的指令,CF是根据从MSB执行的操作数大小来设置的。其他指令,如移位或FP,会以不同的方式比较集合CF。@PeterCordes:没错。想要强调半字节与字节的比较,现在为了正确性也进行了修改。谢谢还是不太对。add al,bl设置CF=从8位结果执行。添加ax,bx设置CF=从16位结果执行。添加rax,rbx根据64位结果设置CF。所有这些指令都可以在x86-64上以64位模式编码。i、 CF保存上一次操作的进位,不管它的位位置是什么。只有当操作数大小=8位时,CF的描述才是正确的。对于像加法/减法这样设置AF的指令,CF是根据从MSB执行的操作数大小来设置的。其他指令,如移位或FP,会以不同的方式比较集合CF。@PeterCordes:没错。想要强调半字节与字节的比较,现在为了正确性也进行了修改。谢谢还是不太对。add al,bl设置CF=从8位结果执行。添加ax,bx设置CF=从 m是16位的结果。添加rax,rbx根据64位结果设置CF。所有这些指令都可以在x86-64上以64位模式编码。i、 e.CF保存上一次操作的进位,不管是什么位。