32位微型计算机接口技术及应用 第三章-基于微处理器的微机系统软件模型

  • 格式:docx
  • 大小:452.96 KB
  • 文档页数:17

目录第三章基于微处理器的微机系统软件模型 (2)3.1微机系统软件模型概述 (2)3.2实模式下微处理器的寄存器模型 (2)3.3保护模式下微处理器的寄存器模型 (5)3.3.1系统地址寄存器 (6)3.3.2控制寄存器 (7)3.3.3改变功能的寄存器 (8)3.3.4程序不可见寄存器 (9)3.4实模式存储器模型 (10)3.4.1实模式下存储器地址空间和数据组织 (10)3.4.2实模式存储器地址的分段 (11)3.4.3实模式下存储器寻址 (12)3.4.4实模式下存储器物理地址的形成 (13)3.5保护模式存储器模型 (14)3.5.1保护模式下虚拟存储器的地址空间 (14)3.5.2保护模式下虚拟地址空间的分段 (14)3.5.3保护模式下存储器寻址 (15)3.5.4保护模式下段式地址的转换 (15)3.5.5保护模式下存储器地址空间的分页 (16)3.6实模式下I/O地址空间模型 (16)3.7保护模式下I/O地址空间模型 (16)习题 (17)第三章基于微处理器的微机系统软件模型考量微机中的微处理器、存储器及I/O系统,而不深究其内部电路结构的硬件细节。

例如,对微处理器,只把它当成是一组功能不同的可编程寄存器,而不考虑其内部电路结构。

这样,在程序设计期间就可以使用微处理器模型中的寄存器,并用指令来操作它们。

因此,微机系统软件模型,又可以叫做程序设计模型。

微机系统软件模型所描述的对象包括微处理器的寄存器模型、存储器模型和I/O地址空间模型。

这些都是用户可以用程序的方法访问和使用的微机系统资源,而那些用户不可以用程序的方法访问与使用的硬件资源(如微处理器的运算部件,流水线等)则不属于微机系统软件模型的范围。

3.1 微机系统软件模型概述1.研究微机系统软件模型的意义首先,从编程的观点来看待微机系统的硬件资源,可以简化对内部硬件细节的了解。

例如,对微处理器,就只需着重了解它的可编程的寄存器的功能、使用方法,而对微处理器的内部电路结构不必在意。

其次,使用微处理器的汇编语言编程,也必须从软件的观点去了解微处理器及其存储器子系统和I/O 子系统的操作。

掌握软件模型中寄存器的功能和使用方法、存储器的分段与分页机制和访问方法,以及I/O 端口的读/写方法,对汇编语言程序设计至关重要。

其三,由于微处理器的活动(操作)都是靠软件来驱动的,用户编什么样的程序就可以使微处理器产生什么样的活动(操作)。

所以,用户对微机的应用,实际上是通过自己的程序来实现的。

其四,从兼容性来看,强调功能上、逻辑上兼容,而不强调物理上的兼容即内部电路细节上的兼容,采用软件模型也是适合的。

微处理器从8086到Pentium都具有向上兼容的特点。

即使是一些外围芯片,目前,也都是把许多原来具有独立功能的芯片集成在一个叫芯片组的大芯片中,如南桥芯片组。

虽然这些芯片组在内部结构上和原来单个外围支持芯片的结构完全不同,但从逻辑的和功能的观点,即从软件编程的观点,它们与原来的芯片是一样的,是兼容的。

总之,随着新技术的采用和集成度的提高,微处理器的功能越来越强大,内部结构也越来越复杂,外部的引脚也越来越多,相关的存储器系统及外围支持芯片组也越来越复杂,而且.这种趋势还会持续下去。

在这种情况下,利用软件模型(或程序设计模型)来了解、学习和应用微机系统中的微处理器、存储器和I/O系统,不能不说是一种可行的方法。

2.微处理器软件模型的兼容性不同的微处理器,其内部设置的寄存器不同,软件模型也就有所差别。

从8086直到Pentium微处理器都有各自的软件模型。

早期的8086、8088和80286是16位微处理器,只使用其中的8位或16位寄存器。

后来的80386、80486和Pentium是32位微处理器,可使用其中的8位、16位、32位乃至48位的寄存器,并且增加了一些具有新功能的寄存器。

但是,后来的微处理器的软件模型与早期的微处理器的软件模型完全兼容。

微处理器软件模型的兼容性,使得先前的一些应用程序能够在后来的微机系统中运行。

下面分别对软件模型中的微处理器的寄存器、存储器和I/O空间进行讨论,发展到32位微处理器之后,微处理器有实模式和保护模式之分,相应地也有实模式和保护模式两种软件模型。

3.2 实模式下微处理器的寄存器模型32位微处理器的实模式寄存器模型如图3.1所示。

图中,不打阴影的部分表示在实模式下编程使用的寄存器,包括:4个通用寄存器(AX、BX、CX和DX);6个段寄存器(CS、DS、SS、ES、FS和GS);2个指针寄存器(BP和SP);2个变址寄存器(SI和DI);1个指令指针(IP);1个标志寄存器(FLAGS);1个控制寄存器CR0。

下面分别介绍各寄存器的作用与格式。

1.通用寄存器实模式的4个通用寄存器是累加器寄存器(A)、基址寄存器(B)、计数寄存器(C)、数据寄存器(D)。

它们作为16位使用时在寄存器名后加X,如16位的累加器AX;作为32位使用时则在寄存器名前加E,如扩展的累加器EAX;作为8位使用时则分高、低字节寄存器,用字母H、L区别,如将A寄存器的高位字节表示为AH,而低位字节表示为AL。

在实模式下,使用16位或8位数据寄存器。

4个寄存器各自具有不同的功能。

A寄存器主要用于存放程序执行过程中的一些中间结果,以及存放I/O数据。

C寄存器在串、循环、循环移位和移位操作中用作计数寄存器,以统计被移位或循环移位的次数(位数)。

数据寄存器D也能存放地址信息,如存放I/O端口地址。

2.段寄存器段寄存器是为了存储器分段的需要而设置的,用于存放段基址,所有段寄存器都是16位的。

因此,段基址必须是16B的整数倍,并且段和段之间可以是连续的、相邻的、独立的或部分重合的。

系统中可以同时有6个段被激活而处于工作状态,即:1个代码段、1个堆栈段和4个数据段(DS、ES、FS和GS)同时激活,一起工作。

因此,需要6个段寄存器来存放这6个段的基地址.它们是代码段寄存器(CS)、堆栈段寄存器(SS)、数据段寄存器(DS、ES、FS和GS)。

这些寄存器中保存的值称为当前段寄存器值。

段寄存器内的数值可以由程序员通过软件加以改变。

因此,程序要访问存储器的哪一段,只需将该段的段基址写入相关段寄存器。

例如,要选用存储器中不同数据段空间的数据,只要改变数据段寄存器(DS、ES、FS和GS)中的数值即可。

同样,当执行段间调用指令使程序发生转移时,就需要改变代码段寄存器CS的数值。

一段内存,既可以作代码的存储空间,也可以作数据的存储空间,还可以作堆栈空间,主要是由微处理器中的段寄存器来指定。

例如由CS与IP指定为代码的存储空间,由DS与偏移指定为数据的存储空间,由SS与SP指定为堆栈存储空间。

3.指令指针实模式的指令指针IP为16位,它指示存储器中当前代码段内的偏移量,即代码与代码段段基址的距离。

实模式下由微处理器把IP的偏移量和CS的当前值组合成指令代码的地址,故要访问代码的地址为CS:IP。

可见,指令指针是存放程序代码的偏移地址的,而不是存放数据的。

4.指针和变址寄存器由于有些指令(算术、逻辑指令)的操作数在数据寄存器中,另一些指令(串指令)的操作数不在数据寄存器中,而在存储器内,因此,需要有一些能够确定操作数在存储器中的位置的寄存器。

指针寄存器和变址寄存器就是用于存放偏移量地址,而不是存放数据的寄存器。

它们分别以指针方式或变址方式选中存储器的64KB段内的具体存储单元。

指针寄存器(SP和BP)用于选取堆栈段内的具体存储单元,即指针寄存器的值指向堆栈段的栈顶或栈内的具体存储单元,而变址寄存器(SI和DI)用于选取数据段内的具体存储单元,即变址寄存器的值指向存储器数据段或附加段内的存储单元。

所以,如果要访问存储器堆栈存储区,只要把SP或BP内的数值与堆栈段寄存器SS中内容合并成存储器物理地址即可。

其中,栈顶指针SP与SS组合起来(SS:SP)形成20位地址指针,指向堆栈的顶部(TOS);基址指针BP与SS组合起来(SS:BP)形成20位地址指针,指向堆栈内的存储单元。

实模式下,BP经常用于读取堆栈内一些参数,传递给子程序,因而成为子程序参数传递的一种常用方法。

为此,子程序内应包括使用基址寻址的指令,该指令将从堆栈里读出参数值。

另外两个变址寄存器SI和DI用于存放数据段的偏移地址。

在指令中包含变址时,SI用于保存源操作数用的偏移量地址,DI用于保存目标操作数用的偏移地址。

5.标志寄存器图3.2给出了80X86-Pentium微处理器中的标志寄存器。

标志寄存器(FLAGS)是一个32位的寄存器,用于指示微处理器的状态并控制它的工作。

标志寄存器在实模式下只使用9位,如图3.3所示。

它包括状态标志与控制标志两类。

状态标志的逻辑状态取决于指令执行的结果,是自动产生的,其他指令可以使用这些标志来决定是否使程序发生转移,因此,有的书上把这类状态位叫做条件码,如条件转移指令。

控制标志是在程序中使用专门指令设置的,不是自动产生的,用来控制一些操作,如中断的开与关、地址的加与减的方向等。

(1)6位状态标志的作用●进位标志CF(carry flag)当执行算术指令时,若其结果的最高位有进位或借位,则将CF置1;否则,将CF复位。

●奇偶标志PF(Parity flag)当操作结果中有偶数个1时,置1;否则,置0。

●辅助进位标志AF(auxiliary carry flag)在8位、16位或32位二进制数内,若其较低字节中有低位半字节向高位半字节进位,或高位半字节借位给低位半字节,则将AF置1,否则,AF复位。

●零标志ZF(zero flag)如果算术或逻辑运算结果为0,则将ZF置15否则,ZF复位。

●符号标志SF(sign flag)记录运算结果的符号,若结果为负,则SF置1;否则,置0。

●溢出标志OF(over flow flag)在运算时,若带符号的结果超出机器能够表示的范围,则OF 置1;否则,置0。

(2)3位控制标志的作用●陷阱标志TF(trap flag)用于设置陷阱中断,若TF设置为1,则在执行指令时产生单步中断,即CPU进入单步方式:它执行一条指令后就跳到一个专用服务程序上去,检查指令执行情况,用于程序调试。

●中断允许标志IF(interrupt flag)当IF置1时,允许中断请求;当IF置0时,禁止中断请求。

●方向标志DF(Direction flag)决定串操作的方向。

当DF置1时,串指令自动按减地址执行,即串数据传输过程是从高地址到低地址;当DF置0时,串指令按增加地址执行,即串数据传输过程是从低地址到高地址,即:在串处理时控制变址寄存器SI和DI递增或递减方式。

至于每次递增或递减多少,则取决于每次传输的是字节或字或双字。