最近一直在好奇一个问题:寄存器和内存之间到底什么关系?我是知道寄存器是在CPU中的,但是内存存储空间是在硬件的哪里呢?知道这个问题的答案之后,觉得自己问这种问题确实点憨。你是不是啥傻?忘了有个东西叫做内存条?它是在CPU之外的。想了这个问题之后,更加认识到实践到底多么重要,尤其像我这种之间根本不了解硬件的人。好了下面进入正题
寄存器
寄存器是什么?
寄存器由具有存储功能的触发器组合而成,1个触发器可以存储1位二进制数。那么16位的寄存器就需要16个触发器构成
寄存器的功能
寄存器可以用来暂存指令,数据和地址。
寄存器的作用
寄存器存放当前CPU的环境以及任务环境的数据。简单来说:寄存器是CPU与内存之间沟通的桥梁。
- 存放从内存中读取的数据和指令
- 告诉CPU所要读取得数据或代码在内存得什么位置
- 存放CPU的运算结果
这里顺便提一下高速缓存存储器Cache :是位于CPU和主内存间的一种容量较小但速度很高的存储器。Cache中保存着CPU中刚用过或者重复多次使用的一部分数据。
详解8086/8088中的寄存器
8086/8088CPU的内部结构如下图所示:
1.通用寄存器:AX BX CX DX
用于存放16位的数据和地址。也可用作8位寄存器,用作8位寄存器时分别记为AH、AL、BH、BL、CH、CL、DH、DL,但只能存放数据不能存放地址。
值得注意的是:8086中为了缩短指令代码的长度,部分通用寄存器用作专门用途。
AX累加器:有些指令约定以AX(或AL)为源或目的寄存器。
BX基址寄存器:可用作间接寻址的地址寄存器和基地址寄存器。
CX计数寄存器:CX在循环和串操作中充当计数器,指令执行后CX内容自动修改。
DX数据寄存器:在I/O指令中可用作端口地址寄存器,乘除指令中用作辅助累加器。
2.指针和变址寄存器:BP SP SI DI
BP:基址指针寄存器 SP:堆栈指针寄存器
SI:源变址寄存器DI目的变址寄存器
这些寄存器和寻址有关系,在学习寻址的时候会更加详细的了解
3.段寄存器
8086/8088CPU中,内存空间是1MB(20位地址线),但寄存器只有16位,因此1MB被分成若干逻辑段,最长是64KB(因为8088/8086中寄存器是16位的)。这些逻辑段是动态的。
CS:代码段寄存器 DS:数据段寄存器SS:堆栈寄存器
ES:附加段寄存器(在串指令中,目的操作数指明必须在现行附加段中)
4.指令指针寄存器IP
存放将要执行的下一条指令在现行代码段中的偏移地址
5.标志位寄存器(共16位,但其中7位未用)
条件标志6位
CF(进位标志):反映运算结果的最高位有无进位或借位。
PF(奇偶标志):反映运算结果中“1”的个数的奇偶性,主要用于判断数据
传送过程中是否出错。
AF(辅助进位标准):加减运算时,若D3向D4产生了进位或借位则AF=1。否则
AF=0。在BCD码运算时,该标志用于十进制调整。
ZF(零标志) :反映计算结果是否为0。若结果为零则ZF=1,否则ZF=0。
SF(符号标志):映运算结果的最高位,即符号位的状态。如果运算结果的最高位为1则SF=1(带符号数为负数),否则SF=0(为正数)。
OF(溢出标志):反映运算结果是否超出了带符号数的表示范围。
控制标志3位
TF(陷阱标志):TF=1时CPU进入单步执行方式,主要用于调试程序。
IF(中断允许标志):用于控制CPU是否允许响应可屏蔽中断请求,
IF=1时允许中断,IF=0时禁止中断。
DF(方向标志):控制串处理指令中地址调整的方向,DF=1时自动减量,DF=0时自动增量。