文章目录
- 内部结构
- 执行部件EU(Execution Unit)
- 总线接口部件BIU(Bus Interface Unit)
- 工作流程
- 寄存器
- 通用寄存器
- 段寄存器
- IP指令指针寄存器
- FX状态标志寄存器
- 存储器(内存)
- 存储格式
- 存储器分段
- 地址
- 堆栈操作
- 工作模式
- 时钟周期
内部结构
执行部件EU(Execution Unit)
包含运算器、通用寄存器组、EU控制单元。
只负责控制,不和外部总线打交道
总线接口部件BIU(Bus Interface Unit)
包含指令队列缓冲器、16位指令指针寄存器IP、16位段寄存器,20位地址产生器,总线控制逻辑。
进行存储器和I/O的读写总写操作。
工作流程
从BIU的指令队列缓冲器中取得指令,译码,根据指令要求向EU内部各部件发出控制命令,完成执行指令的功能。若执行指令需要访问存储器或I/O端口,则EU将操作数的偏移地址送给BIU,由BIU取得操作数送给EU。
由段寄存器与IP形成20位物理地址送地址总线,由总线控制电路发出存储器“读”信号,按给定的地址从存储器中取出指令,送到指令队列中等待执行。
寄存器
共14个寄存器。
- 8个通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI)
- 4个段寄存器(CS,DS,SS,ES)
- 1个指令指针寄存器(IP)
- 1个状态标志寄存器(FX)
通用寄存器
- AX
字 乘/除指令中作为累加器,字I/O 指令中作为数据寄存器
- AL
字节乘/除指令,字节 I/O的数据寄存器,查表转移XLAT的偏移地址和结果,十进制运算的结果
- AH
字节乘/除指令(高八位/余数)
- BX
作为地址/基址寄存器
- CX
串操作时,循环计数器,自动自增
- CL
变量位移或循环操作时用作计数器
- DX
字乘/除指令(高十六位/余数),短格式I/O的间接寻址
- 基址指针寄存器
- SP:堆栈指针寄存器,其内容为栈顶的偏移地址;
- BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
- 变址寄存器
- SI:源变址寄存器,存放源操作数的偏移地址
- DI:目标变址寄存器,存放目标操作数的偏移地址
段寄存器
CS: 代码段
DS:数据段
ES:附加段
SS:堆栈段
IP指令指针寄存器
其内容为下一条要执行的指令的偏移地址,引导程序顺序执行
自动加2,或者转移
FX状态标志寄存器
有9个标志位
- 进位CF(Carry Flag):
最高位是否有进位(CF=1 有进位/借位;CF=0 无进位/借位)
- 辅助进位AF(Auxiliary Carry Flag):
表示低4位有无进位或借位(AF=1 有进位/借位;AF=0 无进位/借位)
- 溢出标志OF(Overflow Flag):
带符号数是否溢出 [ 最高位和次高位的进位异或不同为1 ](OF=1 有溢出;OF=0 无溢出)
- 零标志位ZF(Zero Flag):
ZF=1 运算结果为0;ZF=0 运算结果不为0
- 符号标志位SF(Sign Flag)
结果的最高位为1,SF=1 负数;结果的最高位为0,SF=0 正数
- 奇偶标志PF(Parity Flag)
PF=1 运算结果1的个数为偶数;PF=0 运算结果1的个数为奇数
- 方向标志DF(Direction Flag):
控制数据串操作指令的步进方向(DF=1 减址方式(STD指令);DF=0 增址方式(CLD指令))
- 中断允许标志IF(Interrupt Enable Flag):对可屏蔽中断
IF=1 开中断(STI指令),允许接受外部从INRT引脚发来的中断请求
IF=0 关中断(CLI指令),不接受外部从INRT引脚发来的中断请求
注意:IF的设置不影响非屏蔽中断NMI的请求,不影响CPU响应内部产生的中断
- 陷阱标志TF(Trap Flag):方便程序调试
TF=1 单步执行,以便检查程序;TF=0 连续正常执行
存储器(内存)
存储格式
- 规则字:从偶地址开始存放的字
- 非规则字:从奇地址开始存放的字
规则字的存取在一个总线周期内即可完成;非规则字的存取则需2个总线周期
- 低位库:8086CPU的低位库与数据总线的D7~D0相连,库中的每个单元的地址均为偶数。
- 高位库:8086CPU的高位库与数据总线的D15~D8相连,库中的每个单元的地址均为奇数
8086将内存分成两部分,由两个512B的存储器组成,一个存放16位数的高位,另一个存放低位。
- 一个字的存储
高八位在高地址,低八位在低地址。
低八位永远从偶地址在开始。 即低地址是偶的。
低地址j就是描述字的存储地址。
数据 地址 BB 03H AA 02H BBAA储存在02H地址上
存储器分段
8086有20位的地址信号,需要5位16进制数表示。所以才有分逻辑段的概念。
各逻辑段可连续可分开可重叠。
导致一个实际地址可对应多个逻辑地址。
地址
- 段基地址:来源于四个段寄存器(SS,DS,CS,ES)。
- 偏移地址:相对于段基址的偏移,16位数,最大可到64kB(0000H~FFFFH)来源于SP,BP,SI,DI,有效地址。
- 有效地址(16位)EA:在指令中用SP,BP,SI,DI和立即数计算出的偏移地址,它不是实际地址。
- 逻辑地址:产生实际地址用到的两个地址(段首址:偏移地址);
- 实际地址(物理地址20位)PA:CPU和存储器进行数据交换时使用的地址;
实际地址 = 段基址 << 4 + 偏移地址
段基地址是低地址,向高处偏移。
段基地址偏移是0;数偏移量,要从0开始。
堆栈操作
- 堆栈段的最大围为16bit~64KB
- 栈顶在高地址,SS存放栈基址,SP存放偏移量
- 只能操作一个字的数据,即16位
- 栈首址:SS<<4;栈顶:SS<<4+SP;栈底:SS<<4+FFFFH