目录
8086的总体结构:
执行部件EU:
总线接口部件BIU:
+++++++
8086的内部寄存器:
通用寄存器:
数据寄存器(AX,BX,CX,DX)
AX:累加器。多用于存放中间运算结果。所有 I/O指令必须都通过AX与接口传送信息;
BX:基址寄存器。在间接寻址中用于存放基地址;
CX:计数寄存器。用于在循环或串操作指令中存放循环次数或重复次数;
DX:数据寄存器。在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存 I/O端口地址
地址指针寄存器(SP,BP)
SP:堆栈指针寄存器,其内容为栈顶的偏移地址;
BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
BS与BP的区别:
作为通用寄存器,二者均可用于存放数据;
作为基址寄存器,BX通常用于寻址数据段,与DS搭配使用
BP则通常用于寻址堆栈段,与SS搭配使用
BX一般与DS或ES搭配使用
变址寄存器(SI,DI)
SI:源变址寄存器
DI:目标变址寄存器
变址寄存器常用于指令的间接寻址或变址寻址。特别是在串操作指令中,用SI存放源操作数的偏移地址,而用DI存放目标操作数的偏移地址。
段寄存器:
用于存放逻辑段的段基地址
CS:代码段寄存器 代码段用于存放指令代码
DS:数据段寄存器
ES:附加段寄存器 数据段和附加段用来存放操作数
SS:堆栈段寄存器 堆栈段用于存放返回地址,保存寄存器内容,传递参数
控制寄存器:
IP:指令指针寄存器,其内容为下一条要执行的指令的偏移地址
FLAGS:标志寄存器
–状态标志:存放运算结果的特征
–控制标志:控制某些特殊操作
6个状态标志位(CF,SF,AF,PF,OF,ZF) 3个控制标志位(IF,TF,DF)
8086/8088的存储器结构和堆栈:
8086计算机主存储器是按字节进行组织的,两个相邻的字节被称为一个“字” 。
存放的信息若是以字节Byte(8位)为单位的,将在存储器中按顺序排列存放,每个地址单元存放一个字节,即每个字节占用一个地址;
若存放的数据为一个字Word(16位)时,则每一个字占用两个地址相连的存储单元,其中低字节(低8位)存放在低地址中,高字节(高8位)存放在高地址中,并以低地址作为该字的地址。
8086系统只能提供20根地址线来区分内存的不同存储单元,因此8086系统可以连接的内存最多只能包含220(1M)字节的存储单元。
存储器编址:
存储器以8位为一个存储单元编址,每一个存储单元用唯一的一个地址码来表示。
一个字的两个单元有各自的地址,处于低地址的字节的地址为这个字的地址
在存储器中,任何连续存放的两个字节都可以称为一个字。将偶地址的字称为规则字,奇地址的字称为非规则字。
字2301的地址为0000H,为规则字;
字8967的地址为0003H,为非规则字。
存储器分段和物理地址的生成:
BIU中的地址加法器用来实现逻辑地址到物理地址的变换
8088 可同时访问4个段,4个段寄存器指示了每个段的基地址
物理地址:20位绝对地址
逻辑地址:段基址:段内偏移量
物理地址 = 段基址 *16 + 偏移地址
指令地址:CS*16+IP
堆栈操作地址:SS*16+SP
操作数地址:DS(ES)*16+偏移地址
已知CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H,DS段有一操作数,其偏移地址=0204H,
1)画出各段在内存中的分布
2)指出各段首地址
3)该操作数的物理地址=?
DS与ES因为设计原因是有重合部分的,这个重合范围是不确定的
物理地址为:250AH×10H+0204H = 252A4H
堆栈及堆栈段的使用:
内存中一个按LIFO方式操作的特殊区域
每次压栈和退栈均以WORD为单位
SS存放堆栈段地址,SP存放段内偏移,SS:SP构成了堆栈指针
堆栈用于存放返回地址、过程参数或需要保护的数据
常用于响应中断或子程序调用
入栈指令 PUSH:
出栈指令 POP:
8086/8088CPU的引脚信号和工作模式:
8086/8088的工作模式:
8086微处理器的引脚信号功能:
1. AD15~AD0 地址/数据复用总线,双向,三态( 8088中A15~A8不复用,输出,三态)
2. A19/S6~A16/S3 地址/状态线复用,输出,三态
3. BHE/S7(8086)高8位数据线允许/状态信息复用引脚,输出
4. NMI,非屏蔽中断,输入
5. INTR,可屏蔽中断请求信号,输入
6 . RD,读信号,输出,三态,低电平有效
7. CLK,时钟信号,输入
8. RESET,复位信号,输入(至少保持4个时钟周期的高电平)
9. READY,准备好信号,输入
10. TEST,测试信号,输入,低电平有效
11. MN/MX,最小/最大模式控制引脚,输入
12. GND地和VCC电源引脚
S4 S3 | 当前段寄存器 |
0 0 | 使用附加段寄存器 |
0 1 | 使用堆栈段寄存器 |
1 0 | 使用代码段寄存器 |
1 1 | 使用数据段寄存器 |