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

其他寄存器时用来存放数据的,整个寄存器具有一个含义。

flag寄存器是按位起作用的,它的每一位都有专门的含义,记录特定的信息。

8086CPU的flag寄存器的结构

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
        OF DF IF TF SF ZF   AF   PF   CF

1、ZF标志

(flag的第六位) 零标志位

它记录相关指令执行后

结果为0,ZF=1

结果不为0,ZF=0

例:

mov ax,1

sub  ax,1

指令执行后,结果为0,则ZF=1

mov ax,2

mov ax,1

指令执行后,结果为1,则ZF=0

注意:

在8086CPU的指令集中,有的指令的执行是影响标志寄存器,如:add、sub 等,它们大多数是运算指令(进行逻辑或算数运算)

有的指令的执行对寄存器没有影响,如mov,push,pop等,它们大多是传送指令。

2、PF标志

(flag第二位) 奇偶标志位

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

为偶数 PF=1

为奇数 PF=0

例:

mov al,1

add al,10

执行后,结果为00001011B,其中有3个1(奇数) 则PF=0。

mov al,1

or al,10

执行后,结果为00000011B,其中有2个1(偶数),则PF=1。

3、SF标志

(flag第七位) 符号标志位

结果为负,SF=1

结果为正,SF=0

有符号数与补码

计算机中通常用补码来表示有符号数。

例:

mov al,10000001B

add al,1

将add指令当无符号数运算,那么add指令相当于计算-127+1为-126(10000010B)

CPU在执行add等指令时,就已经包含两种含义,也将得到用同一种信息来记录两种结果。

关键在于程序需要哪种结果

将数据当做无符号数来运算,SF值无意义。

将数据当做有符号数来运算,可以通过SF得知结果的正负。

某些指令将影响标志寄存器中多个标志位,这些被影响的标记位比较全面地记录了指令的执行结果,为相关的处理提供了所需的依据。

4、CF标志

(flag第零位) 进位标志位

在进行无符号运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。 (进位或借位 CF=1)

mov al,98H

add al,al

执行后 (al)=30H,CF=1

5、OF标志

(flag第十一位) 溢出标志位

在进行有符号运算时,如果结果超过了机器所能表示的范围称为溢出。

溢出   OF=1

6、adc指令

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

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

功能:

操作对象1=操作对象1+操作对象2+CF

mov ax,2

mov bx,1

sub bx,ax

adc ax,1

执行后,(ax)=4

CF值的含义由adc指令前的指令决定(借位还是进位)

7、sbb指令

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

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

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

sbb和adc是基于相同思想设计的两种操作指令,sbb在应用思路上与adc类似。

8、cmp指令

cmp是比较指令,功能类似于减法指令,但是不保存结果。

cmp指令执行后,将对标志寄存器产生影响。

其他相关指令通过识别这些别影响的标志寄存器位得知比较结果。

格式:cmp 操作对象1,操作对象2

例:

mov ax,1

cmp ax,ax

比较结果为0

其产生影响:ZF=1,PF=1,SF=0,CF=0,OF=0

具体情况具体分析。

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

与cmp配合使用。

根据无符号数的比较结果进行转移的条件转移指令,它们检测ZF、CF值。

根据有符号数的比较结果进行转移的条件转移指令,它们检测ZF、CF和OF值。

一些指令:

指令 含义 检测的相关标志位
je 等于则转移 ZF=1
jne 不等于则转移 ZF=0
jb 低于则转移 CF=1
jnb 不低于则转移 CF=0
ja 高于则转移 CF=0,ZF=0
jna 不高于则转移 CF=1或ZF=1

10、DF标志和串传送指令

(flag第十位) 方向标志位

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

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

格式:movsb

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

((es)*16+(di))=((ds)*16+(si))

DF=0      (si)=(si)+1

(di)=(di)+1

DF=1      (si)=(si)-1

(di)=(di)-1

movsw

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

si,di递增(减)2.

movsb和movsw一般和rep配合使用,格式如下:

rep movsb

rep作用是根据CX的值,重复执行后面的串地址指令。

8086CPU提供下面两条指令对DF位进行设置

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

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

assume cs:code
data segment
db 'welcome to masm!'
db 16 dup (0)
data endscode segment
start : mov ax,datamov ds,axmov si,0mov es,axmov di,16mov cx,16cldrep movsbmov ax,4c00hint 21h
code ends
end start

11、pushf和popf

pushf:将标志寄存器的值压栈

popf:从栈中弹出数据,送入标志寄存器

标志寄存器(flag)相关推荐

  1. 一个奇葩的标志寄存器 flag寄存器

    注意: mov,push,pop等传送指令,执行结果对标志寄存器并无影响! ZF标志:结果为0,则ZF为1:不为0,ZF为0:(zero flag) PF标志:如果1的个数为偶数,pf=1:如果为奇数 ...

  2. 8086标志寄存器FLAG

    8086CPU提供一个特殊的寄存器称为标志寄存器,里面包含9个标志,用来反映处理器的状态和运算结果的某些特征.FLAG是按位起作用的

  3. 标志寄存器df_标志寄存器

    CPU内部的寄存器中,有一种特殊的寄存器具有以下三种作用. 用来存储相关指令的某些执行结果 用来为CPU执行相关指令提供行为依据 用来控制CPU的相关工作方式 这种特殊的寄存器在8086CPU种,被称 ...

  4. 8086汇编语言:标志寄存器的各个标志位的详细介绍

    一.基本介绍: CPU的内部的寄存器中,有一类特殊的寄存器(对于不同的处理机,其个数和结构都可能不同):它具有以下三种作用! 这种特殊的寄存器在8086CPU中,被称为标志寄存器flag.8086CP ...

  5. 汇编:CPU结构 - FLAG标志寄存器和相关指令

    文章目录 一.概述 1.标志寄存器的作用 2.8086CPU标志寄存器的结构 3.debug查看标志位 二.标志位 1.CF(0):进位标志位 2.PF(2):奇偶标志位 3.AF(4):辅助进位标志 ...

  6. 8086标志寄存器(Flag Register)

    标志寄存器设计为16位,实际使用9位,其中6位用以存放算术逻辑单元运算后的结果特征,称为状态标志:另外3位通过人为设置,用以控制8086的三种特定操作,称为控制标志. 6个状态标志位定义如下: 进位标 ...

  7. 标志寄存器的详细解释

    简介:    CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有三种作用.    (1)用来存储相关指令的某些执行结果.    (2)用来为CPU执行相关指令提供行 ...

  8. 状态标志寄存器--EFLAGS

    EFLAGS寄存器有控制CPU的操作或反映CPU某些运算的结果的独立二进制位构成. 标志位 名称 全称 作用 CF 进位标志 Carry Flag 无符号算术运算的结果太大而目的操作数无法容纳时置位 ...

  9. 汇编语言随笔(3)-条件转移指令和标志寄存器

    标志寄存器 标志寄存器通常具有以下三种作用:       1,用来存储相关指令的某些执行效果       2,用来为CPU执行相关指令提供行为依据       3,用来控制CPU的相关工作方式     ...

最新文章

  1. 基于.Net Core开发现代化Web应用程序系列课程和文章
  2. 树莓派:外设开发编程,控制继电器
  3. python多线程库_Python多线程常用包对比
  4. [云炬ThinkPython阅读笔记]3.1 函数调用
  5. 【JBPM4】完成任务
  6. GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
  7. 大规模针对iOS设备的恶意广告活动劫持3亿次浏览器会话
  8. 第六章节 多态 (密封类)
  9. java引导类加载器_Java类加载器层次结构(一)
  10. java day35【Bootstrap】
  11. DEVC中的for编译出错问题解决办法
  12. J1939广播DM1报文
  13. 基于树莓派的人脸识别门禁系统
  14. 开发老铁们,就参考这个图灵畅销新书书单加购!
  15. 十大ERP系统排行榜—2022年
  16. Vue 上传图片裁剪
  17. 火车采集 PHP插件 post,火车采集器2010版PHP插件增加扩展的方法
  18. windows中的SC命令
  19. Service Mesh中的通用数据平面API设计
  20. 遗传算法解决城市TSP问题

热门文章

  1. python键盘键值表_Python怎么记录键盘鼠标敲击次数|Python统计鼠标点击次数 - PS下...
  2. 群晖、威联通NAS硬盘本地化,使用RaiDrive通过WebDAV实现内网挂载
  3. 单片机中C语言延时函数
  4. Bootstrap5 弹出框
  5. ORM是什么? ORM框架是什么?
  6. 【妙python】按照元素长度排序列表
  7. 如何学习大数据!!我要做大数据! 1
  8. outlook你的邮件服务器证书无效,安卓手机outlook无法登录、添加帐户
  9. 关于Sun公司的SCJP认证
  10. Python爬虫抓取网页图片