概念
存儲單元中存放的數據信息大致可分為兩大類:一類是指令信息;另一類是運算元。兩類信息的定址方式既有相同之處,又各有特點。
由於程式中的指令序列通常是順序排列的,對於順序推進的指令序列,採用程式計數器PC加1的方式自動形成下一條指令的地址。當程式發生轉移時,就不能採用上述方式,此時把指令地址的形成轉換為運算元地址的定址。把指令不當指令信息,而當作運算元信息來處理、按運算元的定址方式獲得指令地址。
運算元地址的定址方式比較複雜,主要原因是,運算元本身不能像指令那樣順序排列,很多運算元是公用的,集中放在某一划定的區域。有些運算元是原始值存放在存儲器中,有些則是中間運算的結果或先前運算的結果。它們的來源並無規律,具有很大的隨機性和浮動性,這樣就增加了獲得有效地址的難度。另一方面隨著程式設計技巧的發展,為了提高程式的質量也提出了很多運算元設定方法,豐富了定址的手段。
定址可用定址單位來度量。它的含義是用一個有效地址訪問存儲器取出運算元的長度。運算元是按位、位元組、字、塊和頁來組織的,因此定址單位就有位地址、位元組地址、字地址、塊地址和頁地址。就是說,如果有效地址是位地址,訪問存儲器後,取出運算元長度只有一位,如果定址單位是位元組地址,取出的運算元長度是8位(一個位元組);其餘依此類推。
一個指令系統具有哪幾種定址方式,能否為編製程序提供方便是指令系統設計的關鍵,也是一個技巧性極強的問題,它是初學者理解一個指令系統的難點。在不同的計算機中,定址方式的分類和名稱不很統一,但大多可以歸納為以下幾種方式(包括它們的變型與組合):立即定址、直接定址、間接定址、變址定址。
工作原理
指令的定址方式
指令定址比較簡單,它又可以細分為順序定址和跳躍定址。
1、順序定址方式
程式中的指令序列在主存中是順序存放的。因此,程式執行時,是從該程式的第一條指令開始,逐條取出並逐條執行的。這種程式的順序執行過程,稱為順序定址方式。順序定址可通過程式計數器PC加1,自動形成下一條指令的地址。
2、跳躍定址方式
跳躍定址則需要通過程式轉移類指令實現。跳躍定址的轉移地址形成方式有3種:直接(絕對)、相對和間接定址,它們與下面介紹的運算元定址方式中的直接、相對和間接定址是相同的,只不過尋找到的不是運算元的有效地址而是轉移地址而已。
運算元的定址方式
1、立即定址(立時定址、立即運算元)
指令中直接給出了運算元,運算元緊跟在操作碼的後面,在取出指令的同時,也就取出了運算元。立即有運算元可供操作之用,所以稱為立即運算元,或立即定址。
立即定址的指令執行起來很快,
CPU將數據與指令一起從存儲器取出,不必通過定址計算就獲得了運算元。立即定址也便於程式設計師使用。但是,因為數據和地址都是固定的,所以這種定址方式靈活性最差。
立即定址方式可用來提供常數,設定初始值等。
2、直接定址
指令中的地址碼是運算元的有效地址,用這個有效地址訪問一次存儲器便獲得運算元,這種定址方式稱為直接定址。因為不需要任何定址計算,所以稱指令帶有運算元的有效地址的定址方式為直接定址。通常說定址的範圍就是用這個地址直接訪問存儲空間的大小,它也受到地址欄位長度的限制。
對於使用次數很少又不需要做什麼變化的地址碼,可採用直接定址方式。
3、間接定址
間接定址方式意味著指令中的地址欄位使運算元地址的地址,即運算元的地址是間接提供的,通常在指令格式中劃出一位作為直接定址或間接定址的標誌位,間接定址用標誌符@指出。CPU先從存儲器中取出含有間接地址的指令,然後訪問間接地址單元,從中取出有效地址。CPU需要多執行一次訪問存儲器操作,所以間接定址比直接定址執行速度要慢。
4、變址定址
為了使地址量可以靈活地進行某種變化,大多數計算機都設定了變址定址方式,即指定某暫存器作為變址暫存器,並在指令地址段中給出一個形式地址,變址暫存器的內容與形式地址之和就是有效的運算元地址。
變址定址方式是一種套用廣泛的方式,它的典型做法是將指令中給出的形式地址當作基準地址或是一個常數,變址暫存器的內容則作為修改量,經地址加法器形成有效的運算元地址。