标志寄存器
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. 负数的表示
- 取数的绝对值的二进制表示。
- 求这个二进制数的反码(将每一位上的 0 变为 1, 1 变为 0)。
- 对反码加 1 得到补码。
首位是 1, 就是负数
对于-1:
1. 绝对值1的二进制表示是0000 0001。
2. 求反码得到1111 1110。
3. 加1得到补码1111 1111。
对于-2:
1. 绝对值2的二进制表示是0000 0010。
2. 求反码得到1111 1101。
3. 加1得到补码1111 1110。
对于-128(在8位系统中是最小的负数):
1. 绝对值128的二进制表示是1000 0000(注意这是一个9位数, 但因为我们只用8位表示, 所以最左边的1被省略了)。
2. 因为我们只考虑8位, 所以这里只用1000 0000表示, 并没有更多的位去取反了。
3. 1000 0000已经是它自己的补码了, 因为如果你尝试对它取反并加1, 会发现结果还是1000 0000。