8086汇编 CPU 结构
8086 CPU 组成
一、结构说明
8086CPU主要由三块部分组成、通过内部总线实现CPU内各个器件之间的联系:
- 运算器进行信息处理:处理指令运算使用。
- 寄存器进行信息存储:存储地址数据使用。
- 控制器协调各种器件进行工作:发送读写执行使用。
二、寄存器
寄存器是CPU内部的信息存储单元 CPU通过寄存器存放、内存地址、数据、指令,通过总线访问主板上任意连接的设备。
8086CPU有14个寄存器:
- 通用寄存器:AX、BX、CX、DX
- 变址寄存器:SI、DI
- 指针寄存器:SP、BP
- 指令指针寄存器: IP
- 段寄存器:CS、SS、DS、ES
- 标志寄存器:PSW
通用寄存器说明:
- AX:计算乘法除法专用
- BX:可作为指针寄存器专用、默认指向DS
- CX:默认循环指针、指针转移专用
- DX:配合AX计算乘法除法专用
8086 CPU 存储方式
一、CPU 存储
CPU 存储主要通过寄存器,在8086CPU中寄存器最多可以存储16位数据,两个字节。
CPU寄存器存储单位:
字:CPU寄存器使用位以字为单位、PC位、如 16位 32位 64位、称为字、8086CPU的字长(word size)为16bit=2字节。
字节:1字节 = 8bit 、1bit= 二进制1
二、CPU 兼容
上面说到8086CPU寄存器存储单元最多存储16位数据存储,那么上一代最多存储8位数据、那么如今的16位CPU是如何兼容8位CPU的,下面会有说明。
通用寄存器均可以分为两个独立的8位寄存器使用、两个8位寄存器作为一个16位寄存器使用。
高位低位:
一个字(word)可以存在一个16位寄存器中
- 这个字的高位字节存在这个寄存器的高8位寄存器
- 这个字的低位字节存在这个寄存器的低8位寄存器
通用寄存器
- AX可以分为AH和AL
- BX可以分为BH和BL
- CX可以分为CH和CL
- DX可以分为DH和DL
高低位在内存中存储:
低位字节存在低地址单元,高位字节存在高地址单元。
例:20000D(4E20H)存放0、1两个单元,18D(0012H)存放在2、3两个单元。
注:先读高位地址1、在读低位地址0。4E20H。
(1)0地址单元中存放的字节型数据是( 20H )
(2)0地址字单元中存放的字型数据是( 4E20H )
(3)2地址单元中存放的字节型数据是( 12H )
(4)2地址字单元中存放的字型数据是( 0012H )
8086CPU 物理寻址
一、CPU 寻址
- CPU访问内存单元时要给出内存单元的地址。
- 所有的内存单元构成的存储空间是一个一维的线性空间。
- 每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。
问题说明
上篇博客我们知道了 8086CPU是20位地址总线,可传送20位地址,寻址能力为1M。但是8086CPU是16位结构的CPU。运算器一次最多可以处理16位的数据,寄存器的最大宽度为16位,在8086内部处理的、传输、暂存的地址也是16位,寻址能力也只有64KB,那么8086如何处理在寻址空间缺乏的问题,下面会说明。
解决方法
CPU在访问内存时,用一个基础地址(段地址×16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
- 用两个16位地址(段地址、偏移地址)合成一个20位的物理地址。
- 地址加法器合成物理地址的方法
- 物理地址=段地址×16+偏移地址
注:段地址x16就相当于段地址向左偏移4个二进制位
注:相当于16位段地址向左移动4个二进制位、加上偏移地址、值为20位内存地址。
注:通过段地址向左偏移4位后 + 偏移地址 = 物理地址、只要结果成立,可任意调整段地址与偏移地址。
段地址会采用一个寄存器进行存储16位数据、在通过另一个寄存器存储偏移地址。
二、CPU 内存分段
8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址。
实际上内存并没有分段,段的划分来自于CPU。
可根据、物理地址、段地址、求出偏移地址。
分段方案
- 段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;
- 偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。
- 段地址:分段内存的起始地址到结尾中、取结尾后16个二进制位。
- 可根据、物理地址、段地址、求出偏移地址。