<<汇编语言>>第11章笔记

标志寄存器

标志寄存器有以下3种作用:

  1. 用来存储相关指令的某些执行结果
  2. 用来为CPU执行相关指令提供行为依据
  3. 用来控制CPU的相关工作方式

note : 标志寄存器与其他寄存器不一样,它是按位起作用的,也就是说它每一位都有专门的含义,记录特定信息。

ZF标志

标志寄存器的第6位是ZF,零标志位。它记录相关指令执行后,其结果是否为0。结果为0的话,那么zf = 1,不为零的话,zf = 0

note : 有的指令不影响标志寄存器,比如:mov、push、pop等传送指令。

PF标志

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

SF标志

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

CF标志

标志寄存器的第0位是CF,进位标志位。在做无符号运算时,它记录了最高有效位向更高位的进位制,或从更高位的借位值。

OF标志

标志寄存器的第11位是OF,溢出标志位。一般情况下,OF记录了有符号运算的结果是否发生了溢出。如果发生了溢出,OF=1,否则为0。

adc指令

adc是带进位的加法指令,它利用了CF位上记录的进位值。
指令格式:adc 操作对象1 + 操作对象2 + CF

# 示例 
# 计算 1EF000H + 201000H,结果放在ax(高16位)和bx中(低16位)
mov ax, 001EH
mov bx, 0F000H
add bx, 1000H
adc ax, 0020H

sbb指令

sbb指令是带借位的错位减法指令,它利用了CF位上记录的借位值
指令格式:sbb 操作对象1, 操作对象2
功能:操作对象1 = 操作对象1 - 操作对象2 - CF

# 示例
# 计算003E1000H - 00202000H,结果放在ax, bx中
mov bx, 1000H
mov ax, 003EH
sub bx, 2000H
sbb ax, 0020H

cmp指令

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

检测比较结果的转移指令

下面是无符号数的比较结果进行转移的条件转移指令。

DF标志和串传送指令

标志寄存器的第10位是DF,方向标志位。在串处理指令中,控制每次操作后si、di的递减。

movsb和movsw

movsw和movsb相似,只是把内存单元还成了以字为单位。
movsb和movsw一般都是和rep配合来使用,格式如下:
rep movsb
用汇编语法来描述就是:

s: movsb
    loop s

8086CU提供下面两条指令对df位进行设置。
cld指令:将标志寄存器df位置0
std指令:将标志寄存器df位置1
下面是示例:

pushf和popf

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


这里是我的博客


你可能感兴趣的:(<<汇编语言>>第11章笔记)