1. 程式人生 > >微型計算機原理課後習題答案-王忠民主編

微型計算機原理課後習題答案-王忠民主編

王忠民主編             西安電子科技大學出版

部分習題答案

第二章 計算機中的數值和編碼

  1. 將十進位制數轉換為二進位制和十六進位制

(1)  129.75=1000 0001.11B81.CH      (2)  218.8125=1101 1010.1101BDA.DH

(3)  15.625=1111.101BF.AH           (4)  47.15625=10 1111.0010 1B

2F.28 H

 

  1. 將下列二進位制數轉換為十進位制和十六進位制

       (1)  111010 B=58 =3A H                 (2)  1011 1100.111B= 188.875= BC.E H

       (3)  0.1101 1B=0.84375

=0.D8H           (4)  11110.01 B=30.25 =1E.4H

 

3、完成下列二進位制數的加減法運算

       (1) 1001.11+100.01=1110.00          (2)  1101010110.1001-01100001.0011=01110101.0110

       (3) 00111101+10111011=11111000

   (4)  01011101.0110-101101.1011=101111.1011

 

4、完成下列十六進位制數的加減法運算

       (1)   745CH+56DFH=D14B H         (2) ABF.8H-EF6.AH=9C28.E H     

       (3) 12AB.F7+3CD.05=1678 .FC H     (4)   6F01H-EFD8H=7F29 H

 

5、計算下列表達式的值

       (1)   128.8125+10110101.1011B+1F.2H=101010101.1010B          

       (2)   287.68-10101010.11H+8E.EH=103.CEH                 

       (3)   18.9+1010.1101B+12.6H-1011.1001=36.525

 

6、選取字長n為8位和16位兩種情況,求下列十進位制數的補碼。

       (1)   X=-33的補碼: 1101 1111  1111111111011111

       (2)   Y=+33的補碼: 0010 0001 0000 0000 0010 0001

       (3) Z=-128的補碼:1000 0000  1111 1111 1000 0000

       (4)   N=+127的補碼:0111 1111  0000 0000 0111 1111

       (5)   A=-65的補碼: 1011 1111  1111 1111 1011 1111

       (6)   B=+65的補碼: 0100 0001 0000 0000 0100 0001

       (7)   C=-96的補碼: 1010 0000 1111 1111 1010 0000

       (8)   D=+96的補碼: 0110 0000 0000 0000 0110 0000

 

7、寫出下列用補碼錶示的二進位制數的真值

       (1) [X]補=1000 0000 0000 0000 H                   X1000 0000 0000 0000 H32768      

       (2) [Y]補=0000 0001 0000 0001 H                   Y0000 0001 0000 0001 H257         

       (3) [Z]補=1111 1110 1010 0101 H                    Z0000 0001 0101 1011 H347         

       (4) [A]補=0000 0010 0101 0111 H                   A0000 0010 0101 0111 H599

 

8、設機器字長為8位,最高位為符號位,試對下列格式進行二進位制補碼運算,並判斷結果是否溢位。

       (1)  43+8    

           ∵ [43]補=00101011B,[8]補=00001000B

        ∴  [43]補+[8]補=00101011B+00001000B=00110011B=33H

                            00101011B

                     +    00001000B                                              

                            00110011B                                              

           ∵  CS=0,CD=0,OF=CS⊕CD=0⊕0=0

           ∴  無溢位

 

(1)  43+8                  33H      (無溢位)        (2)  -52+7               D3 H      (無溢位)

(3)  60+90                 96 H      (溢位)          (4)  72-8                  40 H      (無溢位)

     (5)  -33+(-37)        0BA H    (無溢位)         (6)  -90+(-70)      60 H       (溢位)   

       (7)  ―9―(―7)           FE H     (無溢位)          (8)  60-90                 E2 H       (無溢位)

 

9、 設有變數x=11101111B,y=11001001B,z=01110010B,v=01011010B,試計算x+y=?,x+z=?,y+z=?,z+v=?,請問:① 若為無符號數,計算結果是否正確?② 若為帶符號補碼數,計算結果是否溢位?

       x+y = 11101111B+11001001B=10111000B=1B8 H

                            1110 1111 B

                     +    1100 1001B

                            1011 1000B

       ① 若為無符號數                              ② 若為帶符號補碼數

           ∵ CF=1     ∴ 不正確                   ∵ CF=1,DF=1  OF=0      ∴ 不溢位

 

          x+y = 0B8 H          x+z = 61 H            y+z = 3B H           z+v = 0CC H

     ①   不正確            不正確            不正確            正確   

      ②    不溢位           不溢位            不溢位                  溢位

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第三章  80X86微處理器

1.簡述8086/8088CPU中BIU和EU的作用,並說明其並行工作過程。

      答: (1) BIU的作用:計算20位的實體地址,並負責完成CPU與儲存器或I/O埠之間的資料傳送。

              (2) EU的作用:執行指令,併為BIU提供所需的有效地址。

              (3) 並行工作過程:當EU從指令佇列中取出指令執行時,BIU將從記憶體中取出指令補充到指令佇列中。這樣就實現了取指和執行指令的並行工作。

   

2.8086/8088CPU內部有哪些暫存器?其主要作用是什麼?

      答:80868088CPU內部共有14個暫存器,可分為4類:資料暫存器4個,地址暫存器4個,段暫存器4個和控制暫存器2個。其主要作用是:

              (1) 資料暫存器:一般用來存放資料,但它們各自都有自己的特定用途。

           AX(Accumulator)稱為累加器。用該暫存器存放運算結果可使指令簡化,提高指令的執行速度。此外,所有的IO指令都使用該暫存器與外設埠交換資訊。  

           BX(Base)稱為基址暫存器。用來存放運算元在記憶體中資料段內的偏移地址,

           CX(Counter)稱為計數器。在設計迴圈程式時使用該暫存器存放迴圈次數,可使程式指令簡化,有利於提高程式的執行速度。  

           DX(Data)稱為資料暫存器。在暫存器間接定址的IO指令中存放IO埠地址;在做雙字長乘除法運算時,DXAX一起存放一個雙字長運算元,其中DX存放高16位數。

              (2) 地址暫存器:一般用來存放段內的偏移地址。

             SP(Stack Pointer)稱為堆疊指標暫存器。在使用堆疊操作指令(PUSHPOP)對堆疊進行操作時,每執行一次進棧或出棧操作,系統會自動將SP的內容減2或加2,以使其始終指向棧頂。

           BP(Base Pointer)稱為基址暫存器。作為通用暫存器,它可以用來存放資料,但更經常更重要的用途是存放運算元在堆疊段內的偏移地址。

           SI(Source Index)稱為源變址暫存器。SI存放源串在資料段內的偏移地址。

              DI(Destination Index)稱為目的變址暫存器。DI存放目的串在附加資料段內的偏移地址。

              (3) 段暫存器:用於存放段地址

           CS(Code Segment)稱為程式碼段暫存器,用來儲存程式當前使用的程式碼段的段地址。 CS的內容左移4位再加上指令指標暫存器IP的內容就是下一條要讀取的指令在儲存器中的實體地址。

           DS(Data Segment)稱為資料段暫存器,用來存放程式當前使用的資料段的段地址。 DS的內容左移4位再加上按指令中儲存器定址方式給出的偏移地址即得到對資料段指定單元進行讀寫的實體地址。

           SS(Stack Segment)稱為堆疊段暫存器,用來存放程式當前所使用的堆疊段的段地址。堆疊是儲存器中開闢的按“先進後出”原則組織的一個特殊儲存區,主要用於呼叫子程式或執行中斷服務程式時保護斷點和現場。

           ES(Extra Segment)稱為附加資料段暫存器,用來存放程式當前使用的附加資料段的段地址。附加資料段用來存放字串操作時的目的字串。

              (4) 控制暫存器

           IP(Instmcdon Pointer)稱為指令指標暫存器,用來存放下一條要讀取的指令在程式碼段內的偏移地址。使用者程式不能直接訪問IP

           FLAGS稱為標誌暫存器,它是一個16位的暫存器,但只用了其中9位,這9位包括(個狀態標誌位和3個控制標誌位。它用來反映算術運算和邏輯運算結果的一些特徵,或用來控制CPU的某種操作。

 

3.8086/8088CPU中有哪些暫存器可用來指示運算元在儲存器中某段內的偏移地址?

      答:可用來指示段內偏移地址的暫存器共有6個:IPSPBPBXSIDI

 

4.8086/8088CPU中標誌暫存器FLAGS有哪些標誌位?它們的含義和作用如何?

      答:標誌暫存器中的標誌共有9個,分為兩類:狀態標誌6個和控制標誌3個。其作用是:

              (1) 狀態標誌:用來反映算術和邏輯運算結果的一些特徵。

           CF(Carry Flag)—進位標誌位。當進行加減運算時,若最高位發生進位或借位,則CF1,否則為0。該標誌位通常用於判斷無符號數運算結果是否超出了計算機所能表示的無符號數的範圍。

           PF(Parity Flag)—奇偶標誌位。當指令執行結果的低8位中含有偶數個1,PF1,否則為0

           AF(Auxiliary Flag)—輔助進位標誌位。當執行一條加法或減法運算指令時,若結果的低位元組的低4位向高4位有進位或借位,則AF1,否則為0

           ZF(Zero Flag)—零標誌位。若當前的運算結果為0,則ZF1,否則為00

           SF(Sign Flag)—符號標誌位。當運算結果的最高位為1時,SF=1,否則為00

           OF(Overflow Flag)—溢位標誌位。當運算結果超出了帶符號數所能表示的數值範圍,即溢位時,OF=1,否則為0。該標誌位通常用來判斷帶符號數運算結果是否溢位o

             (2) 控制標誌位:用來控制CPU的操作,由程式設定或清除。它們是:

             TF(TrapFlag)—跟蹤(陷阱)標誌位。它是為測試程式的方便而設定的。若將TF180868088CPU處於單步工作方式,否則,將正常執行程式。

           IP(Interrupt Flag)—中斷允許標誌位。它是用來控制可遮蔽中斷的控制標誌位。若用STI指令將IF1,表示允許CPU接受外部從INTR引腳上發來的可遮蔽中斷請求訊號;若用CLI指令將IP0,則禁止CPU接受可遮蔽中斷請求訊號。IF的狀態對非遮蔽中斷及內部中斷沒有影響。

           DF(DirectionFlag)—方向標誌位。若用STDDF1,串操作按減地址方式進行,也就是說,從高地址開始,每操作一次地址自動遞減;若用CLDDF0,則串操作按增地址方式進行,即每操作一次地址自動遞增。

 

5.8086/8088CPU的地址匯流排有多少位?其定址範圍是多少?

      答:8086/8088地址匯流排有20根,定址範圍1MB

 

6.什麼叫指令佇列?8086/8088CPU中指令佇列有什麼作用?其長度分別是多少?

      答: (1) 指令佇列:採用“先進先出”原則,按順序存放預執行指令的緩衝器稱為指令佇列。

            (2) 指令佇列的作用:存放EU將要執行的指令,使CPU的取指和執行指令能並行工作。

              (3) 指令佇列的長度:80866個位元組,80884個位元組。

 

7.Intel8086與8088有何區別?

      答:80868088的區別有三處:

              (1) 外部資料匯流排位數不同(即地址/資料分時複用引腳條數不同);

                     808616位:AD15AD0

                     8088 8位:AD7AD0

              (2) 內部指令佇列緩衝器長度不同;

                     80866個位元組。當指令隊列出現2個空位元組時,BIU將取指補充。

                     80864個位元組。當指令隊列出現1個空位元組時,BIU將取指補充。

              (3) 外部某些控制匯流排定義不同。

                  808628號引腳定義為MIO(S2)8088定義為IOM(S2)

                  808634號引腳定義為BHES78088定義為SS0(HIGH)

 

8.簡述8086 CPU使用地址鎖存訊號ALE將地址A15~A0與資料D15~D0分開的工作原理。

      答:在任何一個匯流排週期的T1狀態,ALE均為高電平,以表示當前地址/資料複用線上的輸出的是地址資訊,在ALE由高變低的下降沿時把地址裝入地址鎖存器,而在T2T3T4狀態,ALE均為低電平,以表示當前地址/資料複用線上的輸出的是資料資訊,此時通過資料收發器進行傳送。

 

9.什麼是邏輯地址?什麼是實體地址?若已知邏輯地址為BA00:A800,試求實體地址。

      答: 邏輯地址:由段地址和偏移地址表示的儲存單元地址稱為邏輯地址。

              實體地址:CPU對儲存器進行訪問時實際所使用的20位地址稱為實體地址。

                邏輯地址為BA00H:A800H

               實體地址=BA00H×10HA800HC4800H

 

10.簡述堆疊指標暫存器SP的功能及堆疊的操作過程。

      答: (1) SP的功能:指示進棧和出棧操作時的偏移地址。

              (2) 堆疊的操作過程:進棧時,先將SP2,再將資料壓入堆疊(即先移後入);出棧時,先將資料彈出堆疊,再將SP+2(即先出後移)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第四章  80X86 指令系統

  1. 指出源運算元的定址方式

    ⑴ MOV  BX,2000H     ;立即數定址       ⑵ MOV BX,[2000H]         ;直接定址     

    ⑶ MOV  BX,[SI]     ;暫存器間接定址   ⑷ MOV  BX,[SI+2000H]    ;暫存器相對定址

    ⑸ MOV  [BX+SI],AL  ;暫存器定址       ⑹ ADD  AX,[BX+DI+80]   ;基址變址相對定址

    ⑺ MUL  BL            ;暫存器定址       ⑻ JMP  BX                 ;段內間接定址

    ⑼ IN   AL,DX        ;埠間接定址     ⑽ INC WORD PTR [BP+10H]   ;暫存器相對定址

    ⑾ MOV  CL,LENGTH VAR ;立即數定址       ⑿ MOV BL,OFFSET VAR1     ;立即數定址

 

  1. 指出下列指令是否正確 

 (1)  MOV  DS,0100H                  ;錯誤。源運算元是立即數時,目的運算元不能時段暫存器

 (2)  MOV  BP,AL                       ;錯誤。運算元型別不一致

 (3)  XCHG  AH,AL                    ;正確。

 (4)  OUT     310H,AL                   ;錯誤。埠直接定址的範圍應在0FFH之間

 (5)  MOV    BX,[BX]                    ;正確。

       (6)  MOV    ES:[BX+DI] ,AX     ;正確。

        (7)  MOV    AX,[SI+DI]              ;錯誤。儲存器定址中有效地址不能由兩個變址暫存器組成

        (8)  MOV    SS:[BX+SI+100H],BX  ;正確。

        (9)  AND  AX,BL                      ;錯誤。運算元型別不一致

(10)  MOV    DX,DS:[BP]              ;正確。

       (11)  ADD    [SI],20H                    ;錯誤。用PTR 說明型別

       (12)  MOV  30H,AL                     ;錯誤。目的運算元不能為立即數

(13)  PUSH 2000H                          ;錯誤。堆疊指令的運算元不能是立即數

(14)  MOV  [SI],[2000H]              ;錯誤。兩個運算元不能同時為儲存器運算元

(15)  MOV  SI,AL                        ;錯誤。運算元型別不一致

(16)  ADD    [2000H],20H              ;錯誤。用PTR 說明型別

       (17)  MOV  CS,AX                      ;錯誤。目的運算元不能為程式碼段暫存器

(18)  INC      [DI]                             ;錯誤。需用PTR說明型別

       (19)  OUT  BX,AL                      ;錯誤。埠間接定址的暫存器只能是DX暫存器

(20)  SHL    BX,3                         ;錯誤。移位次數大於1時應該用CL暫存器

(21)  XCHG  CX,DS                     ;錯誤。交換指令中不能出現段暫存器

(22)  POP    AL                              ;錯誤。堆疊指令的運算元只能是字運算元(16位運算元)

 

  1. 寫出儲存器運算元實體地址的計算表示式

(1)   MOV  AL,[DI]                    ;(DS)×10H(DI)

(2)   MOV  AX,[BX+SI]               ;(DS)×10H(BX)(SI)

       (3)   MOV  5[BX+DI],AL             ;(DS)×10H(BX)(DI)5

(4)   ADD  AL,ES:[BX]              ;(ES)×10H(BX)

(5)   SUB  AX,[1000H]               ;(DS)×10H1000H

(6)   ADC  AX,[BX+DI+2000H]    ;(DS)×10H(BX)(DI)2000H

(7)   MOV  CX,[BP+SI]             ;(SS)×10H(BP)(SI)

(8)   INC   BYTE PTR [DI]          ;(DS)×10H(DI)

 

  1. 若(DS)=3000H,(BX)=2000H,(SI)=0100H,(ES)=4000H,計算下列儲存器運算元的實體地址。

       (1)  (DS)×10H+(BX)=3000H×10H+2000H=32000H  

       (2)  (DS)×10H+(BX)+(SI)+1000H=3000H×10H+2000H+0100H+1000H=33100 H       

(3)  (DS)×10H+(BX)+(SI)=3000H×10H+2000H+0100H=32100 H         

(4)  (ES)×10H+(BX)=4000H×10H+2000H=42000 H

 

5、若(CS)=E000H,說明程式碼段可定址物理儲存空間的範圍。

    ∵ 最小實體地址為:(CS)×10H+0000H=E0000H

          最大實體地址為:(CS)×10H+FFFFH=EFFFFH

    ∴ 程式碼段可定址物理儲存空間的範圍是:E0000HEFFFFH

 

6、設(SP)=2000H,(AX)=3000H, (BX)=5000H,執行下列程式段後,(SP)=?,(AX)=?, (BX)=?

              PUSH  AX

              PUSH  BX

              POP  AX

       (SP)1FFEH(AX)5000H (BX)5000H

 

7、試比較SUB AL,09H與CMP AL,09H這兩條指令的異同。若(AL)=08H,分別執行上述兩條指令後,(AL)=?,CF=?,OF=0,ZF=?

      (1)   相同點:兩條指令都能完成(AL)09H的功能,並且都影響六個狀態標誌位;

              不同點:SUB指令將運算結果回送到AL暫存器中,而CMP指令不回送。

       (2) SUB AL,09H             (AL)=FFHCF=1OF=0ZF=0

        CMP AL,09H            (AL)=08HCF=1OF=0ZF=0

8、分別執行下列指令,試求AL的內容及各狀態標誌位的狀態。

       (1) MOV      AL,19H      ;

              ADD       AL,61H       ;(AL)=7AH       OF=0    SF=0     ZF=0     AF=0    PF=0     CF=0

       (2) MOV      AL,19H      ;

              SUB       AL,61H       ;(AL)=B8H        OF=0    SF=1     ZF=0     AF=0    PF=1     CF=1

       (3) MOV      AL,5DH     ;

              ADD       AL,0C6H     ;(AL)=23H        OF=0    SF=0     ZF=0     AF=1     PF=0     CF=1

       (4) MOV      AL,7EH      ;

              SUB       AL,95H       ;(AL)=E9H        OF=1    SF=1     ZF=0     AF=0    PF=0     CF=1

 

9、用最少的指令,實現下述要求的功能。

       (1)   AH的高4位清零。                                               AND       AH0FH                                 

       (2) AL的高4位去反。                                               XOR     AH, 0F0H             

       (3) AL的高4位移到低4位,高4位清0。                 MOV     CL4                               

                                                                                           SHR      ALCL

       (4)  AL的低4位移到高4位,低4位清0。                 MOV     CL4

                                                                                           SHL      ALCL                                   

             

10、設(BX)=6D16H,(AX)=1100H,寫出下列三條指令執行後,AX和BX暫存器中的內容。

              MOV     CL,06H

              ROL       AX,CL

              SHR       BX,CL                      (AX)=4004 H       (BX)=01B4 H

      

11、設初值(AX)=0119H,執行下列程式段後,(AX)=?

              MOV      CH,AH

              ADD       AL,AH

              DAA

              XCHG    AL,CH

              ADC       AL,34H

              DAA

              MOV      AH,AL

              MOV      AL,CH                      (AX)=3520 H

      

12、指出下列程式段的功能。

       (1)   MOV      CX,10

              LEA       SI,First

              LEA       DI,Second

              REP   MOVSB                          First串中前10個字元傳送至Second

       (2)   CLD      

              LEA       DI,[0404H]

              MOV      CX,0080H

              XOR       AX,AX

              REP  STOSW                            將起始地址為0404 H開始的80 H個單元置成0

 

13、 設(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,試求執行XCHG  BX,[BP+SI]後,    (BX)=?,(2F246H)=?

              (BX)4154H                      (2F246H)6F30H

 

14、設(BX)=0400H,(DI)=003CH,執行LEA  BX,[BX+DI+0F62H]後,(BX)=?

              (BX)139E H

 

15、設(DS)=C000H,(C0010H)=0180H,(C0012H)=2000H,執行LDS  SI,[10H]後,(SI)=?, (DS)=?

              (SI)0180 H(DS)2000 H

 

16、已知(DS)=091DH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,試求單獨執行下列指令後的結果。

       (1) MOV      CL,20H[BX][SI]               ;(CL)0F6 H       

       (2) MOV      [BP][DI],CX                            ;(1E4F6 H)5678 H         

       (3)  LEA       BX,20H[BX][SI]               ;(BX)=0056 H 

              MOV      AX,2[BX]                           ;(AX)=1E40 H

(4)   LDS       SI,[BP][DI]                         ;

       MOV   [SI],BX                             ;((SI))=0024 H              

(5)   XCHG   CX,32H[BX]                     ;

       XCHG   20H[BX][SI],AX               ;(AX)5678 H (09226H)1234 H

17、若CPU中各暫存器及RAM引數如圖所示,試求獨立執行如下指令後,CPURAM相應暫存器及儲存單元的內容是多少?

 

 

CPU

RAM

執行前

執行後

CS

3000H

FFFFH

CX

20506H

06H

不變

DS

2050H

0004H

BX

20507H

00H