2.3寄存器
80386中应用程序员感兴趣的有16个寄存器。如图2-5所示,这些寄存器被分成以下几个基
本类型:
1.通用寄存器。这些32为通用寄存器主要用来数学和逻辑运算。2.段寄存器。这些特殊目
的寄存器允许系统软件设计者选择平坦模式或是段模式。这六个寄存器决定了,任何时候,
哪段存储器可以被寻址。3.状态和指令寄存器。这些特殊目的寄存器用于记录和改变80386
处理器状态的一些特征。
2.3.1通用寄存器
80386的32位通用寄存器包括EAX,EBX,ECX,EDX,EBP,ESP,ESI以及EDI。这些寄存器可
以互换使用,存储逻辑和算术操作数。也可以互换地用于地址计算(有个例外,ESP不能被
用作索引操作数)。
如图2-5所示,这8个寄存器中的低位字都有单独的名称,可以单独使用。这有利于处理16位
数据项,以及和8086和80286保持兼容。字寄存器被命名为AX,BX,CX,DX,BP,SP,SI以及
DI。
图2-5同样表明,16为寄存器AX,BX,CX和DX的每个字节都有单独的名称,可以独立使用。
这有利于处理字符和8位数据项。字节寄存器被称为AH,BH,CH,DH(高位字节);AL,BL,
CL,DL(低位字节)。
所有这些寄存器均可以用来地址计算,作为大多数算术和逻辑计算的结果;然而,一些功能
要求使用特定的寄存器。通过隐式的使用这些寄存器,80386架构可以使编码变得更紧凑。使
用特定寄存器的指令包括:双精度乘法和除法,I/O,字符串指令,变换,循环,变量移位和
循环,堆栈操作。
2.3.2段寄存器
段寄存器给了系统软件设计人员在各种存储器组织模式之间选择的自由。存储器模式的实现
是第II部分的主题-系统编程。设计人员可以选择一种模式,这种模式下,应用程序不需要改
变段寄存器,在这种情况下,应用程序员可以跳过这章。
完整的程序通常包含许多不同的模块,每个由指令和数据构成。然而,在任何给定的程序执
行时间段,只有一小部分程序模块的子集在使用。80386架构可以利用了这一点,它提供直接
访问当前模块环境的手段,在有需要时访问其他段。
在任何给定的时间,六个存储器段可以在程序执行期间被立即访问。段寄存器CS,DS,SS,
ES,FS和GS用来标识这六个当前段。这些寄存器每个都表示一个特殊类型的段,就像图2-6
中关联助记符(”code”,“data”,或者”stack”)表示的那样。每个寄存器唯一地确定一个特殊