【計算機組成原理】指令系統-尋址


一、指令和數據的尋址方式

操作數或指令在存儲器中的地址:某個操作數或某條指令存放在某個存儲單元時其存儲單元的編號

在存儲器中,操作數或指令字寫入或讀出的方式,有地址指定方式、相聯存儲方式和堆棧存取方式。

尋找方式:當采用地址指定方式時,形成操作數或指令地址的方式。

尋址方式分為兩類:指令尋址和數據尋址。

1)指令尋址:確定下一條預執行指令的指令地址

a、順序尋址:(PC)+1->PC    程序計數器自動加1

b、跳躍尋址:由轉移指令指出

2)數據尋址:確定本條指令的操作數地址

指令中所給出的地址碼,並不一定是操作數的有效地址。

尋址過程就是把操作數的形式地址,變換為操作數的有效地址。

例如:一種單地址指令的結構如下所示,其中用X I D各字段組成該指令的操作數地址。

 

二、尋址方式

1、隱含尋址(操作數在累加寄存器中)

在指令中不明顯的給出而是隱含着操作數的地址

例如:單地址的指令格式,沒有在地址字段指明第二操作數地址,而是規定累加寄存器AL或AX作為第二操作數地址,AL或AX對單地址指令格式來說是隱含地址

eg: MOV AL ,LSRC_BYTE

      MUL RSRC_BYTE  

ADD 尋址特征 A

操作數地址隱含在操作碼中,(尋址特征指明尋址類型)。

另一個操作數隱含在ACC中 

先在內存中地址為A的地方找到一個操作數,另一個操作數隱含在寄存器ACC里,從ACC里取出另外一個操作數,然后和給出的A地址中的數相加暫存在ACC中。

2、立即尋址

形式地址A就是操作數本身

OP 立即尋址特性 # A
  • 指令執行階段不訪存
  • A的位數限制了立即數的范圍

3、直接尋址

EA=A

直接根據讀內存找到操作數,形式地址不需要經過任何處理。

  • 執行階段訪問一次存儲器
  • A的位數決定了該指令操作數的尋址范圍

MOV AX,[2222H]:將有效地址為2222H的內存單元的內容讀到累加器AX中

4、間接尋址

EA=(A)

有效地址由形式地址間接提供,形式地址是操作數的地址的地址

OP 間接尋址標識   A

根據A的內容到內存中尋找到的是操作的數地址,再根據這個地址去找操作數。

  • 執行指令階段2次訪存
  • 可擴大尋址范圍

5、寄存器尋址

EA=R1

形式地址是寄存器的編號,直接去寄存器中尋址操作數。

  • 執行階段不訪存,只訪問寄存器,執行速度快

6、寄存器間接尋址

操作數里存放的是寄存器的編號,寄存器中存的不是操作數而是操作數的有效地址。所以操作數在存儲器里。

 

  • 有效地址在寄存器中,操作數在存儲器中,執行階段訪存。

7、偏移尋址

一種強有力的尋址方式  EA=A+(R)    形式地址需要和另一個寄存器中的地址相加

形式地址A是顯示的

另一個地址字段隱含在某個專用的寄存器R中。

常用的三個偏移尋址方式是:相對尋址  基址尋址  變址尋址(根據寄存器的不同類型來區分的)

7.1 相對尋址

A是相對於當前指令的位移量(可正   可負  補碼)

EX=A+(PC)    ----PC程序計數器  PC存儲當前正在執行指令的地址 

  • A的位數決定操作數的尋址范圍

7.2、基址尋址

EA=A+(BR)   BR為基地址寄存器  (Base Register)

  • 可擴大尋址范圍

7.3、變址尋址

EA=A+(IX)  IX為變址寄存器(專用)  通用寄存器也可以作為變址寄存器

 

  • 可擴大尋址范圍
  • 在程序執行的過程中IX內容可變,形式地址A不變
  • 便於處理數組問題

8、堆棧尋址

 

例:某16位機器所使用的指令格式和尋址方式如下所示,該機有兩個20位基址寄存器,4個16位變址寄存器,十六個16位通用寄存器,指令匯編格式中S(源),D(目標)都是通用寄存器。M是主存中的一個單元。三種指令的操作碼分別是MOV(OP)=(A)h ,STA(OP)=(1B) LDA(OP)=3C)h   MOV是傳送指令,STA為寫數指令 LDA為讀數指令

要求:1、分析三種指令的指令格式和尋址方式特點

2、CPU完成哪一種操作鎖化時間最短?哪一種操作所花時間最長,第二種指令的執行時間有時會等於第三種指令的執行時間嗎?

3、下列情況下每個十六進制指令分別代表什么?如果有編碼不正確,如何改進才能成為合法指令?

  1. (F0F1)H(3CD2)H               ---32位   
  2. (2856)H                               --16位
  3.    (6FD6)H                           --16位
  4. (IC2)H                                --16位

答:1、MOV:單字長,二地址指令屬於RR指令  

       STA:雙字長,二地址指令,RS指令  S為基址寄存器或變址寄存器

       LDA:雙字長,二地址指令,RS指令 S為20位地址。

2、MOV單字長取出只需要一次訪存,第一個不訪問存儲器要快。第二種還需要計算有效地址並對存儲器進行訪問。第二種指令所花費的時間不等於第三種,第三種無需進行有效地址的計算。

3、根據條件。MOV(OP)=(A)h=001010 

  STA(OP)=(1B)h =011011

LDA(OP)=(3C)h=111100

(F1F1)h(3CD2)h=(1111 0000 1111 0001 0011 1100 1101 0010)b

正確,表明吧主存(13cd2)h地址單元的內存取至15號寄存器

(2856)H=(0010 1000  0101 0110)b  單字長指令表明吧寄存器6的內容傳送到寄存器5號

(6FD6)H=0110 1111 1101 0110b操作碼不對  應修改為(28D6)h

(1C2)H=00000001 1100 0010b操作碼不對 應修改為(28C2)h

 

三、CISC何如RISC

復雜性指令系統計算機和精簡型指令系統計算機

1、精簡指令系統:選取使用頻率最高的一些簡單指令,指令條數少,   長度固定,指令少。

 例:在SPARC中,有一些指令沒有選入指令系統,但很容易使用指令集中的另外一條指令來替代實現

下表左半部列出了6條指令的功能,請在表的右半部填入替代指令及實現方法

答:因為SPARC約定R0的內容恆為0,而且立即數可以作為一個操作數來處理,所以某些指令可以替代實現。

指令   功能  替換指令 實現方法
MOVE 寄存器間傳送數據 ADD Rs+R0->Rd
INC 寄存器內容加1 ADD 立即數imm13=1,作為操作數
DEC 寄存器內容減1 SUB 立即數imm13=-1 作為操作數
NEG 取負數 SUB R0-Rs->Rd
NOT 取反碼 XOR 立即數imm13=-1 作為操作數
CLR 清除寄存器 ADD R0+R0=Rd

例、一條指令存儲在存儲器中的地址為300的地方,其操作數地址字段為301,地址字段的值為400,處理器中寄存器R1中包含數據200,在以下指令尋址方式下,求操作數的有效地址。

1)直接尋址

2)立即數尋址

3)相對尋址

4)寄存器(R1)間接尋址

5)以R1為變址寄存器的變址尋址

300中是操作碼  301是地址碼說明占兩個地址

 

答、1)400

2) 400是數本身 其地址是301

3)PC+400

4)寄存器間接尋址,寄存器里存的就是有效地址200

5)以R1為變址寄存器的變址尋址:操作數的有效地址為=200+400

格式表明有8個通用寄存器(產后度為16位),X指定尋址方式,主存實際容量為156K字。

1)假設不用通用寄存器也能直接訪問主存中的每一個單元,並假設操作碼域OP=6為,請問地址碼域應

分配多少位?指令字長度應有多少位?

2)假設X=11時,指定的某個通用寄存器用做基址寄存器,請提出一個硬件設計規則,使得被指定的通用寄存器能訪問1M主存空間中的每一個單元

答:1)主存容量為256K 地址域碼為18位,指令的長度為6+2+3+18=32位

2)1M需要20位地址

此時指定的通用寄存器用做基址寄存器,長度為16位,不能覆蓋1M字空間,可采用基址寄存器左移4位,低位補0,形參20位的基地址,然后與質量字形式地址相加得到有效地址,可以訪問1M字空間的任意一個單元。

例:假設寄存器中R中的數值為1000,地址為1000的寄存器中存儲的數據為2000,地址2000的存儲器中存儲的數據為3000,問在以下尋址方式中訪問的指令操作數的值是什么?

1)寄存器尋址R   

寄存器尋址,寄存器中的值就是操作數所以值為1000

2)寄存器間接尋址(R)

R中存的是地址,所以數據是2000

3)直接尋址1000

形式地址是1000,操作數是2000

4)存儲器的間接尋址(1000)

地址1000中存放的2000是形式地址 2000中存放的才是數據,所以操作數是3000

5)立即數尋址 #2000

立即尋址里面存放的就是操作數本身,所以操作數是2000

例、某計算機字長為16位,主存地址空間大小為128k,按字編址,采用單字長指令格式,指令各字段定義如下

轉移指令采用相對尋址,相對偏移是用補碼表示,尋址方式定義如下

Ms/Md 尋址方式 助記符 含義
000B 寄存器直接 Rn 操作數=(Rn)
001B 寄存器間接 (Rn) 操作數等於((Rn))
010B 寄存器間接。自增 (Rn)+ 操作數=((Rn)) (Rn)+1->Rn
011B 相對 D(Rn) 轉移目標地址=(PC)+(Rn)

(X)表示有存儲地址X或寄存器X的內容

1)該指令系統最多可有多少指令?該計算機最多有多少個通用寄存器?存儲地址的寄存器(MAR)和存儲數據的寄存器(MDR)至少各徐多少位?

答:操作碼有4位所以指令最多有1的四次方16條指令,

指令操作數占6位,其中3位指示尋址方式,寄存器編號為3位,所以該計算機最多可有2的三次方也就是8個通用寄存器

計算機字長16位,所以存儲器寄存器(MDR)至少為16位。

主存空間為128KB,按字(16位)編址,則尋址范圍為0~64K 存儲器地址寄存器(MAR)需16位(2的16次方=64K)

2)轉移指令的目標地址范圍是多少?

答:16位計算機通用寄存器也是16位,則指令中尋址范圍至少可達0~2的16次方-1

另一方面,主存地址空間為2的16次方(64K)則尋址范圍也應該大於等於64K,故轉移指令的目標范圍為0~2的16次方-1

3)若操作碼0010B表示加法操作(助記符為add),寄存器R4和R5的編號分別為100B和101B,R4的內容為1234H,R5的內容為5678H,地址1234H的內容為5678H,5678H中的內容為1234H,則匯編語言為add(R4),(R5)+

對應的機器碼是什么(十六進制)?該指令操作執行后,哪些寄存器和存儲單元的內容會改變?改變后的內容是什么?

答:R4是間接尋址  R5是間接尋址+自增

操作碼         源尋址方式      源寄存器       目標尋址方式               目標寄存器

0010                 001                100                    010                                  101  

該指令的功能是將R4內容所指存儲器單元的內容(源)與R5內容所指存儲器單元(目標)的內容相加后,寫到R5內容所指的存儲器單元,即

R4的內容:1234H,R4內容所指存儲器單元內容:5678H

R5的內容:5678H,R5內容所指存儲器單元內容:1234H

目標寄存器R5自加:5678H+1=5679H

所以執行后,目標寄存器R5目標寄存器內容所指的存儲器單元將改變,新R5=5679H

R5所指存儲單元(地址5678H的內容)=68ACH

 

例:某機器字長16位,主存按字節編址,轉移指令草原相對尋址,由兩個字節組成,第一字節為操作碼字段,第二字節為相對位移量字段,假定取指令時,每取一個字節PC自動+1,若某轉移指令所在主存地址為2000H,相對位移量字段的內容為06H,則該轉移指令成功轉以后的目標地址是

A:2006H   B2007H C:2008H D:2009H

答:1個字節8位,機器字長16位  轉移指令占2個字節, 讀操作碼是PC+1=2001   讀偏移地址又+1變為2002H ,用2002和偏移量06相加,得2008H 選D

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM