目录
一、8086 CPU的内部结构
8086微处理器片内和片外都是16为的数据总线、20位的地址总线,直接寻址空间可达2^20即1 MB。其采用了取指令和执行指令并行工作的结构设计。
由图可知:8086CPU内部结构由指令的执行单元(EU)和总线接口单元(BIU)这两部分组成。
(一)、指令执行单元(EU)
指令执行单元EU主要完成指令的译码和指令的执行两部分工作。其中有三部分组成
算术逻辑运算单元ALU;
标志寄存器PSW;
寄存器组。
1、算术逻辑运算单元ALU
主要完成8位或16位二进制数据的算术逻辑运算功能,运算的数据可来自内部的寄存器,也可来自存储单元或指令代码中包含的数据。
2、标志寄存器Flags
16位的标志寄存器是用来存储数据运算处理后的结果特征标志信息和CPU运行的状态控制信息。
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||
溢出标志位 | 发现标志位 | 中断允许标志位 | 单步标志位 | 符号标志位 | 零标志位 | 半进位标志位 | 奇偶标志位 | 进位标志位 |
表1 Flags各位标志含义
3.寄存器组
寄存器组包含4个16位的通用寄存器和4个16位的专用寄存器。
(1) 4个通用寄存器
四个通用寄存器 | 高八位 | 低八位 | |
AX | 累加器 | AH | AL |
BX | 基址寄存器 | BH | BL |
CX | 计数器 | CH | CL |
DX | 数据寄存器 | DH | DL |
一般用作数据暂存
(2)4个专用寄存器
4个专用寄存器 | |
SP | 堆栈指针寄存器 |
BP | 基址指针寄存器 |
SI | 源变址寄存器 |
DI | 目的变址寄存器 |
SP和SP可以与堆栈段寄存器SS联合使用,用于设置或访问堆栈段。
在字符串运算中SI与数据寄存器DS配合,指向源串的首地址,DI与附加段寄存器ES配合,指向目的串的首地址。
(二)总线接口单元BIU
总线接口单元BIU是8086CPU与外部(存储器和I/O端口)数据传输的接口,它提供了16位的双向数据总线和20位的地址总线以及所有的控制信号线。
主要功能有:地址的形成、外部取指令、指令排队、数据的读/写操作控制和其他功能的总线控制。
总线接口单元BIU有5部分组成:
a:4个16位的段地址寄存器组
b:16位的指令指针寄存器IP
c:20位的物理地址加法器
d:6字节的指令缓冲队列
e:总线输入/输出控制电路
1.4个16位的段地址寄存器组
用来提供访问外部存储器时的16位段基址。
4个16位的段地址寄存器 | |
CS | 代码段寄存器 |
DS | 数据段寄存器 |
SS | 堆栈段寄存器 |
ES | 辅助数据段寄存器 |
CS——在取指令阶段提供16位的段地址。
DS——在执行指令时,如果有访问片外存储器是数据时提供16的段地址。
SS——在方位堆栈时,提供16位的段地址
ES——在CPU做片外存储器的数据访问时,提供16位的段地址,只在串操作或特别指定的数据访问指令中使用。
2、16位的指令指针寄存器IP
用作存放下一条待执行的指令代码所在存储单元的16偏移地址,和CS一起构成程序指针。
3、20位的物理地址加法器
将16位的段地址和16位偏移地址转换成20位的存储器单元物理地址。
4、指令缓冲队列
用以存放BIU已经读进CPU但是还未来得及执行的指令代码。
5、总线输入/输出控制电路
实现CPU和片外存储器或I/O端口数据传输的时序逻辑控制。
二、8086存储器组织
物理存储器:处理器在它的总线上寻址的存储器称为物理存储器。
物理地址:物理存储器按字节序列排列,每个字节赋予一个唯一的地址,称为物理地址。
(一)存储器地址的分段
8086微处理器有20位的地址总线,内部有16位的寄存器,不能直接给出20位的存储单位地址,必须有2个16位的寄存器组合才能给出20位存储器单位地址。故将1MB的存储空间分成若干个逻辑段,每个逻辑段容量小于等于64KB,1MB的存储空间可分成16个逻辑段,允许在整个存储空间浮动。如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/4acd04bf6b5ea20e59ac444eda4371d5.jpeg)
下图3 为8086存储器重叠分段图,只要有段地址和段内偏移地址就可以问问这个物理地址所对应的存储空间。
![](https://i-blog.csdnimg.cn/blog_migrate/f5fe8e0a003307d47d5511c2948fe4dc.jpeg)
(二)存储器物理地址的形成
物理地址:8086 CPU访问存储单元时,有20位的地址加法器给出的实际地址,而且这个地址是唯一的,将此地址称为物理地址。
逻辑地址:将段起始地址(段基址)和段内偏移合起来称为逻辑地址,也称为编程地址。
偏移地址:逻辑地址在程序中使用,即段基址:偏移地址。
物理地址的计算:
物理地址是有逻辑地址在地址加法器中变换运算得到,故其计算方法为:
物理地址=16位的段基址*16+16位的偏移地址
(三)8086存储器的分奇偶体结构
8086 CPU将存储器分成奇地址和偶地址管理,称为奇偶分体结构。
8086 CPU 将1MB的存储空间分成两个存储体:奇地址存储体和偶地址存储体,各为512KB。
其中奇地址单元对应高8位数据线和偶地址单元对应低8位数据线。
512K*8位奇地址存储 | 512K*8位偶地址存储 |
注:为了提高程序的运行速度,在编程时,注意存放字数据最好从偶地址开始存放,这种存放方式也称为“字对准”存放。
(四)8086存储器的堆栈
堆栈是指在存储器中开辟的一片数据存储区,用于暂存数据和在过程调用或处理中断是暂存断点信息。
堆栈的特点:先进后出
![](https://i-blog.csdnimg.cn/blog_migrate/5a37d10f556f655f7b2e612844f53da8.png)
8086 CPU通过对SS和SP的设置来开辟堆栈段。SS提供段基址,SP提供栈底偏移地址。