①取指令(从CS:IP寄存器取)→送至指令队列
②EU取指令后,需要操作数,BIU取送至EU
①从指令队列取指令→EU控制器进行分析、译码→控制命令→执行
②ALU执行运算,完成计算
(1)先执行读存操作,从给定地址单元中取出指令,送到先进先出的指令队列中等待执行。存储器的物理地址CSx16+IP,在地址加法器\sum\中形成。
(2)执行单元EU从指令队列中取走指令,经EU控制器译码分析后,向各部件发控制命令,以完成执行指令的操作。此时EU不需要使用外部总线,BIU可将6字节的后续指令送到指令队列,将指令队列填满。
(3)当指令队列已满,EU在执行指令,未向总线接口单元BIU申请读/写内存或1/O操作时,BIU处于空闲状态。
(4)指令执行过程中,若需对存储器或IO端口存取数据,EUU就要求BU去完成相应的总线周期。例如,EU执行从内存读1个数据的指令时,就经内部16位数据总线将操作数偏移地址送到BIU,与BIU中的段地址一起,由地址加法器 ∑ \sum ∑形成存储单元的物理地址,再从指定单元取出数据送到控制器EU,由EU根据指令要求,发控制命令,完成存储器读总线周期。
(5)如遇到JMP或CALL指令,则指令队列中的内容作废,按新的转移地址取指令。
(6)算术逻辑部件ALU完成算术运算、逻辑运算或移位等操作。
参加运算的操作数可从外存、VO端口或内部的寄存器等获取。
运算结果送到E或BIU的寄存器中,也可由BIU写入存储器或UO端口。
本次操作的状态反映在标志寄存器FLAGS中,如进位和溢出等。
用来存放16位数据信息或地址信息;也可以分为8个8位寄存器使用,低8位寄存器为AL、BL、CL、DL,高8位为AH、BH、CH、DH,它们只能用来存放8位数据,不能用来存放地址信息。
(1)累加器AX(AH+AL)
是编程中用得最多、最频繁的寄存器。
(2)基址寄存器BX(BH+BL)
基址寄存器或基地址指针。可用来存放偏移地址。
(3)计数寄存器CX(CH+CL)
在循环操作时作计数器用,用于控制循环程序的执行次数。
(4)数据寄存器DX(DH+DL)
在乘、除法及I/O端口操作时有专门用途。
(1)堆栈指针寄存器SP
与堆栈段SS寄存器联合使用,用于设置和访问堆栈段
(2)基址指针寄存器BP
与堆栈段SS寄存器联合使用,用于设置和访问堆栈段
(3)源变址寄存器SI
具有通用寄存器功能,通过SI、DI以及基址寄存器BX,可以在内存中灵活寻找存储器操作数。
在字符串运算中,SI寄存器用来指示一个源串操作数的位置。
SI与数据段寄存器DS配合,指向源串首地址。
(4)目的变址寄存器DI
具有通用寄存器功能,通过SI、DI以及基址寄存器BX,可以在内存中灵活寻找存储器操作数。
在字符串运算中,DI寄存器用来指示一个目的操作数的位置。
DI与附加段寄存器ES配合,指向目的串首地址。
用来存放各段起始地址的高16位值,称为段基地址或段基址,段基地址与段内偏移地址Offset组合起来就可形成20位物理地址。
代码段寄存器CS
数据段寄存器DS
堆栈段寄存器SS
附加段寄存器ES
(1)用来存放将要执行的下一条指令在现行代码段中的偏移地址,它和CS一起,形成将要取出指令的物理地址。
(2)每当CPU从代码段中取出一个字节的指令代码后,IP就自动加一,指向要取指令的下一字节的地址。
(3)用户程序不能对IP进行存取操作,只能由BIU自动修改。
状态标志:CF、PF、AF、ZF、SF、OF
(1)进位标志CF:进行算术加减运算时,最高位向前一位产生进位或借位时,CF=1,否则CF=0,只有在两个无符号数进行加减运算时,CF标志才有意义;移位操作也将影响CF标志;执行STC指令可使CF置1,执行CLC指令使CF清0,执行CMC指令使CF标志取反。
(2)奇偶校验标志PF。若运算结果低8位有偶数个1,则PF=1,否则PF=0。
(3)辅助进位标志AF。AF标志也称为半进位标志。在8位加减运算中,若低4位向高4位有进位或借位,就使AF=1,否则AF=0.执行加法调整指令DAA或减法调整指令DAS时,会自动测试AF标志,对BCD码加法(加6)或减法(减6)运算结果进行调整。
(4)零标志ZF。若运算结果为0,则ZF=1,否则ZF=0。ZF标志常用来判断两个数是否相等,若两数相等,相减后ZF=1,若不等则ZF=0。字节数据,运算结果的范围为-128~+127,字数据的范围
(5)符号标志SF。它也称为负标志。
(6)溢出标志OF。对于字节数据,运算结果的范围为-128+127,字数据的范围为-32768+32767
控制标志:TF、IF、DF
(7)陷阱标志TF:TF也称为单步标志,它是为调试程序提供方便而设置的。
(8)中断标志IF:IF=1时,允许CPU响应可屏蔽中断,IF=0时,禁止响应可屏蔽中断。
(9)方向标志DF:它用于控制字符串操作指令中地址指针变化的方向。若DF=0,则串地址从低地址向高地址方向进行,每次操作后使地址指针SI、DI自动递增;若DF=1,则串地址从高地址向低地址方向进行,SI、DI自动递减。执行CLD指令可使DF清0,执行STD指令可使DF置1.
采用40引脚的双列直插式
(1)AD15~AD0:地址/数据总线,双向、三态、分时复用信号。
CPU访问内存或I/O设备时,先从AD线上给出地址信号,并将地址信号用锁存器锁存起来,再在AD线上传送数据,这样就从时间上把地址/数据信号分开了。对于8088CPU,只需传送8位数据,所以只有AD7~ AD0为地址/数据线,A15~A8只用来传送地址信息。
(2)A19/S6~A16/S3:地址/状态线
在T1周期,这4根线作高四位地址A19高4位无效,仅用A15T4周期,它们作状态信号S6~S3用。
(3) R D ‾ ( R e a d ) \overline{RD}(Read) RD(Read)
读控制信号。当它为低电平时,允许CPU从存储器或I/O端口读出数据。
(4) W R ‾ ( W r i t e ) \overline{WR}(Write) WR(Write)
写信号,低电平有效。该信号有效时,允许CPU对存储器或I/O端口进行写入操作。
(5) M / I O ‾ M/\overline{IO} M/IO
存储器或I/O端口控制信号。由CPU输出,当它为高电平时,表示CPU正在访问存储器;当它为低电平时。表示CPU正在访问I/O端口。8088中该引脚为IO/\overline{M},当它为高电平时,表示CPU在访问I/O端口,低电平时访问存储器。
(6)CLK
时钟信号。由外部时钟产生器8284A所产生所需的时钟信号,为CPU及8288总线控制器提供基本的定时脉冲。8086的时钟信号为5MHz。
(7) RESET
复位信号,高电平有效至少要维持4个时钟周期。复位后,CPU立即停止当前所有操作,总线无效,使DS、ES、SS、FLAGS、IF清0,CS:IP=FFFF:0000H,使指令队列变空,停止中断。复位结束后,CPU执行重启启动过程,转到FFFF0H处执行指令,可在该处安排一条JMP指令,转到系统初始化程序。
(8)与中断有关的信号
①INTR
可屏蔽中断请求信号,高电平有效。
标志寄存器IF=1,则CPU暂停执行下条指令,转入中断响应周期,去执行中断服务程序;
若IF=0,则不能响应中断。
②NMI
不可屏蔽中断请求信号,上升沿触发。不能用软件屏蔽。
③ I N T A ‾ \overline{INTA} INTA
中断响应信号,低电平有效
(9) HOLD
总线保持请求和总线保持响应信号,在DMA
(10) ALE
地址锁存允许信号,高电平有效,用作地址锁存器的控制信号。在T1周期,ALE有效,AD15~AD0上传送的地址信号,在ALE的下降沿将地址信息锁存,在后续周期中,地址数据线上可传送数据信号,实现了地址/数据信号的分离。
(11) D T / R ‾ DT/\overline{R} DT/R
数据发送/接收信号,用来控制数据收发器(缓冲器)传送数据的方向。当DT/ R ‾ \overline{R} R=1时,CPU向外部发送数据,执行写操作当 D T / R ‾ DT/ \overline{R} DT/R=0时,CPU接收从外部传送过来的数据,执行读操作。
(12) D E N ‾ \overline{DEN} DEN
数据允许信号,它是数据收发器的控制信号, D E N ‾ = 0 \overline{DEN}=0 DEN=0时才允许CPU发送或接收数据。
(13)REDAY
准备就绪信号。它是由被访问的存储器或I/O口发给CPU的响应信号,若该信号为0,表示被访问的存储器或I/O端口还未准备好,CPU还未准备好,当REDAY信号变为1后,表示已准备好,才进入T4周期,完成数据传送的过程。
(14) T E S T ‾ \overline{TEST} TEST
测试信号。
(15)在最小模式/最大模式复用信号
QS1 | QS0 | 状态 |
---|---|---|
0 | 0 | 无操作 |
0 | 1 | 从指令队列中去除第一个字节 |
1 | 0 | 队列已空 |
1 | 1 | 从指令队列中取出后续字节 |
(16) B H E ‾ / S 7 \overline{BHE}/S7 BHE/S7
| 高8位总线允许/状态信号,它用在8086中。当它为低电平时,在读/写操作期间,高8位数据总线D15~D8有效,状态位S7始终为逻辑1。
(17) SS0
| 8088最小模式信号。
(18) M N / M X ‾ MN/\overline{MX} MN/MX
| 最小/最大模式选择信号。
(19) Vcc和GND
| Vcc为电源输入,它为CPU提供+5V工作电源。GND是接地引脚,8086/8088有两个引脚均标为地,为保证正常工作,两者必须都接地。
CPU只能工作于实模式,只允许CPU在1MB(2^20)范围内对存储器进行存取操作,DOS操作系统也要求微处理器工作于实模式。
(1) 8086/8088CPU具有20根地址总线,可直接寻址的内存空间为2^20=1MB字节单元。
(2) 地址范围为00000~FFFFFH,每个单元有一个绝对地址,称为物理地址。
(3) 20位的物理地址有两个寄存器组合而成,第一个寄存器中包含的地址叫段地址或基地址,第二个寄存器包含地址的一部分,称为偏移地址或偏移量,表示的形式为段地址:偏移量,这种地址也称为逻辑地址。
(4) 段地址和偏移地址组合的方式形成物理地址,这个工作由CPU的总线接口部件BIU的地址加法器\sum来完成。
(5) 各段相互独立,可连续排列,也可以部分重叠或完全重叠。
(6) 逻辑地址转换为物理地址的公式:20位物理地址=段基地址×16+16为偏移量。
(7) 段基地址可以定义任何64KB存储器的起始地址,偏移量用来在64KB存储器中选择任一单元。
例:设段基地址为1000H,则该段起始地址为1000H×16=10000H,段内偏移地址可以是0000~FFFFH,它表示从段的起始位置到所选单元的距离。
(8) 一个物理地址可以由不同的逻辑地址完成
(9) 实模式的段只能从被16整除的地方开始
CS:IP→寻址下一条要执行指令的单元 SS:SP、BP→寻址存储器堆栈段中的数据 DS:BX、SI、DI→寻址数据段中的8位或16位数据
ES:DI→寻址目的串地址 通过段超越前缀可以对某些隐含规则进行修改
(1)堆栈是在内存中开辟的一个特定数据区域
(2)堆栈存放需暂时保存的数据
(1)可重定位程序,是指一个可以存放在存储器的任何区域,不加修改就可以执行的程序。
(2)可重定位数据,是指可以存放在存储器的任何区域,不用修改就可以被程序引用的数据。
(3)由于存储器采用偏移地址在段内寻址,因此一个程序段或数据块,在内存中搬移时,可以保持其偏移地址不变,只改变段寄存器的内容,因此搬到哪里都只要修改段寄存器内容后就可以执行,即它们具有了重定位的特点。
(1)1MB存储空间分成两个8位的存储体:偶地址体和奇地址体,各占512K字节。
(2)偶地址体包含所有地址偶数的存储单元,奇地址体包含所有地址奇数的存储单元。
(3)使用 B H E ‾ \overline{BHE} BHE和 A 0 A_{0} A0选择存储体
B H E ‾ \overline{BHE} BHE | A 0 A_{0} A0 | 功能 | 使用数据总线 |
---|---|---|---|
0 | 0 | 选中两个存储体,传送一个字 | D 15 ∽ D 0 D_{15} \backsim D_0 D15∽D0 |
0 | 1 | 选中奇地址体,传送高字节 | D 15 ∽ D 8 D_{15} \backsim D_8 D15∽D8 |
0 | 1 | 选中偶地址体,传送低字节 | D 7 ∽ D 0 D_{7} \backsim D_0 D7∽D0 |
1 | 1 | 无效 |
(4)存取都从偶体开始。存取都从偶体开始。从偶地址单元开始存取一个字只要1次操作,从奇地址开始要2次操作。
(5)8088的外部数据总线为8位,它每次访问存储器只读/写1个字节,读/写1个字要分2次完成。
(6)1MB存储器被看作一个存储体,由A19~A0直接寻址,系统运行速度要慢些。
当CPU的MN/\overline{MX}引脚接+5V时,工作于最小模式,在这种模式下,送到存储器和I/O接口的所有信号都由CPU产生;当MN/\overline{MX}接地时,工作于最大模式,此时它的某些控制信号必须由外部产生,需要增加一个8288总线控制器来产生这些信号,最大模式主要用于系统中包含数值协处理器(Numeric
Data Processor, NDP)8087的情况下。
①硬件包含:8086 CPU、存储器、IO接口芯片,还有8位地址锁存器74LS373、8位双向数据总线缓冲器74LS245和时钟产生器8284A。
②3片74LS373锁存器,分离地址/数据线AD1s ∽ \backsim ∽AD、地址状态线A19/S~A1/S和 B H E ‾ \overline{BHE} BHE信号。这些总线上先传地址信号,然后被锁存,髯传送数据或状态信号。
③8086系统传送16位数据,要用2片74LS245驱动。8088仅传送8位数据,只要1片缓冲器。缓冲器还可控制数据传送方向。锁存器也具有缓冲功能。
④8284A产生系统所需的时钟信号。
74LS244逻辑功能图和引脚图
▲ 1 G ‾ = 0 \overline{1G}=0 1G=0,1A ∽ \backsim ∽ 1A4端的信号被传送到1Y,~1Y4;
▲ 2 G ‾ = 0 \overline{2G}=0 2G=0,2Ay ∽ \backsim ∽ 2A4端的信号被传送到2Y ∽ \backsim ∽ 2Y4;
▲ 1 G ‾ \overline{1G} 1G和 2 G ‾ = 1 \overline{2G}=1 2G=1时,输出呈高阻态;
▲常把 1 G ‾ \overline{1G} 1G和 2 G ‾ \overline{2G} 2G 连起来,由1个片选信号控制。
▲除门控信号, G ‾ \overline{G} G还有方向控制端DIR。
▲只有 G ‾ = 0 \overline{G}=0 G=0,数据才能传输,A→B或A←B;
▲DIR=1,传输方向A→B;
▲DIR=0,传输方向A←B。
输入使能端G | 输出允许端 O E ‾ \overline{OE} OE | 输入D | 输出D |
---|---|---|---|
1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 |
0 | 0 | × | 锁存Q |
× | 1 | × | 高阻态 |
①两个控制端:输入使能端G和允许输出端 O E ‾ \overline{OE} OE
②G=1,触发器D端电平打到Q端,并记忆住
③若置 O E ‾ = 0 \overline{OE}=0 OE=0,Q端记忆的电平经三态门反相后,传到输出端O,使O端与D端信号一致
④如G=1, O E ‾ = 0 \overline{OE}=0 OE=0,输出Q随输入D而变
⑤如G=0, O E ‾ = 0 \overline{OE}=0 OE=0,O端为前面锁存的数据,D端变化不影响输出
⑥如果\overline{OE}=1,则G控制无效,输出呈高阻态,与总线断开
①系统时钟信号CLK、复位信号RESET、准备好信号READY以及供外设用的时钟信号。
②8284A的时钟信号来源:
③从8284A输出端可产生的信号:
④8284A的作用:
CPU可从存储器或1O接口中读出数据,也可向它们入数据。以读存操作为例说明最小模式工作过程。
(1)CPU送出M/\overline{IO}和DT/\overline{R}信号
(2)CPU先送出地址和 B H E ‾ \overline{BHE} BHE信号,再送出地址锁存ALE
(3)74LS373的输出允许端OE恒接地
锁存的20位地址和BHE信号直接送到PC总线上,也被送到存储器系统,用来选择存储单元。
(4)CPU使RD =0,DEN=0
R D ‾ = 0 \overline{RD}=0 RD=0,CPU要从指定存储单元读数据; D E N ‾ = 0 \overline{DEN}=0 DEN=0,表示允许收发数据。DEN与74LS245的G相连,允许74LS245传送数据。
由于第1)步中已设置缓冲器数据传送方向A←B,所以可从存储单元读出数据,经数据总线D15 ∽ \backsim ∽ Do,从74LS245的B端传送到A端,再从CPU的AD15~AD0总线送入CPU的寄存器。
| 比最小模式加一片8288
- 计算机都是在时钟脉冲CLK控制下,一步步进行工作的,完成每种操作都要一定时间。 读/写存储器或I/O端口,是8086最基本的操作。
- CPU读写一次存储器或UO端口的时间叫总线周期。执行1条指令的时间称为指令周期,1个指令周期可包含1个或几个总线周期。
- 1个总线周期需要4个系统时钟周期(T1~T4),时钟周期也称为T周期或T状态,它为时钟频率的倒数,是8086 CPU动作的最小单位。
- 8086工作时钟为5MHz,即T周期为200ns,总线周期为800ns。则CPU与内存或IO接口间传送数据的最大速率可达每秒125万次。8086-1的频率为10MHz,每秒最多可执行250万条指令,运算速度达2.5
MIPS(百万指令/秒)。
读总线四个状态
T1状态
T2状态
T3状态
T4状态