汇编语言之----------标志寄存器

1、

8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)

8086CPU的flag寄存器结构:

1 3 5 12  13 14 15位在8086CPU中没有使用,不具有任何意义

0 2 4 6 7 8 9 10 11都具有特殊的含义

IF中断标志位

2、ZF标志(zero flag)

flag的第6位是ZF,零标志位

它记录相关指令执行后

结果为0, ZF = 1

结果不为0,ZF = 0

mov ax,1    sub ax,1                    结果为0,ZF = 1

3、PF标志,奇偶标志位

他记录指令执行后,结果的所有二进制位中1的个数

为偶数,PF = 1

为奇数,PF = 0

4、符号位0代表+           1代表-

 100 000 01就相当于 -127

5、SF标志,符号标志位

它记录执行指令后

结果为负 SF = 1

结果为正 SF = 0

6、CF标志,进位标志位

mov al,98

mov al,al

这样就会产生进位,我们的寄存器不会将进位直接丢掉,而是在寄存器中保存是否进位

7、OF标志,溢出标志位、

溢出只是针对于有符号数而言

进位是针对于无符号数来说的

8、adc指令,是带进位的加法指令,它利用了CF位上记录的进位值

adc ax,bx

(ax)=(ax)+(bx)+CF

9、sbb指令 sbb是带借位减法指令,他利用了CF位上记录的借位值

sbb ax,bx

(ax) = (ax) - (bx) - CF

10、cmp指令

cmp指令比较无符号数的

cmp ah,bh为例子

ah = bh (ah) - (bh) = 0 所以ZF = 1

ah != bh (ah) - (bh) = 0 所以 ZF = 0

根据cmp指令执行后的ZF的值,就可以知道两个数据是否相等

对于有符号数的比较,因为有溢出这个条件就会比较麻烦

例子:

SF = 1 负数

OF = 0 无溢出

说明就是正常的小于

SF = 1

OF = 1

负数加溢出

cmp发生溢出说明出现了错误,错误再给他发过来就是正确(。。。。感觉有些奇怪,减法溢出结果要反过来看)

 

11、

实操训练

 

12、DF标志和传传送标志

flag的第10位是DF,方向标志位

在串处理指令中,控制每次操作后si,di的增减

DF = 0 : 每次操作后 si di 递增

DF = 1  每次操作后 si di  递减

movsb

功能:(以字节单位传送)

把段地址ds 寄存器si的内容放进段地址es寄存器偏移地址di内存中去

movsb的功能是将ds si指向的内存单元中的字节送入es di,然后根据标志寄存器DF位的值,将si di递增或递减

movsw 传送一个字,递增递减是+2 -2

实际使用:

rep movsb

rep的作用是根据cx的值,重复执行后面的串传送指令

由于每执行一次movsb指令 si di都会去递增或递减指向后一个单元,则rep movsb 就可以循环实现(cx)个字符的传送。

8086CPU提供了两条指令对DF进行设置:

cld指令:将标志寄存器的DF位置0    clear

std指令:将标志寄存器的DF位置1    set

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值