标志寄存器

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. 概览
AX=0000  BX=0000  CX=045F  DX=0000  SP=0080  BP=0000  SI=0000  DI=0000
DS=0E14  ES=0E14  SS=0E47  CS=0E50  IP=0000   NV UP EI PL NZ NA PO NC

15   14   13   12   11   10   9   8   7   6   5   4   3   2   1   0
                    OF   DF   IF  TF  SF  ZF      AF      PF      CF

溢出标志OF(Over flow flag)                    OV(1)             NV(0)

方向标志DF(Direction flag)                    DN(1)             UP(0)

中断标志IF(Interrupt flag)                    EI(1)             DI(0)

符号标志SF(Sign flag)                         NG(1)             PL(0)

零标志ZF(Zero flag)                           ZR(1)             NZ(0)

辅助标志AF(Auxiliary carry flag)              AC(1)             NA(0)

奇偶标志PF(Parity flag)                       PE(1)             PO(0)

进位标志CF(Carry flag)                        CY(1)             NC(0)

追踪标志TF(Trap Flag)

备注:mul,div, mov, push,pop 移动指令 不影响标志位
     CF 是无符号运算
2. 负数的表示
  1. 取数的绝对值的二进制表示。
  2. 求这个二进制数的反码(将每一位上的 0 变为 1, 1 变为 0)。
  3. 对反码加 1 得到补码。 首位是 1, 就是负数
对于-11. 绝对值1的二进制表示是0000 00012. 求反码得到1111 11103.1得到补码1111 1111。

对于-21. 绝对值2的二进制表示是0000 00102. 求反码得到1111 11013.1得到补码1111 1110。

对于-128(在8位系统中是最小的负数):
1. 绝对值128的二进制表示是1000 0000(注意这是一个9位数, 但因为我们只用8位表示, 所以最左边的1被省略了)。
2. 因为我们只考虑8位, 所以这里只用1000 0000表示, 并没有更多的位去取反了。
3. 1000 0000已经是它自己的补码了, 因为如果你尝试对它取反并加1, 会发现结果还是1000 0000