1. 立即定址
立即定址方式用來表示常數,它主要用於給寄存器賦初值,注意:只能用於源運算元欄位,不能用於目的運算元欄位。
例1 MOV AL,5
2.直接定址
在IBM PC機中將運算元的位移地址稱為有效地址EA。在直接定址方式中有效地址EA就在指令中,它存放在程式碼片段中指令作業碼之後,但運算元一般存放在資料區段中,所以必須先求出運算元的物理地址,然後再訪問儲存空間才能取得運算元.
如運算元在資料區段中,則物理地址=16d×(DS)十EA。1BMPC機中允許資料存放在資料區段以外的其他段中,此時應在指令中指定段跨越首碼,在計算物理地址時應使用指定的段寄存器。
例4 mov AX , [2000H]
(DS)=3000H,地址32000H中的值為 3050H則,執行結果為;(Ax)=3050H
因為實際mov AX中的內容為 16d * (Ds) +2000H = 32000H
在組合語言指令中,可以用符號地址代替數值地址,如:
MOV AX,VALUE
此時VAIUE為存放運算元單元的符號地址。如寫成
MOV AX,[VALUE]
也是可以的.兩者是等效的。如果VALUE在附加段中,則應該指定段跨越首碼如下;
MOV AX, ES:VALUE
或 MOV AX, ES:[VALUE]
直接定址方式適用於處理單個變數,例如需要處理某個存放在儲存空間裡的變數,可用直接定址方式,將該變數先取到一個寄存器中,然後在做處理。
IBM PC機規定:除在雙運算元中,除立即數外,必須有一個運算元使用寄存器方式。這也是一個常量常常送到寄存器去的原因。
3.寄存器間接址
運算元的有效地址在基底位址暫存器BX、BP或變垃寄存器SI、DI中,而運算元則在儲存空間中,如所示。
a.如果指令中指定的寄存器是BX、SI、DI,則運算元在資料區段(DS)中,所以用DS寄存器的內容作為段地址,即運算元的物理地址為:
物理地址=16d×(DS)十(BX)
或 物理地址;16 d×(DS)十(SI)
或 物理地址=16d×(DS)十(DI)
b.如指令中指定SP寄存器,則運算元在堆棧段(SS)中,段地址在SS中,所以運算元的物理地址為:
物理地址=16d×(SS)十(SP)
MOV AX ,[BX]
如果 (DS)=2000H , (BX)=1000H 則
物理地址=16d×(DS)十(BX) = 20000H+1000H = 21000H
21000H地址裡的內容為 50A0H則 執行結果為:(AX)=50A0H
c.指令中也可指定段跨越首碼來取得其他段中的資料。如;
MOV AX,ES:[BX]
這種定址方式可以用於表格處理,執行完一條指令後,只需要修改寄存器內容就可取出表格中的下一項。
4.寄存器相對定址方式
運算元的有效地址是一個基址或變址寄存器的內容和指令中指定的8位或16位位移量之和。即
| (BX)
EA = | (BP) + 8位或者16位的位移量
| (SI)
| (DI)
同寄存器定址一樣 BX BP DI 若沒有段跨越首碼 物理地址為=16d×(DS) +位移量 + *
SP 物理地址為=16d×(SS)十(SP) + 位移量 + *
舉個例子:
MOV AX,COUNT[SI] (也可表示為MOv AX,[COUKT十SI]
其中,COUNT 為16位位移量的符號地址。
如果(DS)=3000H,(SI)=2000H COUNT=3000H
則物理地址 = 30000十2000十3000 =35000H
5.基址變址定址方式
運算元的有效地址是一個基底位址暫存器和一個變址寄存器的內容之和。兩個寄存器均由指令指定。如果基底位址暫存器為BX,段寄存器使用DS;如基底位址暫存器為BP時,段寄存器則用SS。因此,物理地址為:
= 16D * DS + (BX) + SI(或者DI)
= 16D * SS + (BP) + SI(或者DI)
6.相對基址變址定址方式
運算元的有效地址是一個基底位址暫存器和一個變址寄存器的內容和8位或16位位移量之
和。同樣,當基底位址暫存器為BX時,使用DS段寄存器;而當基底位址暫存器為BP時,則使用SS為段寄存器。因此物理地址為:
= 16d * DS + BX + SI + 位移量(8位或16位)
= 16d * ss + BP + SI + 位移量(8位或16位)
刨 MOV AX,MASK[BX][SI]
(也可以寫成 M0V AX,MASK[DX十SI]
或 MoV AX.[MASK十BX十SI] )
如 (DS)=3000H,(BX)=2000H、(SI)=l000H,MASK=0250H,
則 物理地址=16d×(DS)十(BX)十(SI)十MASK
=30000十2000十1000十0250
=33250H