1.典型的CPU
1.1.一个典型的CPU是由哪几部分构成?
- 运算器:信息处理。
- 控制器:控制其他器件进行工作。
- 寄存器: 信息存储。
1.2.不同寄存器与CPU的关系?
- CPU中的主要部件是寄存器。
- 寄存器是CPU中程序员可以用指令读写的部件。
- 不同的CPU,寄存器的个数,结构是不相同的。
1.3. 8086有多少个寄存器?
8686CPU寄存器.png- 有14个寄存器
- 都是16位的寄存器
- 可以存放两个字节
2.寄存器
2.1.通用寄存器
上图中,AX,BX,CX,DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。
2.2寄存的用途
CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算。
2.3案例
案例.png假设内存中有块空间之为1,现在它的值加1,并将结果存储到紫色的块中?
我们应该怎么做呢?
- CPU首先将空间值为1放到AX寄存器中
mov ax,1 - 然后让ax寄存器与1相加
add ax,1 - 最后将至赋值给内存空间
mov 紫色块内部才能空间,ax
2.4寄存器结构
寄存器结构.pngAX,BX,CX,DX这4个通用寄存器都是16位的。
上一代8086的寄存器都是8位的,为了保证兼容,AX,BX,CX,DX,这4个寄存器都可以分为两个可独立使用的8位寄存器来用。
- AX可分为AH和AL
- BX可分为BH和BL
- CX可分为CH 和CL
- DX可分为DH和DL
这里H代表高位寄存器,L代表低位寄存器。
2.5寄存器存储情况
寄存器存储情况.png- AX 中AH-->>高8位,AL-->>低8位
- AX中二进制数据100111000100000,16进制4E20H
- AH中二进制01001110,因为AX二进制位15位,所以要前补零,达到8位
- AL中二进制00100000,低八位存储。
2.6.字节与字在寄存器中的存储
8086CPU可以一次性处理以下两种尺寸的数据。
- 字节:byte,一个字节由8个bit组成,可以存储8位寄存器中
- 字: word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节。
2.7.通用寄存器
- ARM64拥有31个64位的通用寄存器x0到x30
- 这些寄存器通常用来存放一般性的数据,称为通用寄存器
2.8 pc寄存器
- 指令指针寄存器,CPU当前要读取指令的地址
- 在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息
3. 8086寻址方式
3.1物理地址
CPU访问内存单元时,要给出内存单元的地址,所有的内存单元都有唯一的地址,叫做物理地址。
3.2 8086给出物理地址的方法
- 8086有20位地址总线,可以传送20位地址,达到1MB寻址能力。
- 它是16位结构的CPU,他内部能够一次性处理,传输,暂时存储的地址为16位。
- 如果将地址从内部简单的发出,那么它只能送出16位的地址,表现出来的寻址能力只有64KB。
- 8086 采用了一种在内部用两个16位地址合成一个20位的物理地址。
3.3 8086逻辑结构
8086逻辑结构.png如图,
- CPU中的相关部件提供两个16位的地址,一个称为段地址,一个称为偏移地址。
- 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件。
- 地址加法器将两个16位地址合成为一个20位的物理地址。
- 地址加法器通过内部总线将20位物理地址送入输入输出控制电路。
- 输入输出控制电路将20位物理地址送上地址总线
- 20位物理地址被地址总线传送到存储器。
地址加法器采用 物理地址=段地址 * 16 + 偏移地址 的方法用段地址和偏移地址合成物理地址。
3.4 案例
案例一:
三个村庄在一条直线上,A,B,C
A------------1000米-----------------B----------500米---------C
如果我想去C村庄的话,有两种方式:
- 1.从A到C走1500米就是C村庄,这里可以认为是C村庄的物理地址
- 2.从A到B走1000米,相对于A的基地址,再从B走500米到C,相当于基地址的偏移地址。
第一种方式直接给出物理地址,第二种方式是用基础地址和偏移地址相加得到物理地址。
案例二:
我们用纸传递信息,比如我们必须有一张可以容纳4位数据的纸条,才能写下2826这个数据。
如果我们没有一张可以容纳4位数据的纸条,我们这里只有2张可以容纳3位数据的纸条,表现形式:
2--0--0
8--2--6
第一张纸上写200(段地址),在第二张纸上写上826(偏移地址),我们需要做如下运算:
200(段地址) * 10 + 826(偏移地址) = 2826(物理地址)
8086就是这样一个只能提供两张3位数据纸条的CPU。
4.内存的分段管理
- 8086是用 基础地址(段地址 * 16 ) + 偏移地址 = 物理地址 的方式给出物理地址
- 为了开发方便,我们可以采取分段的方法来管理内存,比如:地址10000H~100FFH的内存单元组成一个段,该段的起始地址(基础地址 )为10000H,段地址为1000H,大小为100H。
- 地址10000H ~ 1007FH,10080H ~100FFH组成两段,它们的起始地址(基础地址)为10000H 和10080H,段地址为1000H和1008H,大小都是80H。
一段内存 10080H ~ 100FFH
段地址:1008H
其实地址(基础地址):10080H
1008:0020 -->> 10080 +0020 = 100A0(物理地址)
注意:段地址 * 16 必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。
5.总结
以上是对寄存器与8086寻址方式及内存的分段管理介绍,
我们下一章继续对汇编内容讲解。
跟随我,继续学习。
网友评论