本系列将讲解《汇编语言》一书,本节讲解**【汇编语言】11-标志寄存器**。
| 本节速览 |
|---|
| 1.什么是标志寄存器? |
| 2.标志寄存器的作用是? |
| 3.目前我们学的寄存器一共有多少个,分别是? |
| 4.挨个指出标志寄存器的作用,并举例子说明? |
| 5.adc、sbb指令含义?与标志寄存器关系是? |
| 6.cmp指令是?用法是? |
| 7.和cmp搭配的比较指令有哪些?什么作用? |
| 8.j类跳转指令有那6类?分别作用是? |
| 9.pushf和popf的作用? |
导读:
call 和ret 指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。这一章,我们讲解call和ret指令的原理以及规范子程序编写流程。
1.标志寄存器
标志寄存器是一个并不用于存储传统的数据,而是存储指令运行结果、控制CPU执行相关指令与工作方式的特殊寄存器。
在本系列介绍的8086CPU中,标志寄存器(我们称为flag寄存器)结构图下:

flag寄存器的1、3、5、12、13、14、15位在8086CPU中没有使用,不具有任何含义。 0、2、4、6、7、8、9、10、11位都具有特殊的含义。
从上图可以看出,其他传统寄存器是具有整体存储的功能,按整体16位起作用,而这里的flag寄存器,按单个位起作用,这也是标志寄存器与传统寄存器的最大区别!
2.目前学的寄存器有多少个?
如下图所示,一共14个寄存器,其中,最后的红框里面的就是整体的标志寄存器的单个位的正负情况,这里代表标志寄存器。
BTW,有时间将这14个寄存器的作用单独做个介绍,这是CPU的基本读取单元,很重要

事实上,8086也就这些寄存器14个,最新的x86也就26个,x86的CPU架构也没这么难。
3.标志寄存器作用大全

作用如下:
| reg | 作用 |
|---|---|
| CF | 进位标志位。无符号运算时,记录运算结果最高有效位向更高位的进位(借位)值。 |
| PF | 奇偶寄存器,记录相关指令执行后,其结果的所有bit位中1的个数是不是偶数,是,PF=1,否,PF=0 |
| ZF | 零标志位,记录相关指令执行后,其结果是否为0,如果为0,ZF=1,否则为0 |
| SF | 符号标志位,记录相关指令执行后,其结果是否为负,是,SF=1,否,SF=0 |
| OF | 溢出寄存器。有符号运算时,结果是否发生了溢出,是,OF=1,否,OF=0 |
| DF | 方向标志位。串传送指令(例如movsb)中,控制每次操作后si、di的增减。 |
CF 寄存器

记住,在dosbox中,对于标志位的01,有自己的英文缩写,如下:

DF寄存器
这里需要详细讲解一下DF相关功能及作用:
flag的第10位是DF,方向标志位。
在串处理指令中,控制每次操作后si、di的增减。
df=0,每次操作后si、di递增:
df=1,每次操作后si、di递减。
movsb指令
串传送指令:movsb
功能:执行movsb指令相当于进行下面几步操作。

用汇编语法描述movsb的功能如下:

可以看出,movsb的功能是将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器df位的值,将si和di 递增或递减。
movsw指令
当然了movsb是传送一个字节,也可以传送一个字,这就是movsw,二者唯一的区别就是si和di的变化是2,而不是1.
rep指令
movsb和movsw进行的是串传送操作中的一个步骤,一般来说,movsb和movsw都和rep配合使用,格式如下:`
rep movsb
等价于汇编:
s:movsb
loop s
可见,rep的作用是根据cx的值,重复执行后面的串传送指令。由于每执行一次 movsb 指令 si和di都会递增或递减指向后一个单元或前一个单元,则rep movsb就可以循环实现(cx)个字符的

最低0.47元/天 解锁文章
6161

被折叠的 条评论
为什么被折叠?



