複製鏈接
請複製以下鏈接發送給好友

尋址方式

鎖定
尋址方式就是處理器根據指令中給出的地址信息來尋找有效地址的方式,是確定本條指令的數據地址以及下一條要執行的指令地址的方法。 [1] 
中文名
尋址方式
外文名
Addressing modes
機    器
處理器
方    式
順序、跳躍

尋址方式簡介

存儲器中,操作數或指令字寫入或讀出的方式,有地址指定方式、相聯存儲方式和堆棧存取方式。幾乎所有的計算機,在內存中都採用地址指定方式。當採用地址指定方式時,形成操作數或指令地址的方式稱為尋址方式。尋址方式分為兩類,即指令尋址方式和數據尋址方式,前者比較簡單,後者比較複雜。值得注意的是,在傳統方式設計的計算機中,內存中指令的尋址與數據的尋址是交替進行的。 [2] 

尋址方式尋址模式的數量

不同的計算機體系結構在硬件中提供的尋址模式數量上有很大差異。 消除複雜尋址模式並僅使用一個或幾個更簡單的尋址模式有一些好處,即使它需要一些額外的指令,也許還需要一個額外的寄存器。 如果只有一些簡單的尋址模式,那麼設計管流水線CPU將變得更為簡單。
大多數RISC架構只有大約五種簡單的尋址模式,而DECCAX等CISC架構有十幾種尋址模式,其中一些非常複雜。 IBM System/360架構只有三種尋址模式,System/390又添加了一些。
當只有少數尋址模式時,所需的特定尋址模式通常在指令代碼中編碼(例如IBM System/360和後繼者,還有大多數RISC)。 但是當存在許多尋址模式時,通常在指令中留出特定字段來指定尋址模式。 DEC VAX允許幾乎所有指令有多個存儲器操作數,因此保留每個操作數説明符的前幾位以指示該特定操作數的尋址模式。 保持尋址模式指定符位與操作碼操作位分離產生正交指令集 。
即使在具有許多尋址模式的計算機上,實際程序的測量表明下面列出的簡單尋址模式佔所有尋址模式的約90%或更多。 由於大多數此類測量基於編譯器從高級語言生成的代碼,因此這在某種程度上反映了所使用的編譯器的侷限性。

尋址方式指令尋址

指令的尋址方式有以下兩種。

尋址方式順序尋址方式

由於指令地址在內存中按順序安排,當執行一段程序時,通常是一條指令接一條指令地順序進行。也就是説,從存儲器取出第1條指令,然後執行這條指令;接着從存儲器取出第2條指令,再執行第二條指令;接着再取出第3條指令。 [2] 
這種程序順序執行的過程,稱為指令的順序尋址方式。為此,必須使用程序計數器(又稱指令計數器)PC來計數指令的順序號,該順序號就是指令在內存中的地址。

尋址方式跳躍尋址方式

程序轉移執行的順序時,指令的尋址就採取跳躍尋址方式。所謂跳躍,是指下條指令的地址碼不是由程序計數器給出,而是由本條指令給出。注意,程序跳躍後,按新的指令地址開始順序執行。因此,程序計數器的內容也必須相應改變,以便及時跟蹤新的指令地址。
採用指令跳躍尋址方式,可以實現程序轉移或構成循環程序,從而能縮短程序長度,或將某些程序作為公共程序引用。指令系統中的各種條件轉移或無條件轉移指令,就是為了實現指令的跳躍尋址而設置的。 [2] 
注意是否跳躍可能受到狀態寄存器的操作數的控制,而跳躍到的地址分為絕對地址(由標記符直接得到)和相對地址(對於當前指令地址的偏移量),跳躍的結果是當前指令修改PC程序計數器的值,所以下一條指令仍是通過程序計數器PC給出。

尋址方式操作數尋址

形成操作數的有效地址的方法稱為操作數的尋址方式。由於大型機、小型機微型機單片機結構不同,從而形成了各種不同的操作數尋址方式。下面介紹一些比較典型又常用的操作數尋址方式。 [2] 

尋址方式隱含尋址

這種類型的指令,不是明顯地給出操作數的地址。而是在指令中隱含着操作數的地址。例如,單地址的指令格式,就不明顯地在地址字段中指出第2操作數的地址,而是規定累加寄存器AC作為第2操作數地址。指令格式明顯指出的僅是第1操作數的地址D。因此,累加寄存器AC對單地址指令格式來説是隱含地址。 [2]  如:DAA ;

尋址方式立即尋址

指令的地址字段指出的不是操作數的地址,而是操作數本身,這種尋址方式稱為立即尋址立即尋址方式的特點是指令執行時間很短,因為它不需要訪問內存取數,從而節省了訪問內存的時間。 [2]  如:MOV AX,#5678H 注意:立即數只能作為源操作數,不能作為目的操作數。

尋址方式直接尋址

直接尋址是一種基本的尋址方法,其特點是:在指令格式的地址的字段中直接指出操作數在內存的地址。由於操作數的地址直接給出而不需要經過某種變換,所以稱這種尋址方式為直接尋址方式。在指令中直接給出參與運算的操作數及運算結果所存放的主存地址,即在指令中直接給出有效地址 [2] 

尋址方式間接尋址

間接尋址是相對直接尋址而言的,在間接尋址的情況下,指令地址字段中的形式地址不是操作數的真正地址,而是操作數地址的指示器,或者説此形式地址單元的內容才是操作數的有效地址。 [2] 

尋址方式寄存器尋址方式

當操作數不放在內存中,而是放在CPU通用寄存器中時,可採用寄存器尋址方式。顯然,此時指令中給出的操作數地址不是內存的地址單元號,而是通用寄存器的編號(可以是8位也可以是16位(AX,BX,CX,DX))。指令結構中的RR型指令,就是採用寄存器尋址方式的例子。如:MOV DS,AX
寄存器間接尋址方式與寄存器尋址方式的區別在於:指令格式中的寄存器內容不是操作數,而是操作數的地址,該地址指明的操作數在內存中。 [2] 

尋址方式相對尋址方式

相對尋址是把程序計數器PC的內容加上指令格式中的形式地址D而形成操作數的有效地址。程序計數器的內容就是當前指令的地址。“相對”尋址,就是相對於當前的指令地址而言。採用相對尋址方式的好處是程序員無須用指令的絕對地址編程,因而所編程序可以放在內存的任何地方。 [2]  指令格式:MOV AX,[BX+1200H] 操作數物理地址PA=(DS/SS)*16H+EA EA=(BX/BP/SI/DI)+(6/8)位偏移量Disp 對於BX,SI,DI寄存器來説段寄存器默認為DS,對於BP來説,段寄存器默認為SS [3] 

尋址方式基址尋址方式

基址尋址方式中將CPU中的基址寄存器的內容,加上變址寄存器的內容而形成操作數的有效地址。基址尋址的優點是可以擴大尋址能力,因為與形式地址相比,基址寄存器的位數可以設置得很長,從而可以在較大的存儲空間中尋址。 [2] 

尋址方式變址尋址方式

變址尋址方式與基址尋址方式計算有效地址的方法很相似,它把CPU中某個變址寄存器的內容與偏移量D相加來形成操作數有效地址。
但使用變址尋址方式的目的不在於擴大尋址空間,而在於實現程序塊的規律變化。為此,必須使變址寄存器的內容實現有規律的變化(如自增1、自減1、乘比例係數)而不改變指令本身,從而使有效地址按變址寄存器的內容實現有規律的變化。 [2] 

尋址方式塊尋址方式

塊尋址方式經常用在輸入輸出指令中,以實現外存儲器或外圍設備同內存之間的數據塊傳送。塊尋址方式在內存中還可用於數據塊移動。 [2] 
參考資料
  • 1.    石磊.計算機組成原理:清華大學出版社,2012
  • 2.    中央處理器CPU  .51cto網[引用日期2012-10-12]
  • 3.    何小海 嚴華.微機原理與接口技術:科學出版社,2006:87-90