目录
一、基本特点
二、8086微处理器的内部结构
一、总线接口单元BIU
二、执行单元EU
三、8086的编程结构(重点中的重点)
一、四个 通用寄存器组(数据寄存器组,存放操作数和中间结果)
二、EU中的指示器和变址寄存器(存放逻辑地址的偏移量)
三、BIU中的段寄存器(存放段的段起始地址)
四、BIU的指令指针IP
五、EU的标志寄存器
四、8086微处理器外部结构(只讨论最小模式)
一、最小模式下引脚的功能
二、总线周期的时钟状态操作
五、存储器组织
①16位的8086微处理器 兼容 8位的8085微处理器
②指令系统:采用CISC结构(指令不等长,指令能实现复杂功能)
③供电:单一+5V供电
低电平0v,高电平5v,没有绝对稳定的电平,用0.5V供电可能由于供电不稳定的波动导致0v也可能被识别为0.5V的高电平,所以用更高的5V来区分低电平和高电平。
④总线:数据总线16位,地址总线20位, 最大寻址1MB的存储空间。
⑤内存管理方式:分段管理方式
⑥寻址单元:按字节编址
⑦寻址方式:小端编址
⑧一个字16位,两个字节
最基本的组成部分:运算器、控制器、寄存器组和总线。
由两个独立的逻辑单元组成:
①总线接口单元(BIU)——取指令和总线控制
②执行单元(EU)——执行指令
并行工作——取指令和执行指令可以并行操作。//并行指微观上的同时,取指令会预先取,不需要EU的请求
BIU的组成:
①4个段寄存器(16位 CS,DS,SS,ES) Segment
②指令指针(16位 IP)
③指令队列(6字节)
④总线控制逻辑
⑤地址加法器(20位 Σ)
BIU(总线接口单元 Bus interface unit)的总功能:(取指令和总线控制)
①取指令:当指令队列不满,并且总线空闲时,BIU就通过总线控制逻辑从内存单元中取指令代码往指令队列中传送。
指令预取策略: 指令队列出现 2 个 以上 空字节时,自动按 CS:IP 到存储器去取 指令,一次取 2 个字节。如果EU向BIU发送取操作数的请求,BIU会先把手头的工作做完再响应,如BIU在取指令时,会等到取完后再响应EU
②形成物理地址:BIU将16位段地址左移4位形成20位后,再与16位偏移地址通过地址加法器相加得到20位物理地址。
其中 ①取指令 对应的物理地址是直接由BIU部分的CS:IP构成的;而对于对应数据段(DS)、堆栈段(SS)、附加段(ES)的其他数据的物理地址,是通过 EU单元生成的16位偏移地址 通过数据总线传输给BIU,然后BIU用这些相应段寄存器的段地址 与 这16位段内偏移地址 构成的。
③传送数据,实现CPU与内存、I/O端口间的数据传送:EU在执行指令的过程中如果需要内存或I/O端口的数据时,BIU从外部取数据或把EU执行的结果送到外部。
通过 ②形成数据的地址
综上:
总体来说,BIU是联系微处理器内部与外部的重要通道。
微处理器EU部分需要的操作数,需要通过BIU来形成物理地址,去外部取得,
EU部分的运算结果,部分需要通过BIU形成物理地址,存到外部<传送数据>
EU部分执行的指令,需要BIU生成指令地址 取指令
EU的组成:
①ALU (16位)
②标志寄存器(16位 Flag)
③EU控制电路
④8个通用寄存器(16位,可以暂存中间结果)
EU(执行单元 Execution unit)的总功能:(执行指令,完成控制器的功能)
①取指令并译码:从BIU指令队列取指,并由EU控制电路进行译码
②执行指令:发送指令的控制信息。
③如果需要外部数据,EU会自动算出偏移地址,并把在EU中计算操作数的16位偏移地址送BIU,由BIU的加法器形成 20位物理地址。
④将取来的操作数送ALU进行指令运算。(③④也可能 是直接用寄存器的操作数)⑤结果送 寄存器 或 送BIU放到内存 //送到通用寄存器可以下次直接使用⑥本次操作状态 记录在 标志寄存器中综上:
为什么说EU完成控制器的功能? BIU相当于EU的秘书,BIU负责与外面打交道,但是真正需要指令 需要数据的是EU,EU是发送请求一方。
在编程结构上,8086CPU有14个16位寄存器:
EU中:
8个通用寄存器(包括4个通用寄存器组和 4个指示器和变址寄存器组)
1个标志寄存器
BIU中:
4个段寄存器
1个指令指针(指令指示器)
累加器AX(Accumulate):AH高八位(15~8),AL低八位(7~0)
基址寄存器BX(Base)
计数器CX(Counter)
数据寄存器DX(Data)
每两组8位寄存器都能分别寻址,
有专门的功能,如计数器、累加器,基址寄存器(可以存16位地址)等。
1 ) SP: 堆栈指针 , Stack Pointer ,指示在堆栈段中 栈顶的位置 ,用于数据进栈、出栈的位置指向。//存top栈顶 对应BIU段寄存器 SS2 ) BP: 基址指针 , Base Pointer ,指示在 堆栈段中 一个数据区的基址位置,用于访问堆栈段中的某个数据。//存栈内数据的基址,对应BIU段寄存器SS3 ) SI: 源变址寄存器 , Source Index , 源地址 指针,指示在数据段中一个源串操作数的位置。//存 源操作数 在数据段的段内地址,对应BIU段寄存器DS4 ) DI: 目的变址寄存器 , Destination Index , 目的地址 指针,指示在附加段中一个目的串操作数的位置。//存操作后的目的结果在数据段或附加段的段内地址,对应BIU段寄存器DSorES。
CS: 代码段寄存器 , Code Segment ,存放 当前程序代码 的段起始地址//BIU自身的CS与IP配合SS: 堆栈段寄存器 , Stack Segment ,存放 当前堆栈段 的段起始地址//堆栈段SS和SP、BP配合对堆栈进行操作DS: 数据段寄存器 , Data Segment ,存放 当前数据段 的段起始地址//源操作数配合SI,目的操作数配合DI;存放变量ES: 附加段寄存器 , Extra Segment ,存放 当前附加段 的段起始地址//附加段ES配合DI主要用来进行字符串的操作,附加段主要是字符串,也可以是存放数据和处理后的结果//配合形成物理地址
IP 指令指针,Instruction Pointer,存放下一次要取出的指令代码存放位置的偏移地址CS:IP指示下一条要取出的指令代码的实际地址IP不能被程序直接存取 ,由BIU来修改,类似于程序计数器PC(ProgramCounter)
1 ) CF 进位 , Carry Flag :结果有进位或借位, CF=1 ,否则 CF=0 。2 ) PF 奇偶 , Parity Flag :结果 低 8 位中 有偶数个 1 , PF=1 ,否则 PF=0 。3 ) AF 辅助进位 , Auxiliary Carry Flag : D3 (最低 4 位) 有进位或借位,AF=1 ,否则 AF=0 。4 ) ZF 零标志 , Zero Flag :结果为 0 , ZF=1 ,否则 ZF=0 。5 ) SF 符号位 , Sign Flag :结果为正, SF=0 ,否则 SF=1 。//只需看结果的最高位即可,与最高位相同6 ) OF 溢出标位 , Overflow Flag : 有符号数 算术运算,结果超出其所能表示的数值范围, OF=1 ,否则 OF=0 。//负负得正,正正得负,则OF=17 ) DF 方向标志 , Direction Flag :数据串操作 地址修改方向 控制,增址 DF=0 ,减址 DF=1 。8 ) IF 中断允许 , Interrupt Enable Flag : IF=1 ,允许可屏蔽中断(开中断), IF=0 ,关中断。//IF=1时,可屏蔽中断请求,会响应中断,而IF=0 不理会可屏蔽中断。当然不可屏蔽中断IF不管,因为不可屏蔽中断本身是必须响应的9 ) TF 陷阱标志 , Trap Flag : TF=1 ,单步方式,每执行一条指令自动产生一次 类型为 1 的内部中断,使操作者可以逐条指令检查。 TF=0 ,正常。1~6是上次ALU操作状态7~9是人为设置的,控制CPU操作
8086微处理器 和 外部打交道的接口。
上面有横杠表示低电平有效 或者 下降沿有效。
8086采用 40引脚 双列直插式 封装。
8086 有 两种工作模式 : 最大模式、最小模式。有 8 个引脚 在不同的模式下功能有所不同。
①模式选择:
:接+5V最小模式,接地最大模式
②接通电源:
VCC、GDN(地): 8086是有源电路,采用单一+5V电源。 有两个接地引脚
③时钟信号输入:
CLK: 时钟信号输入引脚,一个时钟1/3是高电平,2/3是低电平
④中断请求:
INTR:中断源向微处理器发出的可屏蔽中断请求信号, 高电平有效 //配合S5使用,如果S5=0,即使INTR=1(发送了一个请求),8086也不会理会。因为它不允许响应可屏蔽中断。
NMI: 中断源向微处理器发出的不可屏蔽中断请求信号,上升沿有效 //上升沿有效可以避免多次触发
:中断响应,向中断源发出应答,通知中断源发出中断类型码
=0,表示中断源向微处理器发出的中断请求信号被应答了,将要产生中断,这时微处理器 有效,表示向中断源发出了一个应答信号,以便于中断源再将对应的中断类型码传给微处理器 执行相应的中断。
中断响应周期:中断响应是CPU接受中断请求后的处理过程。 在响应中断时,CPU在当前指令结束后,插入两个总线周期, 发出中断应答,并通过总线获取中断类型码。
⑤数据传输相关的引脚(输入与输出):
1、允许数据传输:
(1) :数据允许,表示当前微处理器准备发送或接收一个数据
2、数据传输的方向:(输入还是输出)
(2) :数据发送还是接收,=1时从微处理器总线收发器输出
(3):读选通 ,指明现在要对内存单元 或 I/O端口进行一次读操作。低电平有效
(4):写信号,指明现在要对内存单元 或 I/O端口进行一次写操作。低电平有效
3、 和谁进行数据传输:
(5) :存储器/IO控制,表明微处理器此次数据传输是和存储器还是和IO端口进行的。
4、存储器/IO是否准备好:
(6) READY:准备就绪,有效时表示主存或I/O接口准备好,可以进行数据传输。T3采样,若READY =0则插入TW。
//8086的总线周期至少由4个时钟周期组成,每个时钟周期称为一个T状态,分别用T1、T2、T3、T4表示
5、地址和数据的传输途径:
是否允许传送地址:
(7) ALE:地址锁存允许,相当于触发器的时钟,触发器状态可以改变了,也就是可以更新输出地址了,也就是A0~A19有效
(8) AD15~AD0: 低16位地址 / 数据分时复用引脚;A是地址 address,D是数据 data
分时输出 低16位地址(高4位A19~A16输出)及 数据信号。AD15~AD0经地址锁存器(触发器,存储输出地址的状态)输出对应的地址信号为A15~A0。
(9)A19/S6~A16/S3: 高4位地址 / 状态 ; 分时输出 高4位地址(配合A15~A0)
S6为0:CPU与总线连通
S5: 等价于 IF < 是否允许可屏蔽中断 > S5=1 允许响应可屏蔽中断S4、 S3 : 使用哪个段寄存器 : 00=ES , 01=SS , 10=CS , 11=DS6、 数据传输通道哪些是有效的:(10):高8位数据允许/状态,T1时 =0,D15~D8数据 有效,S7未定义。· 利用信号和A0信号,可知系统当前的操作状态://8086存储器奇偶分体,地址为偶数,从偶存储体取数据,为奇数时从奇存储体取数据;表示通过数据总线高8位取数据(高八位数据线上的数据有效) 并且 对应地从奇存储体取数据A0=1也就是地址的最低位为1表示是一个奇数,而A0=0通过数据总线低八位取数据 并且对应的从 偶存储体取数据。=0 ——D15~D8A0=0——AD7~AD0非对齐寻址(花费两个周期):由于8086微处理器采用小端编址,如果从奇地址开始读一个字,那么这个地址对应是数据的低8位,由以上讨论知在奇地址取数据用的是低八位数据总线,所以A0=1, =0。 注意低八位数据总线并不代表数据的低八位,到时候从数据总线传送给EU单元的通用寄存器 如AX时,只需要此时数据总线高八位取的低八位数据放入AX的AL中就可以了。
⑥总线请求响应:利用总线传输数据时,总线控制部件必须获 得总线的控制权。
HOLD :总线请求,用于接收其他总线部件发出的总线请求信号,便于让出总线HLDA :总线响应,高电平表示微处理器已让出总线控制权
⑦特殊功能(1)RESET :复位,至少持续4个时钟周期才能起到复位效果。复位一旦响应,清0标志寄存器IP、DS、SS、ES等寄存器,以及指令队列,并且CS设置为0FFFFH(多出来的0表示FFFFH是一个数)(2):测试,由WAIT指令检 查,使CPU与外部硬件同步, TEST=0继续,否则等待
• 8086 一个基本的总线周期由 4 个时钟周期组成。每个时钟称为 T 状态,用 T1 、 T2 、 T3 、和 T4 表示。• T1 状态: CPU 发出地址 。 CPU 将存储器地址或 I/O 端口的地址送上地址总线。• T2 状态: 撤地址,发控制信号 。进行读写准备, CPU 撤销地址 / 数据、地址 / 状态复用线上的地址,地址 / 数据复用线浮置,地址 / 状态复用线输出状态,即复用信号在这个期间切换,读写控制信号有效。• T3 状态: 地址 / 数据线上出现数据 。写操作, CPU 提供数据;读操作,等待存储器或 I/O 提供数据。检查 READY 信号,未就绪,插入 TW 。 TW 的操作与 T3 相同。• T4 状态: 完成数据读 / 写 ,控制信号无效。结束总线操作。
总线读周期:T1阶段 发送地址, ALE=1 锁存器更新 地址,BHE端为0表示D15~D8高八位数据有效锁存供后来使用,A19~A0有效输出地址T2阶段发送 控制,读写准备,A15~A0转为数据线D15~D0,DEN为0表示允许数据传输, 端为0,M/IO端为1表示需要从存储器读数据,DT/R为0表示要从外边输入数据;(由锁存BHE内容 BHE端为0,取奇寄存器 和A0=0取偶寄存器)T3阶段 等待存储器数据,并把数据送到数据总线上:等待存储器或I/O提供数据,检查READY信号,如果准备就绪,存储器或I/O端口应该在T3期间把数据送到数据总线上并维持到T4;未就绪,插入TW。TW的操作与T3相同T4阶段 完成读数据:控制信号均变为无效,结束总线操作。锁存器会锁存BHE的状态,供之后传输数据使用,T1时刻确定,BHE数据高八位状态和 A19~A16地址 它们的信息在T1阶段确定
分时复用:
T2阶段切换复用信号,
接下来的阶段BHE端 给S7控制,
A19~A16给 S6~S3控制