指令的尋址方式
彙編指令由操作碼字段
和操作數字段
構成。對於雙操作指令,第一個操作數稱爲目的操作數,表示操作後的結果;第二個操作數稱爲源操作數,表示來源操作數。兩者以逗號分隔。如:
所謂尋址方式,即指令中提供操作數或操作數地址的方式。通俗地說就是尋找操作數地址的方法。尋址方式的數量代表了微機系統對存儲器管理能力的強弱,合理地使用尋址方式可以擴大訪存空間,縮短指令長度,滿足各種程序設計需要。與數據有關的尋址方式劃分爲三類:立即尋址方式,寄存器尋址方式,存儲器尋址方式。
七種與數據有關的尋址方式
要求掌握下列七種與數據有關的尋址方式。其中後五種屬於存儲器尋址方式。
- 立即尋址方式(Immediate addressing)
- 寄存器尋址方式(Register addressing)
- 直接尋址方式(Direct addressing)
- 寄存器間接尋址方式(Register indirect addressing)
- 寄存器相對尋址方式(Register relative addressing)
- 基址變址尋址方式(Based indexed addressing)
- 相對基址變址尋址方式(Relative based indexed addressing)
1. 立即尋址方式
所要找的操作數直接寫在指令中,這種操作數叫立即數。在8086、80286中立即數是8位或16位的,在80386以上可以是32位的立即數。立即尋址方式用來表示常數。
2. 寄存器尋址方式
在寄存器尋址方式中,操作數在寄存器中,在指令中指定寄存器名即可。
3. 直接尋址方式
操作數存放在內存中。操作數的偏移地址(也稱爲有效地址EA)直接寫在指令中。
(1)存儲器讀操作
MOV指令可以實現CPU對存儲器的讀寫。若傳送指令的目的操作數是CPU的寄存器,源操作數是存儲單元,就完成了對存儲器的讀操作。
例1 MOV AX,DS:[2000H]
該指令表示從數據段的2000H單元讀出一個字送入AX。
(2)存儲器寫操作
如果要實現CPU寫內存操作,只要把MOV指令的目的操作數變爲存儲單元,源操作數爲CPU的寄存器即可。
例2 MOV DS:[4000H],AX
將AX的值寫入數據段的4000H單元。
操作數的EA在基址寄存器BX、BP或變址寄存器SI、DI中,而操作數的段地址在數據段DS或堆棧段SS中。如果有效地址由BX、SI、DI指出,則默認爲對應於數據段,而用BP指出則對應於堆棧段。
5. 寄存器相對尋址方式
操作數存放在內存中。指令形式如: MOV AX,[BX+1200H]
操作數的EA是一個基址或變址寄存器的內容再加上8位或16位位移量之和。也就是說在寄存器間接尋址的基礎上,增加一個相對量(位移量)。這個位移量可以是立即數,也可以是符號地址。
6. 基址變址尋址方式
操作數存放在內存中。指令形式如: MOV AX,[BX+SI]
操作數的EA爲一個基址寄存器和一個變址寄存器的內容之和。
7. 相對基址變址尋址方式
操作數存放在內存中。指令形式如: MOV AX,[BX+SI+1200H]
操作數的EA爲一個基址寄存器加一個變址寄存器再加一個位移量,三者之和。可用於二維表查表和棧處理。