1. 程式人生 > >32位地址的定址方式

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