版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 80 x86微处理器,3.1 80 x86微处理器简介 3.2 8086/8088微处理器 3.3 8086/8088存储器和I/O组织 3.4 从80286到Pentium系列的技术发展,3.1 80 x86微处理器简介,80 x86微处理器是美国Intel 公司生产的系列微处理器。该公司成立于1968年,1969年就设计了4位的4004 芯片,1973年开发出8位的8080芯片,1978年正式推出16位的8086微处理器芯片,由此开始了Intel公司的80 x86系列微处理器的生产历史。本节简要介绍Intel公司80 x86系列微处理器的发展过程及其特性。 表3.1给出了80 x8
2、6系列微处理器概况。下面通过对表中有关技术数据的分析来说明Intel 80 x86系列微处理器的发展情况。,表中“集成度”是指CPU芯片中所包含的晶体管数。 “主频”是指芯片所使用的主时钟频率,它直接影响计算机的运行速度。 “数据总线”是计算机中各个组成部件间进行数据传送时的公共通道,“内数据总线宽度”是指CPU芯片内部数据传送的宽度(位数),“外数据总线宽度”是指CPU与外部交换数据时的数据宽度,显然,数据总线位数越多,数据交换的速度就越快。,“地址总线”是在对存储器或I/O端口进行访问时,传送由CPU提供的要访问的存储单元或I/O端口的地址信息的总线,其宽度决定了处理器能直接访问的主存容量
3、大小。如8086有20根地址线,使用这20根地址线上不同地址信息的组合,可直接对220=1M个存储单元进行访问;Pentium II有36根地址线,因此它可直接寻址的最大地址范围为236=64G。,高速缓冲存储器Cache的使用,大大减少了CPU读取指令和操作数所需的时间,使CPU的执行速度显著提高。为了满足微型计算机对存储器系统高速度、大容量、低成本的要求,目前,微型计算机系统采用如图3.1所示的三级存储器组织结构,即由高速缓冲存储器Cache、主存和外存组成。,表3.1 80 x86系列微处理器概况,当前正在执行的程序或要使用的数据必须从外存调入主存后才能被CPU读取并执行,主存容量通常为
4、MB级(理论上可达GB级,如Pentium II可配置的内存最大容量可达236=64G,但事实上,基于成本和必要性考虑,目前,微型计算机内存配置一般都不会达到其理论允许值);当前没有使用的程序可存入外存,如硬盘、软盘、光盘等,外存的容量通常很大,可达GB甚至TB级;而高速缓冲存储器的最大特点是存取速度快,但容量较小,通常为KB级,将当前使用频率较高的程序和数据通过一定的替换机制从主存放入Cache,CPU在取指令或读取操作数时,同时对Cache和主存进行访问,如果Cache命中,则终止对主存的访问,直接从Cache中将指令或数据送CPU处理,由于Cache的速度比主存快得多,因此,Cache的
5、使用大大提高了CPU读取指令或数据的速度。,图3.1 存储器三级结构,80386之前的CPU都没有Cache。80386 CPU内无Cache,而由与之配套使用的Intel 82385 Cache 控制器实现CPU之外的Cache管理。80486之后的CPU芯片内部都集成了一至多个Cache。 需要说明的是,80 x86CPU在发展过程中,存储器的管理机制发生了较大变化。8086/8088CPU对存储器的管理采用的是分段的实方式;80286CPU除了可在实方式下工作外,还可以在保护方式下工作;而80386CPU之后的处理器则具有三种工作方式:实方式、保护方式和虚拟8086方式。,在保护方式下,
6、机器可提供虚拟存储管理和多任务管理机制。虚拟存储的实现,为用户提供了一个比实际主存空间大得多的程序地址空间,从而可使用户程序的大小不受主存空间的限制。多任务管理机制的实现,可允许多个用户或一个用户的多个任务同时在机器上运行。 从80386开始,微处理器除支持实方式和保护方式外,又增加了一种虚拟8086方式。在这种方式下,一台机器可以同时模拟多个8086处理器的工作。有关存储器管理机制的详细介绍,请参阅3.4.2 “80 x86存储器管理”一节。,3.2 8086/8088微处理器,8086是Intel系列的16位微处理器。使用HMOS工艺制造,芯片上集成了2.9万个晶体管,用单一的+5V电源供
7、电,封装在标准的40引脚双列直插式管壳内,时钟频率5MHz10MHz。 8086有16条数据总线,可以处理8位或16位数据。有20条地址总线,可以直接寻址1M(220)字节的存储单元和64K个I/O端口。在8086推出后不久,为方便原8位机用户,Intel公司很快推出了8088微处理器,其指令系统与8086完全兼容,CPU内部结构仍为16位,但外部数据总线是8位的,这样设计的目的主要是为了与原有的8位外围接口芯片兼容。并以8088为CPU组成了IBM PC、PC/XT等准16位微型计算机,由于其性能价格比高,很快占领了市场。,3.2.1 8086/8088内部结构 一总线接口单元BIU 总线接
8、口单元BIU的功能是负责完成CPU与存储器或I/O设备之间的数据传送。具体任务是: 指令队列出现空字节(8088CPU 1个空字节,8086CPU 2个空字节)时,从内存取出后续指令。BIU取指令时,并不影响EU的执行,两者并行工作,大大提高了CPU的执行速度。 EU需要从内存或外设端口读取操作数时,根据EU给出的地址从内存或外设端口读取数据供EU使用, EU的运算结果、数据或控制命令等由BIU送往指定的内存单元或外设端口。 总线接口单元内有4个16位段寄存器:代码段寄存器CS(Code Segment)、数据段寄存器DS(Data Segment)、堆栈段寄存器SS(Stack Segmen
9、t)和附加数据段寄存器ES(Extra Segment),一个16位的指令指针寄存器IP(Instruction Pointer),一个20位地址加法器,6字节指令队列缓冲器,一个与EU通讯的内部寄存器以及总线控制电路等。,图3.2 8086CPU内部结构框图,1段寄存器 8086CPU的地址引脚有20根,能提供20位的地址信息,可直接对1M个存储单元进行访问,但CPU内部可用来提供地址信息的寄存器都是16位的,那么如何用16位寄存器实现20位地址的寻址呢?8086/8088采用了段结构的内存管理的方法。 将指令代码和数据分别存储在代码段、数据段、堆栈段、附加数据段中,这些段的段地址分别由段寄
10、存器CS、DS、SS、ES提供,而代码或数据在段内的偏移地址则由有关寄存器或立即数给出。,代码段寄存器CS存储程序当前使用的代码段的段地址。代码段用来存放程序的指令代码。下一条要读取指令在代码段中的偏移地址由指令指针寄存器IP提供;数据段寄存器DS用来存放程序当前使用的数据段的段地址。一般来说,程序中所用到的原始数据、中间结果以及最终结果都存放在数据段中,如果程序中使用了字符串处理指令,则源字符串也存放在数据段中;堆栈段寄存器SS用来存放程序当前所使用的堆栈段的段地址。堆栈是在存储器中开辟的一个特定区域,详见3.3.4 “堆栈操作”一节。附加数据段寄存器ES用来存放程序当前使用的附加数据段的段
11、地址。附加数据段通常用于存放字符串操作时的目的字符串。 程序员在编写汇编语言源程序时,应该按照上述规定将程序的各个部分放在规定的段内。每个源程序必须至少有一个代码段,而数据段、堆栈段和附加数据段则根据程序的需要决定是否设置。,2指令指针寄存器 指令指针寄存器IP用来存放下一条要读取的指令在代码段中的偏移地址。IP在程序运行中能自动加1修正,从而使其始终存放的是下一条要读取的指令在代码段的偏移地址。由于CS和IP的内容决定了程序的执行顺序,因此程序员不能直接用赋值指令对其内容进行修改。有些指令能使IP和CS的值改变(如跳转指令)或使其值压入堆栈或从堆栈中弹出恢复原值(如子程序调用指令和返回指令)
12、。,320位地址加法器 8086/8088CPU在对存储单元进行访问以读取指令或读/写操作数时,必须在地址总线上提供20位的地址信息,以便选中对应的存储单元。那么,CPU是如何产生20位地址的呢? CPU提供的用来对存储单元进行访问的20位地址是由BIU中的地址加法器产生的。,存储器中每个存储单元的地址可有以下两种表示方式: 逻辑地址:其表达形式为“段地址:段内偏移地址”。段内偏移地址又称为“有效地址EA(Effective Address)。在读指令时,段地址由代码段寄存器CS提供,当前要读取指令在代码段中的偏移地址由指令指针寄存器IP提供;在读取或存储操作数时,根据具体操作,段地址由DS、
13、ES或SS提供,段内偏移地址由指令给出。,物理地址:CPU与存储器进行数据交换时在地址总线上提供的20位地址信息称为物理地址。物理地址的形成过程如图3.3所示。当由IP提供或由EU根据指令所提供寻址方式计算出寻址单元的16位段内偏移地址后,把该偏移地址和段寄存器内容左移四位后(相当于乘以10H)得到的段基址(段内第一个存储单元的物理地址)同时送到BIU中的地址加法器,形成一个20位的物理地址,从而实现对存储单元的访问。由逻辑地址求物理地址的公式为: 物理地址=段地址10H+段内偏移地址 如假设当前(CS)=20A8H,(IP)=2008H,那么,下一条从内存中读取的指令所在存储单元的物理地址为
14、:20A8H10H+ 2008H=22A88H。,图3.3 物理地址的形成,4. 指令队列缓冲器 8086的指令队列有6个字节,8088的指令队列有4个字节。对8086而言,当指令队列出现2个空字节,对8088而言,指令队列出现1个空字节时,BIU就自动执行一次取指令周期,将下一条要执行的指令从内存单元读入指令队列。它们采用“先进先出”原则,按顺序存放,并按顺序取到EU中去执行。 当EU执行一条需要到存储器或I/O端口读取操作数的指令时,BIU将在执行完现行取指令的存储器周期后的下一个存储周期,对指令所指定的存储单元或I/O端口进行访问,读取的操作数经BIU送EU进行处理。当EU执行跳转、子程
15、序调用或返回指令时,BIU就使指令队列复位,并从指令给出的新地址开始取指令,新取的第1条指令直接经指令队列送EU执行,随后取来的指令将填入指令队列缓冲器。,指令队列的引入使得EU和BIU可并行工作,即BIU在读指令时,并不影响EU单元执行指令,EU单元可以连续不断地直接从指令队列中取到要执行的指令代码,从而减少了CPU为取指令而等待的时间,提高了CPU的利用率,加快了整机的运行速度。,二执行单元EU 执行单元EU不与系统外部直接相连,它的功能只是负责执行指令。执行的指令从BIU的指令队列缓冲器中直接得到,执行指令时若需要从存储器或I/O端口读取操作数时,由EU向BIU发出请求,再由BIU对存储
16、器或I/O端口进行访问。EU由下列部件组成: 1. 16位算术逻辑单元(ALU):用于进行算术和逻辑运算。 2. 16位标志寄存器FLAGS:用来存放CPU运算的状态特征和控制标志。 3. 数据暂存寄存器:协助ALU完成运算,暂存参加运算的数据。,4.通用寄存器:包括4个16位数据寄存器AX、BX、CX、DX和4个16位指针与变址寄存器SP、BP与SI、DI。 5. EU控制电路:它是控制、定时与状态逻辑电路,接收从BIU中指令队列取来的指令,经过指令译码形成各种定时控制信号,对EU的各个部件实现特定的定时操作。 8088CPU内部结构与8086基本相似,两者的执行单元EU完全相同,其指令系统
17、,寻址方式及程序设计方法都相同,所以两种CPU完全兼容。区别仅在于总线接口单元BIU,归纳起来主要有以下几个方面的差异:,1外部数据总线位数不同。8086外部数据总线16位,在一个总线周期内可以输入/输出一个字(16位数据),而8088外部数据总线8位,在一个总线周期内只能输入/输出一个字节(8位数据)。 2指令队列缓冲器大小不同。8086指令队列可容纳6个字节,且在每一个总线周期中从存储器取出2个字节的指令代码填入指令队列;而8088指令队列只能容纳4个字节,在一个机器周期中取出一个字节的指令代码送指令队列。 3.部分引脚的功能定义有所区别。,3.2.2 8086/8088寄存器结构,图3.
18、4 8086/8088CPU内部寄存器结构,一通用寄存器 通用寄存器包括四个数据寄存器,两个地址指针寄存器和两个变址寄存器。 1数据寄存器AX、BX、CX、DX 数据寄存器一般用于存放参与运算的操作数或运算结果。每个数据寄存器都是16位的,但又可将高、低8位分别作为两个独立的8位寄存器来用。高8位分别记作AH、BH、CH、DH,低8位分别记作AL,BL,CL,DL。例如AX可当作两个8位寄存器AH、AL使用。注意,8086/8088 CPU的14个寄存器除了这4个16位寄存器能分别当作两个8位寄存器来用之外,其它寄存器都不能如此使用。,上述4个寄存器一般用来存放数据,但它们各自都有自己的特定用
19、途: AX(Accumulator)称为累加器。用该寄存器存放运算结果可使指令简化,提高指令的执行速度。此外,所有的I/O指令都使用该寄存器与外设端口交换信息。 BX(Base)称为基址寄存器。8086/8088CPU中有两个基址寄存器BX和BP。BX用来存放操作数在内存中数据段内的偏移地址,BP用来存放操作数在堆栈段内的偏移地址。,CX(Counter)称为计数器。在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。 DX(Data)称为数据寄存器。在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,
20、其中DX存放高16位数。,2. 地址指针寄存器SP、BP SP(Stack Pointer)称为堆栈指针寄存器。在使用堆栈操作指令(PUSH或POP)对堆栈进行操作时,每执行一次进栈或出栈操作,系统会自动将SP的内容减2或加2,以使其始终指向栈顶。 BP(Base Pointer)称为基址寄存器。作为通用寄存器,它可以用来存放数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址。,3.变址寄存器SI、DI SI(Source Index)称为源变址寄存器。DI(Destination Index)称为目的变址寄存器。这两个寄存器通常用在字符串操作时存放操作数的偏移地址,其中SI存放源串在
21、数据段内的偏移地址,DI存放目的串在附加数据段内的偏移地址。,二 .段寄存器 为了对1M个存储单元进行管理,8086/8088对存储器进行分段管理,即将程序代码或数据分别放在代码段、数据段、堆栈段或附加数据段中,每个段最多可达64K个存储单元。段地址分别放在对应的段寄存器中,代码或数据在段内的偏移地址由有关寄存器或立即数给出。8086/8088的四个段寄存器分别为: CS(Code Segment)称为代码段寄存器,用来存储程序当前使用的代码段的段地址。CS的内容左移四位再加上指令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址。,DS(Data Segment)称为数据段寄存器
22、,用来存放程序当前使用的数据段的段地址。DS的内容左移四位再加上按指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址。 SS(Stack Segment)称为堆栈段寄存器,用来存放程序当前所使用的堆栈段的段地址。堆栈是存储器中开辟的按先进后出原则组织的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场。 ES(Extra Segment)称为附加数据段寄存器,用来存放程序当前使用的附加数据段的段地址。附加数据段用来存放字符串操作时的目的字符串。,表3.2 8086/8088段寄存器与提供段内移地址的 寄存器之间的默认组合,三. 控制寄存器 IP(Ins
23、truction Pointer)称为指令指针寄存器,用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。 FLAGS称为标志寄存器,它是一个16位的寄存器,但只用了其中9位,这9位包括6个状态标志位,3个控制标志位,如图3.5所示。,图3.5 8086/8088的标志寄存器,1. 状态标志位 状态标志位用来反映算术和逻辑运算结果的一些特征。如结果是否为“0”,是否有进位、借位、溢出等。不同指令对状态标志位的影响是不同的。下面分别介绍这6个状态标志位的功能。 CF(Carry Flag)进位标志。当进行加减运算时,若最高位发生进位或借位则CF为1,否则为0。通常用于判断无
24、符号数运算结果是否超出了计算机所能表示的无符号数的范围。 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(Overflow Flag)溢出标志位。当运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0
25、。用来判断带符号数运算结果是否溢出。,例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置
26、1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号;若用CLI指令将IF清0,则禁止CPU接受可屏蔽中断请求信号。IF的状态对非屏蔽中断及内部中断没有影响。,DF(Direction Flag)方向标志位。若用STD将DF置1,串操作按减地址方式进行,也就是说,从高地址开始,每操作一次地址自动递减;若用CLD将DF清0,则串操作按增地址方式进行,即每操作一次地址自动递增。 注意:有关寄存器,尤其是在存储器寻址时用来存放操作数在段内偏移地址的地址寄存器和标志寄存器中各控制标志位的使用方法,将在后续章节中涉及到时还将进一步详细介绍,请读者务必熟练掌握。,3.2.3 总线周期的概念
27、为了便于对8086/8088CPU引脚功能的说明,本节简要介绍总线周期的概念。 8086/8088CPU在与存储器或I/O端口交换数据时需要启动一个总线周期。按照数据的传送方向来分,总线周期可分为“读”总线周期(CPU从存储器或I/O端口读取数据)和“写”总线周期(CPU将数据写入存储器或I/O端口)。,8086/8088CPU基本的总线周期由4个时钟周期组成,如图3.6所示。时钟周期是CPU的基本时间计量单位,由CPU主频决定,如8086的主频为5MHz,1个时钟周期就是200ns。一个时钟周期又称为一个T状态,因此基本总线周期用T1、T2、T3、T4表示。图3.6(a)给出典型的总线周期波
28、形图。在T1状态CPU把要读/写的存储单元的地址或I/O端口的地址放到地址总线上。若是“写”总线周期,CPU从T2起到T4,把数据送到总线上,并写入存储器单元或I/O端口;若是“读”总线周期,CPU则从T3起到T4从总线上接收数据,T2状态时总线浮空,允许CPU有个缓冲时间把输出地址的写方式转换成输入数据的读方式。,图3.6 8086/8088基本总线周期,图3.6(b)是具有空闲状态的总线周期。如果在一个总线周期之后不立即执行下一个总线周期,即CPU此时执行的指令不需要对存储器或I/O端口进行访问,且目前指令队列满而不需要到内存中读指令,那么系统总线就处于空闲状态,即执行空闲周期。在空闲周期
29、中可包括一个或多个时钟周期,在这期间,在高4位的总线上,CPU仍驱动前一个总线周期的状态信息;而在低16位的总线上,则根据前一个总线周期是读还是写周期来决定。若前一个周期为写周期,CPU会在总线的低16位继续驱动数据信息;若前一个总线周期为读周期,CPU则使总线的低16位处于浮空状态。在空闲周期,尽管CPU对总线进行空操作,但在CPU内部,仍然进行着有效的操作,如执行某个运算、在内部寄存器之间传送数据等。,图3.6(c)是具有等待状态的总线周期。在T3状态结束之前,CPU测试READY信号线,如果为有效的高电平,则说明数据已准备好,可进入T4状态;若READY为低电平,则说明数据没有准备好,C
30、PU在T3之后插入1个或多个等待周期TW,直到检测到READY为有效高电平后,CPU会自动脱离TW而进入T4状态。这种延长总线周期的措施允许系统使用低速的存储器芯片。,3.2.4 8086/8088引脚及其功能,图3.7 8086/8088CPU引脚,8086/8088芯片的引脚应包括20根地址线,16根(8086)或8根(8088)数据线以及控制线、状态线、电源线和地线等,若每个引脚只传送一种信息,那么芯片的引脚将会太多,不利于芯片的封装,因此,8086/8088CPU的部分引脚定义了双重功能。如第33引脚MN / MX上电平的高低代表两种不同的信号;第31到24引脚在CPU处于两种不同的工
31、作方式(最大工作方式和最小工作方式)时具有不同的名称和定义;引脚9到16(8088CPU)及引脚2到16和39(8086CPU)采用了分时复用技术,即在不同的时刻分别传送地址或数据信息等。,一8086CPU 引脚 8086CPU引脚按功能可分为三大类:电源线和地线,地址/数据引脚以及控制引脚。 1电源线和地线 电源线VCC(第40引脚):输入,接入10%单一+5V电源。 地线GND(引脚1和20):输入,两条地线均应接地。,2. 地址/数据(状态)引脚 地址/数据分时复用引脚AD15AD0(Address Data):引脚39及引脚216,传送地址时单向输出,传送数据时双向输入或输出。 地址状
32、态分时复用引脚A19/S6A16/S3(Address / Status):引脚3538,输出、三态总线。采用分时输出,即在T1状态作地址线用,T2T4状态输出状态信息。当访问存储器时,T1状态输出A19A15,与AD15AD0一起构成访问存储器的20位物理地址;CPU访问I/O端口时,不使用这4个引脚,A19A16保持为0。状态信息中的S6为0用来表示8086CPU 当前与总线相连,所以在T2T4状态,S6总为0,以表示CPU当前连在总线上;S5表示中断允许标志位IF的当前设置,IF=1时,S5为1,否则为0;S4S3用来指示当前正在使用哪个段寄存器,如表3.3所示。,表3.3 S4与S3组
33、合代表的正在使用的寄存器,3. 控制引脚 (1) NMI(Non-Maskable Interrupt ):引脚17,非屏蔽中断请求信号,输入,上升沿触发。此请求不受标志寄存器FLAGS中中断允许标志位IF状态的影响,只要此信号一出现,在当前指令执行结束后立即进行中断处理。 (2) INTR(Interrupt Request) :引脚18,可屏蔽中断请求信号,输入,高电平有效。CPU在每个指令周期的最后一个时钟周期检测该信号是否有效,若此信号有效,表明有外设提出了中断请求,这时若IF=1,则当前指令执行完后立即响应中断;若IF=0,则中断被屏蔽,外设发出的中断请求将不被响应。程序员可通过指令
34、STI或CLI将IF标志位置1或清零。,3) 控制引脚 (1) NMI(Non-Maskable Interrupt):引脚17,非屏蔽中断请求信号,输入,上升沿触发。此请求不受标志寄存器FLAGS中中断允许标志位IF状态的影响,只要此信号一出现,在当前指令执行结束后立即进行中断处理。 (2) INTR(Interrupt Request):引脚18,可屏蔽中断请求信号,输入,高电平有效。CPU在每个指令周期的最后一个时钟周期检测该信号是否有效,若此信号有效,表明有外设提出了中断请求,这时若IF=1,则当前指令执行完后立即响应中断;若IF=0,则中断被屏蔽,外设发出的中断请求将不被响应。程序员
35、可通过指令STI或CLI将IF标志位置1或清0。,(3) CLK(Clock):引脚19,系统时钟,输入。它通常与8284A时钟发生器的时钟输出端相连。该时钟信号有效高电平与时钟周期的比为13。 (4) RESET:引脚21,复位信号,输入,高电平有效。复位信号使处理器马上结束现行操作,对处理器内部寄存器进行初始化。8086/8088要求复位脉冲宽度不得小于4个时钟周期。复位后,内部寄存器的状态如表3.4所示。系统正常运行时,RESET保持低电平。,表3.4 复位后内部寄存器的状态,(5) READY:引脚22,数据“准备好”信号线,输入。它实际上是所寻址的存储器或I/O端口发来的数据准备就绪
36、信号,高电平有效。CPU在每个总线周期的T3状态对READY引脚采样,若为高电平,说明数据已准备好;若为低电平,说明数据还没有准备好,CPU在T3状态之后自动插入一个或几个等待状态TW,直到READY变为高电平,才能进入T4状态,完成数据传送过程,从而结束当前总线周期。,(6) :引脚23,等待测试信号,输入。当CPU执行WAIT指令时,每隔5个时钟周期对 引脚进行一次测试。若为高电平,CPU就仍处于空转状态进行等待,直到 引脚变为低电平,CPU结束等待状态,执行下一条指令,以使CPU与外部硬件同步。 (7) (Read):引脚32,读控制信号,输出。当 =0时,表示将要执行一个对存储器或I/
37、O端口的读操作。到底是从存储单元还是从I/O端口读取数据,取决于M/ (8086)或IO/ (8088)信号。,8286为具有三态输出的8位数据总线收发器,用于需要增加驱动能力的系统。在8086系统中需要2片8286,而在8088系统中只用1片就可以了。 系统中还有一个等待状态产生电路,它向8284A的RDY端提供一个信号,经8284A同步后向CPU的READY线发数据准备就绪信号,通知CPU数据已准备好,可以结束当前的总线周期。当READY=0时,CPU在T3之后自动插入TW状态,以避免CPU与存储器或I/O设备进行数据交换时,因后者速度慢而丢失数据。,图3.8 8086最小方式系统结构,(
38、8) HLDA(Hold Acknowledge):引脚30,总线保持响应信号,输出。当CPU接收到HOLD信号后,这时如果CPU允许让出总线,就在当前总线周期完成时,在T4状态发出高电平有效的HLDA信号给以响应。此时,CPU让出总线使用权,发出HOLD请求的总线主设备获得总线的控制权。,图3.9 8086最大方式系统结构,在最大方式下,第2431引脚的功能如下: (1) QS1、QS0(Instruction Queue Status):引脚24、25,指令队列状态信号,输出。QS1、QS0两个信号电平的不同组合指明了8086/8088内部指令队列的状态,其代码组合对应的含义如表3.6所示
39、。,表3.6 QS1、QS0的代码组合对应的含义,48088与8086引脚的区别 8088与8086绝大多数引脚的名称和功能是完全相同的,仅有以下三点不同: (1) AD15AD0的定义不同。在8086中都定义为地址/数据分时复用引脚;而在8088中,由于只需要8条数据线,因此,对应于8086的AD15AD8这8根引脚在8088中定义为A15A8,它们在8088中只做地址线用。 (2) 引脚34的定义不同。在最大方式下,8088的第34引脚保持高电平,而8086在最大方式下34引脚的定义与最小方式下相同。,3.3 8086/8088存储器和I/O组织,3.3.1 8086/8088存储器组织
40、18086/8088存储空间 8086/8088有20条地址线,可直接对1 M个存储单元进行访问。每个存储单元存放一个字节型数据,且每个存储单元都有一个20位的地址,这1 M个存储单元对应的地址为00000HFFFFFH,如图3.10所示。 一个存储单元中存放的信息称为该存储单元的内容。如图3.10所示,00001H单元的内容为9FH,记为:(00001H)=9FH。,图3.10 数据在存储器中的存放,若存放的是字型数据(16位二进制数),则将字的低位字节存放在低地址单元,高位字节存放在高地址单元。如从地址0011FH开始的两个连续单元中存放一个字型数据,则该数据为DF46H,记为:(0011
41、FH)=DF46H。 若存放的是双字型数据(32位二进制数,这种数一般作为地址指针,其低位字是被寻址地址的偏移量,高位字是被寻址地址所在段的段地址),这种类型的数据要占用连续的4个存储单元,同样,低字节存放在低地址单元,高字节存放在高地址单元。如从地址E800AH开始的连续4个存储单元中存放了一个双字型数据,则该数据为66A65E65H,记为:(E800AH)=66A65E65H。,2存储器的段结构 8086/8088 CPU中有关可用来存放地址的寄存器如IP、SP等都是16位的,故只能直接寻址64 KB。为了对1 M个存储单元进行管理,8086/8088采用了段结构的存储器管理方法。 808
42、6/8088将整个存储器分为许多逻辑段,每个逻辑段的容量小于或等于64 KB,允许它们在整个存储空间中浮动,各个逻辑段之间可以紧密相连,也可以互相重叠。 用户编写的程序(包括指令代码和数据)被分别存储在代码段、数据段、堆栈段和附加数据段中,这些段的段地址分别存储在段寄存器CS、DS、SS和ES中,而指令或数据在段内偏移地址可由对应的地址寄存器或立即数给出,如表3.8所示。,表3.8 存储器操作时段地址和段内偏移地址的来源,如果从存储器中读取指令,则段地址来源于代码段寄存器CS,偏移地址来源于指令指针寄存器IP。 如果从存储器读/写操作数,则段地址通常由数据段寄存器DS提供(必要时可通过指令前缀
43、实现段超越,将段地址指定为由CS、ES或SS提供),偏移地址则要根据指令中所给出的寻址方式确定,这时,偏移地址通常由寄存器BX、SI、DI以及立即数等提供,这类偏移地址也被称为“有效地址”(EA)。如果操作数是通过基址寄存器BP寻址的,则此时操作数所在段的段地址由堆栈段段寄存器SS提供(必要时也可指定为CS、SS或ES)(详见第4章“寻址方式”一节)。,如果使用堆栈操作指令(PUSH或POP)进行进栈或出栈操作,以保护断点或现场,则段地址来源于堆栈段寄存器SS,偏移地址来源于堆栈指针寄存器SP(详见本节“4. 堆栈操作”)。 如果执行的是字符串操作指令,则源字符串所在段的段地址由数据段寄存器D
44、S提供(必要时可指定为CS、ES或SS),偏移地址由源变址寄存器SI提供;目的字符串所在段的段地址由附加数据段寄存器ES提供,偏移地址由目的变址寄存器DI提供。 以上这些存储器操作时段地址和偏移地址的约定是由系统设计时事先已规定好的,编写程序时必须遵守这些约定。,3逻辑地址与物理地址 由于采用了存储器分段管理方式,8080/8088 CPU在对存储器进行访问时,根据当前的操作类型(取指令或存取操作数)以及读取操作数时指令所给出的寻址方式,CPU就可确定要访问的存储单元所在段的段地址以及该单元在本段内的偏移地址(如表3.8所示)。我们把通过段地址和偏移地址来表示的存储单元的地址称为逻辑地址,记为
45、:段地址:偏移地址。 CPU在对存储单元进行访问时,必须在20位的地址总线上提供一个20位的地址信息,以便选中所要访问的存储单元。我们把CPU对存储器进行访问时实际寻址所使用的20位地址称为物理地址。,物理地址是由CPU内部总线接口单元BIU中的地址加法器根据逻辑地址产生的。由逻辑地址形成20位物理地址的方法为:段地址10H+偏移地址。其形成过程如图3.3所示。 图3.11给出了存储器分段示意。如果当前的(IP)=1000H,那么,下一条要读取的指令所在存储单元的物理地址为: (CS)10H+(IP)=1000H10H+1000H=11000H 如果某操作数在数据段内的偏移地址为8000H,则
46、该操作数所在存储单元的物理地址为 (DS)10H+8000H=2A0FH10H+8000H=320F0H,图3.11 存储器分段示意图,4堆栈操作 堆栈是在存储器中开辟的一个特定区域。堆栈在存储器中所处的段称为堆栈段,和其他逻辑段一样,它可在1 MB的存储空间中浮动,其容量可达64 KB。开辟堆栈的目的主要有以下两点: (1) 存放指令操作数(变量)。此时,由于操作数在堆栈段中,对操作数进行访问时,段地址自然由堆栈段寄存器SS来提供,操作数在该段内的偏移地址由基址寄存器BP来提供。,(2) 保护断点和现场。此为堆栈的主要功能。所谓保护断点,是指主程序在调用子程序或执行中断服务程序时,为了使执行
47、完子程序或中断服务程序后能顺利返回主程序,必须把断点处的有关信息(如代码段寄存器CS的内容(需要时)、指令指针寄存器IP的内容以及标志寄存器FLAGS的内容等)压入堆栈,执行完子程序或中断服务程序后按“先进后出”的原则将其弹出堆栈,以恢复有关寄存器的内容,从而使主程序能从断点处继续往下执行。保护断点的操作由系统自动完成,不需要程序员干预。,保护现场是指将在子程序或中断服务程序中用到的寄存器的内容压入堆栈,在返回主程序之前再将其弹出堆栈,以恢复寄存器原有的内容,从而使其返回后主程序能继续正确执行。保护现场的工作要求程序员在编写子程序或中断服务程序时使用进栈指令PUSH和出栈指令POP完成。有关P
48、USH和POP指令的使用方法将在第4章“8086/8088指令系统”一节中介绍。,下面简要介绍进栈和出栈操作的过程。在执行进栈和出栈操作时,段地址由堆栈段寄存器SS提供,段内偏移地址由堆栈指针寄存器SP提供,SP始终指向栈顶,当堆栈空时,SP指向栈底。如图3.12所示,设在存储器中开辟了100H个存储单元的堆栈段,当前(SS)=2000H,堆栈空时(SP)=0100H,即此时SP指向栈底(如图3.12(a)所示)。由于PUSH和POP指令要求操作数为字型数据,因此,每进行一次进栈操作,SP值减2(如图3.12(b)所示),每进行一次出栈操作,SP值加2(如图3.12(c)所示)。在进栈和出栈操
49、作过程中,SP始终指向栈顶。,图3.12 进栈与出栈操作示意图,图3.13 8086存储器高低位库的连接,表3.9 8086存储器高低位库选择,图3.14 从8086存储器的偶数和奇数地址读字节和字 读偶地址单元中的字节;(b) 读奇地址单元中的字节; (c) 读偶地址单元中的字;(d) 读奇地址单元中的字,在8088系统中,可直接寻址的存储空间同样也是1 MB,但其存储器的结构与8086有所不同,它的1MB 存储空间同属于一个单一的存储体,即存储体为1 M8位。它与总线之间的连接方式很简单,其20根地址线A19A0与8根数据线分别与8088 CPU对应的地址线和数据线相连。8088 CPU每
50、访问一次存储器只能读/写一个字节信息,因此在8088系统的存储器中,字型数据需要两次访问存储器才能完成读/写操作。,3.3.2 8086/8088的I/O组织 8086/8088系统和外部设备之间是通过I/O接口电路来联系的。每个I/O接口都有一个或几个端口。在微机系统中每个端口分配一个地址号,称为端口地址。一个端口通常为I/O接口电路内部的一个寄存器或一组寄存器。,8086 CPU对I/O设备的读/写操作与对存储器的读/写操作类似。当CPU与偶地址的I/O设备实现16位数据的存取操作时,可在一个总线周期内完成;当CPU 与奇地址的I/O设备实现16位数据的存取操作时,要占用两个总线周期才能完
51、成。 需要说明的是,8086/8088 CPU的I/O指令可以用16位的有效地址A15A0来寻址0000FFFFH共64 K个端口,但IBM PC系统中只使用了A9A0 10位地址来作为I/O端口的寻址信号,因此,其I/O端口的地址仅为000 3FFH共1K个。,3.4 从80286到Pentium系列的技术发展,3.4.1 80 x86寄存器组 寄存器在计算机中起着非常重要的作用,每个寄存器相当于运算器中的一个存储单元,但由于寄存器位于CPU内部,对它们进行访问时不需要启动一个总线周期,因此其存取速度要比存储器快得多。寄存器用来存放计算过程中所需要的或所得到的各种信息,包括操作数地址、操作数
52、以及运算的中间结果等。,对程序设计人员来讲,了解CPU内部寄存器结构并掌握其使用方法是进行汇编语言程序设计的关键和基础。寄存器可分为程序可见寄存器和程序不可见寄存器两大类。所谓程序可见寄存器,是指在汇编语言程序设计中可以通过指令来访问的寄存器。程序不可见寄存器是指一般用户程序中不能访问而由系统所使用的寄存器。本节将从程序设计角度介绍80 x86 CPU内部程序可见寄存器的结构和使用方法,而对于那些程序不可见寄存器将在随后介绍CPU结构时对其做必要说明。,从本章3.2.2节“8086/8088寄存器结构”中可以看出,8086/8088 CPU中程序可见寄存器可分为三类:通用寄存器、段寄存器和控制
53、寄存器。80286之后的CPU中寄存器同样也分为上述三类,只不过有关寄存器的功能和位数有所扩充而已。图3.15给出了80 x86的程序可见寄存器组,下面分别加以说明。,1通用寄存器,对于80386及其后续机型则是图3.15中所示的完整的寄存器,它们是32位的通用寄存器,包括EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI。这些寄存器可以用来存放不同宽度的数据。其中,EAX、EBX、ECX和EDX可作为32位寄存器来用,其低16位既可作为一个16位寄存器来用(分别记为AX、BX、CX和DX),也可作为两个8位寄存器来用(分别记为AH/AL、BH/BL、CH/CL和DH/DL);ES
54、P、EBP、ESI和EDI可作为32位寄存器来用,其低16位也可用做一个16位寄存器(分别记为SP、BP、SI和DI)。需要注意的是,这些寄存器以字节或字的形式被访问时,不被访问的其他部分不受影响。如访问AH时,EAX的高16位和低8位不受影响。,图3.15 80 x86 CPU内部程序可见寄存器组,此外,在8086/8088以及80286进行存储器寻址时,8个通用寄存器中只有地址指针寄存器(SP和BP)、变址寄存器(SI和DI)以及基址寄存器BX这5个寄存器可以用来存放操作数在存储器段内的偏移地址。在80386及其后续机型中,所有这8个32位通用寄存器既可以存放数据,也可以存放地址,也就是说
55、,这些寄存器都可以用来提供操作数在段内的偏移地址。 对于这8个通用寄存器的专用特性,80386及其后续机型的32位通用寄存器的专用特性与8086/8088以及80286的16位通用寄存器的专用特性是相同的,如ECX的计数特性,ESI和EDI分别作为字符串操作指令中源串和目的串的地址寄存器等。,2控制寄存器 8086/8088和80286的控制寄存器包括指令寄存器IP和FLAGS两个16位寄存器。80286中的这两个寄存器与前面介绍的8086/8088中相同,只不过80286中的标志寄存器FLAGS比8086/8088中的FLAGS多定义了两个标志,如图3.16所示。 80386及其后续机型也有
56、两个32位专用寄存器EIP和EFLAGS。它们的作用与相应的16位寄存器相同。标志寄存器FLAGS各位的定义如图3.16所示,其中新定义位的作用将在后面涉及时介绍。,图3.16 80 x86标志寄存器,3段寄存器 与8086/8088 CPU相同,80286 CPU中也有4个段寄存器CS、DS、SS和ES,它们的功能在本章前面“8086/8088寄存器结构”一节中已做了详细介绍,在此不再赘述。 在80386及其以后的80 x86 CPU中,除上述4个段寄存器外,又增加了2个段寄存器FS和GS,它们也是附加的数据段寄存器,如图3.15所示。 除非专门指定,一般情况下,各段在存储器中的分配是由操作
57、系统负责的。在80 x86中,段寄存器和与其对应存放偏移地址的寄存器之间有一种默认的组合关系,这种默认关系,80286与8086/8088相同(见表3.2),80386及其后续CPU中段寄存器与提供段内偏移地址的寄存器之间的默认组合如表3.10所示。,表3.10 80386及其后续CPU中段寄存器与提供段内偏移地址 的寄存器之间的默认组合,3.4.2 80 x86存储器管理 存储器管理是由微处理器的存储器管理部件MMU提供的对系统存储器资源进行管理的机制,其目的是方便程序对存储器的应用。本节从应用角度出发,介绍80 x86系列微处理器的存储器管理机制。 从8086/8088到Pentium,8
58、0 x86系列微处理器的存储器管理机制有了较大变化。8086/8088只有一种存储器管理方式,即实地址方式(简称实方式);80286 CPU具有两种工作方式,即实方式和保护虚地址方式(简称保护方式);80386及其以后的CPU有三种工作方式,即实方式、保护方式和虚拟8086方式。,1实地址方式(简称实方式) 实方式是80 x86系列CPU共有的存储器管理模式,而8086/8088 CPU只能工作在此方式下,正如3.3节所介绍的那样,8086/8088 CPU通过对存储器分段来实现对1 M个存储器单元的直接访问。CPU中BIU单元的地址加法器根据指令中给出的段地址和段内偏移地址,通过将段地址乘以
59、10H(16),即左移4位,再与段内偏移量相加得到一个20位的物理地址,该20位的物理地址加载到20位的地址总线上,即可实现对8086/8088系统1 M个存储单元的访问。,80286、80386、80486以及Pentium的地址总线位数分别增加为24、32、32、36(见表3.1),但在实方式下,它们都只能使用低20位地址线,它们所能寻址的存储空间与8086/8088一样,也只有1 MB。 在实方式下,CPU把从指令中得到的逻辑地址(段地址:段内偏移地址)转换为20位物理地址。不管CPU的实际地址引脚有多少根,在此方式下工作时,只能用其低20根地址线对1 M个存储单元进行访问。,2保护虚拟地址方式(简称保护方式) 在实方式下,80286及其后续CPU只相当于一个快速的8086,没有真正发挥这些高性能CPU的作用。而这些CPU的特点是能可靠地支持多用户系统,即使是单用户,也可支持多任务操作,这就要求用新的存储器管
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年大学力学专业大学物理下册开学考试试题B卷-含答案
- 石河子大学《语言与文化》2021-2022学年第一学期期末试卷
- 石河子大学《水工程法规》2021-2022学年第一学期期末试卷
- 石河子大学《口腔解剖生理学一》2021-2022学年第一学期期末试卷
- 石河子大学《工程制图》2021-2022学年第一学期期末试卷
- 沈阳理工大学《数字图象处理》2023-2024学年期末试卷
- 沈阳理工大学《流体与工程热力学》2022-2023学年第一学期期末试卷
- 沈阳理工大学《俄汉笔译》2023-2024学年第一学期期末试卷
- 沈阳理工大学《超精密制造工程》2022-2023学年第一学期期末试卷
- 合伙人开足疗店合同协议书范本
- 餐饮服务人员职业道德培训
- 关于研学旅行活动的战略合作框架协议书
- 外贸业务与国际市场开拓培训
- 巡察流程培训课件
- 学校级绿色教育存在的问题与改革策略
- 检察机关保密知识讲座
- 产品市场推广效果报告
- 2024电力企业数据资源编码规范
- Java程序设计项目式教程 教案 单元10 Java图形用户界面设计
- 【小学心理健康教育分析国内外文献综述4100字】
- 高考复习递推思维方法在物理高考题中的应用
评论
0/150
提交评论