第十一章 标志寄存器

第十一章 标志寄存器

8086PC的标志寄存器是按位起作用的,除下面标注的位,其余位没有意义

注意8086中逻辑或运算指令如add、sub、mul、div、inc、or、and等影响flag寄存器,传送指令如mov、push、pop等不影响flag寄存器,inc、loop不影响CF位
在进行算术运算时,既可以把两个数看成有符号数,也可以看成无符号数,得到的结果是同一个,从有无符号两个角度可以解读同一个结果的不同意义。

adc 带进位加法指令,利用了CF位记录的进位值,指令格式:adc 对象1,对象2,对象1=对象1+对象2+CF
adc可以用来进行大数加法,如:两个大于16位的数相加,add 两个数的低16位,adc两个数的其他位
sbb 带借位减法指令,利用了CF位记录的借位值,指令格式:sbb 对象1,对象2,对象1=对象1-对象2-CF
sbb可以用来进行大数减法,如:两个大于16位的数相减,sub 两个数的低16位,sbb两个数的其他位

cmp比较指令 cmp 对象1,对象2 功能:计算对象1-对象2但并不保存结果,仅仅根据结果对flag寄存器进行设置,逻辑含义是比较对象1和对象2的大小。cmp指令和add、sub指令一样也包含两种含义:进行无符号数比较和有符号数比较。

11.1 ZF 标志

flag的第6位,零标志位,相关指令执行完之后,若结果为0,ZF=1,否则ZF=0。

11.2 PF标志

flag的第2位,奇偶标志位,相关指令执行完之后,其结果的所有bit位中1的个数为偶数,PF=1,否则PF=0。

11.3 SF标志

flag的第7位,符号标志位,相关指令执行完之后(有符号数运算),若结果为负SF=1,否则SF=0。

11.4 CF标志

flag的第0位,进位标志位,相关指令执行完之后(无符号数运算),记录结果最高有效位向更高位的进位值,或从更高位的借位值。

11.5 OF标志

flag的第11位,溢出标志位,相关指令执行完之后(有符号数运算),若结果溢出0F=1,否则0F=0。

11.6 adc指令

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

指令格式:adc 操作对象1,操作对象2

功能:操作对象1=操作对象1+操作对象2+CF

比如指令 adc ax,bx 实现的功能是:(ax)=(ax)+(bx)+ CF

11.7 sbb指令

sbb 是带借位减法指令,它利用了CF 位上记录的借位值。

指令格式:sbb 操作对象1,操作对象2

功能:操作对象 1=操作对象1-操作对象 2-CF

比如指令 sbb ax,bx 实现的功能是:(ax)=(ax)-(bx)-CF

11.8 cmp指令

cmp 是比较指令,cmp 的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
cmp 指令格式:cmp 操作对象1,操作对象2

功能:计算操作对象1-操作对象2但并不保存结果,仅仅根据计算结果对标志寄存器进行设置。

11.9 检测比较结果的条件转移指令

下面是常用的根据无符号数的比较结果进行转移的条件转移指令:

这些指令比较常用,它们都很好记忆,它们的第一个字母都是j,表示 jump;后面的字母表示意义如下。

11.10 DF标志和串传送指令

flag的第10位,方向标志位,在串处理指令中,控制每次操作后si、di的增减,df=0,每次操作后si、di递增,df=1,每次操作后si、di递减。

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

std指令:将标志寄存器的df位置1。

11.11 pushf和popf

pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标志寄存器中

std指令:将标志寄存器的df位置1。

11.11 pushf和popf

pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标志寄存器中

pushf和popf,为直接访问标志寄存器提供了一种方法。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值