第十一章 标志寄存器
标志寄存器(flag寄存器)在8086中结构如图
影响标志寄存器的大都是运算指令(逻辑和算数运算)
而传送指令(如mov push pop等)都不会影响标志寄存器
ps:inc 和dec 也不会影响标志寄存器
ZF(zero)零标志
- 结果为0时:zf=1
- 结果为非0时:zf=0
PF(parity)偶数标志
- 结果的二进制有偶数个1时:pf=1
- 奇数时:pf=0
SF(sign)负数标志
- 结果为负时:sf=1
- 结果为非负时:sf=0
CF(carry)进位(借位)标志
无符号运算
- 结果存在向最高位的更高位进位(借位):cf=1
- 没有进位(借位):cf=0
OF(overflow)溢出标志
有符号运算
- 运算结果超过结果载体表示范围:of=1
- ~ 没超过:of=0
DF(direction)方向标志与串传送指令
DF标志在串处理指令中,控制每次操作后si、di的增减
df=0:每次操作后si、di递增
指令cld
设置df=0
df=1:每次操作后si、di递减
指令std
设置df=1
movsb(字节串传送)
实现的东西就相当于
mov es:[di],ds[si] ;8086并不支持这样的指令
inc si ;df=0
inc di ;df=0movsw(字型数据串传送) 类上
以上只是串传送的一个步骤,通常还要配合rep指令
如:rep movsb
就相当于
1 | s:movsb |
它的循环次数也由cx决定
adc指令
操作格式:adc 对象1,对象2
功能: 对象1=对象1+对象2+cf
用来实现大数相加(可以处理进位)
sub指令
操作格式:sbb 对象1,对象2
功能: 对象1=对象1-对象2-cf
用来实现大数相减(可以处理借位)和adc的作用意义类似
cmp 指令与j类跳转指令
指令格式:cmp 对象1,对象2
实质上就是计算对象1-对象2,只不过不保留运算结果,通常用来与j类跳转指令配合使用
j类指令如下:
pushf 和 popf
- pushf:将flag寄存器的值压栈
- popf:将栈中的数据弹入到flag寄存器
Comments