一、8086CPU基本结构
EU:执行指令
BIU:(与外界交接)取指,读操作数,写结果
取指和读指是并行的,提高效率。
只有BIU有区别:
重点!!
外部数据总线(外部数据引脚16根)
8086 内部外部 都是16根数据总线
8088 内部16根 外部8根
不同的时间段,引脚呈现不同功能
地址总线都是20位,所以最大能够寻址2^20。
1KB=2^10=1024字节
1MB=2^20=1014576字节
CPU基本组成结构
各个寄存器名称都要记住!!
AX累加器
BX基址寄存器
CX计数器
DX数据寄存器
以上每个16位都可以拆分为两个8位的寄存去
指示器BP/SP
变址寄存器SI(源变址寄存器)+DI(
8086一次性传输16位,有6个字节的指令队列
8088一次性只能传输8位,只有4个字节指令队列
EU(ALU+寄存器组)
功能:
①执行指令②向BIU传输结果③管理Reg(寄存器)和PSW(标志寄存器)
组成
所有算数都在ALU中完成
FR(16个里只有9个有效,6个条件标志位,3个
EU工作过程
从BIU中取指令→译码(变成二进制)→变成控制命令→控制数据走向
加法运算操作:指令码从指令队列取来,操作数从内存中取来,运算;ALU总线输到各个部件。
从外设取数:EU向BIU申请访问端口(取数),向ALU数据总线传送数据
BIU(同外部设备的接口部件)
功能:
从内存中取值,把指令放到指令队列的末尾,头部把指令推送给EU,EU从最上方取。
如果EU向BIU申请取操作数,那么BIU指令就停止取了
组成:
IP→PC,指向下一条要取的指令的地址
程序计数器PC
16位逻辑地址→20位的物理地址
指令队列:
流水线操作
第一次:BIU取指令,EU等待;等到下一条,BIU在取指令的同时,EU也在执行上一条传输过来的指令
BIU是没有空闲时间的,一直在取指令。
重要!!
分段存储
8086有20根地址线,但是内部可以表示的地址最多16位。
每个段最大64KB,最小16B
//
CS代码段
DS/ES数据段
SS堆栈段
不能调换使用,只能在固定段
//
逻辑地址:
地址加法:两个逻辑地址→一个20位的物理地址
段地址左移四位补,加上位的偏移地址
形成一个20位的物理地址
320
CS+IP指令地址
SS+SP/BP
DS+SI/DI/BX
例子:
解释:
段基址左移四位
2000H→20000H
加上段内偏移地址20000H+5F62H=25F62H即物理地址
物理地址计算
AX | AH | AL | 累加器 |
BX | BH | BL | 基地址寄存器 |
CX | CH | CL | 计数器 |
DX | DH | DL | 数据寄存器 |
寄存器
通用寄存器
用途:存放8位或者16位的操作数或者中间结果;AX使用最多
AX作用:
- AX
累加器;算术运算;与外部设备交换数据
- BX 存放基地址
- CX
可以自动-1,在循环计数前把数放到CX中;
3.DX
数据寄存器,与CX配合最多;充当AX的助手,辅助AX。
也有专门用途,双字长,与AX组合配合使用;DX高16位,AX低16位。
IO端口寻址,也用DX
MUL BX ;AX*BX,操作数16位,相乘后结果最多可以是32位,DX放高16位,AX放低16位
MOV DX,257 ; 端口地址>256,要先写入DX
IN AL,DX ;读取地址,放到AL
MOV DX 20H ;若200H则必须先写入DX。如果>0FF,只能间接寻址;>256。
若<256,可以直接MOV DX 20H;
IN AL DX
指示器和变址寄存器
SP/BP经常在堆栈里面用于指向某一个地址单元;
SP存放栈顶地址(最后一个进来的)永远指向栈顶,CPU自动操作。
BP可以指向堆栈段里任何一个字节单元(偏移地址)
SS堆栈段的段基址
SI/DI地址通常可变,比如在循环操作时,对一串内存单元操作,地址往往是变化的。所以偏移地址放在SI/DI便于变化。
SI/DI通常与DS数据段寄存器配合使用,数据段中的物理地址。
SI默认DS(数据段);
DI默认ES(附加段);
例:已知下图。则首地址物理地址32000H
代码:
MOV SI,2000H
MOV DI,3000H
MOV CX,100H
CLD
解释:
数据块的拷贝:
源地址2000H放在SI(想复制的)DS:SI
目的地址放在DI(复制过去就放在这)ES:DI
然后CX放置整个块的长度。
8086向下生长:栈底在高地址;初始地址在高位低地址;
8051向上生长;栈底是低地址,
段寄存器
标志寄存器FR
存放ALU的操作结果,作为一个条件去判断。
最高位产生进位: CF=1
奇偶(低8位1的个数偶1奇0): PF=1
溢出(双高位法): OF=1
符号标志(最高位): SF=0
零标志(为0则1): ZF=0
辅助进位标志D3向D4进位: AF=1
转换为二进制:
- 2345H2345H2345H 转换为二进制: 00100011010001010010 0011 0100 01010010001101000101
- 3219H3219H3219H 转换为二进制: 00110010000110010011 0010 0001 10010011001000011001
补码的计算:
- 取 3219H3219H3219H 的二进制 00110010000110010011 0010 0001 10010011001000011001 的反码(每位取反)得到 11001101111001101100 1101 1110 01101100110111100110。
- 然后加1得到补码 11001101111001111100 1101 1110 01111100110111100111。
执行加法:
- 将 2345H2345H2345H 的二进制形式与 3219H3219H3219H 的补码相加:
- 00100011010001010010 0011 0100 01010010001101000101
- +
- 11001101111001111100 1101 1110 01111100110111100111
- =
- 11110000101011001111 0000 1010 11001111000010101100
二、8086/8088CPU内部结构
引脚功能
重点!!
引脚33 模式选择
接1:最小模式
接0:最大模式
引脚9-16地址数据复用引脚
8088是AD0-AD7是地址数据复用引脚
8086是AD0-AD15是地址数据复用引脚
引脚28
8088
8086
引脚25 ALE
ALE下降沿锁存
三个中断重点!!
引脚18 可屏蔽 INTR
INTR=1且IF=1,cpu进入中断响应周期。
若IF=0,即使有INTR=1,cpu对此中断请求信号不予理睬。
可以通过软件方法使得IF=0
一般用于外设
不可以屏蔽的中断请求 NMI
比如断电了,08H和09H松IP
中断应答信号
告知我已经收到了中断信息了,给设备发出应答信号,告诉我已经收到你的中断请求了,不用再发了
CLK
RESET
至少保持4个时钟周期
所有寄存器都复位为0000
只有代码段CS复位为FFFFH
READY
重点!!
访问外设/内存
8086和8088是反过来的,高低电平对应的功能刚好反过来。
8088访问外设接1;访问内存接0;
接0,写入
再根据
决定写入内存/外设
接0,读取
再根据
决定读内存/外设
8086与8088区别3个
3.
0有效,同为1则无操作。
系统总线和典型时序
- 时钟周期
- 总线周期
一个总线周期由4个时钟周期构成,T1 T2 T3 T4;但是有等待周期,可能就大于四个时钟周期了。
- 指令周期
不同指令需要的总线周期不一样。
一个基本总线周期由4个时钟周期(T1,T2,T3,T4)构成
T1:CPU访问端口时送出地址
T2:地址撤销;地址数据复用引脚从地址转换为数据引脚;
读信号地址/数据线是高阻;因为要经过译码各种操作,读不到。
写信号,可以立马送出一个数据,则地址/数据线是数据
T3:数据稳定,在T3和T4交界处采样数据,进入T4状态
T4:结束
8086读存储器
中断相应周期(可屏蔽中断INTR)
当前指令执行完后相应中断
第一个周期:送
,应答中断,表示①响应中断,②外设取消INTR信号用
(我响应你的中断了,不用再发了)
第二个周期:再次送
,通知外设送中断类型码到数据线上,以便CPU取得该中断服务程序入口地址,转入该中断服务
4个字节存放一个首地址,中断类型号*4就是中断服务程序的入口地址。内存地址取出来放在CS:IP里面,这个是指向下一条要执行的指令的,就可以进入中断服务程序。
(我要发送给外部设备,你把中断类型码告诉我,你是什么类型的中断,我就找到入口,执行这个中断服务程序)
NMI中断类型码固定为2,中断类型码已知,对于不可屏蔽中断请求来说,只要一个中断响应周期就行。
8086/8088等待状态时序
READY为0时,表示进入等待状态,在T3和T4之间插入一个等待周期Tw,直到READY引脚置1,再继续执行。
总线空闲周期
CPU不与MEM或I/O之间传送数据时,则不执行总线周期, BIU则不和总线打交道,此时进入总线空闲周期T。
微处理器应用系统
三个小系统
时钟发生器8284:向CPU提供CLK,READY,RESET信号
8位三态输出锁存器8282/8283:由于地址/数据线分时复用,在数据占用总线之前,必须先将地址码锁存,由ALE的下降沿跳变启动锁存。
:允许输出,低电平有效
:(在1时,直接传输,不锁存)选通信号,接到ALE上,下降沿时锁存。DI在变,DO也不变。
并行双向总线驱动器8286/8287:A,B输入输出;T传输方向。
T=1:发送
T=0:接收
总线控制器8288
RESET,READY,CLK连到8088
8086有20根地址总线,最少要有3片8282来锁存
8088只有8根数据总线,8086有16根。但是8286左边8个A接CPU,右边8个B是接外设的。
所以8088要一片,8086要两片。
连接关系(以8088为CPU的单CPU模式)
地址20位,8086数据16位(两片8286)
9.24 8:15 36min
题目
3. (单选题, 2分)8088/8086的存储器组织是将存储器划分为段,可作为段的起始地址的是( )。
- A. 185A2H
- B. 00020H
- C. 01003H
- D. 0AB456H
正确答案: B:00020H;
解析:
段式管理,每个段的起始地址必须是16的倍数
4. (单选题, 2分)8086微处理器可寻址访问的最大I/O空间为( )。
- A. 1KB
- B. 64KB
- C. 640KB
- D. 1MB
正确答案: B:64KB;
解析:
最大I/O是64KB,最大内存1MB
5. (单选题, 2分)8088/8086 CPU 中,指令指针(IP)中存放的是( )。
- A. 指令
- B. 指令地址
- C. 操作数
- D. 操作数地址
正确答案: B:指令地址;
解析:
指针里存放地址;操作数是指令的组成部分
6. (单选题, 2分)如果访问存储器时使用BP寻址,则默认的段寄存器是( )。
- A. CS
- B. ES
- C. DS
- D. SS
正确答案: D:SS;
解析:
CS:IP
SS:SP/BP
DS:SI
ES:DI
7. (单选题, 2分)8086对外部请求响应优先级最高的是( )。
- A. READY
- B. INTR
- C. HOID
- D. NMI
正确答案: D
解析:
优先级顺序
NMI(最高优先级,不可屏蔽中断)
HOLD(DMA直接存储器访问)
INTR(可屏蔽中断请求)
READY(同步操作)
8. (单选题, 2分)8086/8088CPU经加电复位后,执行第一条指令的地址是( )。
- A. FFFFFH
- B. 03FFFF
- C. 0FFFFH
- D. FFFF0H
正确答案: D:FFFF0H;
解析:
9. (单选题, 2分)8086微处理器CLK引脚输入时钟信号是由( )提供。
- A. 8284A
- B. 8288
- C. 8287
- D. 8289
正确答案: A:8284A;
解析:
8284:时钟发生器(CLK,READY,RESET)
8282/8283:8位三态输出锁存器
8286/8287:并行双向总线驱动器
8288:总线控制器
???
程序设计中使用的地址称为逻辑地址,而CPU对存储器单元进行操作时使用的地址称为物理地址。
16. (填空题, 2分)当存储器的读出时间大于CPU所需要的时间时,为了保证存储器与CPU的周期配合就要利用__READY___信号,使CPU在___T3___后插入一个Tw状态。
8086系统中,存储器分为奇、偶两个存储体。偶体的数据信号线固定与数据总线的__低8位____相连。
???
设定某数据区为16个字,起始地址为70A0:DDE6,该数据区字数据的首末物理地址分别是______和_______。
正确答案:
(1) 7E7E6H
(2) 7E804H
解析:
70A0:DDE6
段基址:偏移地址
首地址:70A00+DDE6=7E7E6H
末地址:16个字,一个字2字节,一共32个字节。+31,但是31是十进制,要转换成16进制。所以+1F
19. (填空题, 2分)设堆栈段寄存器SS所存放的数据为2250H,堆栈指示器SP所存放的数据为0140H,如压入堆栈7个字数据,问栈顶地址、SS和SP各为_______、___________、___________。
正确答案:
(1) 2250H:0132H
(2) 2250H
(3) 0132H
7个字,14个字节,E。所以是0132H。所以字先转换成字节,然后字节再转换成16进制,再相加减。
20. (填空题, 2分)8088/8086访问代码段、堆栈段的偏移量分别由___指令指针寄存器IP_____寄存器和__堆栈指针寄存器BP/SP_____寄存器提供。
21. (填空题, 2分)8086/8088在最小方式下有关总线请求的信号引线是__HOLD______和_____HLDA___。
23. (判断题, 4分)8086 CPU的Ready信号是由外部硬件产生的。
- A. 对
- B. 错
正确答案: 对
28. (判断题, 4分)8088/8086的数据可以存放在几个不连续的段中。
- A. 对
- B. 错
正确答案: 对
微型计算机系统总线由哪三部分组成?它们各自的功能是什么?
正确答案:
地址总线:指出数据的来源或去向
数据总线:提供了模块间数据传输的路径
控制总线:传送各种控制信号以便控制数据、地址总线的操作及使用。
32. (简答题, 4分)什么是最小工作方式?什么是最大工作方式?
最小工作模式特点:在系统中只有8086一个微处理器。所有的总线控制信号直接由8086产生,因此,系统中的总线控制逻辑电路被减到最少。最小模式是单处理器系统。
最大工作模式模式:系统中有两个或两个以上的微处理器,即除了主处理器8086(或8088)以外,还有协处理器(8087算术协处理器或8089输入/输出协处理器)。最大模式可构成多处理器系统,系统中所需要的控制信号由总线控制器8288提供。
区别:最大模式是相对最小模式而言的。最大模式用在中等规模的或者大型的8086/8088系统中。在最大模式系统中,总是包含有两个或多个微处理器,其中一个主处理器就是8086或者8088,其他的处理器称为协处理器,它们是协助主处理器工作的。CPU工作模式的选择是由硬件决定的
正确答案:
(1)是指8086对片外的存储器或I/O接口进行了一次访问,读写数据或取指令。
(2)基本总线周期由4个时钟周期组成,分别记为T1、T2、T3、T4。
(3)地址信号、ALE信号在T1周期内产生RD信号在T2周期内产生
数据信号一般在T3内产生,若T3来不及提供数据,可在某Tw内产生有效数据。
34. (简答题, 5分)什么是地址锁存器?8088/8086系统为什么要用地址锁存器?
正确答案:
地址锁存器:一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来。
8086/8088数据和地址总线采用分时复用操作方法,即用同一总线既传输数据又传输地址。CPU发出存储器地址,同时发出允许锁存信号ALE给锁存器。由于地址数据线分时复用,在数据占用总线之前,必须将地址码锁存。
35. (简答题, 5分)8086 CPU中地址加法器的重要性体现在哪里?
正确答案:
地址加法器是8086CPU的总线接口单元中的一个器件,在8086存储器分段组织方式中它是实现存储器寻址的一个关键器件,地址加法器将两个16位寄存器中的逻辑地址移位相加,得到一个20位的实际地址,把存储器寻址空间从64K扩大到1M,极大地扩大了微型计算机的程序存储空间,从而大大提高了程序运行效率。