标志寄存器
- CPU内部的寄存器中,有一种特殊的寄存器具有以下3种作用
- 用来存储相关指令的某些执行结果
- 用来为CPU执行相关指令提供行为依据
- 用来控制CPU的相关工作方式
- 这种特殊的寄存器在8086CPU种,被称为标志寄存器
- 8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。
- 其他寄存器是用来存放数据的,整个寄存器有一个含义。而flag寄存器是按位起作用的。
- flag寄存器的1,3,5,12,13,14,15位在8086CPU中没有使用,不具有任何含义。
- 0,2,4,6,7,8,9,10,11位都具有特殊的含义。
ZF
- 第6位ZF,零标志位。
- 它记录相关指令执行后,其结果是否为0。
- 其结果为0,ZF为1,其结果不为0,ZF为0。
1 2 3 |
mov ax,1 sub ax,1 //执行后,结果为0,ZF为1 |
PF
- 第2位是PF,奇偶标志位。
- 它记录相关指令执行后,其结果的所有bit位中1 的个数是否为偶数。
- 如果1的个数为偶数,PF为1,否则为奇数,PF为0。
1 2 3 |
mov ax,1 sub ax,10 //执行后,结果为00001011B,3个1,PF为0 |
SF
- 第7位是SF,符号标志位。
- 它记录相关指令执行后,其结果是否为负。
- 如果结果为负,SF为1,否则为0。
CF
- 第0位是CF,进位标志位。
- 它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
OF
- 在进行有符号数运算的时候,如结果超过了机器所能表示的范围称为溢出。
- 第11位是OF,溢出标志位。
- 记录了有符号数运算的结果是否发生了溢出。
- 如果发生溢出,OF为1。如果没有,OF为0。
adc
- 带进位加法指令,它利用了CF位上记录的进位值。
1 |
adc ax, 1 |
sbb
- 带位减法指令,它利用了CF位上记录的借位值。
1 |
sbb ax, 0020H |
cmp
- 比较指令
- 相当于减法指令,但是不保存结果
1 |
cmp ax, bx |
条件转移
je
- 等于则转移
- 检测相关标志位:ZF = 1
jne
- 不等于则转移
- 检测相关标志位:ZF = 0
jb
- 低于则转移
- 检测相关标志位:CF = 1
jnb
- 不低于则转移
- 检测相关标志位:CF = 0
ja
- 高于则转移
- 检测相关标志位:CF = 0 且 ZF = 0
jna
- 不高于则转移
- 检测相关标志位:CF = 1 或 ZF = 1
DF
- 第10位是DF,方向标志位。
- 在串处理指令中,控制每次操作后SI,DI的增减。
- DF = 0,每次操作后SI,DI递增。
- DF = 1,每次操作后SI,DI递减。
pushf
- 将标志寄存器的值压栈
popf
- 从栈中弹出数据
shl
- 逻辑左移指令
- 将一个寄存器或内存单元中的数据向左移位
- 最低位用0补充
shr
- 逻辑右移指令
- 将一个寄存器或内存单元中的数据向右移位
- 最高位用0补充
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 汇编记述二08/07
- ♥ 汇编记述一08/04
- ♥ 定位内存与数据处理03/31
- ♥ 关于程序03/29
- ♥ X86_64汇编学习记述四08/09
- ♥ 寄存器和内存访问03/28