8088是与8086同时代的微处理器,具有完全相同的指令系统。
两者唯一区别为:在硬件结构上,8088与存储器和I/O接口进行数据传输的外部数据总线宽度为8位,而8086数据总线为16位。
其引脚图如下:
一些有用的引脚信号如下:
引脚 | 定义 |
---|---|
A16/S3~A19/S6 | 分时复用地址/状态总线(address/status bus),三态输出。提供地址信号A19~A16 及状态位 S6~S3。 |
AD8~AD15 | 8 位地址信号,三态输出。在整个总线周期内提供存储器高 8 位地址。 |
AD0~AD7 | 地址/数据分时复用总线(address/data bus),双向,三态。ALE=1时传送地址信号,DEN=0时,传送数据信号。 |
IO/M | 输入输出/存储器控制信号,三态。高电平访问I/O端口,低电平访问存储器。 |
RD | 读信号,输出,三态。当它为低电平时,CPU 通过数据总线接收来自存储器或 I/O设备的数据。 |
WR | 写选通信号,输出,三态。指示 8086/8088 正在输出数据给存储器或 I/O 设备。在WR 为低电平期间,数据总线包含给存储器或 I/O 设备的有效数据。 |
INTR | 中断请求(interrupt request)信号,输入,用来申请一个硬件中断。当 IF=1 时,若 INTR 保持高电平,则 8088 在当前指令执行完毕后就进入中断响应周期(INTA 变为有效) |
NMI | 非屏蔽中断(non-maskable interrupt)输入信号。与 INTR 信号类似,但 NMI 中断不必检查 IF 标志位是否为 1。 |
INTA | 中断响应(interrupt acknowledge)信号,输出。响应 INTR 输入。该引脚常用来选通中断向量码以响应中断请求。 |
8088/8086都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线;8088的外部数据总线为8位,而8086为16位。
8088/8086都是由执行单元EU和总线接口单元(BIU)两大部分构成,8088内部接口如下:
执行单元(Execution Unit, EU):分析指令(指令译码)、执行指令。
总线接口单元(Bus Interface Unit, BIU):取指令、取操作数和写结果。
计算机的核心精髓就在于取指执行。
8088存在着并行流水线结构,可以让取指令操作和执行指令操作重叠执行。
8088/8086内部共有8个通用寄存器,4个段寄存器和2个控制寄存器。
通用寄存器
数据寄存器
数据寄存器一般用于存放参与运算的操作数或运算结果。每个数据寄存器都是16位的,但又可将高、低八位分别作为两个独立的8位寄存器来用。高8位分别记为AH、BH、CH、DH,低8位分别记为AL、BL、CL、DL。
地址指针寄存器
变址寄存器
SI(Source Index):源变址寄存器。
DI(Destination Index):目的变址寄存器。
这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数据段内的偏移地址。
段寄存器
控制寄存器
IP(Instruction Pointer):指令指针寄存器,用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。也就是计算机组成中的PC(程序计数器)
标志寄存器 FLAGS(PSW,程序状态字),它是一个16位的寄存器,但只用了其中的9位,包括6个状态标志位和3个控制标志位。
名称 | 描述 |
---|---|
CF 进位标志位 | 当进行加减运算时 ,若最高位发生进位或借位,则CF为1,否则为0。该标志位通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。 |
PF 奇偶标志位 | 当指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。 |
AF 辅助进位标志位 | 当执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有进位或借位,则AF为1,否则为0。 |
ZF 零标志位 | 若当前的运算结果为0,则ZF为1,否则为0。 |
SF 符号标志位 | 若运算结果的最高位为1,SF=1,否则为0。 |
OF 溢出标志位 | 当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。该标志通常用来判断带符号数运算结果是否溢出。 |
名称 | 描述 |
---|---|
TF 陷阱标志位 | 是为测试程序的方便而设置。若将TF置1,CPU处于单步工作方式 。 |
IF 中断允许标志位 | 是用来控制可屏蔽中断的控制标志位。若将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求;若用CLI指令将IF清0,则禁止CPU接受可屏蔽中断请求信号。 |
DF 方向标志位 | 若将DF置为1,串操作按减地址方式进行,也就是说,从高地址开始,每操作一次地址自动递减;否则按增地址方式进行。 |
8088/8086有20条地址线,可寻址的最大物理内存容量为1MB(2^20 ),其中任何一个内存单元都有一个20位的地址,称为内存单元的物理地址。
8088/8086内部寄存器都是16位的,内部总线也只能传送16位二进制码,16位二进制码最多只能访问2^16 = 64KB的地址空间。
综上,不采取特殊措施无法访问1MB的物理内存空间。
8088/8086采用分段方式来解决的这个问题,即将1MB的地址空间分为若干个64KB的段,然后用段基址加上段内偏移地址来访问物理存储器。分段如下图所示,分为代码段、数据段、堆栈段、附加段。
8088/8086逻辑地址和物理地址的转换关系为:
物理地址 = 段基址 * 16 + 段内偏移
即:段基址左移4位加上段内偏移。
寻址过程如下图所示:
在8088/8086中有几种常见的寄存器组合:
段寄存器 | 提供段内偏移地址的寄存器 |
---|---|
CS | IP(下一条指令的地址) |
DS | BX、SI、DI或一个16位数(变址寻址) |
SS | SP(指向栈顶)或BP(访问内存的基地址) |
ES | DI(用于字符串操作指令) |
要注意的是,通常8088/8086开头的128个字节(到80H)存放的中断向量表(里边内容是中断服务程序的入口地址)
[1] 吴宁. 微型计算机原理与接口技术[M]
[2] https://slideplayer.com/slide/10964300/