第二章 微处理器与总线
2.1 8086/8088微处理器的特性
- 8086为16位CPU,8088为准16位CPU(内十六外八)
- 8086/8088的时钟频率为5MHz
- DB、AB总线分时复用
- 内存容量为1MB,即共有20条地址总线
- 基本寻址方式有八种
- 指令系统包含99条基本汇编指令
- 16位I/O端口地址最多可寻址64K个端口地址
- 可处理内部软件中断(程序员自己安排好的)和外部硬件中断(随机的),中断源多达256个
- 支持单片CPU和多片CPU系统工作
2.2 8086/8088微处理器结构及寄存器
内部结构分为执行部件EU(execution unit)和总线接口部件BIU(bus interface unit)
EU:负责指令的译码、执行和数据的运算
BIU:管理CPU和系统总线的接口;负责CPU对存储器和外设进行访问
**两个CPU在大多数情况下独立操作,但也可以并行执行【只要执指时不需要总线就可以并行执行,需要占用总线就无法执行】,实行指令预取
**8086和8088的EU完全相同,BIU略有不同,8086的指令队列是6个字节,8088的指令队列是4个字节
**指令队列被清空的三种情况:
①出错
②遇到转移/跳转指令
③中断
8086/8088寄存器组(register array)【总共14个,均为16位】
Ⅰ通用寄存器8个
①数据寄存器:AX、BX、CX、DX
AX:累加器【accumulator】,使用频率最高,用于算术、逻辑运算以及与外设传送消息等(AL为8位累加器)
BX:基址寄存器【base address register】,常用来存放存储器地址【内存】
CX:计数器【counter】,作为循环和串操作等指令的隐含计数器
DX:数据寄存器【data register】,常用来存放双字长数据的高16位或者外设端口地址
**每个数据寄存器还可以分为高八位和低八位2个独立的寄存器
②变址寄存器:SI、DI,常用于寄存器变址寻址时提供地址
SI:源地址寄存器(source index)
DI:目的地址寄存器(destination index)
在串操作指令中,只能是由SI到DI
③指针寄存器:指针寄存器用于寻址内存堆栈内的数据
SP:堆栈指针寄存器(stack pointer),指示堆栈栈顶的位置
BP:基址指针寄存器(base pointer),表示数据在堆栈段内的基地址
SP和BP与SS联合使用来确定堆栈段中的存储单元地址
**stack是内存中一个特殊的区域,采用“先进后出”或“后进先出”的存取方式
Ⅱ 一个指令寄存器IP(instruction pointer)
①指示主存储器指令的位置
②随着指令的执行,IP将自动修改以指示下一条指令所在的存储器位置
③IP是一个专用寄存器
**IP与CS联用确定下一条指令的存储单元地址
**编程序时,不能直接使用IP
Ⅲ 一个标志寄存器
Flag用于反映指令执行结果或控制指令执行形式
Flag是十六位寄存器,8086/8088用了其中九位,六位记录状态,三位控制指令执行形式
进位标志CF(carry flag):有进位或借位时,为1
辅助进位标志AF(auxiliary parity flag):位3向位4有进位时,置一
零标志ZF(zero flag):结果为0时,置一
符号标志SF(sign flag):与结果第一位的值相同
奇偶标志PF(parity flag):运算结果最低字节中1的个数为偶数时,置1
溢出标志OF(overflow):若算术运算的结果有溢出,则置一
**溢出的快速判断方法:
①同符号数相加才有可能发生溢出(因此异号相加不用考虑),若同号相加后,结果与加数的符号不同则溢出
②若次高位进位和最高位进位异或为1,则溢出
方向标志DF(direction flag):用于串操作指令,控制地址的变化方向,设置DF为一时,自减,有快捷指令CLD和STD,让DF置一或置零
中断允许标志IF(interrupt-enable flag):控制可屏蔽中断是否可以被处理器响应,IF为1时,允许中断;有快捷指令CLI和STI
陷阱标志TF(trap flag):用于控制处理器进入单步操作方式,设置TF为一时,处理器单步执行指令;没有快捷指令
Ⅳ 4个段寄存器
CS:代码段寄存器(code segment):指明当前代码段的起始地址【与IP求和】
DS:数据段寄存器(data segment):指明当前数据段的起始地址
ES:附加段寄存器(extra segment):指明当前附加段的起始地址
SS:堆栈段寄存器(stack segment):指明当前堆栈段的起始地址
**内存中从低字节到高字节依次为:ES、SS、CS、DS
2.3 8086/8088的存储器寻址机制
**寄存器、外存储器和内存的区别:
寄存器是CPU内部暂存数据的存储单元,如AX、BX等
存储器可直接与CPU进行数据交换
外存主要指用来长久保存数据的外部存储介质。常见的有硬盘、光盘等
**外存的数据只能通过内存间接地与CPU交换数据,即程序及其数据可以永久存放在外存中,在运行需要时才进入内存
**多字节数据在存储器中占连续的多个字节存储单元,存放时,低字节存入低地址,高字节存入高地址,表达时,用它的低地址表示多字节数据占据的地址空间
8086/8088有20条地址总线,最大可寻址空间为1MB,物理寻址范围从00000H~FFFFFH,地址信息为20位,但内部寄存器最多只能处理16位数据,因此需要分段来进行数据存储。
段起始地址:指明逻辑段在主存储器中的起始地址
段基地址:预设段起始地址后四位为0,即:xxxx0H;省略低四位0000B,段起始地址就可用16位数据表示,这16位数据就称为段基地址。
偏移地址(也称有效地址EA):指明存储器单元距离段起始地址的偏移量;只要每段不超过64KB,偏移地址也可用16位数据表示
逻辑地址的表示
物理地址(PA)与逻辑地址(LA)的转换
**一个物理地址可以有多个逻辑地址
段基地址存放在相应的段寄存器中
代码段:用来存放程序的指令序列
CS:存放代码段的段基地址
IP:指示下条指令的偏移地址
**处理器利用CS:IP取得下一条要执行的指令
数据段:数据段存放运行程序所用的数据
DS:存放数据段的段基地址
EA(SI、BX):存储器操作数的偏移地址
**处理器利用DS:EA存取数据段中的数据
附加段:附加的数据段,也保存数据
ES:存放附加段的段基地址
EA(DI):存储器操作数的偏移地址
堆栈段:堆栈段确定堆栈所在的主存区域
SS:存放堆栈段的段基地址
SP:只是堆栈栈顶的偏移地址
**存储器各逻辑段之间可以连接、分开、部分重叠或完全重叠
段超越:
堆栈段数据保存在堆栈所在的主存区域,一般的数据在没有指明时,默认在DS段
若数据在其他段,则需要使用段超越
2.4 8086/8088微处理器的外部结构
**我们说的有效电平是针对控制总线的
以8088为例,
一、地址/数据总线
(1)
①地址/数据分时复用(一个引脚在不同时刻具有两个甚至多个作用,分时复用是为了减少对外引脚个数)
②数据流向是双向的,且具有三态
③时刻输出低地址~,其他时间用于传送8位数据
(2)
①提供20位地址的中间8位地址
②数据流向为输出,具有三态
二、地址/状态总线
①地址/状态分时复用
②数据流向为输出,且具有三态
③访问存储器的,访问外设的
时刻全部输出低电平
④其他时间输出状态信号
三、地址/数据/状态时序
2.5 总线的形成与标准
总线(bus)就是连接两个以上数字系统元器件的信息通路,是一组公用信号线
总线支持芯片
①8282——8位三态锁存器
锁存地址信息
②8284——时钟发生器
提供系统时钟CLK和其他系统时钟
同步RESET、同步READY
③8286——并行双向总线控制器
数据缓冲,增强总线负载能力
控制数据传送方向
④8288——总线控制器