经典汇编语言教程:3.8 32位地址的寻址方式

3.8 32位地址的寻址方式

在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一个组成部分。

当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。

32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;
32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。

下面列举几个32位地址寻址指令:

MOV AX, [123456H]

MOV EAX, [EBX]

MOV EBX, [ECX*2]

MOV EBX, [EAX+100H]

MOV EDX, [EAX*4+200H]

MOV EBX, [EAX+EDX*2]

MOV EBX, [EAX+EDX*2+300H]

MOV AX, [ESP]

用32位地址偏移量进行寻址的有效地址计算公式归纳如右式所示。

由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。具体规定如下:

1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;

如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;

2、默认段寄存器的选用取决于基址寄存器;

3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS;

4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。

下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

指令的举例访问内存单元所用的段寄存器
MOV  AX, [123456H];默认段寄存器DS
MOV  EAX, [EBX+EBP];默认段寄存器DS
MOV  EBX, [EBP+EBX];默认段寄存器SS
MOV  EBX, [EAX+100H];默认段寄存器DS
MOV  EDX, ES:[EAX*4+200H];显式段寄存器ES
MOV  [ESP+EDX*2], AX ;默认段寄存器SS
MOV  EBX, GS:[EAX+EDX*2+300H];显式段寄存器GS
MOV  AX, [ESP] ;默认段寄存器SS

3.9 操作数寻址方式的小结

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号