3.1.1 說(shuō)明操作數(shù)所在地址的尋址方式
1.立即尋址這種尋址方式所提供的操作數(shù)直接包含在指令中。它緊跟在操作碼的后面,與操作碼一起放在代碼段區(qū)域中,如圖3.1所示
例:MOV AX,im立即數(shù)im可以是8位的,也可以是16位的。若是16位的,則imL在低地址字節(jié),imH在高地址字節(jié)。

2.直接尋址
操作數(shù)地址的16位段內(nèi)偏移地址直接包含在指令中,它與操作碼一起存放 在代碼段區(qū)域.操作數(shù)一般在數(shù)據(jù)段區(qū)域中,它的地址為數(shù)據(jù)段寄存器DS
加上 這16位的段內(nèi)偏移地址,如圖3.2所示。 內(nèi)偏移地址,如圖3.2所示。

MOVAX,DS:[200H]指令中的16位段內(nèi)偏移地址的低字節(jié)在前,高字節(jié)在后。這種尋址方法以數(shù)據(jù)段的段地址為基礎(chǔ),故可在多
達(dá)64KB的范圍內(nèi)尋找操作數(shù)。
本例中,取數(shù)的物理地址就是:DS的內(nèi)容×16(即左移4位), 變?yōu)?0位,再在其低端16位上加上偏移地址2000H。偏移地址2000H是由指令直接給出的。
3.寄存器尋址
操作數(shù)包含在CPU的內(nèi)部寄存器中,例如AX、BX、CX、DX等,如圖3.3所示。
例:MOV DS,AX

雖然操作數(shù)可存放在CPU內(nèi)部任意一個(gè)通用寄存器中,而且它們都能參與算術(shù)或邏輯運(yùn)算并存放運(yùn)算結(jié)果,但是,AX是累加器,若將結(jié)果存放在AX中的話,通 常指令執(zhí)
行時(shí)間要短一些。 4.寄存器間接尋址 在這種尋址方式中,操作數(shù)存放在存貯器中,操作數(shù)的16位段內(nèi)偏移地址卻放在以下4個(gè)寄存器SI、DI、BP、BX中之一。由于上述4
個(gè)寄存器所默認(rèn)的段寄存器不同, 這樣又可以分成兩種情況: ①若以SI、DI、BX進(jìn)行間接尋址,則操作數(shù)通常存放在現(xiàn)行數(shù)據(jù)段中。此時(shí)數(shù)據(jù)段寄存器內(nèi)容加上SI、
DI、BX中的16位段內(nèi)偏移地址,即得操作數(shù)的地址,如圖3.4所示。 例:MOV AX,[SI]

②若以寄存器BP間接尋址,則操作數(shù)存放在堆棧段區(qū)域中。此時(shí)堆棧 段寄存器內(nèi)容加上BP中的16位段內(nèi)偏移地址,即得操作數(shù)的地址,如圖3.5所示。
例:MOV AX, [BP]

5.寄存器相對(duì)尋址
在這種尋址方式中,操作數(shù)存放在存貯器中。操作數(shù)的地址是由段寄存 器內(nèi)容加上SI、DI、BX、BP之一的內(nèi)容,再加上由指令中所指出的8位或16 位相對(duì)地址偏移量而
得到的,如圖3.6所示。 在一般情況下,若用SI、DI或BX進(jìn)行相對(duì)尋址時(shí),以數(shù)據(jù)段寄存器DS作為地址基 準(zhǔn),而用BP尋址時(shí),則以堆棧段寄存器作為地址基準(zhǔn)。
例:MOV AX,DISP[SI]

6. 基址、變址尋址
在8088中,通常把BX和BP作為基址寄存器,而把SI、DI作為變址寄存器。這兩種寄存器聯(lián)合起來(lái)進(jìn)行的尋址就稱為基址、變址尋址。這時(shí),操作數(shù)的
地址應(yīng)該是段寄存器內(nèi)容加上基址寄存器內(nèi)容(BX或BP內(nèi)容),再加上變址寄存器內(nèi)容(SI或DI內(nèi)容)而得到的,如圖3.7所示。
同理,若用BX作為基地址,則操作數(shù)應(yīng)放在數(shù)據(jù)段DS區(qū)域中;若用BP作為基地址,則操作數(shù)應(yīng)放在堆棧段SS區(qū)域中。
例:MOV AX,[BX][SI]

7. 基址、變址、相對(duì)尋址
這種方式實(shí)際上是第6種尋址方式的擴(kuò)充。即操作數(shù)的地址是由基址、變址方式得到的地址再加上由指令指明的8位或16位的相對(duì)偏移地址而得到的,
如圖3.8所示。
例:MOV AX,DISP [BX] [SI]
8. 隱含尋址
在有些指令的指令碼中,不僅包含有操作碼信息,而且還隱含了操作數(shù)地址的信息。例如乘法指令MUL的指令碼中只需指明一個(gè)乘數(shù)的地址,
另一個(gè)乘數(shù)和積的地址是隱含固定的。這種將操作數(shù)的地址隱含在指令操作碼中的尋址方式就稱為隱含尋址。

3.1.2 說(shuō)明轉(zhuǎn)移地址的尋址方式
1. 段內(nèi)相對(duì)尋址
在這種尋址方式中,指令應(yīng)指明一個(gè)8位或16位的相對(duì)地址位移量DISP(它有正負(fù)符號(hào),用補(bǔ)碼表示)。此時(shí),轉(zhuǎn)移地址應(yīng)該是代碼段寄
存器CS內(nèi)容加上指令指針I(yè)P內(nèi)容,再加上相對(duì)地址位移量DISP,如圖3.9所示。
例:JMP DISP1
圖3.9中,1000H是CPU讀取這條指令的位移量50H后IP的內(nèi)容。所以,該指令使CPU轉(zhuǎn)向21050H去執(zhí)行。


2. 段內(nèi)間接尋址
在這種尋址方式中,轉(zhuǎn)移地址的段內(nèi)偏移地址要么存放在一個(gè)16位的寄存器中;要么存放在存貯器的兩個(gè)相鄰單元中。存放偏移地址的
寄存器和存貯器的地址將按指令碼中規(guī)定的尋址方式給出。此時(shí),尋址所得到的不是操作數(shù),而是轉(zhuǎn)移地址,如圖3.10所示。
例:JMP CX
JMP WORDPTR [BX]
3. 段間直接尋址
在這種尋址方式中,指令碼中將直接給出16位的段地址和16位的段內(nèi)偏移地址。
例:JMP FAR PTR ADD1
在執(zhí)行這條段間直接尋址指令時(shí),指令操作碼后的第二個(gè)字將賦予代碼段寄存器CS,第一個(gè)字將賦予指令指針寄存器IP。
最后CS內(nèi)容和IP內(nèi)容相加則得轉(zhuǎn)移地址,如圖3.11所示。
4. 段間間接尋址
這種尋址方式和段內(nèi)間接尋址相似。但是,由于確定轉(zhuǎn)移地址需要32位信息,因此只適用于存貯器尋址方式。用這種尋址方式
可計(jì)算出存放轉(zhuǎn)移地址的存貯單元的首地址,與此相鄰的4個(gè)單元中,前兩個(gè)單元存放16位的段內(nèi)偏移地址;而后兩單元存放的
是16位的段地址,如圖3.12所示。
例:JMP DWORD PTR[BP][DI]


