天天看點

幹貨分享(1)——指令系統的那些個要點大綱:詳細内容:

直接上幹貨,廢話不多說。

大綱:

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條

幹貨分享(1)——指令系統的那些個要點大綱:詳細内容:

(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位,指令格式如下:

幹貨分享(1)——指令系統的那些個要點大綱:詳細内容:

該指令的功能是(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)——指令系統的那些個要點大綱:詳細内容:

               圖 1 存儲器内容

幹貨分享(1)——指令系統的那些個要點大綱:詳細内容:

圖 2 寄存器内容

分析:本題考查的知識點是資料尋址,要求考生能十分熟悉每種資料尋址的特點,并能根據不同的資料尋址做出相應的運算。

先來羅列一下已知的條件:

              1)   

幹貨分享(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);

幹貨分享(1)——指令系統的那些個要點大綱:詳細内容:

指令的8-10位是寄存器,檢視編号是001,即為R1

幹貨分享(1)——指令系統的那些個要點大綱:詳細内容:

找到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

繼續閱讀