所謂指令的尋址方式是指在指令中操作數的表示方式。由于程序編寫上的需要,大多數情況下,指令中并不直接給出操作數的數值,而是給出操作數存放的地址或存放的存儲單元的地址,即操作數的地址。同時,在許多情況下,操作數的地址也不直接給出,而是給出計算操作數地址的方法計算機執行程序時,根據指令給出的尋址方式,計算出操作數的地址,然后從該地址中取出操作數進行指定的操作,或者把操作結果送入某一操作數
地址中去。一般說來,計算機的尋址方式越豐富,指令系統的功能就越強,工作的靈活性也越大。
8086的尋址方式有:立即尋址、寄存器尋址、存儲器尋址、串操作尋址、外設I/O
端口尋址以及程序轉移操作尋址。其中變化最多的是存儲器尋址,這種尋址方式又可分
為:直接尋址、寄存器間接尋址、基址尋址、變址尋址以及基址變址尋址。
注意:根據尋址方式計算而得的地址只是有效地址EA—段內偏移地址,這還需與所在段的段基值組合才能形成20位的物理地址。
一、立即尋址(Immediate Addressing)
立即尋址的指令直接給出操作數的數值,即指令機器碼的最后1個或2個字節就是操作數——立即數。立即數只能作為源操作數,在匯編碼指令中,它可以用二進制數、八進制數、十進制數和十六進制數表示。由于立即數是直接從指令中取得的,所以取數速度較快,這種尋址方式常用來給寄存器或存儲器賦初值。
以立即尋址方式表示的加法指令ADD AX,3064H的操作過程如圖3-2所示。
圖3-2立即尋址
二、寄存器尋址(Register Addressing)
寄存器尋址的指令,操作數在寄存器中,亦即寄存器的內容就是操作數的數值。在匯編碼指令中,操作數用寄存器的符號來表示。例如,INC AX ,其功能為 AX+1 → AX。
這類尋址方式的指令,其機器碼字節最短,因為8 個通用寄存器只要用3 位代碼即可區分。另外,寄存器是在微處理器芯片內部進行,不必執行訪問內存的總線周期,因為其執行速度最快。
8086的寄存器尋址中,可用的寄存器有通用寄存器和段寄存器,寄存器可作為源寄存器或/與目的寄存器。例如,MOV DS,AX。
三、存儲器尋址(Memory Addressing)
存儲器尋址的指令,其操作數在存儲器中。在指令操作中,存儲器操作數出入微處理器都需經過總線,當EU需讀或寫一個存儲器操作數時,必須將一個“偏移量”(OffsetAddress)傳送給BIU,BIU經過地址運算后產生一個20位的物理地址,然后執行存取該操作數所需的總線周期。EU為一個存儲器操作數而計算出來的偏移量稱為操作數的有效地址EA,這是一個16位無符號數,表示該操作數所在存儲單元與所在段起始地址之距離(以字節為單位)。
一條存儲器尋址的指令能訪問由基址寄存器內容或/與變址寄存界內容或/與DISP值組合而得的有效地址EA所決定的存儲單元。其中DISP(Displacement)為位移量,是一個8位或16位數,DISP包含在指令中,根據程序中操作數名稱(變量或標號)的位置推算而得,程序員可修改或規定此值。
存儲器操作數的尋址方式按其有效地址EA的形成方法不同可分為如下幾種:
1.直接尋址(Direct Addressing)
由指令直接給出操作數的偏移地址,它緊跟在指令操作碼之后。例如INC BYTE PIR [04A3H]指令中存儲器操作數的偏移地址為4AOH,其操作過程見圖3-4所示。
圖3-4 直接尋址
直接尋址指令的另一種表示形式為INC ADDR,指令中存儲器操作數的地址用符號地址(變量,Variable ) ADDR表示。
2.寄存器間接尋址(Register Indirect Addressing)
存儲器操作數的有效地址直接取自一個基址寄存器,例如INC BYTE PTR[BX],操作過程如圖3-5所示。
圖3-5寄存器間接尋址
3. 基址尋址(Based Addressing)
以基址寄存器BX和BPD的內容為基準地址,指令中再給出一個地址位移量D(D8或D16)組合而得到存儲器操作數的有效地址。
匯編碼指令中有效地址表示方法有如下幾種:
[BX(或BP)+D],其中D為常量,例如INC BYTE PTR (BP+4);
D[BX(或BP)],其中D為變量或常量,例如INC ADDR[BX]。
當使用BP作基址尋址時,若無指定段替換,則內定在堆棧段內尋址;若D為常量,則以帶符號的二進制數表示,可為8位或16位值,當D為8位值時有效地址計算中,位移量必須進行符號擴展。基址尋址的操作過程見圖3-6所示。
圖3-6基址尋址
4,變址尋址(Indexed Addressing)
指令中給出一個位移量D作為基準地址,再同變址寄存器SI(或DI)的內容相加作為存儲器操作數的有效地址。
匯編碼指令中有效地址可表示為:
[SI(或DI)+D],以及D[SI(或DI)]兩種表示,式中D的含義同基址尋址。變址尋址的操作過程如圖3-7所示。
圖3-7變址尋址
基址尋址和變址尋址又稱為“寄存器相對尋址”。
5.基址變址尋址(Based Indexed Addressing)
基址寄存器BX(或BP)中存放基準地址,變址寄存器SI(或DI)存放變址值,指令中再給出一個位移量D,三者相加構成存儲器操作數的有效地址。其中D可為8位或16位的數,可以無此項。若為8位數,在計算中應進行符號擴展。
匯編碼指令中有效地址可表示為:[BX(或BP)+SI(或D1)+D],例如INC BYTE PTR[BX+DI+4],以及D[BX(或BP)+SI(或DI1)],例如INC ADDR[BX+SI]。
采用BP作為基址時,規定在當前堆棧內尋址。含有D項的基址變址方式又稱為“相對基址變址尋址方式”。
四、程序轉移尋址
指令在順序執行時,下一條指令的偏移地址總是由指令指針IP自動遞增而得。當程序在本段內發生轉移時,需要給出即將轉移去執行的那條指令的偏移地址,并用它去取代IP的原有內容。如果即將轉去執行的指令與原來執行的指令不在同一段中,則還需用新的代碼段的段基值去取代CS中原有的內容。此時,操作數作為轉移地址使用,分別送到IP和CS。
程序轉移尋址方式用于條件轉移指令、無條件轉移指令、循環指令和轉子指令(調用指令)。
程序轉移尋址方式按目的地址的形成方式有如下幾種:
1.相對尋址
以IP的內容為基準地址,加上緊跟指令操作碼后的相對位移量D,得到轉移地址的偏移地址,如圖3-8所示。
圖3-8相對尋址
由圖3—8可見,轉移地址的偏移地址為IP+D,D是帶符號的二進制數。當D為8位數時,轉移范圍為 -128~+127;當D為l6位數時,轉移范圍為—32768~+32767(注意:不能越段)。例如,JEA--- 條件轉移指令;
JMP ADDR -- 無條件轉移指令。
指令中的A、ADDR為轉移地址的標號。 這種尋址方式又稱為“段內直接轉移”。
2. 段內寄存器尋址
以寄存器的內容為轉移地址的偏移地址。例如,JMP BX, BX中的內容即偏移地址。
3.段內間接轉移尋址
包括前述的存儲器操作數中的寄存器間接尋址、變址尋址、基址尋址以及基址變址尋
址等幾種尋址方式,這些尋址方式求得之操作數即為轉移地址的偏移地址。
例如:JMP WORD PTR [BX]
JMP VAR[BX][SI],以及JMP WORD PTR[EA](EA為有效地址)指令中[BX]及VAR[BX][SI]都表示段內間接轉移地址的偏移地址。
4.段間直接轉移尋址
程序從一個代碼段轉移到另一個代碼段稱為“段間轉移”,實現段間轉移不僅要求改變IP中的指令偏移地址,還要改變CS中的段基值。這種尋址方式的轉移指令中帶有兩個16位地址,第一個地址為轉移地址的偏移地址;第二個地址為轉移地址的段基值。
5.段間間接轉移尋址
這種尋址方式的轉移指令中,要實現段間轉移所需的兩個16位地址,可以用任何數據存儲器的間接尋址方式求得。
匯編碼指令形式為:JMP DWORD PTR [EA]
聲明:
(一)由于考試政策等各方面情況的不斷調整與變化,本網站所提供的考試信息僅供參考,請以權威部門公布的正式信息為準。
(二)本網站在文章內容來源出處標注為其他平臺的稿件均為轉載稿,免費轉載出于非商業性學習目的,版權歸原作者所有。如您對內容、版權等問題存在異議請與本站聯系,我們會及時進行處理解決。
相關推薦
2022年浙江自考《當代中國政治制度》復習筆記匯總
09-152023年浙江自考西方行政學說史復習資料:西方行政學的產生
03-022023年10月浙江自考傳播學概論復習資料:有限效果論
08-302022年浙江自考中國古代文學史(一)第三編第九章復習資料
10-312023年4月浙江自考中外教育簡史復習筆記:英國近代教育制度
12-08自考輔導資料:2021年10月《學前教育史》—論幼稚師范教育
06-05自考輔導資料:2019年10月《美學》知識點-崇高的內涵與特點
09-17自考輔導資料:2021年10月《學前教育史》—雅典的學前教育
06-072022年10月浙江自考《政治經濟學》重點復習第十三章
07-062022年浙江自考市場消費經濟學考點四
08-02