失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 汇编:CPU结构 - FLAG标志寄存器和相关指令

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

时间:2021-12-18 02:54:32

相关推荐

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

文章目录

一、概述1、标志寄存器的作用2、8086CPU标志寄存器的结构3、debug查看标志位二、标志位1、CF(0):进位标志位2、PF(2):奇偶标志位3、AF(4):辅助进位标志4、ZF(6):0标志位5、SF(7):符号标志位6、TF(8):追踪标志7、IF(9):中断标志位8、DF(10):方向标志位9、OF(11):溢出标志位三、指令1、adc:加法2、sbb:减法3、cmp:比较4、jcc:条件跳转5、pushf、popf:入栈、出栈

一、概述

FLAG是计算机的专业术语,状态标志寄存器。

1、标志寄存器的作用

1、用来存储相关指令的某些数据结果

2、用来为CPU执行相关的指令提供行为依据

3、用来控制CPU的相关工作方式

2、8086CPU标志寄存器的结构

标志寄存器是按位起作用,每一位都有专门的含义。

上图中有字符标记的都具有特殊含义,其他位没有使用(造成影响的大多数是运算指令(逻辑/算数))。

3、debug查看标志位

进行标志位学习和验证前,先看一下如何在debug里看标志位。

使用命令

-r

打印结果:

屏幕右下角打印出来NV UP EI PL NZ NA PO NC,这些符号代表的就是标志寄存器里常用的标志位的值。

OF <-----> OV(1) ; NV(0)DF <-----> DN(1) ; UP(0)IF <-----> EI(1) ; DI(0)SF <-----> NG(1) ; PL(0)ZF <-----> ZR(1) ; NZ(0)AF <-----> AC(1) ; NA(0)PF <-----> PE(1) ; PO(0)CF <-----> CY(1) ; NC(0)

二、标志位

标志位分类:

1、运算结果标志位

2、状态控制标志位:用来控制CPU操作的,它们要通过专门的指令才能使之发生改变)。状态控制标志位有:TF、IF、DF。

标志位列表展示

注:加粗部分为状态控制标志位

1、CF(0):进位标志位

表示加减法操作中最高位有无进/借位。

如果运算不存在进位/借位:CF == 0(展示为NC)

如果运算存在进位/借位:CF == 1(展示为CY)

2、PF(2):奇偶标志位

记录相关指令执行后,其结果的所有二进制位中的1的个数是否为偶数。

当所有二进制位的1的个数是奇数:PF == 0(展示为PO)

当所有二进制位的1的个数是偶数:PF == 1(展示为PE)

3、AF(4):辅助进位标志

在8位加减法操作中表示低4位向高4位有无进/借位。

无进/借位:AF == 0(展示为NA)

有进/借位:AF == 1(展示为AC)

4、ZF(6):0标志位

表示运算结果是0或非0。

当运算结果不为0:zf == 0(展示为NC)

当运算结果为0:zf == 1(展示为CY)

5、SF(7):符号标志位

表示运算结果是负(最高位为1)或非负(最高位为0)

当运算结果为非负:SF == 0(展示为PL)

当运算结果为负:SF== 1(展示为NG)

6、TF(8):追踪标志

当追踪标志TF == 1时,CPU进入单步执行方式。

7、IF(9):中断标志位

表示CPU可否响应可屏蔽中断请求。IF的状态对不可屏蔽中断及内部中断没有影响。

8、DF(10):方向标志位

表示串操作时按地址减或加的方式进行。

每次操作si di 递增:df == 0 (展示为UP)

每次操作si di 递减:df == 1 (展示为DN)

9、OF(11):溢出标志位

(有符号运算)溢出标志位:在进行有符号运算的时候,如果结果超过了机器所表示的范围,称为溢出。

8位带符号数的范围是-128 ~ +127,

16位的是-32728 ~ +32767)。

如果不存在溢出:OF==0(展示为NV)

如果存在溢出:OF == 1(展示为OV)

三、指令

1、adc:加法

带进位加法指令,利用CF上的值

指令:adc ax,bx

计算:ax = ax + bx + CF

2、sbb:减法

sbb是带借位减法指令,利用CF上的值

指令:sbb ax,bx

计算:ax = ax - bx - CF

3、cmp:比较

cmp是比较指令,cmp的功能相当于减法指令,不保存结果,但对标志寄存器产生影响。

指令:cmp ax,bx

计算: ax - bx 根据计算结果对标志寄存器进项设置。

比如执行:

mov ax,8mov bx,3cmp ax,bx

执行后:(ax)=8, zf=0, pf=1, sf=0, cf=0, of=0

4、jcc:条件跳转

5、pushf、popf:入栈、出栈

pushf:将标志寄存器值压栈

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

如果觉得《汇编:CPU结构 - FLAG标志寄存器和相关指令》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。