《第3章微处理器的编程结构》由会员分享,可在线阅读,更多相关《第3章微处理器的编程结构(102页珍藏版)》请在金锄头文库上搜索。
1、 第第3 3章章 微处理器的编程结构微处理器的编程结构3.1 3.1 引言引言nMoore定律:定律: “晶体管的大小将以指数速率变小,而集成到芯晶体管的大小将以指数速率变小,而集成到芯片上的晶体管数目将片上的晶体管数目将23年年【1824个月】个月】翻翻一番。一番。” Gordon Moore,1965n* Gordon MooreIntel公司的创始人,著名公司的创始人,著名半导体科学家。半导体科学家。 1978年年 8086 2.9万万 (晶体管数)(晶体管数)n11982年年 80286 13.5万万n11985年年 80386 32万万n11990年年 80486 120万万n119
2、93年年 Pentium 320万万n11996年年 Pentium Pro 550万万n11997年年2月月 Pentium II 750万,万,300MHzn11999年年 Pentium III n22000年年(4季度季度) Pentium IV 4200万,万,1.4GHz(0.18um工艺工艺)nBBill Gates在未来之路中曾提到,在未来之路中曾提到,假若假若Moore定律定律能再持续能再持续20年年.n其其 “微电子器件的发展速度预计一直到微电子器件的发展速度预计一直到2121世纪前期仍将遵循摩尔定律世纪前期仍将遵循摩尔定律”n* * 此外,人们也在关心其他新型技术,如激此
3、外,人们也在关心其他新型技术,如激光计算机、量子计算机等新技术的发展。光计算机、量子计算机等新技术的发展。n从从 *在计算机结构及信息理论方面,在计算机结构及信息理论方面,“非冯结非冯结构构” -(神经网络仿人脑的思维和记忆模型),更(神经网络仿人脑的思维和记忆模型),更便于处理某些智能型问题。便于处理某些智能型问题。4004 微处理器(微处理器(1971,2250晶体管,晶体管,4.2mmx3.2mm,构成世界上第一台微型计算机)构成世界上第一台微型计算机)8008微处理器(1973 ,3500 晶体管)8080微处理器(1974,4900晶体管)8086微处理器 (1978,2.9万晶体管
4、)80286微处理器(1982,13.5万晶体管)80386微处理器(1985,32万晶体管)80486 微处理器(1990,120万晶体管)Pentium 微处理器(1993,320万晶体管)Pentium 4微处理器(2000,4200万晶体管)P4微处理器处理器新革命ITANIUM(安滕)IA-64架构处理器ITANIUM 2 (2.14亿晶体管,亿晶体管,1GHZ主频,主频,0.18微米线宽,微米线宽,328个寄存器,个寄存器,8级流水,系统总线宽度级流水,系统总线宽度128位,片内三级位,片内三级高速缓存高速缓存-32KB,256KB,3MB,参见参见P707)3.2 微处理器的工作
5、模式微处理器的工作模式n(1)实模式)实模式n(2)保护模式)保护模式n(3)虚拟)虚拟8086模式模式3.2.1 实模式实模式( real mode)80286以上的微处理器所采用的以上的微处理器所采用的8086的工作模式。的工作模式。在实模式下,采用类似于在实模式下,采用类似于8086的体系结构,其寻的体系结构,其寻址机制、中断处理机制均和址机制、中断处理机制均和8086相同;相同;物理地址的形成也同物理地址的形成也同8086一样:一样:将段寄存器的内将段寄存器的内容左移四位再与偏移地址相加。容左移四位再与偏移地址相加。 寻址空间为寻址空间为1MB,并采用分段方式,每段大小并采用分段方式,
6、每段大小为为64KB(216);此外,在实模式下,存储器中保留两个专用区域,此外,在实模式下,存储器中保留两个专用区域,一个为初始化程序区:一个为初始化程序区:FFFF0HFFFFFH,存存放进入放进入ROM引导程序的一条跳转指令;引导程序的一条跳转指令;另一个为中断向量表区:另一个为中断向量表区:00000H003FFH,在在这这1K字节的存储空间中存放字节的存储空间中存放256个中断服务程序个中断服务程序的入口地址,每个入口地址占的入口地址,每个入口地址占4个字节,个字节,这与这与8086的情形相同。的情形相同。 实模式是实模式是80x86处理器在加电或复位后立即出现处理器在加电或复位后立
7、即出现的工作方式,即使是想让系统运行在保护模式,的工作方式,即使是想让系统运行在保护模式,系统初始化或引导程序也需要在实模式下运行系统初始化或引导程序也需要在实模式下运行,以便为保护模式所需要的数据结构做好各种配置以便为保护模式所需要的数据结构做好各种配置和准备。和准备。实模式是为建立保护式做准备的工作模式。实模式是为建立保护式做准备的工作模式。3.2.2 保护模式保护模式(protected mode)保护模式是支持多任务的工作模式。保护模式是支持多任务的工作模式。它提供了一系列的它提供了一系列的保护机制保护机制,如任务地址空间如任务地址空间的隔离,设置特权级的隔离,设置特权级(03共共4个
8、特权级个特权级),设设置特权指令,进行访问权限置特权指令,进行访问权限(如只读、只执行如只读、只执行)及段限检查等。及段限检查等。 n80386以上的微处理器在保护模式下可以访问以上的微处理器在保护模式下可以访问4G字节的物理存储空间字节的物理存储空间,段的长度在启动分页,段的长度在启动分页功能时是功能时是4G字节,不启动分页功能时是字节,不启动分页功能时是1M字节,字节,分页功能是可选的。分页功能是可选的。n在这种方式下,可以在这种方式下,可以引入虚拟存储器的概念引入虚拟存储器的概念,以,以扩充编程者所使用的地址空间。扩充编程者所使用的地址空间。3.2.3 虚拟虚拟8086模式模式(virt
9、ual 8086 mode) 虚拟虚拟8086模式又称模式又称“V86模式模式”。它是既有保护功能又能执行它是既有保护功能又能执行8086代码的工作模式,代码的工作模式,是一种动态工作模式。是一种动态工作模式。在这种工作模式下,处理器能够迅速、反复进行在这种工作模式下,处理器能够迅速、反复进行V86模式和保护模式之间的切换,从保护模式进模式和保护模式之间的切换,从保护模式进入入V86模式执行模式执行8086程序,然后离开程序,然后离开V86模式,模式,进入保护模式继续执行原来的保护模式程序。进入保护模式继续执行原来的保护模式程序。 保护模式保护模式实模式实模式虚拟虚拟8086模式模式复位复位复
10、位复位复位复位复位复位PE=1PE=0作业切换作业切换中断返回中断返回中断、异常中断、异常图注:图注:(1) PE保护模式允许,是保护模式允许,是80x86控制寄存器控制寄存器CR0的一位的一位(2) 异常异常80286以上的处理器中,称以上的处理器中,称“内部中断内部中断”为异常为异常(exception) 图图3.2 三种工作模式的转换三种工作模式的转换3.3 微处理器的编程结构微处理器的编程结构所谓微处理器的编程结构,即是在编程人员眼所谓微处理器的编程结构,即是在编程人员眼中看到的微处理器的软件结构模型。中看到的微处理器的软件结构模型。软件结构模型便于人们从软件的视角去了解计软件结构模型
11、便于人们从软件的视角去了解计算机系统的操作和运行。算机系统的操作和运行。从这一点上说,程序员可以不必知道微处理器从这一点上说,程序员可以不必知道微处理器内部极其复杂的电路结构、电气连接或开关特内部极其复杂的电路结构、电气连接或开关特性,也不需要知道各个引脚上的信号功能和动性,也不需要知道各个引脚上的信号功能和动作过程。作过程。对于编程人员来说,重要的是要了解微处理器所对于编程人员来说,重要的是要了解微处理器所包含的各种寄存器的功能、操作和限制,以及在包含的各种寄存器的功能、操作和限制,以及在程序设计中如何使用它们。程序设计中如何使用它们。进一步,需要知道外部的存储器是如何组织的,进一步,需要知
12、道外部的存储器是如何组织的,处理器如何从存储器中取得指令和数据。处理器如何从存储器中取得指令和数据。3.3.1 程序可见寄存器程序可见寄存器n程序可见程序可见(program visible)寄存器,寄存器,是指在应用是指在应用程序设计时可以直接访问的寄存器。程序设计时可以直接访问的寄存器。程序不可见程序不可见(program invisible)寄存器寄存器是指在应用是指在应用程序设计时不能直接访问,但在进行系统程序设程序设计时不能直接访问,但在进行系统程序设计计(如编写操作系统软件如编写操作系统软件)时可以被间接引用或通时可以被间接引用或通过特权指令才能访问的寄存器。过特权指令才能访问的寄
13、存器。在在80x86微处理器系列中,通常在微处理器系列中,通常在80286及其以上及其以上的微处理器中才包含程序不可见寄存器,主要用的微处理器中才包含程序不可见寄存器,主要用于保护模式下存储系统的管理和控制。于保护模式下存储系统的管理和控制。3.3.2 80x86/Pentium处理器的寄存器模型处理器的寄存器模型 图图3.3给出了给出了80x86/Pentium微处理器的寄存器模型。微处理器的寄存器模型。它实际上是一个呈现在编程者面前的寄存器集合,它实际上是一个呈现在编程者面前的寄存器集合,所以也称所以也称微处理器的编程结构微处理器的编程结构。GSFSSSESDSCSFLAGSIPDISIB
14、PSPDLCLBLALDHCHBHAHEDXECXEBXEAXEDIESIEBPESPEFLAGSEIP31150DXCXBXAX图图3.3 80x86/Pentium处理器的寄存器模型处理器的寄存器模型 白色区域白色区域:8086/8088,80286所具有的;所具有的; 阴影区域阴影区域:80386,80486及及Pentium 新增加的。新增加的。1. 通用寄存器通用寄存器n通用寄存器也称多功能寄存器,在图通用寄存器也称多功能寄存器,在图3.3所示所示的寄存器模型中,共有的寄存器模型中,共有8个通用寄存器,按它个通用寄存器,按它们的功能差别,又可分为两组,即:们的功能差别,又可分为两组,
15、即:“通用数通用数据寄存器据寄存器”及及“指针寄存器和变址寄存器指针寄存器和变址寄存器”。n(1)通用数据寄存器通用数据寄存器n 通用数据寄存器用来存放通用数据寄存器用来存放8位、位、16位或位或32位的位的操作数。大多数算术运算和逻辑运算指令都可以操作数。大多数算术运算和逻辑运算指令都可以使用这些寄存器。共有使用这些寄存器。共有4个通用数据寄存器,它个通用数据寄存器,它们是们是EAX、EBX、ECX和和EDX。nEAX(Accumulator,累加器累加器):EAX可以作为可以作为32位寄存器位寄存器(EAX)、16位寄存器位寄存器(AX)或或8位寄存器位寄存器(AH或或AL)引用。引用。n
16、如果作为如果作为8位或位或16位寄存器引用,则只改变位寄存器引用,则只改变32位位寄存器的一部分,其余部分不受影响。当累加器寄存器的一部分,其余部分不受影响。当累加器用于乘法、除法及一些调整指令时,它具有专门用于乘法、除法及一些调整指令时,它具有专门的用途,但通常仍称之为通用寄存器。的用途,但通常仍称之为通用寄存器。n在在80386及更高型号的微处理器中,及更高型号的微处理器中,EAX寄存器寄存器也可以用来存放访问存储单元的偏移地址。也可以用来存放访问存储单元的偏移地址。nEBX(Base,基址基址):EBX是个通用寄存器,它可是个通用寄存器,它可以作为以作为32位寄存器位寄存器(EBX)、1
17、6位寄存器位寄存器(BX)或或8位位寄存器寄存器(BH或或BL)引用。引用。n在在80x86系列的各种型号微处理器中,均可以系列的各种型号微处理器中,均可以用用BX存放访问存储单元的偏移地址。存放访问存储单元的偏移地址。n在在80386及更高型号的微处理器中,及更高型号的微处理器中,EBX也可以也可以用于存放访问存储单元的偏移地址。用于存放访问存储单元的偏移地址。nECX(Count,计数计数):ECX是个通用寄存器,是个通用寄存器,它可以作为它可以作为32位寄存器位寄存器(ECX)、16位寄存器位寄存器(CX)或或8位寄存器位寄存器(CH或或CL)引用。引用。nECX可用来作为多种指令的计数
18、值。用于计数可用来作为多种指令的计数值。用于计数的指令是重复的串操作指令、移位指令、循环的指令是重复的串操作指令、移位指令、循环移位指令和移位指令和LOOP/LOOPD指令。指令。n移位和循环移位指令用移位和循环移位指令用CL计数,重复的串操作计数,重复的串操作指令用指令用CX计数,计数,LOOP/LOOPD指令用指令用CX或或ECX计数。计数。n在在80386及更高型号的微处理器中,及更高型号的微处理器中,ECX也可也可用来存放访问存储单元的偏移地址。用来存放访问存储单元的偏移地址。nEDX(Data,数据数据):EDX是个通用寄存器,是个通用寄存器,用于保存乘法运算产生的部分积,或除法运算
19、用于保存乘法运算产生的部分积,或除法运算之前的部分被除数。之前的部分被除数。n对于对于80386及更高型号的微处理器,这个寄存及更高型号的微处理器,这个寄存器也可用来寻址存储器数据。器也可用来寻址存储器数据。(2) 指针寄存器和变址寄存器指针寄存器和变址寄存器n这是另外这是另外4个通用寄存器,分别是:堆栈指针个通用寄存器,分别是:堆栈指针寄存器寄存器ESP、基址指针寄存器基址指针寄存器EBP、源变址寄源变址寄存器存器ESI和目的变址寄存器和目的变址寄存器EDI。nESP(Stack Pointer,堆栈指针堆栈指针):ESP寻址一个寻址一个称为堆栈的存储区。通过这个指针存取堆栈存称为堆栈的存储
20、区。通过这个指针存取堆栈存储器数据。储器数据。n这个寄存器作为这个寄存器作为16位寄存器引用时,为位寄存器引用时,为SP;作作为为32位寄存器引用时,则为位寄存器引用时,则为ESP。nEBP(Base Pointer,基址指针基址指针):EBP用来存放用来存放访问堆栈段的一个数据区的访问堆栈段的一个数据区的“基地址基地址”。它作。它作为为16位寄存器引用时,为位寄存器引用时,为BP;作为作为32位寄存器位寄存器引用时,则是引用时,则是EBP。nESI(Source Index,源变址源变址):ESI用于寻址串用于寻址串操作指令的源数据串。它的另一个功能是作为操作指令的源数据串。它的另一个功能是
21、作为32位位(ESI)或或16位位(SI)的数据寄存器使用。的数据寄存器使用。nEDI(Destination Index,目的变址目的变址):EDI用用于寻址串操作指令的目的数据串。如同于寻址串操作指令的目的数据串。如同ESI一样,一样,EDI也可用为也可用为32位位(EDI)或或16位位(DI)的数据寄存的数据寄存器使用。器使用。2. 指令指针寄存器指令指针寄存器EIP(Instruction Pointer)nEIP是一个专用寄存器,用于寻址当前需要取出的是一个专用寄存器,用于寻址当前需要取出的指令字节。当指令字节。当CPU从内存中取出一个指令字节后,从内存中取出一个指令字节后,EIP就
22、自动加就自动加1,指向下一指令字节。,指向下一指令字节。n当微处理器工作在实模式下时,这个寄存器为当微处理器工作在实模式下时,这个寄存器为IP(16位位);当;当80386及更高型号的微处理器工作于及更高型号的微处理器工作于保护模式下时,则是保护模式下时,则是EIP(32位位)。n程序员不能对程序员不能对EIP/IP进行存取操作进行存取操作。程序中的转移。程序中的转移指令、返回指令以及中断处理能对指令、返回指令以及中断处理能对EIP/IP进行操作。进行操作。 3. 标志寄存器标志寄存器EFLAGSnEFLAGS用于指示微处理器的状态并控制它的操作。用于指示微处理器的状态并控制它的操作。图图3.
23、4展示了展示了80x86/Pentium系列所有型号微处理器的系列所有型号微处理器的标志寄存器的情况。标志寄存器的情况。n早期的早期的8086/8088微处理器的标志寄存器微处理器的标志寄存器FLAG为为16位,位,且只定义了其中的且只定义了其中的9位;位;n80286微处理器虽然仍为微处理器虽然仍为16位的标志寄存器,但定义位的标志寄存器,但定义的标志位已从原来的的标志位已从原来的9位增加到位增加到12位;位; n80386及更高型号的微处理器则采用及更高型号的微处理器则采用32位的标志寄存位的标志寄存器器EFLAGS,所定义的标志位也有相应的扩充。所定义的标志位也有相应的扩充。.ID VI
24、PVIF AC VM RFNTIOPODAPC31 21 20 19 18 17 16 15 14 13 12 11 10 98765432101IOP0ITSZPentium / Pentium II80486SX / 80486DX80386DX802868086 / 8088图图3.4 80x86 / Pentium 全系列微处理器的标志寄存器全系列微处理器的标志寄存器8086/8088系统中所定义的系统中所定义的9个标志位个标志位O、D、I、T、S、Z、A、P、C,这也是实模式下这也是实模式下80x86/Pentium系列微处理器所使用的标志位。系列微处理器所使用的标志位。在这在这9个
25、标志位中,有个标志位中,有6位位(即即CF、PF、AF、ZF、SF和和OF)为状态标志;其余为状态标志;其余3位位(即即TF、IF和和DF)为控制标志。为控制标志。 状态标志状态标志反映微处理器的工作状态,如执行加反映微处理器的工作状态,如执行加法运算时是否产生进位,执行减法运算时是否法运算时是否产生进位,执行减法运算时是否产生借位,运算结果是否为零等;产生借位,运算结果是否为零等;控制标志控制标志对微处理器的运行起特定的控制作用,对微处理器的运行起特定的控制作用,如以单步方式运行还是以连续方式运行,在程如以单步方式运行还是以连续方式运行,在程序执行过程中是否允许响应外部中断请求等。序执行过程
26、中是否允许响应外部中断请求等。. 8086/8088标志寄存器的格式及各位的功能标志寄存器的格式及各位的功能 1514131211109876543210OFDFIFTFSFZFAFPFCF状状态态标标志志方向标志方向标志中断标志中断标志跟踪标志跟踪标志(Trace Flag) 控控制制标标志志进位标志进位标志奇偶标志奇偶标志半进位标志半进位标志零标志零标志符号标志符号标志溢出标志溢出标志六个状态标志的功能简述如下:六个状态标志的功能简述如下:(1) 进位标志进位标志CF(Carry Flag): 当执行算术运算指当执行算术运算指令时,其结果的最高位有进位或借位时令时,其结果的最高位有进位或借
27、位时将将CF置置1;否则将;否则将CF置置0。(2) 奇偶标志奇偶标志PF(Parity Flag): 该标志位反映操作该标志位反映操作结果低结果低8位中位中“1”的个数情况,若为偶数的个数情况,若为偶数个个“1”,则将,则将PF置置“1”;若为奇数个;若为奇数个“1”,则,则将将PF置置“0”。它是早期它是早期Intel微处理器在数据通信环境中校验数据微处理器在数据通信环境中校验数据的一种手段。今天,奇偶校验通常由数据存储和的一种手段。今天,奇偶校验通常由数据存储和通信设备完成,而不是由微处理器完成。所以,通信设备完成,而不是由微处理器完成。所以,这个标志位在现代程序设计中很少使用。这个标志
28、位在现代程序设计中很少使用。(3) 辅助进位标志辅助进位标志AF(Auxiliary carry Flag): 辅助进位标志也称辅助进位标志也称“半进位半进位”标志。标志。AF1,表示表示本次运算的低本次运算的低4位中的最高位有进位位中的最高位有进位(加法运算时加法运算时)或有借位或有借位(减法运算时减法运算时)。nAF一般用于一般用于BCD运算中是否进行十进制调整的依运算中是否进行十进制调整的依据。十进制调整指令据。十进制调整指令DAA和和DAS测试这个标志位。测试这个标志位。n(4) 零标志零标志ZF(Zero Flag):反映运算结果是否为零。反映运算结果是否为零。若结果为零,则若结果为
29、零,则ZF1;若结果不为零,则若结果不为零,则ZF0。(5) 符号标志符号标志SF(Sign Flag):反映带符号数反映带符号数(以二进制补码表示以二进制补码表示)运算结果符运算结果符号位的情况。号位的情况。若结果为负数,则若结果为负数,则SF1;若结果为正数,则若结果为正数,则SF0。SF的取值总是与运算结果的最高位的取值总是与运算结果的最高位(字节操作字节操作为为D7,字操作为字操作为D15,双字操作为双字操作为D31)取值一取值一致。致。(6) 溢出标志溢出标志OF(Overflow Flag):反映有符号数运算结果是否发生溢出。若发生溢出,反映有符号数运算结果是否发生溢出。若发生溢出
30、,则则OF1;否则,否则,OF0。 溢出是指运算结果超出了计算装置所能表示的数溢出是指运算结果超出了计算装置所能表示的数值范围。例如,对于字节运算,数值表示范围为值范围。例如,对于字节运算,数值表示范围为 -128+127;对于字运算,数值表示范围为;对于字运算,数值表示范围为-32768+32767。若超过上述范围,则发生了溢出。若超过上述范围,则发生了溢出。溢出是一种差错,系统应做相应的处理。溢出是一种差错,系统应做相应的处理。“溢出溢出”与与“进位进位”是两种不同的概念。某次运是两种不同的概念。某次运算结果有算结果有“溢出溢出”,不一定有,不一定有“进位进位”;反之,;反之,有有“进位进
31、位”,也不一定发生,也不一定发生“溢出溢出”。另外,另外,“溢出溢出”标志实际上是针对有符号数运算标志实际上是针对有符号数运算而言,对于无符号数运算,不考虑溢出标志。而言,对于无符号数运算,不考虑溢出标志。例例: :指出指出8080x86CPUx86CPU执行如下指令后,标志寄存器执行如下指令后,标志寄存器中各状态标志位的值:中各状态标志位的值:(1) (1) MOV AX,32C5H (2) MOV AX,0E453HMOV AX,32C5H (2) MOV AX,0E453H ADD AX,546AH ADD AX,0C572H ADD AX,546AH ADD AX,0C572H 解解
32、: (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(Direction Flag):用来控制串操用来控制串操作指令的执行。作指令的执行。若若DF0,则串操作指令的地址自动增量修改,则串操作指令的地址自动增量修改,串数据的传送过
33、程是从低地址到高地址的方向进串数据的传送过程是从低地址到高地址的方向进行;行;若若DF1,则串操作指令的地址自动减量修改,则串操作指令的地址自动减量修改,串数据的传送过程是从高地址到低地址的方向进串数据的传送过程是从高地址到低地址的方向进行。行。 可以设置可以设置DF的指令的指令为为STD(置置1)和和CLD(清清0)。(2) 中断标志中断标志IF(Interrupt Flag):用来控制对可屏用来控制对可屏蔽中断的响应。蔽中断的响应。若若IF1,则允许则允许CPU响应可屏蔽中断请求;响应可屏蔽中断请求;若若IF0,则则CPU不能对可屏蔽中断请求作出响不能对可屏蔽中断请求作出响应。应。可以设置
34、可以设置IF的指令有的指令有STI(置置1)和和CLI(置置0)。IF对对非屏蔽中断和内部中断不起作用。非屏蔽中断和内部中断不起作用。(3) 陷阱标志陷阱标志TF(Trap Flag):陷阱标志也称单步标志。陷阱标志也称单步标志。当当TF1时,微处理器就进入单步工作方式,每执时,微处理器就进入单步工作方式,每执行完一条指令便自动产生一个内部中断行完一条指令便自动产生一个内部中断(称为单步中称为单步中断断),转去执行一个中断服务程序,可以借助中断服,转去执行一个中断服务程序,可以借助中断服务程序来检查每条指令的执行情况;务程序来检查每条指令的执行情况;若若TF0,则则CPU正常正常(连续连续)执
35、行指令。执行指令。单步工作方式常用于程序的调试。单步工作方式常用于程序的调试。4. 段寄存器段寄存器n微处理器寄存器集合中的另一组寄存器为微处理器寄存器集合中的另一组寄存器为16位位的段寄存器,用于与微处理器中的其他寄存器的段寄存器,用于与微处理器中的其他寄存器联合生成存储器地址。联合生成存储器地址。n对于同一个微处理器而言,段寄存器的功能在实对于同一个微处理器而言,段寄存器的功能在实模式下和保护模式下是不相同的。模式下和保护模式下是不相同的。(1) 代码段寄存器代码段寄存器CS(Code Segment):代码段是一代码段是一个存储区域,用以保存微处理器使用的代码个存储区域,用以保存微处理器
36、使用的代码(程程序或过程序或过程)。代码段寄存器定义代码段的起始地。代码段寄存器定义代码段的起始地址。址。在实模式下工作时,它定义一个在实模式下工作时,它定义一个64K字节存储器字节存储器段的起点;段的起点; 在保护模式下工作时,它选择一个描述代码段起在保护模式下工作时,它选择一个描述代码段起始地址、长度及其他一些必要的属性信息始地址、长度及其他一些必要的属性信息(如可如可读、可写或可被执行等读、可写或可被执行等)的描述符。的描述符。(2) 数据段寄存器数据段寄存器DS(Data Segment):n数据段是包含程序所使用的大部分数据的存储区。数据段是包含程序所使用的大部分数据的存储区。n与代
37、码段寄存器与代码段寄存器CS类似,数据段寄存器类似,数据段寄存器DS用以用以定义数据段的起始地址。定义数据段的起始地址。n与代码段一样,对于与代码段一样,对于808680286,数据段的长,数据段的长度限制为度限制为64KB;n对于工作在保护模式下的对于工作在保护模式下的80386及更高型号的微及更高型号的微处理器,数据段长度限制为处理器,数据段长度限制为4GB。(3) 附加段寄存器附加段寄存器ES(Extra Segment):附加段是为某些串操作指令存放目的操作数而附附加段是为某些串操作指令存放目的操作数而附加的一个数据段。加的一个数据段。附加段寄存器附加段寄存器ES用以定义附加段的起始地
38、址。附用以定义附加段的起始地址。附加段的长度限制与上述代码段及数据段的情况相加段的长度限制与上述代码段及数据段的情况相同。同。(4) 堆栈段寄存器堆栈段寄存器SS(Stack Segment): 堆栈是存储器中的一个特殊存储区,用以暂时存堆栈是存储器中的一个特殊存储区,用以暂时存放程序运行中的一些数据和地址信息。放程序运行中的一些数据和地址信息。堆栈段寄存器堆栈段寄存器SS定义堆栈段的首地址。由堆栈段定义堆栈段的首地址。由堆栈段寄存器寄存器SS和堆栈指针寄存器和堆栈指针寄存器(ESP/SP)确定堆栈段确定堆栈段内的存取地址。内的存取地址。另外另外,EBP/BP寄存器也可以寻址堆栈段内的数据。寄
39、存器也可以寻址堆栈段内的数据。 (5) 段寄存器段寄存器FS和和GS:这两个段寄存器仅对这两个段寄存器仅对80386及更高型号的微处及更高型号的微处理器有效,以便程序访问相应的两个附加的存理器有效,以便程序访问相应的两个附加的存储器段。储器段。3.4 实模式下的存储器寻址实模式下的存储器寻址3.4.1 实模式下的存储器地址空间实模式下的存储器地址空间在实模式下存储器的地址空间为在实模式下存储器的地址空间为1M字节单元,其地字节单元,其地址范围为址范围为00000HFFFFFH。 实模式下的存储器地址空间被分为通用和专用两种实模式下的存储器地址空间被分为通用和专用两种存储区。存储区。从地址从地址
40、00000H003FFH这第一个这第一个1024个字节单元是个字节单元是专用的。这个存储区为中断向量表区,专门用来存专用的。这个存储区为中断向量表区,专门用来存放放256个中断服务程序的入口地址个中断服务程序的入口地址(也称中断向量也称中断向量),每个入口地址占每个入口地址占4个字节单元。个字节单元。 从地址从地址FFFF0HFFFFFH这这16个字节单元保留给个字节单元保留给系统的初始化代码。系统的初始化代码。当处理器加电或复位当处理器加电或复位(Reset)时,时,CPU执行的第一执行的第一条指令就是起始于地址条指令就是起始于地址FFFF0H的。的。通常是在通常是在FFFF0H处存放一条无
41、条件转移指令,以处存放一条无条件转移指令,以转移到系统程序的入口处。转移到系统程序的入口处。通用区域用来存储一般的程序指令和数据。由图通用区域用来存储一般的程序指令和数据。由图3.5可见,它的地址范围为可见,它的地址范围为00400HFFFEFH。.FFFFFHFFFF0H通用区通用区专用区专用区FFFEFH00400H003FFH00000H专用区专用区图图3.5 实模式下存储器地址空间实模式下存储器地址空间 3.4.2 存储器分段技术存储器分段技术n为什麽要采用存储器为什麽要采用存储器“分段分段”技术?技术? 实模式实模式下下CPU可直接寻址的地址空间为可直接寻址的地址空间为2201M字节
42、单元。字节单元。CPU需输出需输出20位地址信息才能实现对位地址信息才能实现对1M字节单元存储空间的寻址。字节单元存储空间的寻址。但实模式下但实模式下CPU中所使用的寄存器均是中所使用的寄存器均是16位的,内位的,内部部ALU也只能进行也只能进行16位运算,其寻址范围局限在位运算,其寻址范围局限在21665536(64K)字节单元。字节单元。为了实现对为了实现对1M字节单元的寻址,字节单元的寻址,80x86系统采用了系统采用了存储器分段技术。存储器分段技术。q具体做法是,将具体做法是,将1M字节的存储空间分成许多逻辑字节的存储空间分成许多逻辑段,每段最长段,每段最长64K字节单元,可以用字节单
43、元,可以用16位地址码位地址码进行寻址。进行寻址。q 每个逻辑段在实际存储空间中的位置是可以浮动每个逻辑段在实际存储空间中的位置是可以浮动的的,其起始地址可由段寄存器的内容来确定。实际其起始地址可由段寄存器的内容来确定。实际上,段寄存器中存放的是段起始地址的高上,段寄存器中存放的是段起始地址的高16位,位,称之为称之为“段基值段基值”(segment base value)。q 逻辑段在物理存储器中的位置如图逻辑段在物理存储器中的位置如图3.6所示。所示。.FFFFFH逻辑段逻辑段1起点起点逻辑段逻辑段2起点起点逻辑段逻辑段3起点起点逻辑段逻辑段4起点起点00000H逻辑段逻辑段1 64KB逻
44、辑段逻辑段2 64KB逻辑段逻辑段3 64KB逻辑段逻辑段4 64KB 图图3.6 逻辑段在物理存储器中的位置逻辑段在物理存储器中的位置n各个逻辑段在实际的存储空间中可以完全分开,各个逻辑段在实际的存储空间中可以完全分开,也可以部分重叠,甚至完全重叠。也可以部分重叠,甚至完全重叠。n段的起始地址的计算和分配通常是由操作系统完段的起始地址的计算和分配通常是由操作系统完成的,并不需要普通用户参与。成的,并不需要普通用户参与。n还有其他方法也可以将还有其他方法也可以将1M字节单元的物理存字节单元的物理存储器空间分成可用储器空间分成可用16位地址码寻址的逻辑段。位地址码寻址的逻辑段。n例如将例如将20
45、位物理地址分成两部分:位物理地址分成两部分: 高高4位为段位为段号,可用机器内设置的号,可用机器内设置的4位长的位长的“段号寄存器段号寄存器”来保存,低来保存,低16位为段内地址,也称位为段内地址,也称“偏移地偏移地址址”,如下图所示:,如下图所示:.1916 1512 1187430XXXX段号段号(4位位)段内地址段内地址(16位位) 这种分段方法有其不足之处这种分段方法有其不足之处:n(1) 4位长的位长的“段号寄存器段号寄存器”与其他寄存器不兼与其他寄存器不兼容,操作上会增添麻烦。容,操作上会增添麻烦。n (2) 每个逻辑段大小固定为每个逻辑段大小固定为64K字节单元,当字节单元,当程
46、序中所需的存储空间不是程序中所需的存储空间不是64K字节单元的倍字节单元的倍数时,就会浪费存储空间。数时,就会浪费存储空间。n 反观前一种分段机制,则要灵活、方便得多,反观前一种分段机制,则要灵活、方便得多,所以所以80x86/Pentium系统中采用了前一种分段系统中采用了前一种分段机制。机制。3.4.3 实模式下的存储器寻址实模式下的存储器寻址1. 物理地址与逻辑地址物理地址与逻辑地址n在有地址变换机构的计算机系统中,每个存储在有地址变换机构的计算机系统中,每个存储单元可以看成具有两种地址:单元可以看成具有两种地址:物理地址和逻辑物理地址和逻辑地址地址。n物理地址物理地址是信息在存储器中实
47、际存放的地址,是信息在存储器中实际存放的地址,它是它是CPU访问存储器时实际输出的地址。访问存储器时实际输出的地址。n例如,实模式下的例如,实模式下的80x86/Pentium系统的物理地系统的物理地址是址是20位,存储空间为位,存储空间为2201M字节单元,地字节单元,地址范围从址范围从00000H到到FFFFFH。n逻辑地址逻辑地址是编程时所使用的地址是编程时所使用的地址。n编程时不需要知道产生的代码或数据在存编程时不需要知道产生的代码或数据在存储器中的具体物理位置。这样可以简化存储器中的具体物理位置。这样可以简化存储资源的动态管理。储资源的动态管理。n在实模式下的软件结构中,在实模式下的
48、软件结构中,逻辑地址逻辑地址由由“段基值段基值”和和“偏移量偏移量”两部分构成。两部分构成。n“段基值段基值”是段的起始地址的高是段的起始地址的高16位。位。n“偏移量偏移量”(offset)也称偏移地址,也称偏移地址,它是它是所访问的存储单元距段的起始地址之间的所访问的存储单元距段的起始地址之间的字节距离。字节距离。n给定段基值和偏移量,就可以在存储器中给定段基值和偏移量,就可以在存储器中寻址所访问的存储单元。寻址所访问的存储单元。n在实模式下,在实模式下,“段基值段基值”和和“偏移量偏移量”均是均是16位的。位的。n“段基值段基值”由段寄存器由段寄存器CS、DS、SS、ES、FS和和GS提
49、供;提供;n“偏移量偏移量”由由BX、BP、SP、SI、DI、IP或以这些寄存器的组合形式来提供。或以这些寄存器的组合形式来提供。2. 实模式下物理地址的产生实模式下物理地址的产生n实模式下实模式下CPU访问存储器时的访问存储器时的20位物理地址可位物理地址可由逻辑地址转换而来。由逻辑地址转换而来。n具体方法是,将段寄存器中的具体方法是,将段寄存器中的16位位“段基值段基值”左左移移4位位(低位补低位补0),再与,再与16位的位的“偏移量偏移量”相加,相加,即可得到所访问存储单元的物理地址,即可得到所访问存储单元的物理地址,如图如图3.7所示。所示。.段基值段基值(16位位)偏移量偏移量(16
50、位位)150150段基值段基值(16位位)1500000段寄存器段寄存器地址加法器地址加法器物理地址(物理地址(20位)位)190物理地址物理地址逻辑地址逻辑地址图图3.7实模式下物理地址的产生实模式下物理地址的产生n上述由逻辑地址转换为物理地址的过程也可以表上述由逻辑地址转换为物理地址的过程也可以表示成如下计算公式:示成如下计算公式:n 物理地址段基值物理地址段基值16+偏移量偏移量n上式中的上式中的“段基值段基值16”在微处理器中是通过将在微处理器中是通过将段寄存器的内容左移段寄存器的内容左移4位位(低位补低位补0)来实现的,与来实现的,与偏移量相加的操作则由地址加法器来完成。偏移量相加的
51、操作则由地址加法器来完成。n例例 3.1 设代码段寄存器设代码段寄存器CS的内容为的内容为4232H,指指令指针寄存器令指针寄存器IP的内容为的内容为0066H,即即CS4232H,IP0066H,则访问代码段存储单元则访问代码段存储单元的物理地址计算如下:的物理地址计算如下:.4 2 3 20 0 6 64 2 3 20 0 6 60段基值段基值偏移量偏移量左移左移4位位物理地址物理地址逻辑地址逻辑地址 4 2 3 8 6+)n例例 3.2 设数据段寄存器设数据段寄存器DS的内容为的内容为1234H,基基址寄存器址寄存器BX的内容为的内容为0022H,即即DS1234H,BX0022H,则访
52、问数据段存储单元的物理地则访问数据段存储单元的物理地址计算如下:址计算如下:.1 2 3 40 0 2 21 2 3 40 0 2 20段基值段基值偏移量偏移量左移左移4位位物理地址物理地址逻辑地址逻辑地址 1 2 3 6 2+).n例例 3.3 若段寄存器内容是若段寄存器内容是002AH,产生的物理产生的物理地址是地址是002C3H,则偏移量是多少则偏移量是多少? 解解: 将段寄存器内容左移将段寄存器内容左移4位,低位补位,低位补0得:得: 002A0H。 从物理地址中减去上列值得偏移量为:从物理地址中减去上列值得偏移量为: 002C3H-002A0H0023H。 需注意的是,每个存储单元有
53、惟一的物需注意的是,每个存储单元有惟一的物理地址,但它可以由不同的理地址,但它可以由不同的“段基值段基值”和和“偏移量偏移量”转换而来,这只要把段基转换而来,这只要把段基值和偏移量改变为相应的值即可。值和偏移量改变为相应的值即可。 同一个物理地址可以由不同的逻辑地址同一个物理地址可以由不同的逻辑地址来构成。来构成。或者说,同一个物理地址与多或者说,同一个物理地址与多个逻辑地址相对应。个逻辑地址相对应。例如,段基值为例如,段基值为0020H,偏移量为偏移量为0013H,构构成的物理地址为成的物理地址为00213H;若段基值改变为若段基值改变为0021H,配以新的偏移量配以新的偏移量0003H,其
54、物理地址仍然是其物理地址仍然是00213H,如图如图3.8所所示。示。.00213H00212H00211H00210H0020FH0020EH0020DH0020CH0020BH0020AH00209H00208H00207H00206H00205H00204H00203H00202H00201H00200H段基值段基值(0021H)段基值段基值(0020H)偏移量偏移量(13H)物理地址物理地址偏移量偏移量(03H)逻辑地址逻辑地址图图3.8 一个物理地址对应多个逻辑地址一个物理地址对应多个逻辑地址3. “段加偏移段加偏移”寻址寻址n上述由段基值上述由段基值(段寄存器的内容段寄存器的内容)
55、和偏移量相结和偏移量相结合的存储器寻址机制也称为合的存储器寻址机制也称为“段加偏移段加偏移”寻址寻址机制,所访问的存储单元的地址常被表示成机制,所访问的存储单元的地址常被表示成“段基值:偏移量段基值:偏移量”的形式。的形式。n例如,若段基值为例如,若段基值为2000H,偏移量为偏移量为3000H,则所访问的存储单元的地址为则所访问的存储单元的地址为2000H:3000H。n图图3.9进一步说明了这种进一步说明了这种“段加偏移段加偏移”的寻址机的寻址机制如何选择所访问的存储单元的情形。制如何选择所访问的存储单元的情形。n这里段寄存器的内容为这里段寄存器的内容为1000H,偏移地址为偏移地址为20
56、00H。图中显示了一个图中显示了一个64KB长的存储器段,长的存储器段,该段起始于该段起始于10000H,结束于结束于1FFFFH。n图中也表示了如何通过段基值图中也表示了如何通过段基值(段寄存器的内段寄存器的内容容)和偏移量找到存储器中被选单元的情形。和偏移量找到存储器中被选单元的情形。偏移量偏移量(offset)也称偏移地址,正如图中所示,也称偏移地址,正如图中所示,它是自段的起始位置到所选存储单元之间的它是自段的起始位置到所选存储单元之间的距距离离(或跨度或跨度)。.1FFFFH (段终址段终址)10000H (段始址段始址)12000H(被选单元被选单元)一个逻辑段一个逻辑段(64KB
57、)FFFFFH实模式存储器实模式存储器1000H段寄存器段寄存器偏移量偏移量=2000H图图3.9 实模式下存储器寻址机制实模式下存储器寻址机制 “段加偏移段加偏移” n图图3.9中段的起始地址中段的起始地址10000H是由段寄存器内是由段寄存器内容容1000H左移左移4位低位补位低位补0(或在或在1000H后边添加后边添加0H)而得到的。而得到的。n段的结束地址段的结束地址1FFFFH是由段起始地址是由段起始地址10000H与段长度与段长度FFFFH(64K)相加之结果。相加之结果。n在这种在这种“段加偏移段加偏移”的寻址机制中,由于是将的寻址机制中,由于是将段寄存器的内容左移段寄存器的内容
58、左移4位位(相当于乘以十进制数相当于乘以十进制数16)来作为段的起始地址的,所以来作为段的起始地址的,所以实模下各个逻实模下各个逻辑段只能起始于存储器中辑段只能起始于存储器中16字节整数倍的边界。字节整数倍的边界。n这样可以简化实模式下这样可以简化实模式下CPU生成物理地址的操生成物理地址的操作。通常称这作。通常称这16字节的小存储区域为字节的小存储区域为“分段分段”或或“节节”(paragraph)。4. 默认的段和偏移寄存器默认的段和偏移寄存器n在在“段加偏移段加偏移”的寻址机制中,微处理器有一的寻址机制中,微处理器有一套用于定义各种寻址方式中段寄存器和偏移地套用于定义各种寻址方式中段寄存
59、器和偏移地址寄存器的组合规则。如表址寄存器的组合规则。如表3-1和表和表3-2所示。所示。.段寄存器段寄存器偏移地址寄存器偏移地址寄存器主要用途主要用途CSIP指令地址指令地址SSSP或或BP堆栈地址堆栈地址DSBX、DI、SI、8位或位或16位数位数数据地址数据地址ES串操作指令的串操作指令的DI串操作目的地址串操作目的地址表表3-1默认的默认的16位位“段段+偏移偏移”寻址组合寻址组合 段寄器段寄器偏移地址寄存器偏移地址寄存器主要用途主要用途CSEIP指令地址指令地址SSESP或或EBP堆栈指针堆栈指针DSEAX、EBX、ECX、EDX、EDI、ESI、8位位(16位或位或32位位)数数数
60、据地址数据地址ES串操作指令的串操作指令的EDI串操作目的地址串操作目的地址FS无默认无默认一般地址一般地址GS无默认无默认一般地址一般地址表表3-2默认的默认的32位位“段段+偏移偏移”寻址组合寻址组合3.4.4 堆栈堆栈堆栈定义堆栈定义:堆栈是存储器中的一个特定的存储区,它的一堆栈是存储器中的一个特定的存储区,它的一端端(栈底栈底)是固定的,另一端是固定的,另一端(栈顶栈顶)是浮动的,是浮动的,信息的存入和取出都只能在浮动的一端进行,信息的存入和取出都只能在浮动的一端进行,并且遵循后进先出并且遵循后进先出(Last In First Out)的原则。的原则。 *堆栈是一种后进先出型数据结构
61、。堆栈是一种后进先出型数据结构。*堆栈是插入和删除操作都只能在一端进行的线性堆栈是插入和删除操作都只能在一端进行的线性表。表。 堆栈的用途:堆栈的用途: 堆栈主要用来暂时保存程序运行时的一些地址堆栈主要用来暂时保存程序运行时的一些地址或数据信息。或数据信息。当当CPU执行调用执行调用(Call)指令时,用堆栈保存程指令时,用堆栈保存程序的返回地址序的返回地址(亦称断点地址亦称断点地址); 在中断响应及中断处理时,通过堆栈在中断响应及中断处理时,通过堆栈“保存现保存现场场”和和“恢复现场恢复现场”; 有时也利用堆栈为子程序传递参数。有时也利用堆栈为子程序传递参数。 堆栈的结构:堆栈的结构:n堆栈
62、是在存储器中实现的,并由堆栈段寄存器堆栈是在存储器中实现的,并由堆栈段寄存器SS和堆栈指针寄存器和堆栈指针寄存器SP来定位。来定位。nSS寄存器中存放的是堆栈段的段基值,它确定了寄存器中存放的是堆栈段的段基值,它确定了堆栈段的起始位置。堆栈段的起始位置。nSP寄存器中存放的是堆栈操作单元的偏移量,寄存器中存放的是堆栈操作单元的偏移量,SP总是指向栈顶。总是指向栈顶。n图图3.10给出了堆栈的基本结构及操作示意图。给出了堆栈的基本结构及操作示意图。 SSSSSSSPSPSP高地址高地址栈底栈底(栈栈顶顶)存储器存储器(字宽字宽)低地址低地址78H56H34H12H栈底栈底栈顶栈顶栈顶栈顶栈底栈底
63、78H56H34H12H(a) 空栈堆空栈堆(b) 压入:压入:PUSH AX; AX=1234H PUSH BX; BX=5678H(c) 弹出:弹出:POP CX;图图3.10 堆栈的结构与操作堆栈的结构与操作n值得注意的是,这种结构的堆栈是所谓值得注意的是,这种结构的堆栈是所谓“向下向下生长的生长的”,即栈底在堆栈的高地址端,当堆栈,即栈底在堆栈的高地址端,当堆栈为空时为空时SP就指向栈底。就指向栈底。n堆栈段的段基址堆栈段的段基址(由由SS寄存器确定寄存器确定)并不是栈底。并不是栈底。n堆栈的操作特点:堆栈的操作特点:n实模式下的堆栈为实模式下的堆栈为16位宽位宽(字宽字宽),堆栈操作
64、指令,堆栈操作指令(PUSH指令或指令或POP指令指令)对堆栈的操作总是以字为对堆栈的操作总是以字为单位进行。单位进行。n要压栈要压栈(执行执行PUSH指令指令)时,先将时,先将SP的值减的值减2,然后将然后将16位的信息压入新的栈顶。位的信息压入新的栈顶。n要弹栈要弹栈(执行执行POP指令指令)时,先从当前栈顶取出时,先从当前栈顶取出16位的信息,然后将位的信息,然后将SP的值加的值加2。n可概括为:可概括为: “压栈时,压栈时, 先修改栈指针后压入先修改栈指针后压入”, “弹栈时,弹栈时, 先弹出后修改栈指针先弹出后修改栈指针”。 例例 : 若寄存器若寄存器AX,BX,CX,DX的内容分别为的内容分别为10,20,30,40时,依次执行时,依次执行PUSH AX, PUSH BX, POP CX, POP DX, PUSH CX, PUSH DX, POP AX,POP BX后,寄存器后,寄存器 AX和和BX 的内容的内容分别为分别为第第3章章 作业作业P52 9. 10. 13. 14.