定址方式就是處理器根據指令中給出的位址資訊來尋找實體地址的方式。
在儲存器中,運算元或指令字寫入或讀出的方式,有位址指定方式、相聯儲存方式和堆疊訪問方式。幾乎所有的計算機,在記憶體中都採用位址指定方式。當採用位址指定方式時,形成運算元或指令位址的方式稱為定址方式。定址方式分為兩類,即指令定址方式和資料定址方式,前者比較簡單,後者比較複雜。值得注意的是,在傳統方式設計的計算機中,記憶體中指令的定址與資料的定址是交替進行的。
指令定址有兩種,一種是順序存址,一種是跳躍定址。
由於指令位址在記憶體中按順序安排,當執行一段程式時,通常是一條指令接一條指令地順序進行。也就是說,從儲存器取出第1條指令,然後執行這條指令;接著從儲存器取出第2條指令,再執行第二條指令;接著再取出第3條指令。
這種程式順序執行的過程,稱為指令的順序定址方式。為此,必須使用程式計數器(又稱指令計數器)pc來計數指令的順序號,該順序號就是指令在記憶體中的位址。
當程式轉移執行的順序時,指令的定址就採取跳躍定址方式。所謂跳躍,是指下條指令的位址碼不是由程式計數器給出,而是由本條指令給出。注意,程式跳躍後,按新的指令位址開始順序執行。因此,程式計數器的內容也必須相應改變,以便及時跟蹤新的指令位址。
採用指令跳躍定址方式,可以實現程式轉移或構成迴圈程式,從而能縮短程式長度,或將某些程式作為公共程式引用。指令系統中的各種條件轉移或無條件轉移指令,就是為了實現指令的跳躍定址而設定的。
運算元定址的方式很多,我們常用的幾種有立即定址,直接定址,間接定址,暫存器定址和暫存器間接定址,相對定址,基址定址,變址定址,以及隱含定址和塊定址。
指令的位址字段指出的不是運算元的位址,而是運算元本身,這種定址方式稱為立即定址。立即定址方式的特點是指令執行時間很短,因為它不需要訪問記憶體取數,從而節省了訪問記憶體的時間。 如:mov ax,5678h 注意:立即數只能作為源運算元,不能作為目的運算元。
直接定址是一種基本的定址方法,其特點是:在指令格式的位址的字段中直接指出運算元在記憶體的位址。由於運算元的位址直接給出而不需要經過某種變換,所以稱這種定址方式為直接定址方式。在指令中直接給出參與運算的運算元及運算結果所存放的主存位址,即在指令中直接給出有效位址。
間接定址是相對直接定址而言的,在間接定址的情況下,指令位址欄位中的形式位址不是運算元的真正位址,而是運算元位址的指示器,或者說此形式位址單元的內容才是運算元的有效位址。
當運算元不放在記憶體中,而是放在cpu的通用暫存器中時,可採用暫存器定址方式。顯然,此時指令中給出的運算元位址不是記憶體的位址單元號,而是通用暫存器的編號(可以是8位也可以是16位(ax,bx,cx,dx))。指令結構中的rr型指令,就是採用暫存器定址方式的例子。如:mov ds,ax。
暫存器間接定址方式與暫存器定址方式的區別在於:指令格式中的暫存器內容不是運算元,而是運算元的位址,該位址指明的運算元在記憶體中。
相對定址是把程式計數器pc的內容加上指令格式中的形式位址d而形成運算元的有效位址。程式計數器的內容就是當前指令的位址。"相對"定址,就是相對於當前的指令位址而言。採用相對定址方式的好處是程式設計師無須用指令的絕對位址程式設計,因而所程式設計序可以放在記憶體的任何地方。 指令格式:mov ax,[bx+1200h] 運算元實體地址pa=(ds/ss)*10h+ea ea=(bx/bp/si/di)+(6/8)位偏移量disp 對於bx,si,di暫存器來說段暫存器預設為ds,對於sp來說,段暫存器預設為ss。
在基址定址方式中將cpu中的基址暫存器的內容,加上變址暫存器的內容而形成運算元的有效位址。基址定址的優點是可以擴大定址能力,因為與形式位址相比,基址暫存器的位數可以設定得很長,從而可以在較大的儲存空間中定址。
變址定址方式與基址定址方式計算有效位址的方法很相似,它把cpu中某個變址暫存器的內容與偏移量d相加來形成運算元有效位址。
但使用變址定址方式的目的不在於擴大定址空間,而在於實現程式塊的規律變化。為此,必須使變址暫存器的內容實現有規律的變化(如自增1、自減1、乘比例係數)而不改變指令本身,從而使有效位址按變址暫存器的內容實現有規律的變化。
這種型別的指令,不是明顯地給出運算元的位址。而是在指令中隱含著運算元的位址。例如,單位址的指令格式,就不明顯地在位址欄位中指出第2運算元的位址,而是規定累加暫存器ac作為第2運算元位址。指令格式明顯指出的僅是第1運算元的位址d。因此,累加暫存器ac對單位址指令格式來說是隱含位址。 如:daa 。
塊定址方式經常用在輸入輸出指令中,以實現外儲存器或外圍裝置同記憶體之間的資料塊傳送。塊定址方式在記憶體中還可用於資料塊移動。
這麼多的定址方式,什麼時候該用什麼方式,是我們該學習的,要想把部落格裡的東西變成自己的,需要刻苦的努力才行。
七種定址方式 直接定址方式
指令所要的運算元存放在記憶體中,在指令中直接給出該運算元的有效位址,這種定址方式為直接定址方式。在通常情況下,運算元存放在資料段中,所以,其實體地址將由資料段暫存器ds和指令中給出的有效位址直接形成,但如果使用段超越字首,那麼,運算元可存放在其它段。例 假設有指令 mov bx,1234h 在執行時...
定址方式總結
當運算元存放在儲存器時,儲存單元的實體地址有兩部分 段位址和偏移位址.指令中運算元也可以不在基本規定的段區內,必須在指令中指定段暫存器,即段超越.訪問的約定段及段超越 可修改段 如下所示 訪問方式 預設段偏移位址 段超越取指令 csip 堆疊操作 sssp 源串ds sics,es,ss 目的串es...
4 定址方式
通過上一節的例子我們了解到,訪問記憶體時在指令中可以用多種方式表示記憶體位址,比如可以用陣列基位址 元素長度和下標三個量來表示,增加了定址的靈活性。本節介紹x86常用的幾種定址方式 addressing mode 記憶體定址在指令中可以表示成如下的通用格式 address or offset bas...