文章目录
《微机原理及单片机应用技术》 主编:王维新
第2章 80X86微处理器的工作原理
2.1 80x86处理器
Intel cpu系列最初开始于四位微处理器4004,之后发展到八位的8008,再到八位处理器8080,之后推出16位的微处理器,8086开始进入X86时代。Intel后来推出32位微处理器,处理器的不同一般在于指令数量,总线和地址线的不同。
微型计算机系统采用三级存储器组织结构,由高速缓冲存储器,主存储器和外存储器组成。当前正在执行的程序或要使用的数据必须从外存调入内存后,才能被CPU读取并执行;没有使用的程序可存入外存,如硬盘,软盘,光盘等。外存的容量通常很大;高速缓冲存储器的最大特点是存取速度快,容量较小,一般将当前使用频率较高的程序和数据,通过一定的替换机制从主存放入高速缓冲存储器。他们之间的变化规律是容量越大,速度越慢;容量越小,速度越快。
2.2 8086/8088微处理器
2.2.1 8086/8088微处理器的内部结构
8086CPU是16位微处理器,具有16根数据线和20根地址线(8088是8根数据线),寻址空间可达1M,可以和浮点运算器,I/O处理器或其他处理器组成多处理器系统,提高了系统的数据吞吐能力和数据处理能力。8086/8088微处理器的内部结构主要有总线接口单元BIU和执行单元EU组成。
1.总线接口单元BIU
功能是负责完成CPU与存储器或I/O设备之间的数据传送。两者并行工作,提高CPU的执行速度。EU从内存或外设端口读取操作数时,根据EU给出的地址,从内存或外设端口读取数据供EU使用。EU运算结果、数据或控制命令等由BIU送往指定的内存单元或外设端口。
总线接口单元有4个16位段寄存器:代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS和附加数据段寄存器ES。一个16位的指令指针寄存器IP,一个20位地址加法器,6字节指令队列缓冲器(8088是4字节),一个与EU通信的内部寄存器以及总线控制电路等。
1)段寄存器
8086cpu的地址引脚有20根,能提供20位的地址信息,可直接对1M个存储单元进行访问,但cpu内部可用来提供地址信息的寄存器是16位的,为了用16位寄存器实现20位地址的寻址,8086/8088采用了段结构的内存管理方法。 指令代码和数据分别存储在代码段、数据段、堆栈段、附加数据段中,每个段最多可达64k个存储单元(8086/8088CPU的寄存器是16位,只能存储2的16次方bit个单元,即64k)。这些段的段地址分别段寄存器提供,代码或数据在段内的偏移地址由有关寄存器或立即数给出。我们计算的物理地址,其实是下一条要读取的指令在存储器中的物理地址
CS代码段寄存器:存储程序当前使用的代码段的段地址
DS数据段寄存器:存放程序当前使用的数据段的段地址
SS堆栈段寄存器:存放程序当前所使用的堆栈段的段地址,堆栈是存储器中开辟的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场
ES附加数据段寄存器:存放程序当前使用的附加数据段的段地址,附加数据段用来存放字符串操作时的目的字符串
2)指令指针寄存器
能自动加1,始终存放的是下一条要读取的指令在代码段的偏移地址
3)20位地址加法器
8088/8086CPU对存储单元进行访问,读取指令或存取操作数时,必须在地址总线上提供20位的地址信息,以便选取对应的存储单元。CPU提供的用来对存储单元进行访问的20位地址是由BIU中的地址加法器产生的。 存储器中每个存储单元的地址可以有两种表示方式:
(1)逻辑地址:我们把通过段地址和偏移地址来表示的存储单元的地址称为逻辑地址,记为“段地址:偏移地址”。读指令时,段地址由CS给出,段内偏移地址由IP给出;读取操作数时,根据操作,段地址由DS、ES或SS提供,偏移地址由指令提供。
(2)物理地址:我们把CPU对存储器进行访问时,实际寻址所使用的20位地址称为物理地址,它是由BIU中的地址加法器根据逻辑地址产生的。物理地址=段地址×10H+偏移地址 ,(×10H相当于在段地址后添加1个0) 例如,当前(CS)=20A8H,(IP)=2008H,则下次从内存中读取的指令所在的存储单元的物理地址为 :20A8H×10H+2008H=22A88H4)
4)指令队列缓冲器
对于8086,当指令队列出现两个空字节,对8088,指令队列出现一个空字节时,BIU自动执行一次取指令周期,将下一条要执行的指令从内存单元读入指令队列,采用先进先出原则。
EU执行读取操作数的指令时,BIU在执行完现行取指令的存储器周期后的下一个周期,会对指令指定的存储单元或I/O端口访问,操作数经BIU送到EU处理。当EU执行跳转、子程序调用或返回指令时,BIU使指令队列复位,并从指令给出的新地址取指令,第1条送往EU,接下来的指令填入指令队列缓冲器。指令队列使EU和BIU可以并行工作,减少CPU取指令的等待时间,提高CPU利用率,加快运行速度。
2.执行单元EU
EU不与外部系统直接相连,只负责执行指令。指令从指令队列缓冲器得到,若需要从存储器或I/O端口读取操作数,EU向BIU发出请求,由BIU对存储器或I/O进行访问。 EU由以下几部分组成:
(1)16位算术逻辑单元ALU:进行算术和逻辑运算
(2)16位标志寄存器FLAGS:存放cpu运算的状态特征和控制标志(共有9个标志,6个状态标志,3个控制标志)
(3)数据暂存寄存器:协助ALU完成运算,暂存运算数据
(4)通用寄存器:包括4个16位数据寄存器AX BX CX DX和4个16位指针与变址寄存器SP BP SI DI
(5)EU控制电路:控制、定时与状态逻辑电路。接收从指令队列取来的指令,经指令译码后形成的各种定时控制信号,对EU的各个部件实行特定的定时操作。8088与8086cpu完全兼容,区别仅在BIU,主要有几个方面:
(1)外部数据总线位数不同:8086据总线为16位,一个总线周期内,可以输入/输出一个字;8088数据总线为8位,一个总线周期,可输入输出一个字节
(2)指令队列缓冲器大小不同:8086指令队列可容纳6个字节,一个总线周期从存储器取出两个字节的指令代码填入指令队列;8088容纳4个字节,一个周期取一个字节的指令。
(3)部分引脚功能定义有区别
2.2.2 8086/8088微处理器的寄存器
8086/8088CPU中可供编程的14个16位寄存器按用途可以分为三类:通用寄存器、段寄存器、控制寄存器
1.通用寄存器:
可分为4个数据寄存器与2个地址指针和2个变址指针寄存器,数据寄存器一般用来存放16位数据。地址指针,变址指针寄存器一般用来存放地址的偏移量。
1)数据寄存器(AX BX CX DX )
每一个数据寄存器可根据需要将高8位和低8位当作独立的两个八位寄存器使用,即AH BH CH DH和 AL BL CL DL两组,其他寄存器不能使用。
AX累加器:存放运算结果,所有的I/O指令使用该寄存器与外设端口交换信息
BX基址寄存器:8086/8088CPU有两个基址寄存器。BX是用来存放操作数在内存中数据段内的偏移地址,BP存放操作数在堆栈段内的偏移地址。
CX计数寄存器:设计循环程序时,存放循环次数
DX数据寄存器:在寄存器间接寻址的I/O指令中存放I/O端口地址;双字长乘除法运算时,与AX一起存放一个双字长操作数
2)地址指针寄存器(SP BP)
SP堆栈指针寄存器:执行堆栈操作指令(POP PUSH)时,每执行一次进栈或出栈操作,系统自动将SP的内容减2或加2,使其始终指向栈顶
BP基址指针寄存器:可以存数据或存放操作数在堆栈段内的偏移地址
3)变址寄存器
SI源变址寄存器:进行字符串操作时,能放原串在数据段内的偏移地址
DI目的变址寄存器:存放目的串在附加数据段内的偏移地址
2.段寄存器
在2.2.1.1有介绍
3.控制寄存器
IP指令指针寄存器:16位,存放EU要执行的下一条指令的偏移地址
FLAGS标志寄存器:9个标志,6个用作状态标志,3个用作控制标志
1)状态标志用来反映算术和逻辑运算结果的一些特征。
CF:进位标志,进行加减运算,如果最高位发生进位或借位,CF=1,否则为0。常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数范围
PF:奇偶标志位。指令执行结果低八位中含有偶数个1时,PF=1,否则为0
AF:辅助进位标志位。执行加减运算时,若结果的低字节的低四位向高四位有进位或借位,AF=1,否则为0
ZF:零标志位。运算结果为0时,ZF=1SF:符号标志位。运算结果的最高位为1时,SF=1
OF:溢出标志位。运算结果超出了有符号数所能表示的数值范围,OF=1,用于判断有符号数运算结果是否溢出
2)控制标志用来控制cpu的工作方式或工作状态
TF:跟踪/陷阱标志位。TF=1时,8086/8088CPU处于单步工作方式,否则正常执行程序
IF:中断允许标志位。用来控制可屏蔽中断的控制标志位。若用STI指令将IF=1,允许CPU接受可屏蔽中断请求信号,否则禁止接受。IF对非屏蔽中断及内部中断没有影响。
DF:方向标志位。STD将DF=1,串操作按减地址方式进行,从高地址开始,每操作一次,地址自动递减。 DF=0,按增地址方式进行。
2.3 8086/8088微处理器总线功能
2.3.1总线概述
总线一般是指通过分时复用的方式传送数据的总线,他是计算机内部功能部件之间传送信息的公共数据通道。总线上的所有设备共享数据。两个设备之间的信息互传所连接的信号线不能称为总线。
1.总线的分类:
总线按照功能可分为数据总线和地址总线。按照数据传送的方式,可分为串行总线和并行总线。数据传输时必须有应答信号(握手信号)控制数据的传输。按照时钟线也可以将总线分为同步总线和异步总线。同步总线的时钟信号独立于数据,异步总线的时钟信号是从数据中提取出来的。
CPU与存储器或I/O端口进行数据交换,需要执行一次总线操作。按数据的传输对象可分为读操作和写操作,按照读写的不同对象,可分为存储器读/写与I/O读/写操作。总线操作在一定周期内按严格时序进行。
2.总线周期:
CPU在时钟信号CLK控制下按节拍工作。CPU与存储器或IO交换数据时,需要启动一个总线周期。按照数据传送方向,可分为读总线周期和写总线周期。 基本的总线周期由4个时钟周期组成。时钟周期是cpu的基本时间计量单位,由cpu主频决定。一个时钟周期,又称为一个T状态,基本总线周期用T1 T2 T3 T4表示。 T1时,CPU把要读/写的地址放到地址总线。写总线周期,CPU从T2起到T4把数据送到总线,并写入存储单元或IO端口;读总线周期,CPU从T3起到T4从总线上接收数据,T2总线浮空,允许cpu有一个缓冲时间,把输出地址的写方式转换成输入数据的读方式。
2.3.2 8086/8088CPU总线
8086/8088CPU芯片的引脚包括20根地址线16根(8086)或8根(8088)数据线以及控制线、状态线、电源线和地线等。8086和8088部分引脚功能不同。 以8086CPU为例,介绍最小模式和最大模式下各引脚的功能。(最小模式是在系统中只有一个微处理器,所有的总线控制器直接由cpu产生,电路被控制到最少设计。最大模式相对最小模式而言,可包含两个或多个微处理器,一个主处理器8088/8086,其他称为协处理器,他们协同工作。系统处于最小模式还是最大模式,取决于硬件系统的设计。)
1)电源线和地线
电源线Vcc(40):输入
地线GND(1和20):输入, 两条接地
2)地址/数据引脚
地址/数据分时复用引脚AD15-AD0(39,2-16):传送地址时单向输出,传送数据时双向输入或输出。
地址状态分时复用引脚A19/S6~ A16/S3(35-38):输出、三态引脚。T1状态做地址线,T2-T4状态用于输出状态信息。
3)控制引脚
NMI(17):非屏蔽中断请求信号,不受IF影响,此信号一出现,当前指令,执行结束后立即进行中断处理。
INTR(18):可屏蔽中断请求信号,输入高电平有效。
CLK(19):系统时钟,输入
RESET(21):复位信号,输入,高电平有效。复位信号使处理器马上结束现行操作,对处理器的内部寄存器进行初始化
READY(22):数据准备好信号线,输入,高电平有效,由存储器或I/O端口发来。CPU在每个总线周期的T3状态对READY采样,若为低电平,则自动插入一个或几个等待状态Tw,直到变为高电平才能进入T4状态
TEST(23):等待测试信号,输入,CPU执行 WAIT指令时,每隔5个时钟周期对引脚进行一次测试,若为高电平,CPU处于等待状态;低电平时执行下一条指令。
RD(32):读控制信号,输出。RD=0,表示执行一个对存储器或I/O端口的读操作。
BHE/S7(34):高八位数据总线允许/状态复用引脚输出。
MN/MX(33):最小/最大工作方式控制信号,输入。接高电平时为最小工作方式。
2.8086CPU最小工作方式系统
系统只有一个微处理器,所有的总线控制信号直接由8086CPU产生,把8086CPU的33引脚MN/MX接+5V时,处于最小工作方式。
此方式下,24~30引脚的功能如下:
INTA(24):中断响应信号,输出,用于对外设的中断请求做出响应
ALE(25):地址锁存允许信号,输出,提供给地址锁存器的控制信号,高电平有效。
DEN(26):数据允许信号,输出。高电平时收发器在收或发两个方向上都不能传数据;低电平时允许数据通过数据总线收发器。
DT/R(27):数据发送/接收信号,作为输出,用来控制数据的传送方向。高电平时,8086CPU通过数据总线收发器进行数据发送;低电平时进行数据接收。
M/IO(28):存储器I/O端口控制信号,输出。用来区分CPU是进行存储器访问还是I/O端口访问,高电平时表示和存储器进行数据传送。
WR(29):写信号,输出。有效时,表示CPU当前正在进行存储器或I/O写操作。
HOLD(31):总线保持请求信号,输入。
HLDA(30):总线保持响应信号,输出。
3.8086CPU最大工作方式
MN/MX接低电平时,系统工作处于最大方式。控制信号不能直接从CPU引脚得到,需要外加总线控制器。
2.4 8086/8088存储器和I/O组织
2.4.1 8086/8088存储器组织
1.存储器的结构
为了对1M个存储单元进行管理,,8086/8088cpu采用了段结构的存储器管理方法。将整个存储器分为许多逻辑段,每个逻辑段的容量小于或等于64KB,各逻辑段之间可以相连,也可以重叠。用户编写的程序(指令代码和操作数)存储在段内,段的段地址存储在段寄存器中,偏移地址由相应寄存器或立即数给出。
2.逻辑地址与物理地址
2.2.1.3)有介绍
3.堆栈操作
堆栈是在存储器中开辟的一个特定区域,堆栈在存储器中所处的段称为堆栈段。开辟堆栈的目的有两点:
(1):存放指令操作数,段地址由SS提供,偏移地址由BP提供。
(2):保护断点和现场
执行进栈出栈操作时,段地址由SS提供,偏移地址由SP提供,SP始终指向栈顶,栈空时,SP指向栈底。进栈操作,SP减2,出栈加2
2.4.2 8086/8088的时序
指令执行周期:取指令→分析指令→对操作数寻址→执行指令→保存操作结果
时钟周期(T状态):CPU处理动作的最小单位。
总线周期:CPU通过总线存储器或IO进行一次数据传输需要的时间,至少为4个时钟周期。
指令周期:执行一条指令需要的时间
8086CPU的总线时序包括以下几种类型:
1.系统复位
系统总线RESET端上的高电平维持4个时钟周期,CPU进入复位状态。RESET由高电平变为低电平7个机器周期后进入工作状态。
2.存储器I/O读时序
3.存储器I/O写时序
4.输入/输出周期
5.空闲周期
6.中断响应周期
2.5 80X86的工作方式与存储器结构
2.5.1 80X86的工作方式
80X86工作方式有四种:实地址方式、虚地址保护方式、虚拟8086方式、系统管理方式。
2.5.2 80X86存储器的分段和物理地址的形成
参考2.2.1逻辑地址与物理地址