汇编语言——第11章 标志寄存器

本文详细介绍了8086 CPU的标志寄存器,包括ZF、PF、SF、CF、OF等多个标志位的作用和如何影响计算结果。通过实例演示了如何使用这些标志位进行条件判断,并介绍了与之配合使用的条件转移指令。此外,还讲解了DF标志在串传送指令中的应用。
摘要由CSDN通过智能技术生成

目录​​​​​​​

引言

11.1 ZF标志

11.2 PF标志

11.3 SF标志

检测点11.1

11.4 CF标志

11.5 OF标志

检测点11.2

11.6 abc指令

11.7 sbb指令

11.8 cmp指令

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

检测点11.3

11.10 DF标志和串传送指令

1、DF标志

2、串传送指令

11.11 pushf和popf

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


引言

CPU内部的寄存器中有一种特殊的寄存器,被称为标志寄存器,具有以下三种作用,:

(1)用来存储相关指令的某些执行结果;

(2)用来为CPU执行相关指令提供行为依据;

(3)用来控制CPU的相关工作方式。

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

标志寄存器(简称为flag)。flag寄存器是按位起作用的,每一位都有专门的含义,记录特定的信息,与其他寄存器不一样。

8086 CPUflag寄存器的结构:

flag13512131415位在8086 CPU中没有使用,不具有任何含义;而02467891011位都具有特殊的含义。

11.1 ZF标志

flag的第6位是ZF,零标志位,它记录相关指令执行后,结果为0ZF=1(记录下是0这样的肯定信息),结果不为0ZF=0(表示结果非0)

mov ax,1

sub ax,1

mov ax,1

and ax,0

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

mov ax,2

sub ax,1

mov ax,1

or ax,0

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

8086CPU,addsubmuldivincorand等它们大多都是运算(逻辑运算或是算术运算)指令,是影响标志寄存器的,而movpushpop等传送指令对标志寄存器一般没有影响,因为不会产生结果。

11.2 PF标志

flag的第2位是PF,奇偶标志位。记录指令执行后结果所有的二进制位中1的个数。为偶数,PF=1;为奇数,PF=0。

mov al,1

add al,10

执行结果为00001011B,有31,则PF=0

mov al,1

or al,10

执行后结果为00000011B,有21,则PF=1

11.3 SF标志

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

计算机中通常用补码来表示有符号数据。计算机中的一个数据可以看作是有符号数,也可以看作是无符号数。也就是说,对于同一个二进制数据,计算机可以把它当作无符号数据来运算,也可以当作有符号数据来运算。CPU在执行add等指令的时候,就已经包含了两种含义,也将得到用同一种信息来记录的两种结果。

在我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。如果我们将数据当作无符号数来运算,SF的值则没有意义,虽然相关的指令影响了它的值。

检测点11.1

11.4 CF标志

flag的第0位是CF,进位标志位。一般情况下,在进行无符号运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。

对于位数为N的无符号数,其对应的二进制信息的最高位,即第N-1位,就是它的最高有效位,假想存在第N位是相对于最高有效位的更高位。

两个8位的数据运算可能产生进位或者借位,由于这个进位值在8位数中无法保存,8086CPU就用flagCF位来记录这个进位值。

mov al.98h

add al,al      ;执行后(al)=30Hcf=1cf记录了从最高有效位向更高位的进位值

add al,al      ;执行后(al)=60Hcf=0cf记录了从最高有效位向更高位的进位值

mov al,97h

sub al,98h   ;执行后(al)=ffhcf=1cf记录了向更高位的借位值

sub al,al      ;执行后(al)=0cf=0cf记录了向更高位的借位值

11.5 OF标志

检测点11.2

11.6 abc指令

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

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

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

mov ax,2

mov bx,1

sub bx,ax

adc ax,1

根据提供的引用内容,汇编语言王爽第三版的复习资料汇总如下: 1. 第〇 课程资料:包括课件、源代码、电子书和课后习题答案。 2. 第一 基础知识:介绍了汇编语言的编程思想和硬件系统的结构,以及汇编语言的主体——汇编指令。 3. 第二 寄存器(CPU工作原理):详细介绍了CPU的工作原理和寄存器的作用。 4. 第三 寄存器(内存访问):介绍了如何使用寄存器进行内存访问。 5. 第四 第一个程序:演示了如何编写第一个汇编程序。 6. 第五 [BX]和loop指令:介绍了[BX]和loop指令的使用方法。 7. 第六 包含多个段的程序:介绍了如何编写包含多个段的程序。 8. 第七 更灵活定位内存地址:介绍了如何更灵活地定位内存地址。 9. 第八 数据处理的两个基本问题:介绍了数据处理中的两个基本问题——进位和溢出。 10. 第九 转移指令的原理:介绍了转移指令的原理和使用方法。 11. 第十 call和ret指令:介绍了call和ret指令的使用方法。 12. 第十一 标志寄存器:介绍了标志寄存器的作用和使用方法。 13. 第十二 内中断:介绍了内中断的概念和使用方法。 14. 第十三 int指令:介绍了int指令的使用方法。 15. 第十四 端口:介绍了如何使用端口进行输入输出操作。 16. 第十五 外中断:介绍了外中断的概念和使用方法。 17. 第十六 直接定址表:介绍了直接定址表的概念和使用方法。 18. 第十七 使用BIOS进入键盘输入和磁盘读写:介绍了如何使用BIOS进行键盘输入和磁盘读写操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

关了个尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值