《微型计算机技术》第13章 32位微处理器的软件特点_第1页
《微型计算机技术》第13章 32位微处理器的软件特点_第2页
《微型计算机技术》第13章 32位微处理器的软件特点_第3页
《微型计算机技术》第13章 32位微处理器的软件特点_第4页
《微型计算机技术》第13章 32位微处理器的软件特点_第5页
已阅读5页,还剩151页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023/1/301微型计算机技术WeixinɡJisuɑnjiJishu

(第3版)

2023/1/302

第13章

32位微处理器的

软件特点2023/1/30332位微处理器的软件特点

13.1

32位微处理器的存储器管理

13.1.1

80386的工作方式

13.1.2保护方式下的存储管理

13.2

32位指令的寻址方式的特点

13.2.1数据的寻址方式

13.2.2转移地址的寻址方式

13.3保护方式下的寻址方式

13.3.1描述子和选择子

13.3.2保护方式下的存储器寻址过程简介

13.3.3保护方式下的存储器寻址过程举例2023/1/30432位微处理器的软件特点13.4

32位微处理器指令系统简介

13.4.1实方式下的32位微处理器指令系统

13.4.232位微处理器扩充指令

13.4.3高级指令和保护控制指令

13.4.4

80386新增加的指令

13.4.5

80486新增加的指令

13.4.6

Pentium处理器新增加的指令2023/1/30513.1

32位微处理器的存储器管理

13.1.1

80386的工作方式

13.1.2保护方式下的存储管理2023/1/30613.1.180386的工作方式80386有3种工作方式———

实方式保护方式虚拟8086方式2023/1/3071.实方式又称实地址方式。系统启动后,自动进入实方式,采用类似8086的体系结构。80386在实方式下的工作原理和8086的相同,主要差别是80386可以处理32位的数据,如进行32位的寄存器运算以及偏移地址在64KB以内的32位的数据传送。另外,在实方式下80386新增加的两个段寄存器FS和GS是可用的。实方式是80386在复位后立即出现的工作方式,即使是想让系统运行在保护方式,启动程序(系统初始化或引导)也需要在实方式中运行,以便初始化保护方式。2023/1/308实方式的主要特点①寻址方式、存储器管理、中断处理同8086。②操作数默认为16位,允许访问32位寄存器。③不使用虚拟存储器,最大地址范围仍为1MB,只采用分段部件,每段最大为64KB。④存储器中保留2个固定的区域———

初始化程序区FFFFFH~FFFF0H和中断向量表0003FFH~00000H。⑤80386指令集中的绝大多数指令可以运行。2023/1/3092.保护方式又称虚方式或虚地址方式。“保护”是指在执行多任务操作时,对不同任务使用的虚拟存储器空间进行完全的隔离,以保证每个任务顺利地执行。系统启动后先进入实方式,在CR0的PE位为1时,完成系统初始化后,立即转入保护方式。这种方式提供了多任务环境下的各种复杂功能以及对复杂存储器组织的管理机制。这是80386最常用的方式,只有在此方式下,80386才能发挥其固有的强大功能。2023/1/3010保护方式80386在保护方式下可以访问4GB的物理存储空间,段的长度在启动页功能时是4GB,不启动页功能时是1MB。页功能是可选的。在这种方式下,可以引入虚拟存储器的概念,以扩充软件占用的存储空间。保护方式是支持多任务的方式,提供了一系列的保护机制———

任务地址空间的分离、0~3共4个特权级、有特权指令、段和页的访问权限(如只读、只执行)和段限检查。2023/1/3011保护方式的主要特点①采用虚拟地址空间、线性地址空间和物理地址空间来描述存储器;通过描述子、选择子的数据结构来实现对内存的访问。②强大的寻址空间。每个任务的最大虚拟地址空间可达64TB。③使用4级保护功能,可实现程序与程序、用户与用户、用户与OS之间的隔离和保护,为多任务OS提供优化支持。④既可进行16位运算,又可进行32位运算,只要在保护方式,就能启动其分页单元,以支持虚拟内存。2023/1/30123.虚拟8086方式虚拟8086方式(又称V86方式)是既有保护功能又能执行8086代码的工作方式,是一种动态方式。在这种方式中,80386能够迅速、反复地进行虚拟8086方式和保护方式之间的切换,即从保护方式进入虚拟8086方式执行8086程序,然后离开虚拟8086方式,进入保护方式继续执行固有的80386程序。2023/1/3013虚拟8086方式“虚拟8086”是指一个多任务的环境,即模拟多个8086的工作方式,在此方式下,80386被模拟成多个8086处理器并行工作。虚拟8086方式允许80386将内存划分成若干部分,每一个部分由OS分配给不同的应用程序,而应用程序、数据以及内存管理程序等部分则存放在所分配的内存中。因此OS可根据“时间上的平均分配”或“优先级”,分配每个应用程序的执行时间。2023/1/3014虚拟8086方式的主要特点①可执行原来采用8086书写的应用程序。②段寄存器的用法同实方式。③可采用分页方式,将内存以4KB为单位进行划分,4KB为一“页”,比分段划分要细,从而可以处理较小的应用程序和数据段。④应用程序在最低特权的3段上运行,80386指令系统中的特权指令不能使用。2023/1/3015虚拟8086方式虚拟8086方式下线性地址是20位,即1MB空间。但由于线性地址可以通过页表映射到任何32位物理地址,所以应用程序可在80386现有实际内存的任何地方执行。在80386多任务系统中,可以使其中一个或几个任务使用虚拟8086方式,此时,一个任务所用的全部页面可以定位于某个物理地址空间,另一个任务的页面可以定位于其他区域,即每个虚拟8086方式下的任务可以转换到物理存储器的不同位置,这样把存储器虚拟化了,故称为虚拟8086方式。2023/1/30164.实方式与虚拟8086方式的主要区别这是两种类似8086的工作方式。①实方式的内存管理只采用分段,虚拟8086方式既采用分段又采用分页。②实方式的最大寻址空间为1MB。虚拟8086方式每个任务可在整个内存空间寻址,即1MB的寻址空间可在整个存储器范围移动。虚拟8086方式的实际寻址空间为4GB。2023/1/3017实方式与虚拟8086方式的主要区别③实方式下微处理器的所有保护机制都不起作用。不支持多任务。虚拟8086方式既可运行8086程序,又支持多任务操作。虚拟8086方式可以是80386保护方式中多任务操作的一个任务。实方式总是针对整个80386系统的。2023/1/301880386的三种工作方式之间的转换

2023/1/301913.1.2保护方式下的存储管理存储管理包含两大机制,一是地址转换机制,二是保护机制。地址转换机制使操作系统可以灵活地把存储区域分配给各个任务,而保护机制用来避免系统中的一个任务越权访问属于另一个任务的存储区域或属于操作系统的存储区域。虚拟地址空间可达64TB,用户在程序中所使用的地址都是由“段选择子”和“偏移量”两部分组成的虚拟地址。2023/1/30201.地址转换机制

80386以上的32位微处理器有三种存储器地址空间———

虚拟地址(逻辑地址)、线性地址和物理地址。32位微处理器工作在保护方式时,线性地址的地址空间可达4GB,物理地址空间与线性地址空间相同,而虚拟地址空间可达64TB。用户在程序中所使用的地址都是由“段选择子”和“偏移量”两部分组成的虚拟地址,程序在系统中运行时,由存储管理机制把虚拟地址转换成物理地址。2023/1/3021地址转换机制在80386以上的32位微处理器中集成有MMU(存储管理部件),这一MMU采用了分段机制和分页机制以实现两级“虚拟地址—

物理地址”的转换,如图13-2所示。2023/1/3022图13-2两级“虚拟地址—

物理地址”的转换

2023/1/3023地址转换机制分段机制实现虚拟地址到线性地址的转换,它把用户程序中的64TB的虚拟地址空间分成1~4GB大小不等的存储分段,并且有实施段间隔离与保护的硬件机构。分段存储管理直接支持高级语言的模块化程序设计技术,有效地简化了操作系统的段式存储管理和模块重定位的软件模块的设计。2023/1/3024地址转换机制

分页机制实现了线性地址到物理地址的转换,它把用户的线性地址空间等分为固定大小的块,每一线性地址块称为页,线性地址以“页号页内地址对”表示。系统也把存储器物理空间等分成同样大小、位置固定的块,每一物理存储块称为页帧(80386MMU的分页机制将4KB大小的页称为页帧)。存储空间的物理地址也以“页帧号页内地址对”表示。2023/1/3025地址转换机制为实现页面管理,系统为每个作业建立一张页面对照表———

页表,页表内记录了每个线性地址块的页号和为其分配的物理存储块的页帧号,操作系统页表实施线性地址到物理地址的映射。32位微处理器MMU的分页存储管理使用二级页表变换技术,并在芯片内集成有一个TLB(转换后备缓冲器),这是一个4路组相连高速缓冲存储器,其间保存了32个最近使用的物理页的页表项。这种分页存储管理机制有效地加速了从线性地址到物理地址的转换过程外,这一机制还具有页级的违章和保护作用,从而可以有效地简化操作系统的页面存储管理软件模块的设计。2023/1/3026地址转换机制32位微处理器的分页机制和分段机制都使用驻留在存储器中的各种表格,规定各自的转换函数,这些表格具有彼此独立的表结构,段表存储在线性地址空间,而页表存储在物理地址空间。必须指出的是,这些存储在存储器中的表格只允许由操作系统进行访问,应用程序不能对其进行修改。操作系统为每一任务维护一个不同的转换表格集,使每个任务可使用的地址跨越整个虚拟地址空间。这样不仅使每个任务具有不同的虚拟地间,并且使任务之间可以彼此隔离。2023/1/30272.保护机制80386以上的32位微处理器支持两个主要的保护机制:一个是通过给每个任务分配不同的虚拟地址空间,使任务之间完全隔离,每个任务有不同的“虚拟地址—

物理地址”的转换映射;另一个是任务内的保护机制操作,保护操作系统存储段及特别的处理器寄存器,使其不能被其他应用程序破坏。2023/1/3028保护机制在存储器的虚拟地址空间中仅由一个任务占有的虚拟地址空间部分,即不被其他任务共享的虚拟地址部分,称为局部地址空间。局部地址空间包含的代码和数据是任务私有的,需要与系统中的其他任务相隔离。而各个任务公用的一部分虚拟地址空间称为全局地址空间,操作系统存储在全局地址空间中,以使操作系统为所有任务所共享,并且每一任务可以对其进行访问,既保护了操作系统,又使其不被应用程序破坏。2023/1/3029保护机制32位微处理器支持4级保护的特权级(PrivilegeLevel),如图13-3所示。特权级标号为0~3,其中,0级为最高特权级,处于最内层,3级为最低特权级,处于最外层。每个存储段都与一个特权级相联系,只有足够级别的程序才可对相应的段进行访问。在运行程序时,微处理器是从CS寄存器寻址的段中取出指令并执行指令的,当前活跃代码段的特权级称为当前特权级(CurrentPrivilegeLevel,CPL),CPL确定哪些段可由程序访问。处理器的保护机制规定,对给定CPL的执行程序,只允许访问同一级别或外层级别的数据段,若试图访问内层级别的数据段则属于非法操作,将产生一个异常,向操作系统报告这一违反特权规则的操作。2023/1/3030图13-3特权级层次结构

2023/1/3031保护机制特权级的典型用法是,将操作系统核心放在0级,将操作系统的其余部分放在1~3级:将系统服务程序放在1级,将应用系统服务程序(OS扩展)中间软件级放在2级,将应用程序放在3级。这样,一个任务的操作系统程序、中断服务程序和其他系统软件因处于不同的特权层而得到保护,因而可与应用程序在同一地址空间内共处而不发生越权操作。2023/1/303213.2

32位指令的寻址方式的特点

13.2.1数据的寻址方式

13.2.2转移地址的寻址方式2023/1/303313.2.1数据的寻址方式所谓指令的寻址方式(AddressingMode)是指在指令中操作数的表示方式。指令中的操作数通常有两类,即操作数据和转移地址,下面分别讨论这两种操作数的相应的寻址方式。与数据有关的寻址方式有三大类:立即寻址寄存器寻址存储器寻址。2023/1/3034立即寻址

(ImmediateAddressing)

当操作数据就在指令中时,即为立即寻址。这种操作数称为立即数,在指令中立即数可用十六进制数(以H结尾)、二进制数(以B结尾)和十进制数(不需加特殊符号)表示,也可以使用用撇号“′”括起来的ASCII码的字符和字符串。注意,如果十六进制数以字母A~F打头,则必须在前面加上一个“0”,这是汇编程序的要求。2023/1/3035立即寻址在立即寻址中,立即数为一个常量,在8086、80286微处理器中,可以是字节(8位数)或字(16位数),而在80386以上的微处理器中,立即数还可以是双字(32位数)。以使用最频繁的MOV指令为例说明立即寻址时操作数在指令中的表示方法。

2023/1/3036立即寻址8位立即数:

MOV

AL,43H;43H→AL

MOVAL,01000011B;01000011B→AL

MOVAL,67;67→AL16位立即数:

MOVAX,4142H;4142H→AX

MOVAX,0100000101000010B

;0100000101000010B→AX2023/1/3037立即寻址

32位立即数:

MOVAX,16701;16701→AX

MOVEAX,12345678H;12345678H→EAX

字符或字符串:

MOVAL,′A′;41H→AL

(41H为A的ASCII码)2023/1/30382.寄存器寻址操作数在寄存器中,即寄存器的内容就是操作数的数据。在用汇编语言表示的指令中,以寄存器符号表示,可用做80X86操作数的寄存器如表13-1所示。采用寄存器寻址时要注意如下几点:①当指令中的源操作数和目的操作数都是寄存器时,必须采用同样字长的寄存器,否则汇编时会出错。②两个操作数不能同时为段寄存器。③目的操作数不能是代码段寄存器,例如指令“

MOVCS,AX”

,汇编时没有出错,可得机器码为8EC8H,但执行时会发生问题。2023/1/3039表13-1寄存器寻址中的寄存器

2023/1/3040寄存器寻址在数据的寻址方式中,寄存器寻址方式是一种最普通的方式,使用最方便,汇编后的机器码长度最短。另外,由于寄存器是在处理器内部,整个操作都在处理器内部进行,不需访问内存的总线周期,因此其执行速度最快。2023/1/3041寄存器寻址寄存器寻址时操作数在指令中的表示方法。8位操作:

MOV

BL,AL

16位操作:

MOVBX,AX

32位操作:

MOVEBX,EAX

2023/1/3042寄存器寻址而以下指令是非法的:

MOVBL,AX

MOVSS,DS

MOVCS,AX2023/1/30433.存储器寻址存储器寻址的指令操作数在存储器中,处理器要访问存储器操作数,必须先计算操作数的物理地址(PhysicalAddress,PA),在32位系统中物理地址的形成与16位系统是不同的,32位系统中,存储器寻址的能力有所增强2023/1/304432位系统中的存储器寻址80386以上的32位微处理器的基本存储单元是字节,都是字节编址的结构,32位微处理器可以访问字节(8位)信息、字(16位)信息和双字(32位)信息。一个16位的字信息存储在存储器的两个连续单元中,高字节存储在高地址,低字节存储在低地址。一个32位的双字信息存储在存储器的4个连续单元中,最高字节存放在最高地址,最低字节存放在最低地址。字或双字的地址由其最低字节的存放地址给出。除上述字节、字和双字外,还用两种更大的存储单位———

段(Segment)和页(Page)

。2023/1/304532位系统中的存储器寻址32位系统(80386以上的系统)的存储器可以分为一个或多个可变长度的段,它们可以同磁盘交换信息,或由若干程序所共享。对于逻辑模块组织存储而言,分段是应用程序员的有效工具,每个段的最大容量为4GB。存储器还可组织成一个或多个容量为4KB的页,特别在多用户、多任务操作系统中,分页是系统程序员管理一个系统的物理存储器的有用工具。32位系统的存储器采用分段和分页的工具为系统设计员提供了极大的灵活性。2023/1/3046三种存储器地址空间32位系统中有三种存储器地址空间———

逻辑地址线性地址物理地址这三种地址的关系如图13-4所示。2023/1/3047图13-4地址空间的转换

2023/1/30481)逻辑地址又称虚拟地址,由一个选择子(段选择子)和一个偏移量组成,偏移量是在寻址方式中求得的有效地址EA。32位系统中每个任务最大可以包含由16K个选择子确定的16个存储段,每个存储段最大为4GB(即由32位偏移量确定),从而每个任务可以有64TB的逻辑地址空间。2023/1/30492)线性地址32位微处理器芯片内的分段部件将逻辑地址空间转换为32位的线性地址空间。分段部件如何完成从逻辑地址到线性地址的转换是处理器的实方式和保护方式的主要区别。在实方式下,段寄存器中的内容就是段基值,把段基值左移4位形成20位的段基地址,加上16位的偏移量,形成线性地址。而在保护方式下,每个选择子都有一个32位的线性基地址与之相联系。段寄存器的内容中有一个INDEX(描述子入口变址值),由该值可以从全局描述子表或局部描述子表中读出相应的线性基地址,然后同32位的偏移量相加,从而形成最后的线性地址。2023/1/30503)物理地址32位微处理器芯片内的分页部件将存储单元的线性地址空间转换为物理地址空间,物理地址空间就是处理器芯片的引脚上出现的地址。如果不允许分页部件操作,则分段部件转换后的32位线性地址即为物理地址。2023/1/305132位的寻址方式的特点:①通用寄存器(EAX、EBX、ECX、EDX、EBP、ESP、ESI和EDI)都可用做基址寄存器,用于修改内存地址。②通用寄存器除ESP外都可用做变址寄存器。③能以1、2、4或8的比例因子对变址值进行换算,以便于对数组结构的寻址。2023/1/30529种存储器寻址方式32位系统提供了9种存储器寻址方式,这9种寻址方式提供了操作数所在的存储单元的有效地址。存储单元的段基地址和有效地址EA(即偏移地址)组成存储单元的线性地址(LinearAddress),在32位微处理器中,线性地址经过分页部件(PagingUnit,PU)后生成物理地址。线性地址的形成如图13-5所示。2023/1/30539种存储器寻址方式2023/1/30549种存储器寻址方式段基地址由某一个段寄存器对应的描述子寄存器确定,而有效地址EA由基址寄存器、变址寄存器、位移量和比例因子4部分按一定表达式组合而成:EA=[基址寄存器]+[变址寄存器]×

[比例因子]+[位移量]2023/1/30559种存储器寻址方式式中各组成部分的说明如下:①位移量———

为指令中提供的一个8位或16位值。②基址寄存器———

通用寄存器都可用做基址寄存器,其内容即基址值,通常为编译器所用,指向局部变量区的首地址。③变址寄存器———

除ESP之外的所有通用寄存器都可用做变址寄存器,其内容即为变址值,变址寄存器用于访问数组元素或字符串。④比例因子———

变址寄存器的值可以乘以1、2、4

或8(对应于操作数的长度为1、2、4

或8个字节)的比例因子,这种寻址方式对于访问数组或结构特别有用。2023/1/3056表13-2

32位系统中存储器寻址表

2023/1/30579种存储器寻址方式例如:①指令“

MOVEAX,DWORDI”为直接寻址,将双字单元DWORDI中的双字数据传送到32位寄存器EAX中。②指令“

MOVAL,[ECX]”为寄存器间接寻址,将数据段中由ECX寻址的存储单元中的1个字节数据传送到8位寄存器AL中。③指令“

MOVBX,[EAX+40H]”为基址寻址或变址寻址,将数据段中EAX+40H确定的存储单元中的字数据传送到16位寄存器BX中。2023/1/30589种存储器寻址方式

④指令“

MOVEAX,[4×ECX]”为比例变址寻址,将数据段中有效地址EA为ECX×4的存储单元中的双字数据传送到32位寄存器EAX中。⑤指令“

MOVEAX,[EBX+ECX]”为基址变址寻址,将数据段中有效地址为EBX+ECX的存储单元中的双字数据传送到32位寄存器EAX中。2023/1/30599种存储器寻址方式

⑥指令“

MOVAL,[EBX+2×EDI]”为基址比例变址寻址,将数据段中有效地址为EBX+2×EDI的存储单元中的1个字节的数据传送到8位寄存器AL中。⑦指令“MOVEAX,[EBX+ECX+2]”为基址变址位移寻址,将数据段中有效地址为EBX+ECX+2的存储单元中的双字数据传送到32位寄存器EAX中。⑧指令“

MOVAL,[EBX+2×EDI-2]”为基址比例变址位移寻址,将数据段中有效地址为EBX+2×EDI-2的存储单元中的1个字节的数据传送到8位寄存器AL中。2023/1/306013.2.3转移地址的寻址方式控制转移指令使程序不再顺序执行,而是按指令中给出的操作数转移到相应的目的地址,控制转移指令中的操作数是转移的目的地址,称为转移地址,它的寻址方式有三种,即直接寻址、寄存器寻址和存储器寻址。2023/1/30611.直接寻址指令中直接给出转移地址,通常给出的是符号地址———

标号(Label),例如,指令JMPSTART中的标号START即转移地址的符号表示。标号有三种属性———

段属性、偏移量属性和类型属性。段属性和偏移量属性就是该标号所指向的指令的段基址与段内偏移量,而类型属性有“远”(FAR)和“近”(NEAR)两种,远型标号可供段间转移,近型标号仅供段内转移。如果JMPSTART指令的下一条指令同标号START的距离在-128~+127之间,则在操作数START前加运算符SHORT,即指令书写为JMPSHORTSTART,称为短跳转。2023/1/30622.寄存器寻址指令中给出寄存器名,该寄存器的内容即转移的目的地址,仅用于段内转移。例如指令JMPBX,该指令执行时BX→IP,由于是段内转移,CS值不变,为原段地址。作为目标地址的寄存器可以是16位寄存器AX、BX、CX、DX、SP、BP、SI和DI,在32位微处理器中,扩展寄存器也可用做转移指令的转移地址。例如指令JMPEAX,转移到当前代码段中的某一指令处,该指令所在存储单元的偏移地址为ECX的内容。2023/1/30633.存储器寻址指令中给出内存的有效地址EA,转移去的目的地址在数据段的内存单元中,其目的地址由EA指出。例如,指令JMPDWORDPTR[BX]为段间转移,其目的地址为由EA指出的双字数据,即

IP←[EA+1]:[EA]

CS←[EA+3]:[EA+2][]中的寄存器可以是BX、BP、DI或SI,也可以用其中任一个寄存器加上位移量作为EA。另外,也可用变量加上寄存器来表示。2023/1/3064存储器寻址例如指令JMPTABLEI[BX],转移到当前代码段的某一指令处,该指令的偏移地址为数据段中以TABLEI+BX为有效地址的存储单元中的内容,TABLEI为变量名。注意:采用存储器寻址的程序转移指令除非用FARPTR或DWORDPTR等伪操作指明为一条段间转移指令外,一般汇编程序默认转移指令为段内转移。例如,指令JMP[BX]和指令JMP[BX+50H]以及指令JMPTABELI[BX]都是段内转移指令(TABELI一般为字变量),而指令JMPFARPTR[BX]和指令JMPDWORDPTR[BX]都是段间转移指令。2023/1/306513.3保护方式下的寻址方式

13.3.1描述子和选择子

13.3.2保护方式下的存储器寻址过程简介

13.3.3保护方式下的存储器寻址过程举例2023/1/306613.3.1描述子和选择子在保护方式下,80386以上的32位微处理器的存储空间由可变长度的段组成,每个段由可以多达4GB的相邻字节序列组成。段与段之间相互独立,段的位置不受限制,段与段之间可以连续排列,也可以不连续,还可以重叠,每一个段的起始地址称为段基地址(SegmentBaseAddress)或段地址,段的长度称为段限(Limit)。80386微处理器采用“段描述子”和“段选择子”的数据结构来实现保护方式下的存储器操作数的寻址。段描述子(SegmentDescriptor)又称为段描述符,用来描述对应存储段的一些基本特性,段描述子的格式如图13-6所示。2023/1/3067图13-6段描述子

2023/1/3068段描述子其中:

BASE———

段基地址或者段地址,为段的起始地址。

LIMIT———

段限,段的长度、范围边界。

P———

存在位,为1表示存在(在实内存中),为0表示不存在。

DPL———

描述子特权级,0~3。

S———

段描述子,为1表示代码或数据描述子,为0表示系统描述子2023/1/3069段描述子TYPE———

段的类型。

A———

已访问位,为1表示已经访问过。

G———

粒度位,段限所用单位,

为1表示页(4KB),

为0表示字节。

B/D———

默认操作数大小,

为0表示16位,

为1表示32位(仅用于代码段描述子)。2023/1/3070段描述子表在保护方式下,80386微处理器常用三类描述子(全局描述子、局部描述子和中断描述子)来描述程序中所使用的各种存储段的特性,这些描述子分别存放在三种段描述子表(全局描述子表、局部描述子表和中断描述子表)之中,所有这些表都是变长的数组,其长度在8B~64KB之间,存放在内存中。每个表最多可以容纳8192(213)个8B的段描子,用户程序使用的虚拟地址(逻辑地址)存储空间由全局描述子表和局部描述子表定义的存储分段组成。每个段的最大可寻址存储空间是4GB(232),所以处理器为用户提供了2×8K×4GB=64TB(246B)的虚拟地址空间。2023/1/3071全局描述子表全局描述子表(GlobalDescriptorTable,GDT)定义了能被系统中所有任务公用的存储分段,可以避免对同一系统服务程序的不必要的重复定义与存储。GDT中包含了除中断服务程序所在的段以外的所有类型存储分段的描述符。通常在GDT中包含了操作系统使用的代码段、数据段、任务状态段以及系统中各个LDT所在段的段描述子。一个系统只能有一个GDT。2023/1/3072局部描述子表局部描述子表(LocalDescriptorTable,LDT)包含了与某个任务相关联的段描述子,在设计操作系统时,通常每个任务有一个独立的LDT。LDT提供了将一个任务的代码段、数据段与操作系统的其余部分相隔离的机制。2023/1/3073中断描述子表中断描述子表(InterruptDescriptorTable,IDT)最多包含256个中断服务程序的位置的描述子。为容纳Intel保留的32个中断描述子,IDT的长度至少应有256B,系统所使用的每种类型的中断在IDT中必须有一个描述子表项,IDT的表项通过中断指令、外部中断和异常事件来访问。2023/1/3074描述子表GDT在内存中的位置及其长度由全局描述子表寄存器GDTR给出,这是一个48位寄存器,其高32位存放了GDT的基地址,低16位存放了GDT的长度(段限),GDTR同GDT的关系如图13-7所示。同样IDT在内存中的位置及长度也由一个中断描述子表寄存器IDTR给出,IDTR同LDT的关系如图13-8所示。2023/1/3075图13-7GDTR与GDT

2023/1/3076图13-8

IDTR与IDT

2023/1/3077LDTLDT的定位与GDT的不同,LDT的段基址与段限由LDT描述子表示,该描述子同一般的段描述子一样存放在全局描述子表中,因此首先要从GDT中找到LDT描述子。80386微处理器中有一个局部描述子表寄存器LDTR,这是一个16位寄存器,LDTR中存放着一个称为段选择子(SegmentSelector)的16位数,段选择子用来在GDT中寻找LDT描述子,LDTR同LDT的关系如图13-9所示。2023/1/3078IDTR与IDT在保护方式下,要访问某一存储段,必须知道该存储段所对应的段描述子,而段描述子是以8B长的数据结构存放在GDT或LDT中的,要找到该描述子,首先要知道该描述子在GDT或LDT中置。在32位微处理器中采用一种称为段选择子的数据结构,它是一个16位数,存放在要访问的存储段所对应的段寄存器(CS、DS、SS、ES、FS、GS)中,当一个段选择子的值装入段寄存器时,处理器自动地从LDT或GDT中选择一个段描述子,经调整后得到对应的段描述子寄存器(又称段高速缓存器)。段选择子、段描述子寄存器以及LDT或GDT的关系如图13-10所示。2023/1/3079图13-9

LDTR与LDT

2023/1/3080图13-10段选择子与段描述子寄存器

2023/1/3081

段选择子的格式

段选择子的格式如图13-11所示。其中:

INDEX———

13位长的选择子变址(索引)值,据此值到GDT或LDT中查找对应的描述子。

TI(TableIndex)———

1位长的表指示符。TI=1时,在LDT中;TI=0时,在GDT中。

RPL(RequestPrivilegeLevel)———

2位长的段选择子的请求特权级。2023/1/3082图13-11段选择子

2023/1/308313.3.2保护方式下的存储器

寻址过程简介

①准备工作———

进行描述子表的定义。在进入保护方式前,用LGDT指令装入GDTR,以定义GDT,如图13-12所示。在保护方式下,用LLDT指令装入LDTR,LDTR中为16位的选择子,再按此选择子从GDT中选择LDT描述子,并由LDT描述子定义LDT。2023/1/3084图13-12

GDT的定义2023/1/3085寻址过程简介②给定一个48位虚拟地址指针(程序的逻辑地址),通过选择子、描述子数据结构以及全局描述子表GDT和局部描述子表LDT实现从虚拟地址到线性地址的转换。

a.48位虚拟地址指针中的16位为段选择子,可通过MOV指令对有关段寄存器(DSSS、ES、FS、GS)赋值来设置,32位偏移量由指令的寻址方式指定。

b.从段寄存器中取出选择子。

2023/1/3086寻址过程简介

c.选择子中TI=0时,则描述子在GDT中,进入步骤⑤。

d.选择子中TI=1时,则描述子在LDT中:

.从LDTR中取出用于LDT的选择子。

.从选择子中取出Index,左移3位(×8)。

.计算8×Index+GDT的段基地址,从GDT中取出该LDT的描述子。

.从描述子中取出的LDT的段基地址就是LDT的表地址。2023/1/3087寻址过程简介

e.取出段寄存器中选择子的Index×8加到LDT或GDT的表地址中,从LDT或GDT中取出描述子。

f.在LDT或GDT中找到的描述子上取出段基地址。

g.48位地址指针中用“偏移地址+段基地址”得到32位的线性地址。2023/1/3088图13-13分段机制实现地址转换2023/1/3089寻址过程简介必须指出的是,在转换过程中还需要注意以下几点:第一,步骤e中Index×8后的值要与LDTR或GDTR中的表进行限值比较,看是否超过。如未超过,处理器的保护机制还需对该描述子的访问权进行检查,若该描述子的访问是合法的,处理器就自动地把该描述子中所要访问存储段的基地址、段限和访问权字节装入相应段寄存器的Cache寄存器(段描述子寄存器)中。第二,步骤e后,用已经装入Cache的访问权字节中的类型字段所规定的内容,对有关的存储段引用请求进行检查,同时还要对地址指针中的偏移量进行检查,以便确定该偏移量是否超出为该存储段所规定的段限,若未超过,则进入步骤⑦。2023/1/3090寻址过程简介

③分页机制采用了二级分页方案,查2个表———

页目录表和页表,将32位线性地址映射到32位物理地址,这一映射机制如图13-14所示,具体过程在“操作系统”课程中论述。2023/1/3091图13-14二级分页机制13.3.3保护方式下的存储器

寻址过程举例1.给出条件1)虚拟地址指针

4732310005AH00010000HSelecterOffset2023/1/30922023/1/309313.3.3保护方式下的存储器

寻址过程举例

1.给出条件1)虚拟地址指针

13.3.3保护方式下的存储器

寻址过程举例2023/1/3094寻址过程举例2)全局描述子表首地址(表基地址)和表长度(表限)4732310005AH00010000H(表限)(表基地址)

2023/1/30952023/1/3096寻址过程举例2)全局描述子表首地址(表基地址)和表长度(表限)

寻址过程举例2023/1/30972023/1/3098寻址过程举例3)全局描述子表中给出4个描述子,分别如下:访问权段限段基地址表内地址偏移量0A3H20000H00056000H50H0A2H30000H00046000H58H8A2H20000H00076000H60H8A3H30000H00086000H68H寻址过程举例2023/1/30993)全局描述子表中给出4个描述子访问权段限段基地址表内地址偏移量寻址过程举例2023/1/301002023/1/30101寻址过程举例

2.准备工作———

定义描述子表1)在实方式用LGDT指令装入GDTR

LGDTQWORDPTRn

n=1000000000FFH高32位(10000000H)送GDTR中的表基地址。低16位(00FFH)送GDTR中的表限。2023/1/30102寻址过程举例

2)在保护方式,用LLDT指令装入LDTR

LDTR为16位选择子。本题中的描述子在全局描述子表中,故本步可省略。2023/1/30103寻址过程举例

3.求解过程①虚拟地址指针中的Selector值可由MOV指令对DS、SS、ES、PS、GS赋值。

Offset由指令寻址方式指定在本题中由下述指令给出:

MOV

AX,005AH

MOV

DS,AX

MOV

AL,[00010000H]2023/1/30104寻址过程举例

②从段寄存器中取出选择子:005AH=0000000001011010B,从中取出高13位0000000001011(0BH),左移3位(即×8)得到58H,从005AH的D2位为0可知对应段的描述子在全局描述子表中。③GDT的表基地址10000000H+58H=10000058H,从GDT中取出对应的描述子(如下所示),2023/1/30105寻址过程举例从描述子中取出段基地址00046000H。④48位地址指针中Offset+段基地址得到32位的线性地址:00046000H+00010000H=00056000H2023/1/3010613.4

32位微处理器指令系统简介

13.4.1实方式下的32位微处理器指令系统

13.4.2

32位微处理器扩充指令

13.4.3高级指令和保护控制指令

13.4.4

80386新增加的指令

13.4.5

80486新增加的指令

13.4.6

Pentium处理器新增加的指令2023/1/3010732位微处理器指令系统简介在第3章3.1节中详细介绍了8086微处理器的指令系统,这是对80286以上微处理器(包括全部32位80X86微处理器)都适用的指令集,本小节在此基础上对80386以上的32位微处理器的指令系统作一简单介绍,包括实方式下的指令系统以及保护方式下的指令系统。80386以上的32位微处理器有三种基本的工作方式,即实方式、保护方式和虚拟8086方式。这一系列的32位微处理器的指令系统包含了8086微处理器的全部指令系统,同时针对各类32位微处理器的硬件结构,扩充和增加了许多指令。2023/1/3010813.4.1实方式下的32位微处理器

指令系统8086的目标代码程序可以不加修改地在8086以上的32位微处理器的实方式下正常运行,但是32位微处理器的指令系统在实方式下有许多扩充。32位微处理器提供了32位寄存器,支持32位地址寻址,可以使用32位偏移量来进行存储器寻址,还可以使用32位通用寄存器EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP作为基址寄存器和变址寄存器(除ESP外)。2023/1/30109实方式下的32位微处理器指令系统32位微处理器在实方式下的物理地址最多有21位有效位———

可在000000H~1FFFEFH范围内寻址(因为32位微处理器实际上使用32位地址访问存储器)。例如,欲访问FFFFH:FFFFH内存单元,在8086系统中,CPU计算物理地址得到10FFEFH,舍弃最高位1,访问0FFEFH单元,而在32位系统中,CPU计算物理地址得到1FFEFH,即访问10FFEFH内存单元。2023/1/30110实方式下的32位微处理器指令系统

扩大了以下指令的工作范围。(1)LFSreg,mem将指针mem装入reg和FS,reg可以是16位,也可以是32位。(2)LGSreg,mem将指针mem装入reg和FS,reg可以是16位,也可以是32位。

2023/1/30111扩大了以下指令的工作范围(3)LSSreg,mem将指针mem装入reg和SS,reg可以是16位,也可以是32位。(4)JECXZdest

ECX=0,转移到dest所指的目的地址。(5)PUSHFS、PUSHGS、POPFS和POPGS

FS、GS寄存器进栈、出栈指令。2023/1/30112实方式下的32位微处理器指令系统

(6)PUSHA/PUSHAD将全部通用寄存器进栈,进栈次序为AX、CX、DX、BX、SP、BP、SI、DI/EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI。(7)POPA/POPAD从堆栈弹出全部通用寄存器,弹出次序与PUSHA/PUSHAD相反。

2023/1/30113实方式下的32位微处理器指令系统(8)PUSHFD将EFLAGS进栈。(9)POPFD从堆栈弹出EFLAGS。(10)PUSHimm式中imm为立即数,该指令可将立即数进栈,imm可以是data8/data16/data32,若为data8,则符号扩展。2023/1/3011413.4.2

32位微处理器扩充指令80386以上的微处理器还扩充了以下指令的功能。(1)IMULdest,src1,src2立即乘法指令,dest为reg16,src1为reg16/mem16,src2为data8/data16。功能:dest←src1(被乘数)×src2(乘数)。注意:结果只能是16位。

2023/1/30115扩充指令

(2)CDQ

EAX中的双字符号扩展为EDX:EAX中的四字。(3)CWDE将AX中的字符号扩展为EAX中的双字。(4)SAL/SHL/SAR/SHRdest,count

dest是移位对象,可为reg或mem;count是移位次数,可为data8或CL。2023/1/30116扩充指令

(5)RCL/RCR/ROL/RORdest,count对dest和count的要求同SAL指令。(6)SHLDdest,src,count双精度左移指令,使双精度量左移,产生一个单精度量,dest可以是reg或mem,src为reg,count为data8或CL。功能:dest左移count次,移出位送到CF,右端空出位用src的高位部分填补,src值不变。(7)SHRDdest,src,count双精度右移指令,对dest、src、count的要求同SHLD指令,功能为右移,类似于SHLD。

2023/1/30117扩充指令

(8)MOVSD/CMPSD/LODSD/STOSD/SCASD这5条串操作指令实现了32位数据的串操作,源地址数为[DS:ESI]或EAX,目的操作数为[ES:EDI]或EAX,功能同MOVSB/CMPSB/LODSB/STOB/SCASB(见第3章3.1.2小节),并按DF值自动修改ESI/EDI指针。2023/1/30118扩充指令

(9)INSdest,DX从I/O端口输入串到存储器。式中,dest为mem,规定为[ES:EDI/DI],DX存放输入端口的地址。功能:[DS:EDI/DI]←[DX],按DF值修改EDI/DI指针。(10)INSB/INSW/INSD功能:功能同INS指令,传送单位由助记符中B/W/D指定为字节/字/双字。

INS/INSB/INSW/INSD指令可采用REP前缀。

2023/1/30119扩充指令(11)OUTSDX,src式中,src为mem规定[DS:ESI/SI],DX存放输出端口的地址。功能:[DX]←[DS:ESI/SI],按DF值修改ESI/SI指针。(12)OUTSB/OUTSW/OUTSD功能:功能同OUTS指令,传送单位由助记符中B/W/D指定为字节/字/双字。

OUTSB/OUTSW/OUTSD指令可采用REP前缀。

2023/1/30120扩充指令

(13)LOOPWdest

CX←CX-1,CX≠0转移到dest(以“标号”标识)的目的地址。(14)LOOPDdest

ECX←ECX-1,ECX≠0转移到dest。2023/1/30121扩充指令

(15)LOOPEWdest/LOOPEDdest

CX←CX-1,CX≠0且ZF=1或ECX←ECX-1,ECX≠0且ZF=1转移到dest。(16)LOOPNEWdest和LOOPNEDdest

CX←CX-1,CX≠0且ZF=0或ECX←ECX-1,ECX≠0且ZF=0转移到dest。

2023/1/30122扩充指令

(17)MOVSXdest,src带符号扩展的传送,dest为reg,src为reg或mem。src为8位或16位,dest为16位或32位。(18)MOVSZdest,src带零扩展的传送,对dest和src的要求同MOVSX指令。2023/1/3012313.4.3高级指令和保护控制指令80286微处理器是高档的16位微处理器,增加了3条高级指令———BOUND、ENTER和LEAVE。80386以上的32位微处理器的指令系统兼容80286的指令系统,因此必然包括了这三条高级指令。另外,80386以上的32位微处理器的指令系统是80286指令系统的超集,支持实方式、保护方式和虚拟8086方式三种程序运行方式,具有模拟8086、80286任务的能力。32位保护控制指令是由非保护方式的指令系统和仅在保护方式下使用的一组指令组成。上述高级指令和保护控制指令如下所示。2023/1/30124高级指令和保护控制指令

(1)BOUNDreg,src检查数组索引的边界,reg是任一16位或32位寄存器,src为内存中的两个字或双字,是被检查数组的上限和下限。该指令使reg中的值与src中的值进行比较,若reg中的值在src的上下限之间,则继续执行下一条指令,否则产生5号中断,注意,该中断的返回地址是BOUND指令的地址。2023/1/30125高级指令和保护控制指令

(2)ENTERdata16,data8

ENTER指令用来建立一个高级数据块结构所需的暂存区和堆栈结构。ENTER指令通常是进入过程时要执行的第一条指令。分配给堆栈的存储单元字节数由第一个操作数data16给定,这个存储区对本过程是局部的,过程的嵌套级(0~31)由第二个操作数data8给出,并决定了堆栈结构指针。该指针被从当前堆栈复制到新堆栈,BP/EBP寄存器用做堆栈结构指针。若使用16位堆栈,BP用做堆栈结构指针,SP用做堆栈指针;若使用32位堆栈,相应地,ESP和EBP用做堆栈指针和堆栈结构指针。2023/1/30126高级指令和保护控制指令

(3)LEAVE

LEAVE指令用来退出过程,释放堆栈空间。LEAVE指令与ENTER指令相反,它破坏堆栈结构,采用局部存储的过程释放堆栈空间,LEAVE指令重新存储BP(EBP)的先前值和调用者的结构指针,所有暂存在堆栈中的数据丢失。2023/1/30127高级指令和保护控制指令

(4)LMSWsrc装入机器状态字,src为reg16或mem16。功能:MSW←src,用于从实方式切换到保护方式。(5)SMSWdest存储机器状态字,dest为reg16或mem16功能:dest←MSW。2023/1/30128高级指令和保护控制指令(6)LGDTsrc装入全局描述子表寄存器,src为6个字节的mem。功能:GDTR←src,把存储器的第一个字装入GDTR的段限字段,下面的4个字节装入GDTR的基地址字段。(7)SGDTdest存储全局描述子表寄存器。dest为6个字节的mem。功能:dest←GDTR,段限存入存储器中的第一个字,基地址存入下面的4个字节。2023/1/30129高级指令和保护控制指令

(8)LIDTsrc装入中断描述子表寄存器。src为6个字节的mem。功能:IDTR←src,过程同LGDT。(9)SIDTdest存储中断描述子表寄存器。dest为6个字节的mem。功能:dest←IDTR,过程同SGDT

。2023/1/30130高级指令和保护控制指令

(10)LLDTsrc装入局部描述子表寄存器,src为reg16或mem16功能:LDTR←src。(11)SLDTdest存储局部描述子表寄存器,dest为reg16或mem16功能:dest←LDTR。(12)LTRsrc装入任务寄存器,src为reg16或mem16。功能:TR←src,并标记所装入的任务状态段TSS忙,不实行任务切换。2023/1/30131高级指令和保护控制指令

(13)STRdest存储任务寄存器,dest为reg16或mem16。功能:dest←TR。(14)LARdest,src装入访问权字节,dest为reg16,src为reg或mem。功能:在当前特权级(CPL)和选择子请求特权级(RPL),描述子是可访问的,将由src选择子所指定的描述子中的访问权字节装入dest的高字节(低字节置0)。该指令用来对程序所要使用的内存段的访问权进行检查。2023/1/30132高级指令和保护控制指令

(15)LSLdest,src装入段限,dest为reg,src为reg或mem。功能:当src中的选择子在CPL中是可访问的时,则将src给出的选择子指定的段描述子的段限字段装入由dest指定的寄存器中,该指令用来检测一个段的段限值。(16)ARPLdest,src调整选择子的RPL(请求特权级)。dest为reg16或mem16,若其中含有选择子的值,则src必须是reg,且通常其内容为调用任务的CS选择子值。若dest的低两位(即RPL字段)小于更高特权级src的RPL,则ZF置1,且将dest的RPL字段置为src的RPL值,即RPLdest←RPLsrc。2023/1/30133高级指令和保护控制指令

(17)VERRdest读段校验,dest可为reg16或mem16。VERR指令用来确认由dest(选择子)所指示的段是否能从当前的特权级(CPL)访问并且是可读的。若可读,则ZF置1,否则清零。被校验的为代码段(因为代码段可以读保护)。(18)VERWdest写段校验。dest可为reg16或mem16。VERW指令用来确认由dest(选择子)所指示的段是否能从当前的特权级(CPL)访问并且是可写的。若可写,则ZF置1,否则清零。被校验的为数据段(因为数据段可以写入保护)。2023/1/30134高级指令和保护控制指令

(19)CLTS清除CR0/MSW中的任务切换标志。任务切换标志(TS)每次发生任务切换时,由处理器设置,但必须由人工控制清除,CLTS指令是系统程序在允许一个新任务访问系统资源之前为操作系统提供的一个保存所需信息的机会(例如协处理器的状态)。2023/1/3013513.4.4

80386新增加的指令

为了充分发挥硬件的先进特性,提高编程的灵活性和编程效率,80386微处理器又增加了许多新指令,这些指令是位操作指令、条件设置指令和传送指令。2023/1/301361.位操作指令

1)BTdest,src位测试指令。dest为reg或mem,src为data8。功能:测试dest中由src指定的位,测试结果存入进位标志。2)BTCdest,src位测试并求反指令。dest为reg或mem,src为data8或reg。功能:测试dest中由src指定的位,测试结果存入进位标志,dest中该位取反。

2023/1/30137位操作指令

3)BTSdest,src位测试并置位指令。dest为reg或mem,src为data8或reg。功能:测试dest中由src指定的位,测试结果存入进位标志,然后将dest中的该位置1。

4)BTRdest,src位测试并复位指令。dest为reg或mem,src为data8或reg。功能:测试dest中由src指定的位,测试结果存入进位标志,然后将dest中的该位复位。2023/1/30138位操作指令5)BSFdest,src向前位扫描指令。dest为reg,src为reg或mem。功能:从最低位开始测试src中的各位,遇到为1的位,将ZF置0,并将该位序号送到dest,若src中全为0,则ZF置1。6)BSRdest,src反向位扫描指令。dest为reg,src为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论