微机原理之 80x86微处理器
1.8086微处理器简介(16位)
1. 基本概念
- 集成度——CPU芯片中所包含的晶体管数。
- 主频——芯片所使用的主时钟频率,它直接影响计算机的运行速度。
- 数据总线——计算机中各个组成部件间进行数据传送时的公共通道,“内数据总线宽度”是指CPU芯片内部数据传送的宽度(位数),“外数据总线宽度”是指CPU与外部交换数据时的数据宽度,显然,数据总线位数越多,数据交换的速度就越快。
- 地址总线——在对存储器或I/O端口进行访问时,传送 由CPU提供的要访问的存储单元或I/O端口的地址信息的总线,其宽度(即位数)决定了处理器能直接访问的主存容量大小。如8086有20根地址线,使用这20根地址线上不同地址信息的组合,可直接对2^20 = 1M 个存储单元进行访问;Pentium II有36根地址线,因此它可直接寻址的最大地址范围为2^36=64G。
- 高速缓冲存储器Cache:最大特点是存取速度快,但容量较小,通常为KB级,将当前使用频率较高的程序和数据通过一定的替换机制从主存放入Cache,CPU在取指令或读取操作数时,同时对Cache和主存进行访问,如果Cache命中,则终止对主存的访问,直接从Cache中将指令或数据送CPU处理,由于Cache的速度比主存快得多。
Cache的使用大大提高了CPU读取指令或数据的速度。
2. 8086/8088微处理器
1. 内部结构
从功能上讲,8086CPU内部结构可分为两部分:
1、总线接口单元 BIU (Bus Interface Unit)——负责完成CPU与存储器或I/O设备之间的数据传送。
2、执行单元 EU (Execution Unit)——不与系统外部直接相连,它的功能只是负责执行指令。
(1)总线接口单元BIU :
功能:
- ① 读指令——指令队列出现空字节(8088 1个空字节,8086 2个空字节)时,从内存取出后续指令。BIU取指令时,并不影响EU的执行,两者并行工作,大大提高了CPU的执行速度。
- ② 读操作数——EU需要从内存或外设端口读取操作数时,根据EU给出的地址从内存或外设端口读取数据供EU使用。
- ③ 写操作数——EU的运算结果、数据或控制命令等由BIU送往指定的内存单元或外设端口。
组成:
- 4个16位段寄存器:代码段寄存器CS(Code Segment)、数据段寄存器DS(Data Segment)、堆栈段寄存器SS(Stack Segment)和附加数据段寄存器ES(Extra Segment);
- 一个16位的指令指针寄存器IP(Instruction Pointer);
- 一个20位地址加法器;
- 6 字节指令队列缓冲器;
- 一个与EU通讯的内部寄存器以及总线控制电路等。
段寄存器 :
8086CPU的地址引脚有20根,能提供20位的地址信息,可直接对1M个存储单元进行访问,但CPU内部可用来提供地址信息的寄存器都是16位的,那么如何用16位寄存器实现20位地址的寻址呢?8086/8088采用了段结构的内存管理的方法。
将指令代码和数据分别存储在代码段、数据段、堆栈段、附加数据段中,这些段的段地址分别由段寄存器CS、DS、SS、ES提供,而代码或数据在段内的偏移地址则由有关寄存器或立即数给出 。(附加数据段通常用于存放字符串操作时的目的字符串)
- 说明:
- 程序员在编写汇编语言源程序时,应该按照上述规定将程序的各个部分放在规定的段内。每个源程序必须至少有一个代码段,而数据段、堆栈段和附加数据段则根据程序的需要决定是否设置。
20位地址加法器
CPU提供的用来对存储单元进行访问的20位地址是由BIU中的地址加法器产生的。
逻辑地址与物理地址的转换:(重点)
物理地址=段地址 x 10H+段内偏移地址
指令队列缓冲器:
指令队列出现空字节时,BIU就自动执行一次取指令周期,
将下一条要执行的指令从内存单元读入指令队列
8086的指令队列有6个字节,8088的指令队列有4个字节。对8086而言,当指令队列出现2个空字节,对8088而言,指令队列出现1个空字节时,BIU就自动执行一次取指令周期,将下一条要执行的指令从内存单元读入指令队列。它们采用“先进先出”原则,按顺序存放,并按顺序取到EU中去执行。
(2) 执行单元EU:
不与系统外部直接相连,它的功能只是负责执行指令。
执行的指令从BIU的指令队列缓冲器中直接得到
组成:
- 16位算术逻辑单元(ALU):进行算术和逻辑运算。
- 16位标志寄存器FLAGS:存放CPU运算的状态和控制标志。
- 数据暂存寄存器:暂存参加运算的数据
- 通用寄存器:包括4个16位数据寄存器AX、BX、CX、DX 和 4个16位指针与变址寄存器SP、BP与SI、DI。
- EU控制电路
2. 寄存器结构
(1)通用寄存器(四个数据寄存器AX(AH/AL), BX(BH/BL),CX(CH/CL),DX(DH/DL),两个地址指针寄存器(SP,BP)和两个变址寄存器(SI,DI))
数据寄存器AX、BX、CX、DX
注意,8086/8088 CPU的1**4个寄存器除了这4个16位寄存器能分别当作两个8位寄存器来用之外,其它寄存器都不能如此使用。**AX(Accumulator)称为累加器。用该寄存器存放运算结果可使指令简化,提高指令的执行速度。此外,
所有的I/O指令都使用 AX 寄存器与外设端口交换信息。
BX(Base)称为基址寄存器。8086/8088CPU中有两个基址寄存器BX和BP。
BX用来存放操作数在内存中数据段内的偏移地址 BP用来存放操作数在堆栈段内的偏移地址
CX(Counter)称为计数器。在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。
DX(Data)称为数据寄存器。在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数。
(2)变址寄存器SI、DI
SI(Source Index)称为源变址寄存器。DI(Destination Index)称为目的变址寄存器。这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数据段内的偏移地址。当然它们也可以放数据 。
(3)段寄存器 (CS,DS,SS,ES)
(4)控制寄存器
- 1. IP (用户程序不能直接访问 IP )
- 2. FLAGS——标志寄存器。它是一个16位的寄存器,但只用了其中9位,
- 这9位包括**6个状态标志位,3个控制标志位,**如图所示
1. 状态标志位(6位)
- CF(Carry Flag)——进位标志。当进行加减运算时,若最高位发生进位或借位则CF为1,否则为0。通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。
- PF(Parity Flag)——奇偶标志位。(不常用略)
- AF(Auxiliary Flag)——辅助进位标志位 。(不常用略)
- ZF(Zero Flag)——零标志位 。(不常用略)
- SF(Sign Flag)——符号标志位。当运算结果的最高位为1时,SF=1,否则为0
- OF(Overflow Flag)——溢出标志位。当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。用来判断带符号数运算结果是否溢出。
2. 控制标志位(3位)——用来控制CPU的操作,由程序设置或清除
- TF(Trap Flag)——跟踪(陷阱)标志位。是为测试程序的方便而设置。若将TF置1,CPU处于单步工作方式。
- IF(Interrupt Flag)——中断允许标志位。是用来控制可屏蔽中断的控制标志位。若将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求;若IF置0,则禁止CPU接受可屏蔽中断请求信号。
- DF(Direction Flag)——方向标志位。若将DF置1,串操作按减地址方式进行,也就是说,从高地址开始,每操作一次地址自动递减;否则按增地址方式进行。
(5)总线周期的概念(略)
3.8086/8088存储器和 I/O 组织
1. 8086/8088存储器组织
8086/8088有20条地址线,可直接对1 M个存储单元进行访问。每个存储单元存放一个字节型数据,且每个存储单元都有一个20位的地址,这1 M个存储单元对应的地址为00000H~FFFFFH
2. 逻辑地址与物理地址
- 我们把通过段地址和偏移地址来表示的存储单元的地址称为逻辑地址,
- 记为:段地址:偏移地址。
- 我们把CPU对存储器进行访问时实际寻址所使用的20位地址称为物理地址。
注意:1. 对某一个存储单元而言,它有惟一的物理地址,但由于8086/8088允许段与段之间的重叠,因此,存储单元的逻辑地址不是惟一的,即一个存储单元只有惟一确定的物理地址,但可以有一个或多个逻辑地址。
2.因此在8088系统的存储器中,字型数据需要两次访问存储器才能完成读/写操作。
3.8086/8088的I/O组织
8086/8088系统和外部设备之间是通过I/O接口电路来联系的。每个I/O接口都有一个或几个端口。在微机系统中每个端口分配一个地址号,称为端口地址。一个端口通常为I/O接口电路内部的一个寄存器或一组寄存器。