直接上幹貨,廢話不多說。
大綱:
1、機器指令的基本格式
2、位址碼結構
3、擴充操作碼
4、九種基本的資料尋址方式
5、存儲器堆棧
詳細内容:
機器指令基本格式
機器碼字段 | 位址碼字段 |
機器字長:值計算機能直接處理二進制資料的位數
指令字長:一條指令中包括二進制的位數
單字長指令:指令長度等于機器字長的指令
雙字長指令:指令長度等于兩個機器字長的指令
2.2 位址碼結構
1)四位址指令
OP | A1 | A2 | A3 | A4 |
指令含義:(A1)OP(A2)->A3
A4=下一條将要執行指令的位址
注意:(A1)代表從A1位址中取出操作數,()代表取數值操作
2)三位址指令
OP | A1 | A2 | A3 |
指令含義:(A1)OP(A2)->A3
(pc)+1->pc
注意:程式計數器(PC)用于指出下一條指令在主存中的存放位址
3)二位址指令
OP | A1 | A2 |
指令含義:(A1)+(A2)->A1
(pc)+1->pc
其中:A1為目的操作數位址,A2為源操作數位址
4)一位址指令
OP | A1 |
指令含義:(Acc)OP(A1)->Acc
(pc)+1->pc
其中:Acc為;累加寄存器(Accumulator Acc)
5)零位址指令
OP |
實作這一構想的硬體結構是堆棧
小結:該知識點主要了解好指令的含義即可
例題1(14年選擇題)
單位址指令中為了完成兩個數的算術運算,除位址碼指明的一個操作數外,另一個常需采用______
A.堆棧尋址方式 B.立即尋址方式
C.隐含尋址方式 D.間接尋址方式
分析:A選項是零位址指令的情況,堆棧成為提供操作數和儲存運算結果的唯一場所。B,D選項不屬于這5種指令的情況,因為Ai就代表了操作數位址,是以二位址、三位址、四位址指令都是直接尋址方式,正确答案是C,單位址指令的隐含操作數存放在專門的寄存器中,即Acc.
2.3 擴充操作碼(重點)
優點:既能充分利用指令的各個字段,又能在不增加指令長度的情況下擴充操作碼的位數,使它能表示更多的指令。
例題2(14年綜合題)
設指令字長為16位,每個操作數的位址碼為6位,指令有零位址,一位址、二位址3種格式
設指令系統的操作碼長度和位置固定,若零位址指令有M中,一位址指令有N種,則二位址指令最多有幾種?
若采用擴充操作碼技術,二位址指令最多有幾條?
采用擴充操作碼技術,若二位址指令有P條,零位址指令有Q條,則一位址指令最多有幾種?
解:(1)由題意知這是個定長操作碼,指令字長16位,操作數位址碼Ai為6位,是以可以畫出零位址、一位址、二位址的指令格式
4位
OP |
指令格式: 零位址
4位 6位
OP | A1 |
一位址
4位 6位 6位
OP | A1 | A2 |
二位址
其中零位址指令M條,一位址指令N條。我們知,指令的操作碼長度固定為4位,最多可表示出2^4=16條指令。也即16條=M+N+P(其中P為二位址指令條數),是以P=16-M-N。
擴充操作碼的指令格式:
16位
OP |
指令格式: 零位址
10位 6位
OP | A1 |
一位址
4位 6位 6位
OP | A1 | A2 |
二位址
(2)采用擴充操作碼,則操作碼的長度不固定。二位址指令的操作碼為4位,本來最多可表示16條二位址指令。但是由于是擴充操作碼,至少要留一個二位址指令作為擴充視窗,來形成一位址指令。是以二位址指令最多有:
16-1=15條
(3)同樣也是采用擴充操作碼。我們知,每條二位址指令用來擴充形成一位址指令,可以造出2^6條一位址指令。同理,每條一位址指令用來擴充形成零位址指令,可以造出2^6條零位址指令。
現在題目問一位址指令最多有幾種,那麼我們應該轉成求最多有多少條二位址指令可供擴充,因為每多一條二位址指令,就能多出2^6條一位址指令。
題目已經告訴我們有二位址指令P條,這P條是不能作為擴充視窗的,那麼剩下的(2^4-p)條指令都能作為一位址的擴充視窗,也即最多可以造出(2^4-p)*2^6條一位址指令。
看似題目求到這就求完了,但是題目還告訴了我們零位址指令有Q條,說明同樣需要用一位址指令用來擴充成零位址指令,那麼不用來擴充的一位址指令條數記為R條才是我們最終要求的答案(因為用來擴充的一位址指令都成最後的零位址指令了)
這裡滿足一個等式:[(2^4-p)*2^6-R]*2^6=Q
由該等式求得R=(2^4-p)*2^6-ceil(Q/2^6),其中ceil代表向上取整
注:這道題非常有代表性,幾乎涵蓋的定長操作碼和擴充操作碼考題的知識點,務必要掌握并了解透徹,該題了解了,其他類似的題就很簡單了。
練習題:
練習題1(05年真題問答題):設指令長度為二進制16位,位址長度為4位,請設計一指令系統,使分别具有零位址、一位址和二位址的指令(要求指令條數最多)
提示:要使指令條數最多,那麼要求不進行擴充的指令要盡可能的多,也即二位址指令留一條指令作為擴充視窗,同理一位址指令也隻留一條指令作為擴充視窗。
練習題2(06年綜合題):假設某機器的指令的長度為16位,包括4位基本操作碼字段和三個4位位址段,請設計具有15條三位址指令,15條二位址,15條一位址和16條零位址的指令格式。
提示:稍微分析一下題目條件,15條三位址指令,15條二位址,15條一位址,16條零位址,這不就是指令條數最多的情況嗎,和05年的那題其實是一個意思,這兩道題是同一道題,隻不過換了一種說法。
2.4 基本的資料尋址方式(9種)【超級重點,必考考點】
尋址方式 | 有效位址 | 用途及特點 |
立即尋址 | 通常用于給寄存器賦初值 | |
隐含尋址 | 縮短指令字長 | |
直接尋址 | EA=A | |
間接尋址 | EA=(A) | 擴大尋址範圍,易于完成程式傳回 |
寄存器尋址 | EA=Ri | 減少指令字的長度,執行速度快 |
寄存器間接尋址 | EA=(Ri) | 擴大尋址範圍 |
基址尋址 | EA=(Rb)+A | 适用于多道程式設計 |
變址尋址 | EA=(Rx)+A | 處理數組問題和循環程式 |
相對尋址 | EA=(PC)+A | 轉移指令和程式浮動 |
先間址再變址 | EA=(Rx)+(A) | |
先變址再間址 | EA=((Rx)+A) | |
頁面尋址 | EA=PC//A |
說明: A為形式位址,EA為有效位址,操作數S=(EA)
注:1) 基址尋址與變址尋址的差別:基址尋址中,基址寄存器中的内容由作業系統确定,使用者不可變,但偏移位址可變;
變址尋址中,變址寄存器是由使用者設定的,其值可變,但指令字的形式位址A不可變
2)相對尋址是基于程式局部性原理
3)在各種尋址方式中,指令的位址碼字段可能出現的情況:
a.寄存器編号 b.裝置端口位址 c.存儲器的單元位址 d.資料
尋址特點比較:
a.間接慢,直接快
b.記憶體慢,寄存器快,立即數更快
c.要運算的慢,不需要運算的快
d.間接的複雜,直接的簡單
e.直接的死闆,間接的靈活
f.記憶體位址長,寄存器位址短
幾種資料尋址操作數存放位置比較:
1)立即尋址的操作數:存在于指令中,隻要取出指令,也就取出了可以立即使用的操作數。
OP | 立即數 |
從立即尋址的指令格式可以發現,指令中在操作碼字段後面的部分不是通常意義上的操作數位址,而是操作數本身。
2)寄存器尋址:操作數存放在寄存器中。根據寄存器編号Ri找到對應的操作數S=(Ri)
3)其他七種尋址:操作數都存放在主存。以直接尋址為例,通過指令的位址碼到主存的相應位置取操作數。
說明:對該知識點,應該能做到很熟悉每種尋址方式的有效位址計算方式EA,以及操作數S=(EA)。該知識點直接點和第六章的資料通路直接挂鈎,也是一個必考點,曆年大題經常把這兩個知識聯合考察,還是有一定難度,複習時應高度重視。
例題3(13年選擇題):若指令中位址碼給出的是操作數的有效位址,這種尋址方式為()
A.立即尋址 B.直接尋址 C.間接尋址 D.相對尋址
答案:B
例題4:電腦指令中要用到的操作數一般可來自()部件
A.通用寄存器 B.記憶體存儲單元 C.外設接口中的寄存器 D.以上情況均可
答案:D
例題5(選自高分筆記):某機器字長16位,主存按位元組編址,轉移指令采用相對尋址,由兩個位元組組成,第一位元組為操作碼字段,第二位元組為相對位移量字段。假定取指令時,每取一個位元組PC自動加1.若某轉移指令所在主存位址為2000H,相對位移量字段的内容為06H,則該轉移指令成功轉移後的目标位址是()
A.2006H B.2007H C.2008H D.2009H
分析:題目說的是相對尋址,是以先寫出計算相對尋址的有效位址的式子:
EA=(PC)+A,而A是已知的,隻需确定取值後PC的值。
我們知相對尋址由程式計數器(PC)提供基準位址,本題的(PC)=2000H
由題知,轉移指令由兩個位元組組成,每取一個位元組PC自動加1,由于每條指令由兩個位元組組成,是以取指令後PC值為2002H.[(PC)+2->PC]
故EA=(PC)+A=2002H+06H=2008H
注:看清題目是字編址還是位元組編址。
說明:由該題我想再補充一點關于相對尋址的特點(課本P60):
對于指令位址而言,操作數位址可能在指令位址之前或之後,是以,指令中給出的位移量可負、可正,通常用補碼表示。如果位移量為n位,則相對尋址的尋址範圍為:(PC)-2(n-1)~(PC)+2(n-1)-1
這是個小知識點,在課本60頁,去年綜合題的一個小問考到了,注意這給的是補碼的情況。
練習題(14年填空題):設相對尋址的轉移指令占兩個位元組,第一位元組是操作碼,第二位元組是用補碼表示的相對位移量,若轉移指令位址為200aH,要求轉移到2002H,則該轉移指令第二位元組内容為_____
注:這裡先不給出答案,自己看清題目再稍加思考,不難得出結果。
例題6(13年真題綜合題):
設有一台計算機,其指令長度為16位,指令格式如下:
該指令的功能是(R) ← (R)OP(M/D)
其中OP為操作碼,占5位;第一操作數R為寄存器直接尋址,第二操作數由M和D共同決定尋址方式(M為尋址方式,D為形式位址)且規定如下:
M=000,為立即尋址,D為立即數;
M=001,為相對尋址,D為位移量;
M=010,為基址尋址,D為位移量;
M=011,為寄存器間接尋址,D為寄存器号;
假定要執行的指令為加法指令(ADD),存放在002000單元中,D的值為02,該指令執行前存儲器内容如圖1所示;通用寄存器組、變址寄存器和基址寄存器内容如圖2所示。問:當M分别為以下幾種情況時,該指令執行後,結果是什麼?(要求寫出計算過程)(8分)
(1)當M=000 時,結果是什麼?放在哪個寄存器中?
(2)當M=001時,結果是什麼?放在哪個寄存器中?
(3)當M=010時,結果是什麼?放在哪個寄存器中?
(4)當M=011時,結果是什麼?放在哪個寄存器中?
圖 1 存儲器内容
圖 2 寄存器内容
分析:本題考查的知識點是資料尋址,要求考生能十分熟悉每種資料尋址的特點,并能根據不同的資料尋址做出相應的運算。
先來羅列一下已知的條件:
1)
該指令的功能是(R) ← (R)OP(M/D)
其中OP為操作碼,占5位;第一操作數R為寄存器直接尋址,第二操作數由M和D共同決定尋址方式(M為尋址方式,D為形式位址)
2)假定要執行的指令為加法指令(ADD),存放在002000單元中,D的值為02
根據2),我們知道OP是ADD操作,指令功能進一步寫成:
(R) ← (R)ADD(M/D)
加法指令ADD有兩個操作數,第一個操作數R為寄存器直接尋址,也就是說隻要找到了所在的寄存器号Ri,那麼第一操作數的值即為S1=(Ri);
指令的8-10位是寄存器,檢視編号是001,即為R1
找到R1對應的值,即S1=(R1)=002004
第二個操作數是由(M/D)共同确定,這個就要回到問題裡面去分析,總之就是再找到第二個操作數的值S2. 然後再(S1)+(S2)->(R1),也即把最終的結果存回到R1寄存器中。
是以,本題的關鍵點就是求第二操作數S2.帶着這個問題方向回到題目中尋找答案。
(1)M=000,由題意知為立即尋址,D為立即數,且D=2.是以S2=D=2
結果S=S1+S2=002004+02=002006,結果存放在R1
(2) M=001,由題意知為相對尋址,D為位移量。
相對尋址的EA=(PC)+D,其中D=02
由記憶體位址圖知,加法指令ADD在記憶體的初始位址是(PC)=002000.
而該指令是16位(說明是兩個位元組,PC需要增加兩步),那麼當把指令取出,要執行(PC)+2->PC操作,
故EA=002002+02=002004,則S2=(EA)=001150
故結果S=S1+S2=002004+001150=03154,結果存放在R1
當CPU從存儲器中取出一個位元組時,會自動執行(PC)+1→PC。程式計數器PC在取出指令後PC=PC+1
(3)M=010,為基址尋址,D為位移量
基址尋址的EA=(Rb)+D,其中D=02
由題目中的基址寄存器圖知(Rb)=002004,由此得EA=002006
故S2=(EA)=001250,是以S=S1+S2=002004+001250=003254,存放在R1中。
(4)M=011, 為寄存器間接尋址,D為寄存器号;因為D=02,是以另一個寄存器是R2
寄存器間接尋址的EA=(Ri),故EA=(R2)=004004,則S2=(EA)=002016
是以S=S1+S2=002004+002016=00401A,存放在R1中。
練習題:某機的機器字長為16位,主存按字編址,指令格式如下:
15 10 9 8 7 0
操作碼 | X | D |
其中,D為位移量,X為尋址特征位。
X=00:直接尋址
X=01:用變址寄存器X1進行變址
X=10:用變址寄存器X2進行變址
X=11:相對尋址
設(PC)=1234H, (X1)=0037H (X2)=1122H (H代表十六進制)
請确定下列指令的有效位址
(1)4420H (2)2244H (3)1322H (4)3521H (5)6723H
詳解:
(1)4420=0100 01 00 0010 0000H
00表示直接尋址Addr=(A)=20H
(2)2244H=0010 00 10 0100 0100H
D=0100 0100H=44H
10表示變址寄存器X2,Addr=(X2)+D=1122H +44H
(3)1322H=0001 0 0 11 0010 0010 H
D=0010 0010 H=22H
11表示相對尋址, Addr=(PC)+D=1234H+22H
(4)3521H=0011 01 01 0010 0001H
(5))6723H=0110 01 11 0010 0011H
D=0010 0011H=23H
Addr=(X2)+D=1122H +44H
1.X=00,D=20H,EA=20H 2.X=10,D=44H,EA=1122H+44H=1166H 3.X=11,D=22H,EA=1234H+22H=1256H 4.X=01,D=21H,EA=0037H+21H=0058H 5.X=11,D=23H,EA=1234H+23H=1257H |
說明:這題比較死闆,遠不如真題的靈活,畢竟沒有那麼多圖,這題隻要對各種資料尋址比較熟悉,應該是比較簡單的,先不提供答案,由自己完成。
2.5 存儲器堆棧
(1)自底向上生成(向低位址方向生成)堆棧
進棧:
(SP)+1->SP ;修改棧指針
(A)->(SP) ;将A中的内容壓入棧頂單元
出棧:
((SP))->A ;将棧頂單元内容彈出送入A中
(SP)+1->SP ;修改棧指針
(2)自頂向下生成(向高位址方向生成)堆棧
這種堆棧與自底向上堆棧正好相反,它的棧底位址小于棧頂位址。進棧時,先令(SP)+1->SP,然後再壓入資料;出棧時,先将資料彈出,然後(SP)-1->SP
例題7(14年選擇題):在向下生成的堆棧中,如果入棧指令PUSHX的操作定義為:(SP)+1->SP,M(X)->M(SP),則出棧指令POPX應定義為___
A.(SP)-1->SP, M(SP)->M(X) A.(SP)+1->SP, M(SP)->M(X)
C.M(SP)->M(X), (SP)-1->SP D..M(SP)->M(X), (SP)+1->SP
答案:C