汇编——第十一章 标志寄存器

第十一章 标志寄存器

标志寄存器具有以下三个作用:
(1)用来存储相关指令的某些执行结果;
(2)用来为CPU执行相关指令提供行为依据;
(3)用来控制CPU的相关工作方式。
在这里插入图片描述

11.1 ZF标志

flag的第6位是ZF,零标志位。他记录相关的指令执行后,其结果是否为0。如果为0那么ZF=1;反之ZF=0;

注意:在8086CPU指令集中,有的指令的执行是影响标志寄存器的,比如,add、sub、mul、div、inc、or、and等,它们大都是运算指令(进行逻辑或算术运算);有的指令的执行对标志寄存器没有影响,比如,mov、push、pop等,它们大都是传送指令。

11.2 PF标志

flag的第2位是PF,奇偶标志位。它相关指令记录执行后,其结果的所有bit位中1的个数是否为偶数。如果1为偶数,pf=1,如果为奇数,那么pf=0.

11.3 SF标志

flag的第7位是SF,符号标志位。它记录相关指令执行后,其结果是否为负。如果结果为负,sf=1;如果非负,sf=0。

在计算机中通常使用补码来表示有符号数据。计算机中的一个数据可看称是是有符号数,也可以看成是无符号数。比如:
00000001B可以看成无符号数1,或者有符号数+1;
10000001B可以看成无符号数129,或者有符号数-127.
在这里插入图片描述

11.4 CF标志

flag的第0为是CF,进位标志位。一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或者从更高位的借位值。
在这里插入图片描述

11.5 OF标志

flag的第11位是OF,溢出标志位。一般情况下,OF记录了有符号数运算的结果是否发生了溢出。如果发生溢出,OF=1;如果没有,OF=0。

11.6 adc指令

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

指令格式:adc 操作对象1, 操作对象2
功能:操作对象1 = 操作对象1 + 操作对象2 + CF。

adc和add的配合就可以对更大的数据进行加法运算。

11.7 sbb指令

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

指令格式:sbb操作对象1,操作对象2
功能:操作对象1 = 操作对象1 - 操作对象2 - CF。

sbb和sub的配合就可以对更大的数据进行减法运算。

11.8 cmp指令

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

cmp通常和条件转移指令相配合。

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

“转移”指的是它能够修改IP,而“条件”指的是它可以根据某种条件。决定是否修改IP。
比如jcxz就是一个条件转移指令,它可以检测cx中的数值,如果(cx)=0,就修改IP,否则什么也不做,所有的条件转移指令的转移位移都是[-128,127]。

cmp通常和条件转移指令相配合,cmp可以同时进行俩种比较,也就是无符号数比较和有符号数比较。所以更具cmp指令的比较结果进行转移指令也分为两种,即根据无符号数的比较结果进行转移的条件转移指令(它们检测zf和cf)和根据有符号数的比较结果进行转移的条件转移指令(它们检验sf、pf和zf的值)。

在这里插入图片描述

11.10 DF标志和串传送指令

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

对于串传送指令。
格式:movsb
功能:执行movsb指令相当于进行以下几个操作。
(1)((es) *16 + (di)) = ((ds) *16 + (si))
(2)如果df=0 则, (si)=(si)+ 1;(di)=(di)+ 1;
. 如果df=0 则, (si)=(si)- 1;(di)=(di)- 1;
movsb是将ds:si指向的内存单元中的字节送入es:di中,然后更具标志寄存器df位的值,将si和di递增或递减。

对于传送字的串传送指令如下。
格式:movsw
功能:将ds:si指向的内存字单元中的字送入es:di中,然后根据标志寄存器df位的值,将si和di递增2或递减2。

一般来说movsb和movsw都和rep配合使用,格式如下。
rep movsb 或 rep movsw
相当于:
s:movsb
loop s
rep的作用就是根据cx的值,重复执行后面的串传送指令。

设置df的指令。
在8086CPU中,有两条指令对df位进行设置。
cld指令:将标志寄存器的df位置设置为0;
std指令:将标志寄存器的df位置设置为1。

两个例子
在这里插入图片描述

在这里插入图片描述

11.11 pushf和popf

pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标志寄存器中。
pushf和popf,为直接访问标志寄存器提供了一种方法。

11.12 标志寄存器在Debug中的表示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值