微機原理——尋址方式總結

一、操作數的尋址方式

立即尋址方式

格式: 操作碼 數字表達式(將數據送入寄存器中)
源操作數可以是8位也可以是16位。

MOV AH, F5H (字節操作) F5H稱爲立即數(8位操作數)
MOV AL, 8AH (字節操作) 8AH稱爲立即數

直接尋址方式

指令格式: 操作碼 寄存器(16位) , 地址表達式(將地址的內容送入寄存器中)

MOV AX,ES:[2000H] 將ES:2000H單元內容送入AX。
MOV AX,LABLE 或 MOV AX,[LABEL]將標號爲LABLE(存放操作數單元的符號地址) ,即DS:LABLE中的內容送入AX。LABLE要在段定義中指明。
此時,字操作和字符操作的等效:
MOV AX,(2000H);只需要寫低字節地址
MOV AL,(2000H); MOV AH,(2001H)

寄存器尋址方式

格式:操作碼 寄存器,寄存器(將寄存器中的內容送入另一個寄存器)
可操作性的寄存器:

1)8 位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL
2)16 位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP
3)4個段寄存器seg: CS、DS、SS、ES

注意點

1、目的和源寄存器的 位數必須相同,不同 位數寄存器之間不能傳送數據處理 如: MOV BX,AH
如果要將數據送入段寄存器(CS、DS、ES、SS),必須先將這個數送入一個非段寄存器,然後在送到段寄存器

寄存器間接尋址方式

格式:操作碼 寄存器,(寄存器) (BX決定的存儲單元的內容送到AX寄存器 )

MOV AX, [BX] ;AX←DS:[BX]

注意點

對於BX、SI、DI,默認的段地址在DS段寄存器
對於BP,默認的段地址在SS段寄存器
物理地址計算方法:
物理地址 = (DS)×16 + (BX)或(SI)或(DI)
物理地址 = (SS)× 16 + (BP)

寄存器相對尋址方式

格式:操作碼 寄存器,相對值DISP+基址或變址寄存器

MOV AX, [SI+06H] ;AX←DS:[SI+06H]
MOV AX, 06H[SI] ;AX←DS:[SI+06H]

地址計算
地址計算
DISP可以是16位,也可以是8位,DISP是一個數值的代號!

基址變址尋址方式

格式: 操作碼 寄存器,(基址寄存器)+(變址寄存器)

MOV AX, [BX+SI] ;AX←DS:[BX+SI]
MOV AX, [BX][SI] ;AX←DS:[BX+SI]
有效地址由基址寄存器(BX或BP)的內容加上變址寄存器(SI或DI)的內容構成:
有效地址=BX/BP+SI/DI
段地址對應BX基址寄存器默認是DS,對應BP基址寄存器默認是SS;可用段超越前綴改變

相對基址變址尋址方式

格式:操作碼 寄存器,DISP+(基址寄存器)+(變址寄存器)
有效地址=BX/BP+SI/DI+8/16位偏移量

MOV AX, [BX+DI+6] ;AX←DS:[BX+DI+6]
MOV AX, 6[BX+DI] ; MOV AX, 6[BX][DI]

段超越

當操作數在內存單元時,系統根據隱含約定,自動將寄存器DS或SS的值作爲段地址。然而,當操作數段地址不在隱含的段寄存器時,可以使用段超越前綴取代其隱含約定。
形式
BP默認SS,BX默認DS,通過段超越可以進行修改。
注意:不是所有的段都可做段超越前綴

例題講解

指出下列指令錯誤:
1)MOV AH,BX; //一個8位,一個16位,不匹配
2)MOV [SI],[BI]; //src和dst都是間接尋址,然而操作數只能有一個是這樣的形式
3)MOV AX,[SI][DI]; //[BX/BP] [SI/D] 顯然不符合
4)MOV AX[BX][BP]; //和3同樣問題
5) MOV [BX],ES:AX; //正確的形式應該是 MOV [BX],ES:[AX] ;但是就算這樣也是錯的,錯誤原因和2一樣
6)MOV CS,AX; //CS不能通過賦值改變,只能通過跳轉指令
7)MOV DS,2000H; //正確應該是MOV AX,2000H; MOV DS,AX;

二、轉移地址的尋址方式

段內相對尋址

JMP DISP (disp:8位或16位的地址偏移量)

此時,轉移地址應該是代碼段寄存器CS內容加上指令指針IP內容,再加上相對地址位移量DISP。
運轉方式

段內間接尋址

JMP CX; CX的內容爲轉移地址的段內偏移量
JMP WORD PTR CX

WORD PTR是尋址一個字的標記,指令中必須加上
CX的內容爲新的IP值(這個與相對尋址區別開),程序轉移到新的入口處 ,CX值不能超出該段的區域
運算過程

段間直接尋址

JMP FAR PTR ADD1;
ADD1爲轉移地址的標號
FAR表示轉移距離大於±32K,或是不同段之間轉移。

指令操作碼後的第二個字將賦予代碼段寄存器CS第一個字將賦予指令指針寄存器IP。最後CS內容和IP內容相加則得轉移地址。
運算過程

段間間接尋址

JMP DWORD PTR[BP][DI]
段間間接尋址只適用於存貯器尋址方式
確定轉移地址需要32位信息 相當於兩個字,所以用DWORD,段間間接尋址只適用於存貯器尋址方式

這種尋址方式可計算出存放轉移地址的存貯單元的首地址,與此相鄰的4個單元中,前兩個單元存放16位的段內偏移地址,而後兩單元存放的是16位的段地址
運算過程

轉移地址尋址方式的小結

通過對運轉流程的觀察,可以確定,通過JMP操作只會對代碼段產生影響。
使代碼跳轉到我們所指定的代碼地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章