《微机第3章讲义》由会员分享,可在线阅读,更多相关《微机第3章讲义(231页珍藏版)》请在金锄头文库上搜索。
1、第3章 80x86微处理器,3.1 80x86微处理器简介 3.2 8086/8088微处理器 3.3 8086/8088存储器和I/O组织 3.4 从80286到Pentium系列的技术发展,3.1 80x86微处理器简介,80x86微处理器是美国Intel 公司生产的系列微处理器。 本节简要介绍Intel公司80x86系列微处理器的发展过程及其特性。 80x86系列微处理器概况。,“集成度”是指CPU芯片中所包含的晶体管数。 “主频”是指芯片所使用的主时钟频率,它直接影响计算机的运行速度。 “数据总线”是计算机中各个组成部件间进行数据传送时的公共通道,显然,数据总线位数越多,数据交换的速度
2、就越快。 “内数据总线宽度” 与“外数据总线宽度”,“地址总线”是在对存储器或I/O端口进行访问时,传送CPU要访问的存储单元或I/O端口的地址信息的总线,其宽度决定了处理器能直接访问的主存容量大小。 如8086有20根地址线,使用这20根地址线上不同地址信息的组合,可直接对220=1M个存储单元进行访问;Pentium II有36根地址线,因此它可直接寻址的最大地址范围为236=64G。,高速缓冲存储器Cache的使用,大大减少了CPU读取指令和操作数所需的时间,使CPU的执行速度显著提高。 为了满足微型计算机对存储器系统高速度、大容量、低成本的要求,微机系统常采用三级存储器组织结构,即由高
3、速缓冲存储器Cache、主存和外存组成。,表3.1 80x86系列微处理器概况,图3.1 存储器三级结构,当前正在执行的程序或要使用的数据必须从外存调入主存后才能被CPU读取并执行,主存容量通常为MB级(理论上可达GB级,如Pentium II可配置的内存最大容量可达236=64G,但事实上,微型计算机内存配置一般都不会达到其理论允许值); 当前没有使用的程序可存入外存,如硬盘、软盘、光盘等,外存的容量通常很大,可达GB甚至TB级; 高速缓冲存储器的最大特点是存取速度快,但容量较小,通常为KB级,将当前使用频率较高的程序和数据通过一定的替换机制从主存放入Cache,,高速缓冲存储器的最大特点是
4、存取速度快,但容量较小,通常为KB级,将当前使用频率较高的程序和数据通过一定的替换机制从主存放入Cache. CPU在取指令或读取操作数时,同时对Cache和主存进行访问,如果Cache命中,则终止对主存的访问,直接从Cache中将指令或数据送CPU处理,由于Cache的速度比主存快得多,因此,Cache的使用大大提高了CPU读取指令或数据的速度。,80386及之前的CPU都没有Cache。与80386 配套使用的Intel 82385 Cache 控制器实现CPU之外的Cache管理。80486之后的CPU芯片内部都集成了一至多个Cache。 80x86CPU在发展过程中,存储器的管理机制发
5、生了较大变化。8086/8088CPU对存储器的管理采用的是分段的实方式;80286CPU除了可在实方式下工作外,还可以在保护方式下工作;而80386CPU之后的处理器则具有三种工作方式:实方式、保护方式和虚拟8086方式。,在保护方式下,机器可提供虚拟存储管理和多任务管理机制。虚拟存储的实现,为用户提供了一个比实际主存空间大得多的程序地址空间,从而可使用户程序的大小不受主存空间的限制。多任务管理机制的实现,可允许多个用户或一个用户的多个任务同时在机器上运行。 从80386开始,微处理器除支持实方式和保护方式外,又增加了一种虚拟8086方式。在这种方式下,一台机器可以同时模拟多个8086处理器
6、的工作。,3.2 8086/8088微处理器,8086是Intel系列的16位微处理器。 8086有16条数据总线,可以处理8位或16位数据。 有20条地址总线,可以直接寻址1M(220)字节的存储单元和64K个I/O端口。 在8086推出后不久,Intel公司很快推出了8088微处理器,其指令系统与8086完全兼容,CPU内部结构仍为16位,但外部数据总线是8位的,这样设计的目的主要是为了与原有的8位外围接口芯片兼容。,3.2.1 8086/8088内部结构 1总线接口单元BIU 2执行单元EU 一总线接口单元BIU 总线接口单元BIU的功能是负责完成CPU与存储器或I/O设备之间的数据传送
7、。具体任务是: 指令队列出现空字节时,从内存取出后续指令。BIU取指令时,不影响EU的执行,两者并行工作,提高了CPU的速度 EU需要和内存或外设端口交换数据时, 由BIU根据EU给出的地址与内存或外设端口交换数据,图3.2 8086CPU内部结构框图,20位地址加法器 8086/8088CPU在对存储单元进行访问以读取指令或读/写操作数时,必须在地址总线上提供20位的地址信息,以便选中对应的存储单元。 CPU提供的用来对存储单元进行访问的20位地址是由BIU中的地址加法器产生的。,存储器中每个存储单元的地址可有以下两种表示方式: 逻辑地址:表示为“16位段地址: 16位段内偏移地址”。 物理
8、地址:CPU与存储器进行数据交换时在地址总线上提供的20位地址信息称为物理地址。由逻辑地址求物理地址的公式为: 物理地址=段地址10H+段内偏移地址,图3.3 物理地址的形成,指令队列缓冲器 8086的指令队列有6个字节,8088的指令队列有4个字节。对8086而言,当指令队列出现2个空字节,对8088而言,指令队列出现1个空字节时,BIU就自动执行一次取指令周期,将下一条要执行的指令从内存单元读入指令队列。它们采用“先进先出”原则,按顺序存放,并按顺序取到EU中去执行。 指令队列的引入使得EU和BIU可并行工作,提高了CPU的利用率,加快了整机的运行速度。,二执行单元EU 执行单元EU的功能
9、只是负责执行指令。执行的指令从BIU的指令队列缓冲器中直接得到,执行指令时若需要从存储器或I/O端口读取操作数时,由EU向BIU发出请求,再由BIU对存储器或I/O端口进行访问。,8088CPU内部结构与8086基本相似,所以两种CPU完全兼容。区别仅在于总线接口单元BIU的差异: 1外部数据总线位数不同。 2指令队列缓冲器大小不同。 3. 部分引脚的功能定义有所区别。,3.2.2 8086/8088寄存器结构,一通用寄存器 通用寄存器包括四个数据寄存器,两个地址指针寄存器和两个变址寄存器。 1数据寄存器AX、BX、CX、DX 数据寄存器一般用于存放参与运算的操作数或运算结果。每个数据寄存器都
10、是16位的,但又可将高、低8位分别作为两个独立的8位寄存器来用。高8位分别记作AH、BH、CH、DH,低8位分别记作AL,BL,CL,DL。其它寄存器都不能如此使用。,上述4个寄存器一般用来存放数据,但它们各自都有自己的特定用途: AX(Accumulator)称为累加器。所有的I/O指令和乘除指令都要使用该寄存器。 BX(Base)称为基址寄存器。BX可以用来存放操作数在内存中数据段内的偏移地址。,CX(Counter)称为计数器。在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。 DX(Data)称为数据寄存器。在寄存器间接寻址的I/O指令中存放I/O端
11、口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数。,2. 地址指针寄存器SP、BP SP(Stack Pointer)称为堆栈指针寄存器。其始终存储栈顶的偏移地址。 BP(Base Pointer)称为基址寄存器。作为通用寄存器,它可以用来存放数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址。,3.变址寄存器SI、DI SI(Source Index)称为源变址寄存器。DI(Destination Index)称为目的变址寄存器。这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在数据段内的偏移地址,DI存放目的串在附加数
12、据段内的偏移地址。,二 .段寄存器 为了对1M个存储单元进行管理,8086/8088对存储器进行分段管理,即将程序代码或数据分别放在代码段、数据段、堆栈段或附加数据段中,每个段最多可达64K个存储单元。段地址分别放在对应的段寄存器中,代码或数据在段内的偏移地址由有关寄存器或立即数给出。8086/8088的四个段寄存器分别为: CS(Code Segment)称为代码段寄存器,用来存储程序当前使用的代码段的段地址。CS的内容左移四位再加上指令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址。,DS(Data Segment)称为数据段寄存器,用来存放程序当前使用的数据段的段地址。D
13、S的内容左移四位再加上按指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址。 SS(Stack Segment)称为堆栈段寄存器,用来存放程序当前所使用的堆栈段的段地址。堆栈是存储器中开辟的按先进后出原则组织的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场。 ES(Extra Segment)称为附加数据段寄存器,用来存放程序当前使用的附加数据段的段地址。附加数据段用来存放字符串操作时的目的字符串。,表3.2 8086/8088段寄存器与提供段内移地址的 寄存器之间的默认组合,三. 控制寄存器 IP(Instruction Pointer)称为指令
14、指针寄存器,用来存放下一条要读取的指令在代码段内的偏移地址。 IP在程序运行中能自动加1修正,从而使其始终存放的是下一条要读取的指令在代码段的偏移地址。 程序员不能直接用赋值指令对IP和CS进行修改。有些指令能使IP和CS的值改变(如跳转指令)或使其值压入堆栈或从堆栈中弹出恢复原值(如子程序调用指令和返回指令)。,FLAGS称为标志寄存器,它是一个16位的寄存器,但只用了其中9位,这9位包括6个状态标志位,3个控制标志位,如图3.5所示。,图3.5 8086/8088的标志寄存器,1. 状态标志位 状态标志位用来反映算术和逻辑运算结果的一些特征。下面分别介绍这6个状态标志位的功能。 CF(Ca
15、rry Flag)进位标志。当进行加减运算时,若最高位发生进位或借位则CF为1,否则为0。通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。 PF(Parity Flag)奇偶标志位。当指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。,AF(Auxiliary Flag)辅助进位标志位。当执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有进位或借位,则AF为1,否则为0。 ZF(Zero Flag)零标志位。若当前的运算结果为0,则ZF为1,否则为0。 SF(Sign Flag)符号标志位。当运算结果的最高位为1时,SF=1,否则为0。 OF(Over
16、flow Flag)溢出标志位。当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。用来判断带符号数运算结果是否溢出。,例3.1 设变量x=11101111B,y=11001000B,X=0101101000001010B,Y=01001100 10100011B,请问分别执行x+y和X+Y操作后标志寄存器中各状态位的状态如何?,2. 控制标志位 控制标志位有3个,用来控制CPU的操作,由程序设置或清除。它们是: TF(Trap Flag)跟踪(陷阱)标志位。它是为测试程序的方便而设置的。若将TF置1,8086/8088CPU处于单步工作方式,否则,将正常执行程序。 IF(Interrupt Flag)中断允许标志位。是用来控制可屏蔽中断的控制标志位。若用STI指令将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号;若用CLI指令将IF清0,则禁止CPU接受可屏蔽中断请求信号。IF的状态对非屏蔽中断及内部中断没有影响。,DF(Direction Flag)方向标志位