1、 第第3 3章章 计算机的核心部件计算机的核心部件-微处理器微处理器本章主要内容本章主要内容(1)微处理器的工作模式)微处理器的工作模式(2)微处理器的编程结构)微处理器的编程结构(3)实模式下的存储器寻址)实模式下的存储器寻址(4)微处理器的内部组成结构)微处理器的内部组成结构(5)微处理器的外部引脚信号及操作时序)微处理器的外部引脚信号及操作时序3.1 微处理器的工作模式微处理器的工作模式(1)实模式)实模式(2)保护模式)保护模式(3)虚拟)虚拟8086模式模式3.1.1 实模式实模式 80286以上的微处理器所采用的以上的微处理器所采用的8086的工作模式。的工作模式。在实模式下,采用
2、类似于在实模式下,采用类似于8086的体系结构,其寻址机制、的体系结构,其寻址机制、中断处理机制均和中断处理机制均和8086相同;相同;物理地址的形成也同物理地址的形成也同8086一样:一样:将段寄存器的内容左移将段寄存器的内容左移4位再与偏移地址相加。位再与偏移地址相加。寻址空间为寻址空间为1MB,并采用分段方式,并采用分段方式,每段大小为每段大小为64KB(216);此外,在实模式下,存储器中保留两个专用区域,一个为初此外,在实模式下,存储器中保留两个专用区域,一个为初始化程序区:始化程序区:FFFF0HFFFFFH,存放进入,存放进入ROM引导程序引导程序的一条跳转指令;的一条跳转指令;
3、另一个为中断向量表区:另一个为中断向量表区:00000H003FFH,在这,在这1K字节的字节的存储空间中存放存储空间中存放256个中断服务程序的入口地址,每个入口个中断服务程序的入口地址,每个入口地址占地址占4个字节,这与个字节,这与8086的情形相同。的情形相同。实模式是实模式是80 x86处理器在加电或复位后立即出现的工作方处理器在加电或复位后立即出现的工作方式,即使是想让系统运行在保护模式,式,即使是想让系统运行在保护模式,系统初始化或引系统初始化或引导程序也需要在实模式下运行导程序也需要在实模式下运行,以便为保护模式所需要以便为保护模式所需要的数据结构做好各种配置和准备。的数据结构做
4、好各种配置和准备。实模式是为建立保护式做准备的工作模式。实模式是为建立保护式做准备的工作模式。3.1.2 保护模式保护模式 保护模式是支持多任务的工作模式。保护模式是支持多任务的工作模式。它提供了一系列的它提供了一系列的保护机制,保护机制,如任务地址空间的隔离,如任务地址空间的隔离,设置特权级设置特权级(03共共4个特权级个特权级),设置特权指令,进行设置特权指令,进行访问权限访问权限(如只读、只执行如只读、只执行)及段限检查等。及段限检查等。n80386以上的微处理器在保护模式下可以访问以上的微处理器在保护模式下可以访问4G字节的字节的物理存储空间物理存储空间,段的长度在启动分页功能时是,段
5、的长度在启动分页功能时是4G字节,字节,不启动分页功能时是不启动分页功能时是1M字节,分页功能是可选的。字节,分页功能是可选的。n在这种方式下,可以在这种方式下,可以引入虚拟存储器的概念引入虚拟存储器的概念,以扩充编,以扩充编程者所使用的地址空间。程者所使用的地址空间。3.1.3 虚拟虚拟8086模式模式 虚拟虚拟8086模式又称模式又称“V86模式模式”。它是既有保护功能又能执行它是既有保护功能又能执行8086代码的工作模式,是一种代码的工作模式,是一种动态工作模式。动态工作模式。在这种工作模式下,处理器能够迅速、反复进行在这种工作模式下,处理器能够迅速、反复进行V86模式和模式和保护模式之
6、间的切换,从保护模式进入保护模式之间的切换,从保护模式进入V86模式执行模式执行8086程程序,然后离开序,然后离开V86模式,进入保护模式继续执行原来的保护模式,进入保护模式继续执行原来的保护模式程序。模式程序。3.2 微处理器的编程结构微处理器的编程结构 微处理器的编程结构,即是在编程人员眼中看到的微微处理器的编程结构,即是在编程人员眼中看到的微处理器的软件结构模型。处理器的软件结构模型。软件结构模型便于人们从软件的视角去了解计算机系软件结构模型便于人们从软件的视角去了解计算机系统的操作和运行。统的操作和运行。从这一点上说,程序员可以不必知道微处理器内部极从这一点上说,程序员可以不必知道微
7、处理器内部极其复杂的电路结构、电气连接或开关特性,也不需要其复杂的电路结构、电气连接或开关特性,也不需要知道各个引脚上的信号功能和动作过程。知道各个引脚上的信号功能和动作过程。对于编程人员来说,重要的是要了解微处理器所包含的对于编程人员来说,重要的是要了解微处理器所包含的各种寄存器的功能、操作和限制,以及在程序设计中如各种寄存器的功能、操作和限制,以及在程序设计中如何使用它们。何使用它们。进一步,需要知道外部的存储器是如何组织的,处理器进一步,需要知道外部的存储器是如何组织的,处理器如何从存储器中取得指令和数据。如何从存储器中取得指令和数据。3.2.1 程序可见寄存器程序可见寄存器n程序可见程
8、序可见(program visible)寄存器,寄存器,是指在应用程序设计时是指在应用程序设计时可以直接访问的寄存器。可以直接访问的寄存器。n 程序不可见程序不可见(program invisible)寄存器寄存器是指在应用程序设计是指在应用程序设计时不能直接访问,但在进行系统程序设计时不能直接访问,但在进行系统程序设计(如编写操作系统如编写操作系统软件软件)时可以被间接引用或通过特权指令才能访问的寄存器。时可以被间接引用或通过特权指令才能访问的寄存器。n 在在80 x86微处理器系列中,通常在微处理器系列中,通常在80286及其以上的微处理及其以上的微处理器中才包含程序不可见寄存器,主要用于
9、保护模式下存储器中才包含程序不可见寄存器,主要用于保护模式下存储系统的管理和控制。系统的管理和控制。3.2.2 80 x86/Pentium处理器的寄存器模型处理器的寄存器模型 图图3.2 给出了给出了80 x86/Pentium微处理器的寄存器模型。它实微处理器的寄存器模型。它实际上是一个呈现在编程者面前的寄存器集合,所以也称际上是一个呈现在编程者面前的寄存器集合,所以也称微处理微处理器的编程结构器的编程结构。GSFSSSESDSCSFLAGSIPDISIBPSPDLCLBLALDHCHBHAHEDXECXEBXEAXEDIESIEBPESPEFLAGSEIP31150DXCXBXAX图图3
10、.2 80 x86/Pentium处理器的寄存器模型处理器的寄存器模型 白色区域白色区域:8086/8088,80286所具有的;所具有的;阴影区域:阴影区域:80386,80486及及Pentium 新增加的。新增加的。1.通用寄存器通用寄存器n通用寄存器也称多功能寄存器,在图通用寄存器也称多功能寄存器,在图3.3所示的寄存器所示的寄存器模型中,共有模型中,共有8个通用寄存器,按它们的功能差别,又个通用寄存器,按它们的功能差别,又可分为两组,即:可分为两组,即:n“通用数据寄存器通用数据寄存器”及及“指针寄存器和变址寄存器指针寄存器和变址寄存器”。(1)通用数据寄存器通用数据寄存器n 通用数
11、据寄存器用来存放通用数据寄存器用来存放8位、位、16位或位或32位的操作数。位的操作数。大多数算术运算和逻辑运算指令都可以使用这些寄存器。大多数算术运算和逻辑运算指令都可以使用这些寄存器。共有共有4个通用数据寄存器,它们是个通用数据寄存器,它们是EAX、EBX、ECX和和EDX。nEAX(Accumulator,累加器,累加器):EAX可以作为可以作为32位寄存器位寄存器(EAX)、16位寄存器位寄存器(AX)或或8位寄存器位寄存器(AH或或AL)引用。引用。n如果作为如果作为8位或位或16位寄存器引用,则只改变位寄存器引用,则只改变32位寄存器的位寄存器的一部分,其余部分不受影响。当累加器用
12、于乘法、除法一部分,其余部分不受影响。当累加器用于乘法、除法及一些调整指令时,它具有专门的用途,但通常仍称之及一些调整指令时,它具有专门的用途,但通常仍称之为通用寄存器。为通用寄存器。n在在80386及更高型号的微处理器中,及更高型号的微处理器中,EAX寄存器也可以用寄存器也可以用来存放访问存储单元的偏移地址。来存放访问存储单元的偏移地址。nEBX(Base,基址,基址):EBX是个通用寄存器,它可以作为是个通用寄存器,它可以作为32位寄存器位寄存器(EBX)、16位寄存器位寄存器(BX)或或8位寄存器位寄存器(BH或或BL)引用。引用。n在在80 x86系列的各种型号微处理器中,均可以用系列
13、的各种型号微处理器中,均可以用BX存放存放访问存储单元的偏移地址。访问存储单元的偏移地址。n在在80386及更高型号的微处理器中,及更高型号的微处理器中,EBX也可以用于存放也可以用于存放访问存储单元的偏移地址。访问存储单元的偏移地址。nECX(Count,计数,计数):ECX是个通用寄存器,它可以作是个通用寄存器,它可以作为为32位寄存器位寄存器(ECX)、16位寄存器位寄存器(CX)或或8位寄存器位寄存器(CH或或CL)引用。引用。nECX可用来作为多种指令的计数值。用于计数的指令可用来作为多种指令的计数值。用于计数的指令是重复的串操作指令、移位指令、循环移位指令和是重复的串操作指令、移位
14、指令、循环移位指令和LOOP/LOOPD指令。指令。n移位和循环移位指令用移位和循环移位指令用CL计数,重复的串操作指令用计数,重复的串操作指令用CX计数,计数,LOOP/LOOPD指令用指令用CX或或ECX计数。计数。n在在80386及更高型号的微处理器中,及更高型号的微处理器中,ECX也可用来存放也可用来存放访问存储单元的偏移地址。访问存储单元的偏移地址。nEDX(Data,数据,数据):EDX是个通用寄存器,用于保存是个通用寄存器,用于保存乘法运算产生的部分积,或除法运算之前的部分被除乘法运算产生的部分积,或除法运算之前的部分被除数。数。n对于对于80386及更高型号的微处理器,这个寄存
15、器也可用及更高型号的微处理器,这个寄存器也可用来寻址存储器数据。来寻址存储器数据。(2)指针寄存器和变址寄存器指针寄存器和变址寄存器n这是另外这是另外4个通用寄存器,分别是:堆栈指针寄存器个通用寄存器,分别是:堆栈指针寄存器ESP、基址指针寄存器基址指针寄存器EBP、源变址寄存器、源变址寄存器ESI和目的变址寄和目的变址寄存器存器EDI。nESP(Stack Pointer,堆栈指针,堆栈指针):ESP寻址一个称为堆栈的寻址一个称为堆栈的存储区。通过这个指针存取堆栈存储器数据。存储区。通过这个指针存取堆栈存储器数据。n这个寄存器作为这个寄存器作为16位寄存器引用时,为位寄存器引用时,为SP;作
16、为;作为32位寄存位寄存器引用时,则为器引用时,则为ESP。nEBP(Base Pointer,基址指针,基址指针):EBP用来存放访问堆栈段用来存放访问堆栈段的一个数据区的的一个数据区的“基地址基地址”。它作为。它作为16位寄存器引用时,位寄存器引用时,为为BP;作为;作为32位寄存器引用时,则是位寄存器引用时,则是EBP。nESI(Source Index,源变址,源变址):ESI用于寻址串操作指令的用于寻址串操作指令的源数据串。它的另一个功能是作为源数据串。它的另一个功能是作为32位位(ESI)或或16位位(SI)的数据寄存器使用。的数据寄存器使用。nEDI(Destination In
17、dex,目的变址,目的变址):EDI用于寻址串操用于寻址串操作指令的目的数据串。如同作指令的目的数据串。如同ESI一样,一样,EDI也可用为也可用为32位位(EDI)或或16位位(DI)的数据寄存器使用。的数据寄存器使用。2.指令指针寄存器指令指针寄存器EIPnEIP是一个专用寄存器,用于寻址当前需要取出的指令字节。是一个专用寄存器,用于寻址当前需要取出的指令字节。当当CPU从内存中取出一个指令字节后,从内存中取出一个指令字节后,EIP就自动加就自动加1,指向,指向下一指令字节。下一指令字节。n当微处理器工作在实模式下时,这个寄存器为当微处理器工作在实模式下时,这个寄存器为IP(16位位);当
18、;当80386及更高型号的微处理器工作于及更高型号的微处理器工作于 保护模式下时,则是保护模式下时,则是EIP(32位位)。n程序员不能对程序员不能对EIP/IP进行存取操作进行存取操作。程序中的转移指令、返回。程序中的转移指令、返回指令以及中断处理能对指令以及中断处理能对EIP/IP进行操作。进行操作。3.标志寄存器标志寄存器EFLAGSnEFLAGS用于指示微处理器的状态并控制它的操作。用于指示微处理器的状态并控制它的操作。n早期的早期的8086/8088微处理器的标志寄存器微处理器的标志寄存器FLAG为为16位,且只位,且只定义了其中的定义了其中的9位;位;n80286微处理器虽然仍为微
19、处理器虽然仍为16位的标志寄存器,但定义的标志位的标志寄存器,但定义的标志位已从原来的位已从原来的9位增加到位增加到12位;位;n80386及更高型号的微处理器则采用及更高型号的微处理器则采用32位的标志寄存器位的标志寄存器EFLAGS,所定义的标志位也有相应的扩充。,所定义的标志位也有相应的扩充。.ID VIPVIF AC VM RFNTIOPODAPC31 21 20 19 18 17 16 15 14 13 12 11 10 98765432101IOP0ITSZPentium/Pentium II80486SX/80486DX80386DX802868086/8088图图3.3 80
20、x86/Pentium 系列微处理器的标志寄存器系列微处理器的标志寄存器 8086/8088系统中所定义的系统中所定义的9个标志位个标志位O、D、I、T、S、Z、A、P、C,这也是实模式下这也是实模式下80 x86/Pentium系列微处理系列微处理器所使用的标志位。器所使用的标志位。在这在这9个标志位中,有个标志位中,有6位位(即即CF、PF、AF、ZF、SF和和OF)为状态标志;其余为状态标志;其余3位位(即即TF、IF和和DF)为控制标志。为控制标志。状态标志状态标志反映微处理器的工作状态,如执行加法运算反映微处理器的工作状态,如执行加法运算时是否产生进位,执行减法运算时是否产生借位,运
21、时是否产生进位,执行减法运算时是否产生借位,运算结果是否为零等;算结果是否为零等;控制标志控制标志对微处理器的运行起特定的控制作用,如以对微处理器的运行起特定的控制作用,如以单步方式运行还是以连续方式运行,在程序执行过程单步方式运行还是以连续方式运行,在程序执行过程中是否允许响应外部中断请求等。中是否允许响应外部中断请求等。.8086/8088标志寄存器的格式及各位的功能标志寄存器的格式及各位的功能 1514131211109876543210OFDFIFTFSFZFAFPFCF状态标志状态标志方向标志方向标志中断标志中断标志跟踪标志跟踪标志(Trace Flag)控制标志控制标志进位标志进位
22、标志奇偶标志奇偶标志半进位标志半进位标志零标志零标志符号标志符号标志溢出标志溢出标志六个状态标志的功能简述如下:六个状态标志的功能简述如下:(1)进位标志进位标志CF:当执行算术运算指令时,其结果的最高位有进位或借位当执行算术运算指令时,其结果的最高位有进位或借位时将时将CF置置1;否则将;否则将CF置置0。(2)奇偶标志奇偶标志PF:该标志位反映操作结果低该标志位反映操作结果低8位中位中“1”的个数情况,若为偶的个数情况,若为偶数个数个“1”,则将,则将PF置置“1”;若为奇数个;若为奇数个“1”,则将,则将PF置置“0”。它是早期它是早期Intel微处理器在数据通信环境中校验数据的一种微处
23、理器在数据通信环境中校验数据的一种手段。今天,奇偶校验通常由数据存储和通信设备完成,而手段。今天,奇偶校验通常由数据存储和通信设备完成,而不是由微处理器完成。所以,这个标志位在现代程序设计中不是由微处理器完成。所以,这个标志位在现代程序设计中很少使用。很少使用。(3)辅助)辅助进位标志进位标志AF:n 辅助进位标志也称辅助进位标志也称“半进位半进位”标志。标志。AF1,表示本次运,表示本次运算的低算的低4位中的最高位有进位位中的最高位有进位(加法运算时加法运算时)或有借位或有借位(减法运减法运算时算时)。nAF一般用于一般用于BCD运算中是否进行十进制调整的依据。十进运算中是否进行十进制调整的
24、依据。十进制调整指令制调整指令DAA和和DAS测试这个标志位。测试这个标志位。(4)零标志零标志ZF:n 反映运算结果是否为零。若结果为零,则反映运算结果是否为零。若结果为零,则ZF1;若结果;若结果不为零,则不为零,则ZF0。(5)符号标志符号标志SF:n反映带符号数反映带符号数(以二进制补码表示以二进制补码表示)运算结果符号位的情运算结果符号位的情况。况。n若结果为负数,则若结果为负数,则SF1;n若结果为正数,则若结果为正数,则SF0。nSF的取值总是与运算结果的最高位的取值总是与运算结果的最高位(字节操作为字节操作为D7,字操作为字操作为D15,双字操作为,双字操作为D31)取值一致。
25、取值一致。(6)溢出标志溢出标志OF:n反映有符号数运算结果是否发生溢出。若发生溢出,则反映有符号数运算结果是否发生溢出。若发生溢出,则OF1;否则,;否则,OF0。n 溢出是指运算结果超出了计算装置所能表示的数值范围。溢出是指运算结果超出了计算装置所能表示的数值范围。例如,对于字节运算,数值表示范围为例如,对于字节运算,数值表示范围为 -128+127;对于字运算,数值表示范围为;对于字运算,数值表示范围为-32768+32767。n若超过上述范围,则发生了溢出。若超过上述范围,则发生了溢出。n溢出是一种差错,系统应做相应的处理。溢出是一种差错,系统应做相应的处理。“溢出溢出”与与“进位进位
26、”是两种不同的概念。某次运算结果是两种不同的概念。某次运算结果有有“溢出溢出”,不一定有,不一定有“进位进位”;反之,有;反之,有“进位进位”,也不一定发生也不一定发生“溢出溢出”。另外,另外,“溢出溢出”标志实际上是针对有符号数运算而言,标志实际上是针对有符号数运算而言,对于无符号数运算,不考虑溢出标志。对于无符号数运算,不考虑溢出标志。例例:指出指出80 x86CPU80 x86CPU执行如下指令后,标志寄存器中各状执行如下指令后,标志寄存器中各状态标志位的值:态标志位的值:(1)MOV AX,32C5H (2)MOV AX,0E453H ADD AX,546AH ADD AX,0C572
27、H 解解:(1)0011001011000101 (2)1110010001010011 +0101010001101010 +1100010101110010 1000011100101111 1010100111000101所以,所以,OF=1 SF=1 ZF=0 OF=0 SF=1 ZF=0 AF=0 PF=0 CF=0 AF=0 PF=1 CF=1三个控制标志的功能三个控制标志的功能:(1)方向标志方向标志DF:用来控制串操作指令的执行。用来控制串操作指令的执行。若若DF0,则串操作指令的地址自动增量修改,串数据的,则串操作指令的地址自动增量修改,串数据的传送过程是从低地址到高地址的方
28、向进行;传送过程是从低地址到高地址的方向进行;若若DF1,则串操作指令的地址自动减量修改,串数据的,则串操作指令的地址自动减量修改,串数据的传送过程是从高地址到低地址的方向进行。传送过程是从高地址到低地址的方向进行。可以设置可以设置DF的指令为的指令为STD(置置1)和和CLD(清清0)。(2)中断标志中断标志IF:用来控制对可屏蔽中断的响应。用来控制对可屏蔽中断的响应。n 若若IF1,则允许,则允许CPU响应可屏蔽中断请求;响应可屏蔽中断请求;n 若若IF0,则,则CPU不能对可屏蔽中断请求作出响应。不能对可屏蔽中断请求作出响应。n 可以设置可以设置IF的指令有的指令有STI(置置1)和和C
29、LI(置置0)。IF对非屏蔽对非屏蔽中断和内部中断不起作用。中断和内部中断不起作用。(3)陷阱标志陷阱标志TF:陷阱标志也称单步标志。陷阱标志也称单步标志。n 当当TF1时,微处理器就进入单步工作方式,每执行完一条时,微处理器就进入单步工作方式,每执行完一条指令便自动产生一个内部中断指令便自动产生一个内部中断(称为单步中断称为单步中断),转去执行一,转去执行一个中断服务程序,可以借助中断服务程序来检查每条指令的个中断服务程序,可以借助中断服务程序来检查每条指令的执行情况;执行情况;n 若若TF0,则,则CPU正常正常(连续连续)执行指令。执行指令。n 单步工作方式常用于程序的调试。单步工作方式
30、常用于程序的调试。4.段寄存器段寄存器n微处理器寄存器集合中的另一组寄存器为微处理器寄存器集合中的另一组寄存器为16位的段寄位的段寄存器,用于与微处理器中的其他寄存器联合生成存储存器,用于与微处理器中的其他寄存器联合生成存储器地址。器地址。n对于同一个微处理器而言,段寄存器的功能在实模式下对于同一个微处理器而言,段寄存器的功能在实模式下和保护模式下是不相同的。和保护模式下是不相同的。(1)代码段寄存器代码段寄存器CS:n代码段是一个存储区域,用以保存微处理器使用的代码代码段是一个存储区域,用以保存微处理器使用的代码(程序或过程程序或过程)。代码段寄存器定义代码段的起始地址。代码段寄存器定义代码
31、段的起始地址。n在实模式下工作时,它定义一个在实模式下工作时,它定义一个64K字节存储器段的起字节存储器段的起点;点;n 在保护模式下工作时,它选择一个描述代码段起始地址、在保护模式下工作时,它选择一个描述代码段起始地址、长度及其他一些必要的属性信息长度及其他一些必要的属性信息(如可读、可写或可被执如可读、可写或可被执行等行等)的描述符。的描述符。(2)数据段寄存器数据段寄存器DS:n数据段是包含程序所使用的大部分数据的存储区。数据段是包含程序所使用的大部分数据的存储区。n与代码段寄存器与代码段寄存器CS类似,数据段寄存器类似,数据段寄存器DS用以定义数据用以定义数据段的起始地址。段的起始地址
32、。n与代码段一样,对于与代码段一样,对于808680286,数据段的长度限制为,数据段的长度限制为64KB;n对于工作在保护模式下的对于工作在保护模式下的80386及更高型号的微处理器,及更高型号的微处理器,数据段长度限制为数据段长度限制为4GB。(3)附加段寄存器附加段寄存器ES:n附加段是为某些串操作指令存放目的操作数而附加的一个附加段是为某些串操作指令存放目的操作数而附加的一个数据段。数据段。n附加段寄存器附加段寄存器ES用以定义附加段的起始地址。附加段的用以定义附加段的起始地址。附加段的长度限制与上述代码段及数据段的情况相同。长度限制与上述代码段及数据段的情况相同。(4)堆栈段寄存器堆
33、栈段寄存器SS:n 堆栈是存储器中的一个特殊存储区,用以暂时存放程序堆栈是存储器中的一个特殊存储区,用以暂时存放程序运行中的一些数据和地址信息。运行中的一些数据和地址信息。n堆栈段寄存器堆栈段寄存器SS定义堆栈段的首地址。由堆栈段寄存器定义堆栈段的首地址。由堆栈段寄存器SS和堆栈指针寄存器和堆栈指针寄存器(ESP/SP)确定堆栈段内的存取地址。确定堆栈段内的存取地址。n另外另外,EBP/BP寄存器也可以寻址堆栈段内的数据。寄存器也可以寻址堆栈段内的数据。(5)段寄存器段寄存器FS和和GS:n这两个段寄存器仅对这两个段寄存器仅对80386及更高型号的微处理器有效,及更高型号的微处理器有效,以便程
34、序访问相应的两个附加的存储器段。以便程序访问相应的两个附加的存储器段。3.3 微处理器的寻址机制微处理器的寻址机制3.3.1 存储器分段技术存储器分段技术n为什么要采用存储器为什么要采用存储器“分段分段”技术?技术?n 实模式下实模式下CPU可直接寻址的地址空间为可直接寻址的地址空间为2201M字节单元。字节单元。CPU需输出需输出20位地址信息才能实现对位地址信息才能实现对1M字节单元存储空间字节单元存储空间的寻址。的寻址。n但实模式下但实模式下CPU中所使用的寄存器均是中所使用的寄存器均是16位的,内部位的,内部ALU也只能进行也只能进行16位运算,其寻址范围局限在位运算,其寻址范围局限在
35、21665536(64K)字节单元。字节单元。n为了实现对为了实现对1M字节单元的寻址,字节单元的寻址,80 x86系统采用了存储器系统采用了存储器分段技术。分段技术。q具体做法是,将具体做法是,将1M字节的存储空间分成许多逻辑段,每字节的存储空间分成许多逻辑段,每段最长段最长64K字节单元,可以用字节单元,可以用16位地址码进行寻址。位地址码进行寻址。q 每个逻辑段在实际存储空间中的位置是可以浮动的每个逻辑段在实际存储空间中的位置是可以浮动的,其起其起始地址可由段寄存器的内容来确定。实际上,段寄存器中始地址可由段寄存器的内容来确定。实际上,段寄存器中存放的是段起始地址的高存放的是段起始地址的
36、高16位,称之为位,称之为“段基段基值值”(segment base value)。q 逻辑段在物理存储器中的位置如图逻辑段在物理存储器中的位置如图3.4所示。所示。.FFFFFH逻辑段逻辑段1起点起点逻辑段逻辑段2起点起点逻辑段逻辑段3起点起点逻辑段逻辑段4起点起点00000H逻辑段逻辑段1 64KB逻辑段逻辑段2 64KB逻辑段逻辑段3 64KB逻辑段逻辑段4 64KB 图图3.4 逻辑段在物理存储器中的位置逻辑段在物理存储器中的位置n各个逻辑段在实际的存储空间中可以完全分开,也可以各个逻辑段在实际的存储空间中可以完全分开,也可以部分重叠,甚至完全重叠。部分重叠,甚至完全重叠。n段的起始地
37、址的计算和分配通常是由操作系统完成的,段的起始地址的计算和分配通常是由操作系统完成的,并不需要普通用户参与。并不需要普通用户参与。n还有其他方法也可以将还有其他方法也可以将1M字节单元的物理存储器空间字节单元的物理存储器空间分成可用分成可用16位地址码寻址的逻辑段。位地址码寻址的逻辑段。n例如将例如将20位物理地址分成两部分:位物理地址分成两部分:高高4位为段号,可位为段号,可用机器内设置的用机器内设置的4位长的位长的“段号寄存器段号寄存器”来保存,低来保存,低16位为段内地址,也称位为段内地址,也称“偏移地址偏移地址”,如图,如图3.5所示:所示:图图3.5 另一种分段方法另一种分段方法 这
38、种分段方法有其不足之处这种分段方法有其不足之处:(1)4位长的位长的“段号寄存器段号寄存器”与其他寄存器不兼容,操作与其他寄存器不兼容,操作上会增添麻烦。上会增添麻烦。(2)每个逻辑段大小固定为每个逻辑段大小固定为64K字节单元,当程序中所需字节单元,当程序中所需的存储空间不是的存储空间不是64K字节单元的倍数时,就会浪费存字节单元的倍数时,就会浪费存储空间。储空间。n反观前一种分段机制,则要灵活、方便得多,所以反观前一种分段机制,则要灵活、方便得多,所以80 x86/Pentium系统中采用了前一种分段机制。系统中采用了前一种分段机制。3.3.2 实模式下的存储器寻址实模式下的存储器寻址1.
39、物理地址与逻辑地址物理地址与逻辑地址n在有地址变换机构的计算机系统中,每个存储单元可在有地址变换机构的计算机系统中,每个存储单元可以看成具有两种地址:以看成具有两种地址:物理地址和逻辑地址物理地址和逻辑地址。n物理地址物理地址是信息在存储器中实际存放的地址,它是是信息在存储器中实际存放的地址,它是CPU访问存储器时实际输出的地址。访问存储器时实际输出的地址。n例如,实模式下的例如,实模式下的80 x86/Pentium系统的物理地址是系统的物理地址是20位,存储空间为位,存储空间为2201M字节单元,地址范围从字节单元,地址范围从00000H到到FFFFFH。n逻辑地址逻辑地址是编程时所使用的
40、地址是编程时所使用的地址。n编程时不需要知道产生的代码或数据在存储器中的具体编程时不需要知道产生的代码或数据在存储器中的具体物理位置。这样可以简化存储资源的动态管理。物理位置。这样可以简化存储资源的动态管理。n在实模式下的软件结构中,在实模式下的软件结构中,逻辑地址逻辑地址由由“段基值段基值”和和“偏移量偏移量”两部分构成。两部分构成。n“段基值段基值”是段的起始地址的高是段的起始地址的高16位。位。n“偏移量偏移量”(offset)也称偏移地址,也称偏移地址,它是所访问的存储单元它是所访问的存储单元距段的起始地址之间的字节距离。距段的起始地址之间的字节距离。n给定段基值和偏移量,就可以在存储
41、器中寻址所访问的存给定段基值和偏移量,就可以在存储器中寻址所访问的存储单元。储单元。n在实模式下,在实模式下,“段基值段基值”和和“偏移量偏移量”均是均是16位的。位的。n“段基值段基值”由段寄存器由段寄存器CS、DS、SS、ES、FS和和GS提提供;供;n“偏移量偏移量”由由BX、BP、SP、SI、DI、IP或以这些寄或以这些寄存器的组合形式来提供。存器的组合形式来提供。2.实模式下物理地址的产生实模式下物理地址的产生n实模式下实模式下CPU访问存储器时的访问存储器时的20位物理地址可由逻辑地位物理地址可由逻辑地址转换而来。址转换而来。n具体方法是,将段寄存器中的具体方法是,将段寄存器中的1
42、6位位“段基值段基值”左移左移4位位(低位补低位补0),再与,再与16位的位的“偏移量偏移量”相加,即可得到所访相加,即可得到所访问存储单元的物理地址,问存储单元的物理地址,如图如图3.6所示。所示。.段基值段基值(16位位)偏移量偏移量(16位位)150150段基值段基值(16位位)1500000段寄存器段寄存器地址加法器地址加法器物理地址(物理地址(20位)位)190物理地址物理地址逻辑地址逻辑地址图图3.6 实模式下物理地址的产生实模式下物理地址的产生n上述由逻辑地址转换为物理地址的过程也可以表示成如上述由逻辑地址转换为物理地址的过程也可以表示成如下计算公式:下计算公式:n 物理地址段基
43、值物理地址段基值16+偏移量偏移量n上式中的上式中的“段基值段基值16”在微处理器中是通过将段寄存在微处理器中是通过将段寄存器的内容左移器的内容左移4位位(低位补低位补0)来实现的,与偏移量相加的来实现的,与偏移量相加的操作则由地址加法器来完成。操作则由地址加法器来完成。n例例 3.2 设代码段寄存器设代码段寄存器CS的内容为的内容为4232H,指令指针,指令指针寄存器寄存器IP的内容为的内容为0066H,即,即CS4232H,IP0066H,则访问代码段存储单元的物理地址计算如下:则访问代码段存储单元的物理地址计算如下:.4 2 3 20 0 6 64 2 3 20 0 6 60段基值段基值
44、偏移量偏移量左移左移4位位物理地址物理地址逻辑地址逻辑地址 4 2 3 8 6+)n例例 3.3 设数据段寄存器设数据段寄存器DS的内容为的内容为1234H,基址寄存,基址寄存器器BX的内容为的内容为0022H,即,即DS1234H,BX0022H,则访问数据段存储单元的物理地址计算如下:则访问数据段存储单元的物理地址计算如下:.1 2 3 40 0 2 21 2 3 40 0 2 20段基值段基值偏移量偏移量左移左移4位位物理地址物理地址逻辑地址逻辑地址 1 2 3 6 2+).n例例 3.4 若段寄存器内容是若段寄存器内容是002AH,产生的物理地址是,产生的物理地址是002C3H,则偏移
45、量是多少,则偏移量是多少?解解:将段寄存器内容左移将段寄存器内容左移4位,低位补位,低位补0得:得:002A0H。从物理地址中减去上列值得偏移量为:从物理地址中减去上列值得偏移量为:002C3H-002A0H0023H。需注意的是,每个存储单元有惟一的物理地址,但它可需注意的是,每个存储单元有惟一的物理地址,但它可以由不同的以由不同的“段基值段基值”和和“偏移量偏移量”转换而来,这只要转换而来,这只要把段基值和偏移量改变为相应的值即可。把段基值和偏移量改变为相应的值即可。同一个物理地址可以由不同的逻辑地址来构成。同一个物理地址可以由不同的逻辑地址来构成。或者说,或者说,同一个物理地址与多个逻辑
46、地址相对应。同一个物理地址与多个逻辑地址相对应。例如,段基值为例如,段基值为0020H,偏移量为,偏移量为0013H,构成的物理,构成的物理地址为地址为00213H;若段基值改变为若段基值改变为0021H,配以新的偏移量,配以新的偏移量0003H,其物,其物理地址仍然是理地址仍然是00213H,如图,如图3.7所示。所示。.00213H00212H00211H00210H0020FH0020EH0020DH0020CH0020BH0020AH00209H00208H00207H00206H00205H00204H00203H00202H00201H00200H段基值段基值(0021H)段基值段
47、基值(0020H)偏移量偏移量(13H)物理地址物理地址偏移量偏移量(03H)逻辑地址逻辑地址图图3.7 一个物理地址对应多个逻辑地址一个物理地址对应多个逻辑地址3.“段加偏移段加偏移”寻址寻址n上述由段基值上述由段基值(段寄存器的内容段寄存器的内容)和偏移量相结合的存储和偏移量相结合的存储器寻址机制也称为器寻址机制也称为“段加偏移段加偏移”寻址机制,所访问的寻址机制,所访问的存储单元的地址常被表示成存储单元的地址常被表示成“段基值段基值:偏移量偏移量”的形式。的形式。n例如,若段基值为例如,若段基值为2000H,偏移量为,偏移量为3000H,则所访问,则所访问的存储单元的地址为的存储单元的地
48、址为2000H:3000H。n图图3.8进一步说明了这种进一步说明了这种“段加偏移段加偏移”的寻址机制如何选的寻址机制如何选择所访问的存储单元的情形。择所访问的存储单元的情形。n这里段寄存器的内容为这里段寄存器的内容为1000H,偏移地址为,偏移地址为2000H。图中。图中显示了一个显示了一个64KB长的存储器段,该段起始于长的存储器段,该段起始于10000H,结,结束于束于1FFFFH。n图中也表示了如何通过段基值图中也表示了如何通过段基值(段寄存器的内容段寄存器的内容)和偏移量和偏移量找到存储器中被选单元的情形。找到存储器中被选单元的情形。偏移量偏移量(offset)也称偏移地也称偏移地址
49、,正如图中所示,它是自段的起始位置到所选存储单元址,正如图中所示,它是自段的起始位置到所选存储单元之间的之间的距离距离(或跨度或跨度)。.1FFFFH(段终址段终址)10000H(段始址段始址)12000H(被选单元被选单元)一个逻辑段一个逻辑段(64KB)FFFFFH实模式存储器实模式存储器1000H段寄存器段寄存器偏移量偏移量=2000H图图3.8 实模式下存储器寻址机制实模式下存储器寻址机制“段加偏移段加偏移”n图图3.8 中段的起始地址中段的起始地址10000H是由段寄存器内容是由段寄存器内容1000H左移左移4位低位补位低位补0(或在或在1000H后边添加后边添加0H)而得到的。而得
50、到的。n段的结束地址段的结束地址1FFFFH是由段起始地址是由段起始地址10000H与段长与段长度度FFFFH(64K)相加之结果。相加之结果。n在这种在这种“段加偏移段加偏移”的寻址机制中,由于是将段寄存器的寻址机制中,由于是将段寄存器的内容左移的内容左移4位位(相当于乘以十进制数相当于乘以十进制数16)来作为段的起始来作为段的起始地址的,所以地址的,所以实模下各个逻辑段只能起始于存储器中实模下各个逻辑段只能起始于存储器中16字节整数倍的边界。字节整数倍的边界。n这样可以简化实模式下这样可以简化实模式下CPU生成物理地址的操作。通常生成物理地址的操作。通常称这称这16字节的小存储区域为字节的