三、直接尋址
在直接尋址方式中,操作數(shù)的偏移地址(EA)是指令的一部分,它與操作碼一起存放在代碼段中,而操作數(shù)可以存放在數(shù)據(jù)段,也可以存放在其他段。操作數(shù)的物理地址(PA)由其所在段的段寄存器內(nèi)容左移4位與指令中給出的偏移地址(EA)相加形成。
匯編格式:含有變量的地址表達(dá)式或段寄存器名:[EA]
功能:指令下一字單元的內(nèi)容是操作數(shù)的偏移地址EA。
PA=(段寄存器)×10H+EA
直接尋址的尋址方式如圖所示:
這種尋址方式和前兩種的最大的區(qū)別就是:指令執(zhí)行時(shí)需要再存取存儲器,也就是存取操作數(shù)時(shí)需要訪問內(nèi)存,而前兩種尋址方式存取操作數(shù)時(shí)不需要訪問內(nèi)存。
例:2003.4三級PC考題
若有BUF DW 1、2、3、4,則可將數(shù)據(jù)02H取到AL寄存器中的指令是
。ˋ)MOV AL, BYTE PTR[BUF+1]
。˙)MOV AL, BYTE PTR[BUF+2]
。–)MOV AL, BYTE PTR [BUF+3]
(D)MOV AL,BUF[2]
答案:B
分析:根據(jù)數(shù)據(jù)定義偽指令BUF DW 1、2、3、4畫出內(nèi)存分配示意圖,在存儲單元相應(yīng)位置標(biāo)出變量名和EA。答案D中目的操作數(shù)AL的類型為字節(jié),而源操作數(shù)BUF[2]前無BYTEPTR,則BUF[2]類型為字,兩個(gè)操作數(shù)的類型不一致,指令是錯誤的,因此答案D可排除。變量BUF的EA為0,數(shù)據(jù)02H在內(nèi)存中的EA為2。答案ABC中指令的源操作數(shù)都是直接尋址,而只有[BUF+2]的EA為2,所以選B。
分配示意圖:
分析:根據(jù)數(shù)據(jù)定義偽指令BUF DW 1、2、3、4畫出內(nèi)存分配示意圖,在存儲單元相應(yīng)位置標(biāo)出變量名和EA。答案D中目的操作數(shù)AL的類型為字節(jié),而源操作數(shù)BUF[2]前無BYTEPTR,則BUF[2]類型為字,兩個(gè)操作數(shù)的類型不一致,指令是錯誤的,因此答案D可排除。變量BUF的EA為0,數(shù)據(jù)02H在內(nèi)存中的EA為2。答案ABC中指令的源操作數(shù)都是直接尋址,而只有[BUF+2]的EA為2,所以選B。
到目前為止,我們已經(jīng)復(fù)習(xí)了寄存器尋址、立即尋址、直接尋址這三種尋址方式。前面三種尋址方式相對來說容易理解和掌握,而后四種尋址方式的操作數(shù)都存放在內(nèi)存儲器中,而且其匯編格式有相似之處,容易混淆。
四種尋址方式中操作數(shù)都存放在內(nèi)存儲器中這一特點(diǎn),而要訪問內(nèi)存儲器存放操作數(shù)的存儲單元,則需要知道存放操作數(shù)的存儲單元在內(nèi)存儲器中的偏移地址(EA)。尋址方式的重要區(qū)別就是得到EA的方式不同。只要掌握如何計(jì)算通過這四種尋址方式得到的內(nèi)存操作數(shù)的偏移地址,問題就迎刃而解了。
4.寄存器間接尋址
寄存器間接尋址得到的操作數(shù)存放在內(nèi)存儲器中,而操作數(shù)的偏移地址EA在指令指明的寄存器中,即寄存器的內(nèi)容為操作數(shù)的偏移地址EA。
匯編格式:[R] R(Register 寄存器的簡寫,只能是SI,DI,BX,BP其中之一) <br>
功能:R的內(nèi)容為操作數(shù)的偏移地址EA。即操作數(shù)的有效地EA存放在基址寄存器(BX或BP)或變址寄存器(DI或SI)中:
EA= [R] 用R作間接尋址寄存器時(shí)。
寄存器間接尋址的尋址方式如圖所示:
若用寄存器SI,DI,BX間接尋址,則操作數(shù)在當(dāng)前數(shù)據(jù)段中。
PA=(DS)×10H+EA
若用寄存器BP間接尋址,則操作數(shù)在當(dāng)前堆棧段中。
PA=(SS)×10H+EA
寄存器間接尋址和寄存器尋址在匯編格式上相比較多了個(gè)中括號,也就是因?yàn)檫@樣,他們的尋址方式截然不同,寄存器尋址不需訪問內(nèi)存,操作數(shù)就在指令指定的寄存器中,而寄存器間接尋址需要訪問內(nèi)存,操作數(shù)的偏移地址EA就是寄存器的內(nèi)容。
例:2002.8三級PC考題
根據(jù)下面的指令和偽指令序列,AX寄存器的內(nèi)容是多少?
TAB DW 1, 2, 3, 4, 5, 6
ENTRY EQU 3
MOV BX, OFFSET TAB
ADD BX, ENTRY
MOV AX, WORD PTR [BX]
。ˋ)0300H(B)0003H(C)0506H(D)0403H
答案:A
內(nèi)存分配示意圖: <br>
分析:根據(jù)數(shù)據(jù)定義偽指令BUF DW 1、2、3、4畫出內(nèi)存分配示意圖,在存儲單元相應(yīng)位置標(biāo)出變量名和EA。OFFSET TAB得到的是變量TAB的EA。TAB這個(gè)變量的EA為0則MOV BX,OFFSET TAB這個(gè)指令的源操作數(shù)OFFSET TAB是立即尋址,(BX)=0。ENTRY為符號常量,指令A(yù)DD BX,ENTRY的源操作數(shù)ENTRY也是立即尋址(BX)+3→BX,(BX)=3。MOV AX,WORD PTR [BX]指令中源操作數(shù)[BX]是寄存器間接尋址,前面的WORD PTR指明內(nèi)存操作數(shù)為字類型。指令執(zhí)行后把偏移地址為3的字單元的內(nèi)容傳給AX。所以答案選A。
希望與更多計(jì)算機(jī)等級考試的網(wǎng)友交流,請進(jìn)入計(jì)算機(jī)等級考試論壇
更多信息請?jiān)L問:考試吧計(jì)算機(jī)等級考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |