微机系统:第二章节:16位的intel8086处理器
概要:
16位微处理器,兼容8085
-CISC结构
-单一+5V供电
-频率4.77MHz-10MHz
-内部数据总线和外部数据总线都是16位,地址总线为20位,最大寻址1MB的存储空间
-双列直插式封装DIP,40个引脚
-内存采用分段的管理方式
-1979年,推出成本更低的8088:
我们结构方面主要取了解内部结构和外部引脚:
1-:内部结构:
明显,内部由两个独立的逻辑单元构成:
总线接口单元BIU:完成所有的总线操作
执行单元EU:完成指令
8086和8088之间的区别:EU一样,BIU中,8088的外部DB为8位,指令队列为4个字节,8086的外部引脚16位,指令队列6个字节
1-1:总线接口单元BIU:
BIU的组成:
-4个16位段寄存器:存放当前段的起始地址
CS代码段寄存器,Code Segment,存放当前执行程序的段起始地址
SS堆栈段寄存器,Stack Segment,存放当前堆栈段的段起始地址
DS数据段寄存器,Data Segment,存放当前数据段的段起始地址
ES附加段寄存器,Extra Segment,存放当前附加段的段起始地址
-16位指令指针IP:存放下一次要取出的指令的偏移地址
CS:IP指示下一条要取出的指令的实际地址
(注意: IP不能被程序直接存取,由BIU来修改,类似于程序计数器PC)
-6字节指令队列:
指令预取策略:当队列出现两个以上的空字节时,自动从CS:IP(组成的20位物理地址)取指令,一次两个字节
-总线控制逻辑:
-20位指令加法器:
BIU的功能:
取指令,形成物理地址
传输数据,实现CPU和内存,IO端口之间的数据传输
1-2:执行单元EU:
EU的组成:
-16位ALU:
-16位标志寄存器:存放ALU状态和对CPU的控制状态
这里的状态分为两类:
----状态标志:6个
CF进位,Carry Flag:结果有进位或借位,CF=1,否则CF=0。
PF奇偶,Parity Flag:低8位结果为偶数个1,PF=1,否则PF=0。 (保证第8位奇数个1)
AF辅助进位,Auxiliary Carry Flag:D3有进位或借位,AF=1,否 则AF=0。
ZF零标志,Zero Flag:结果为0,ZF=1,否则ZF=0。
SF符号位,Sign Flag:结果为正,SF=0,否则SF=1。
OF溢出标位,Overflow Flag:有符号数算术运算,结果超出其所能表示的数值范围,OF=1,否则OF=0。
----控制标志:3个
DF方向标志,Direction Flag:数据串操作地址修改方向控制,增址DF=0,减址DF=1。
IF中断允许,Interrupt Enable Flag:IF=1,允许可屏蔽中断(开中断),IF=0,关中断。
TF陷阱标志,Trap Flag:TF=1,单步方式,每执行一条指令自动产生一次类型为1的内部中断,使操作者可以逐条指令检查。 TF=0,正常。 (用于调试)
-EU控制电路
-8个16位通用寄存器:
分为4个数据寄存器和4个指针及变址寄存器
数据寄存器:存放操作数据和中间结果:
AX累加器,Accumulator Register
BX基址寄存器,Base Register
CX计数器,Counter
DX数据寄存器,DataRegister
特点:1,可以分高低字节进行寻址;2,可以存储16位地址;3,每个都有专门的功能
指针及变址寄存器:存放逻辑地址的偏移量,是20位物理地址的组成部分
1) SP堆栈指针,Stack Pointer,指示在堆栈段中栈顶的位置,用于数据进栈、出
栈的位置指向。
2) BP基址指,Base Pointer,指示在堆栈段中一个数据区的基址位置,用于访问
堆栈段中的某个数据。
3) SI源变址寄存器,Source Index,源串指针,指示在数据段中一个源串操作数的位置。
4) DI目的变址寄存器,Destination Index,目的串指针,指示在附加段中一个目的串操作数的位置。
注意:SI和DI用于数据串操作,是隐含使用的
EU的功能:
完成指令所规定的操作:
-从BIU指令队列读取指令
-EUBIU控制电路译码并分析
-在EU中计算操作数的16位偏移地址,由BIU的地址加法器生成20位的物理地址
-将取来的操作数送给ALU进行指令运算
-将结果送寄存器或送BIU放到内存中
-本次操作的状态放在标志寄存器中
2-:外部引脚(40引脚)
两个工作模式:最大模式和最小模式(模式不同有8个引脚功能不同)
2-1相同功能的引脚:
-VCC,GND,电源,接地
-AD15-AD0:地址/数据,分时输出低16位地址及数据信号。经地 址锁存器输出对应的地址信号为A15-A0。
-A19/S6-A16/S3:地址/状态,分时输出高4位地址及状态信息。
S6为0:CPU与总线连通
S5:等价于IF
S4、S3:使用哪个段寄存器 :
00=ES,01=SS,10=CS,11=DS
-INTR:可屏蔽中断请求信号,高电平有效.(可以屏蔽的,)
-NMI:非屏蔽中断请求信号,上升沿有效.(不可以屏蔽的,高优先级的请求)
-RD:读选通。
-CLK:时钟,占空比1/3,即1/3高电平、2/3低电平
-RESET:复位,4个T周期,清0标志寄存器、IP、DS、SS、ES、指令队列,CS=FFFFH。
-READY:准备就绪,有效时表示主存或I/O接口准备好,可以进行数据传输。T3采样,若READY
=0则插入TW
-TEST:测试,由WAIT指令检查,使CPU与外部硬件同步,TEST=0继续,否则等待
-MN/MX:最小/最大模式,接+5V最小模式,接地最大模式
-BHE/S7:高8位数据允许/状态,T1时BHE=0,AD15-AD8数据有效,S7未定义。利用BHE信号和A0信号,可知系统当前的操作状态:
(最下面两行表示连续两个周期分别去读)
2-2:功能不同的引脚:
最小模式:
-INTA:中断响应
-ALE:地址锁存允许
-DEN:数据允许
-DT/R:数据发送/接收
-M/IO:存储器/输入输出控制
-WR:写信号
-HOLD:总线请求
-HLDA:总线响应
最大模式:
-QS1、QS0:指令队列状态,提供前一个T状态中指令队列的状态,允许外部跟踪CPU内部指令队列。
-S2、S1、S0:总线周期状态,提供给8288。
-LOCK:总线封锁,低电平时,别的设备不能获得总线控制权。由前缀指令“LOCK”产生。
-RQ/GT1、RQ/GT0:总线请求/允许,双向, RQ/GT1优先级高
3-:具体的两个模式:
最小模式:单机系统,只有一个8086 CPU,所有控制信号由该CPU产生。系统中的控制电路可减到最小。
最大模式:多机系统,有两个以上CPU,一个主8086 CPU,其他为协处理器(如8087、8089),控制信号由总线控制器8288产生。
3-1:最小模式:
3-2:最大模式:
4-:8086处理器的总线周期:
时钟周期:CPU主频每个时钟脉冲的持续时间:一个T表示
总线周期:CPU通过总线进行一次读或写的过程。总线读操作包括 取指令、读存储器、读I/O接口,总线写操作包括写存储器、写I/O接口。还有一些特殊总线周期.
指令周期:执行一条指令所需要的时间
总线请求响应:总线请求是总线控制部件发出的占用总线的请求信号,总线响应是当前控制总线的部件或总线控制器在接收到总线请求后,给出的应答信号
中断响应周期:中断响应是CPU接受中断请求后的处理过程。在响应中断时,CPU在当前指令结束后,插入两个总线周期,发出中断应答,并通过总线获取中断类型码
-5:8086的时钟状态:
8086一个基本的总线周期由4个时钟周期组成。每个时钟称为T状态,用T1、T2、T3、和T4表示。
• T1状态: CPU发出地址。CPU将存储器地址或I/O端口的地址送上地址总线。
• T2状态:撤地址,发控制信号。进行读写准备,CPU撤销地址/数据、地址/状态复用线上的地址,地址/数据复用线浮置,地址/状态复用线输出状态,即复用信号在这个期间切换,读写控制信号有效。
• T3状态:地址/数据线上出现数据。写操作,CPU提供数据;读操作,等待存储器或I/O提供数据。检查READY信号,未就绪,插入TW。TW的操作与T3相同。
• T4状态:完成数据读/写,控制信号无效。结束总线操作
-6 8086处理器的存储组织:
采用了层次结构: 高速缓存技术+虚拟存储技术
从链接方面:靠近CPU的速度快,成本高,容量小
从CPU角度:CPU的访问速度接近最靠近的存储体,CPU的访问空间接近最远的存储体空间
-1:概述:
存储器分为内存和外存,外存
-2:存储器的组织:
地址空间:20个地址线,字节单元编制,直接寻址的能力:1M字节,从00000H~FFFFFH,这个也是物理地址
8086支持字or字节的数据存取
字放在连续的两个单元中,低字节,低地址(小端),低字节对应的地址为数据地址
对齐字:从偶数开始存放,读写花费1个周期
非对齐字:从奇数开始存放,读写花费2个周期
-3:分段管理:
8086内部是16位的,无法直接提供20位的地址,采用分段管理,每段64K,段内连续,各段独立,一个段的起始位置就放在段寄存器(16位)中的.但是16位也无法存储20位的地址,所有要求地址的低4位为0,段内的一个单元的地址相当于段偏移量(高16位为段地址,段内任一个单元的地址相当于偏移量)
逻辑地址和物理地址
物理地址:信息在存储器中实际存放的地址。地址通过地址线给出。
逻辑地址:编程中使用的地址. (段地址:段内偏移量(EA,IP,SP,SI,DI))
物理地址=段寄存器*16+段内偏移量
(发现同一个物理地址可以有多个逻辑地址)
(超越段,特殊情况下不适用隐含段,显式的调用的其他的段)
-4:经典存储器芯片:
---SRAM:静态随机存储器
用触发器存储信息,电源掉电时信息丢失,属易失性半导体存储器,不需要刷新,速度快,功耗大。
--:EPROM:可编程,可紫外光擦除的ROM芯片
--EEPROM:可用加电的方法在线擦除和编程,擦写次数大于1万次,数据可保存10年以上。
可以整片擦除,可以字节擦除,页擦除,状态查询
-5:微处理器和存储器的链接的问题
---1:总线驱动能力:
可以直接驱动的标准门电路期间的数量,通常CPU的直流负载是一个TTL器件,现在多为MOS器件 ,为容性负载,直流分量较小,可带20个。如果系统较大,需要驱动AB,DB,CB
---2:时序配合
CPU时序与存储器存取速度配合,可插入等待状态Tw。
---3数据线的连接
字节编址,存储体为8位,CPU数据线宽度不同,连接的存储体的个数也不同
----4:地址线的链接:(多芯片链接?需要链接?)
3种选择:
------低位地址信号:CPU低位地址选择存储器体,即体选。每个存储体数据宽度一个字节,8
位CPU连1个存储体,依次,16位→2个体, 32位→4个体, 64位→8个体。
------中间位地址信号:
CPU中间位地址用于片内译码,即字选。
------高位地址信号
CPU高位地址选择存储器芯片,即片选,有三种方法,即全译码、部分译码、线选。
1)全译码法:高位地址线全部参加译码,地址连续.n位 2^n个
2)部分译码法:高位地址线部分参加译码,地址不连续.n~2^n之间
3)线选法:高位地址线单根地址线进行片选,地址不连续.8位-8个
-----5:读写控制线的连接:
读写控制信号用于控制对存储器的读/写操作。当存储芯片的工作速度与CPU不匹配时,存储器芯片的接口电路就必须具有向CPU发等待命令的控制信号,以使CPU根据需要插入1个或几个等待周期
-----6:ROM与RAM在存储器中的地址分配
RAM存放临时数据和当前的应用软件,非易失的ROM存放核心系统软件。80X86微处理机复位后从物理地址高端开始运行,所以总是在物理地址空间的高地址位置使用只读存储器ROM
-6:CPU和存储器的连接
虽然是16位,但是可以访问字节数据单元,所以要求存储器单元为1字节,且可以访问一个字
16位对应的就是连个存储体(奇体由BHE选择:15~8,偶体由A0选择,D7~0)
32位微型计算机系统:
(1)4个体,每体1G
(2)每体分别连相应的8位数据线(每个地方拿8位,组成32位)
(3)每个体用BE2-0对应选通(这个体选or不选)
64位微型计算机系统:
(1)8个体,每体512M
(2)每体分别连相应的8位数据线
(3)每个体用BE7-0对应选通,独立写选通
3/8译码器
逻辑:
-7:IO端口组织:
--I/O 设备不能直接与CPU总线相连,需要通过I/O接口芯片。
--每个I/O芯片都有一个端口或几个端口,一个端口往往对应芯片内部的一个寄存器或者一组寄存器。
--每个端口分配一个地址,称为端口地址。
--8086使用低16位地址线对I/O端口进行编址,最多允许有65536个8位的I/O端口,两个编号相邻的8位端口可以组合成—个16位端口。
--8086采用独立的端口编址方式,指令系统中既有访问8位端口的输入/输出指令,也有访问16位端口的输入/输出指令。
--PC机使用A9-A0,有1024个端口。
-8:中断系统:
-1中断的一些概念
中断:描述了一种CPU处理程序的过程。CPU在正常执行当前程序时,由某个事件引起CPU暂时停止正在执行的程序,进而转去执行请求CPU暂时停止的相应事件的服务程序,待该服务程序处理完毕后又返回继续执行被暂时停止的程序。
中断系统:实现中断功能的软件+硬件
中断源:产生中断的来源
-2中断优先级
(中断状态缓存器:保存中断的请求)
多个中断源同时发出中断,采用中断优先级排队(软件查询or硬件优先级排队)
软件查询确定优先级:
询问的次序即为优先级的次序。
缺点:在中断源较多的情况下,由询问到转至相应的中断服务程序的入口时间较长。
硬件优先级排队电路:菊花链法
(相当于一个循环访问:去到下一个菊花链or去到当前的接口~)
-3:CPU什么时候响应中断?
-有中断请求+一条指令结束+开中断
-4:中断处理(*):
-关中断:响应中断+发送响应信号+关闭中断禁止接受外部中断
-保护现场:为了让中断处理程序不影响主程序,把断点处的标志位状态入堆栈
-保户断点:把断点处的程序计数器PC压入堆栈,让中断处理程序正确的返回主程序断点
-4:形成中断服务程序入口地址:根据中断类型找到相应的中断服务程序入口地址.
-5:转入中断服务程序:将入口地址送入PC
(都是硬件自动完成的)
-5:中断服务程序(*):
1)保护现场:要使用CPU中的寄存器。所以,就应该将中断服务程序中要使用的各个寄存器的内容保护起来,一般放置在中断服务程序的开头,要保护多少个寄存器的内容,根据程序的需要而定。
2)中断服务:这是中断服务程序的核心部分,为中断源完成特定的功能。
3)恢复现场:在中断服务程序结束之前,应恢复现场,即把保护现场时所保存的各个寄存器的内容从堆栈弹出,送回原各个寄存器中。这样使原来被中断的程序能够正确地继续执行。否则,即使程序能够正确地返回被中断的断点,但是由于某些寄存器的内容已被破坏,不再是程序被中断时的状态,也会导致主程序产生错误的结果。恢复现场的程序段,应设置在中断服务程序的末尾,在返回指令之前。
4)开中断:在中断服务程序结束时,要开中断,以便CPU能响应新的中断请求。
5)返回断点:在中断服务程序结束的最后,要安排一条中断返回指令,将在中断处理中压入堆栈内的保护标志状态和保护断点的内容弹出,就可以返回断点执行主程序并能继续准备响应新的中断请求
(注意什么时候,保存的什么)
-6:中断的分类
8086有256个不同类型的中断,每一个都有唯一的中断类型码
8086中断分类:
外部中断:外部引起的INTR(可屏蔽),NMI(不可屏蔽)
内部中断:内部软件的中断指令产生or特定情况下的CPU产生,
分为:
软件陷阱:单步中断or 从外存取指令(段异常)等等;
软件中断 INT n :溢出中断指令 INT 0 ,断点中断INT 3
-3中断向量表:
中断向量:中断服务程序的入口地址
中断向量表:存放中断服务程序入口地址的表格
-从00000H~003FFH,每4个字节存放一个中断服务程序入口,高地址的两个字节存放段地址,低2个地址的两个字节存放偏移量. 他们的最低地址(向量地址)=类型码*4
在实模式下,叫做中断向量表,保护模式下叫做中断描述符表
-4:可屏蔽中断INTR
高电平有效,只有IF为1是,CPU执行完当前指令会响应INTR的中断请求
(INTA是最小模式下的低电平有效的相应)
-5:屏蔽中断NMI
非屏蔽中断请求信号NMI用于重要事件处理,如电源掉电、存储器读写出错、总线奇偶位出错等,不受中断允许标志IF的影响。上升沿触发。中断类型码固定为2。
整个相应中断的过程基本和INTR一样,唯一不一样是中断类型码固定为2,不会从外部设备读入中断类型码
在实模式下,CPU直接从中断向量表中0000:0008H、0009H、000AH、000BH这4个单元内读取中断向量。CPU将0008H、0009H两个单元的内容装入IP,而将000AH、000BH两个单元的内容装入CS,于是就转入了非屏蔽中断服务程序的执行
-6:软件中断:
包括INTO,INT3等等INT n指令
特点:人为设置,中断类型码在指令中,不会去外部读入,不执行中断响应总线周期,中断返回地址是软件中断指令的下一个指令