尋址方式是匯編語(yǔ)言的重點(diǎn)和難點(diǎn)。請(qǐng)按如下思路學(xué)習(xí):
1. 操作數(shù)可以存在什么地方?
⑴ 操作數(shù)存在于指令代碼中,處理器譯碼時(shí)就立即獲得了這個(gè)操作數(shù),這就是立即(數(shù))尋址方式。匯編指令中,這個(gè)立即數(shù)(操作數(shù))以常量形式出現(xiàn)。
⑵ 操作數(shù)存在于處理器內(nèi)部寄存器中,處理器從寄存器中獲得這個(gè)操作數(shù), 這就是寄存器尋址方式。匯編指令中,這個(gè)寄存器操作數(shù)以寄存器名形式出現(xiàn)。
⑶ 操作數(shù)存在于主存中,處理器從主存單元獲得這個(gè)操作數(shù),這就是存儲(chǔ)器尋址方式。匯編指令中,這個(gè)存儲(chǔ)器操作數(shù)以主存地址形式出現(xiàn)。
2. 8086/8088處理器的主存地址在程序設(shè)計(jì)時(shí)采用邏輯地址。邏輯地址分成段地址和偏移地址兩部分。
3. 存儲(chǔ)器尋址方式表達(dá)存儲(chǔ)器地址時(shí),段地址在默認(rèn)的或段超越前綴指令指定的段寄存器中,偏移地址被稱為有效地址EA(Effective Address)。有效地址用中括號(hào)括起來(lái)。
4. 有多種獲得偏移地址的方法,所以存儲(chǔ)器尋址方式又分成多種尋址方式。
⑴ 有效地址直接給出,存在于指令代碼中,就是直接尋址方式。如 mov ax,[idata];;idata為立即數(shù)
⑵ 有效地址存在寄存器中,就是通過(guò)寄存器的間接尋址方式。如:[[bx],[si],[di],[bp]
⑶ 有效地址是兩部分的和,一部分在寄存器中,另一部分直接給出(稱為位移量),這就是寄存器相對(duì)尋址方式。如:[bx+idata],[si+idata],[di+idata],[bp+idata]
⑷ 有效地址是兩部分的和,一部分在基址寄存器中(8086是BX和BP),另一部分在變址寄存器中(8086是SI和DI),這就是基址變址尋址方式。如:[bx+si],[bx+di],[bp+si],[bp+di]
⑸ 有效地址是三部分的和,第一部分在基址寄存器中(8086是BX和BP),第二部分在變址寄存器中(8086是SI和DI),第三部分直接給出(稱為位移量),這就是相對(duì)基址變址尋址方式。如:[bx+si+idata],[bx+di+idata],[bp+si+idata],[bp+di+idata]
5. 區(qū)別各種尋址方式時(shí),注意各自的特點(diǎn)。
只有一個(gè)常量, 是立即(數(shù))尋址方式;
只有一個(gè)寄存器名, 是寄存器尋址方式;
其他 則是存儲(chǔ)器尋址方式。
用中括號(hào)括起一個(gè)常量 是直接尋址方式;
用中括號(hào)括起一個(gè)寄存器名, 是寄存器間接尋址方式;
用中括號(hào)括起一個(gè)寄存器名和一個(gè)常量 是寄存器相對(duì)尋址方式;
用中括號(hào)括起兩個(gè)寄存器名 是基址變址尋址方式;
用中括號(hào)括起兩個(gè)寄存器名和一個(gè)常量 是相對(duì)基址變址尋址方式。
6. 匯編語(yǔ)句中,還有其他形式出現(xiàn),需要理解相應(yīng)操作符才能做出正確判斷。
例如,
直接寫出變量名實(shí)際上 是直接尋址方式;
變量名加減一個(gè)常量 還是直接尋址方式;
變量名和一個(gè)寄存器 則是寄存器相對(duì)尋址方式;
利用offset后跟一個(gè)變量名 則是立即數(shù)尋址方式。■ [ITSUN統(tǒng)計(jì)]
聯(lián)系客服