ibm-pc匯編語言程序設計課后習題答案
ibm-pc匯編語言課后答案
(1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H
(2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH
(4) 32767=111 1111 1111 1111B=7FFFH
1.2 將下列二進制數轉換為十六進制數和十進制數:
(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111
答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128
(3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255
1.3 將下列十六進制數轉換為二進制數和十進制數:
(1) FA (2) 5B (3) FFFE (4) 1234
答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91
(3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=4660
1.4 完成下列十六進制數的運算,并轉換為十進制數進行校核:
(1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F
1.5 下列各數均為十進制數,請用8位二進制補碼計算下列各題,并用十六進制數表示其運算結果。
(1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)
答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0
(2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0
(3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0;OF=0
(4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H;CF=0;OF=1
(5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH;CF=0;OF=1
(6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H;CF=0;OF=0
1.6 下列各數為十六進制表示的8位二進制數,請說明當它們分別被看作是用補碼表示的帶符號數或無符號數時,它們所表示的十進制數是什么?
(1) D8 (2) FF
答:(1) D8H表示的帶符號數為 -40,D8H表示的無符號數為216;
(2) FFH表示的帶符號數為 -1, FFH表示的無符號數為255。
1.7 下列各數均為用十六進制表示的8位二進制數,請說明當它們分別被看作是用補碼表示的數或字符的ASCII碼時,它們所表示的十進制數及字符是什么?
(1) 4F (2) 2B (3) 73 (4) 59
答:(1) 4FH表示的十進制數為 79,4FH表示的字符為O; (2) 2BH表示的十進制數為 43,2BH表示的字符為 +; (3) 73H表示的十進制數為115,73H表示的字符為s; (4) 59H表示的十進制數為89,59H表示的字符為Y。
1.8 請寫出下列字符串的ASCII碼值。
For example,
This is a number 3692.
答:46H 6FH 72H 20H 65H 78H 61H 6DH 70H 6CH 65H 2CH 0AH 0DH 54H 68H 69H 73H 20H 69H 73H 20H 61H 20H 6EH 75H 6DH 62H 65H 72H 20H 33H 36H 39H 32H 2EH 0AH 0DH
第二章
2.1在80x86微機的輸入/輸出指令中,I/O端口號通常是由DX寄存器提供的,但有時也可以在指令中直接指定00~FFH的端口號。試問可直接由指令指定的I/O端口數。
答:可直接由指令指定的I/O端口數為256個。
2.2 有兩個16位字1EE5H和2A3CH分別存放在80x86微機的存儲器的000B0H和000B3H單元中,請用圖表示出它們在存儲器里的存放情況。
答:存儲器里的存放情況如右下圖所示: 000B0H E5H 000B1H 1EH 000B2H
000B3H 3CH 000B4H 2AH
2.3在IBM PC機的存儲器中存放信息如右下圖所示。試讀出30022H和30024H字節單元的內容,以及30021H和30022H字單元的內容。
30020H 12H 30021H 34H 30022H ABH 30023H CDH 30024H EFH
答:30022H字節單元的內容為ABH;30024H字節單元的內容為EFH。
30021H字單元的內容為AB34H;30022H字單元的內容為CDABH。
2.4 在實模式下,段地址和偏移地址為3017:000A的存儲單元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?
答:3017:000A、3015:002A和3010:007A的存儲單元的物理地址都是3017AH。
2.5 如果在一個程序開始執行以前(CS)=0A7F0H,(如16進制數的最高位為字母,則應在其前加一個0) (IP)=2B40H,試問該程序的第一個字的物理地址是多少?
答:該程序的第一個字的物理地址是0AAA40H。
2.6在實模式下,存儲器中每一段最多可有10000H個字節。如果用調試程序DEBUG的r命令在終端上顯示出當前各寄存器的內容如下,請畫出此時存儲器分段的示意圖,以及條件標志OF、SF、ZF、CF的值。
AX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FF IP=0100 NV UP DI PL NZ NA PO NC
答:此時存儲器分段的示意圖如右圖所示。OF、SF、ZF、CF的值都為0。
2.7 下列操作可使用那些寄存器? (1) 加法和減法 數據寄存器等 (2) 循環計數 CX
(3) 乘法和除法 AX、DX,乘數和除數用其他寄存器或存儲器
(4) 保存段地址 段寄存器 (5) 表示運算結果為0 ZF=1 (6) 將要執行的指令地址 CS:IP
(7) 將要從堆棧取出數據的地址 SS:SP
答:答案見題目的右邊。
2.8 那些寄存器可以用來指示存儲器地址?
答:BX、BP、SI、DI、堆棧操作時的SP、對應的段地址、386及其后繼機型的Exx。
2.9 請將下列左邊的項和右邊的解釋聯系起來(把所選字母放在括號中):
(1) CPU (M) A.保存當前棧頂地址的寄存器。
(2) 存儲器 (C) B.指示下一條要執行的指令的地址。
(3) 堆棧 (D) C.存儲程序、數據等信息的記憶裝置,微機有RAM和ROM兩種。
(4) IP (B) D.以后進先出方式工作的存儲空間。
(5) SP (A) E.把匯編語言程序翻譯成機器語言程序的系統程序。
(6) 狀態標志 (L) F.唯一代表存儲空間中每個字節單元的地址。
(7) 控制標志 (K) G.能被計算機直接識別的語言。
(8) 段寄存器 (J) H.用指令的助記符、符號地址、標號等符號書寫程序的語言。
(9) 物理地址 (F) I.把若干個模塊連接起來成為可執行文件的系統程序。
(10) 匯編語言 (H) J.保存各邏輯段的起始地址的寄存器,8086/8088機有四個:CS、DS、 SS、ES。
(11) 機器語言 (G) K.控制操作的標志,如DF位。
(12) 匯編程序 (E) L.記錄指令操作結果的標志,共6位:OF、SF、ZF、AF、PF、CF。
(13) 連接程序 (I) M.分析、控制并執行指令的部件,由算術邏輯部件ALU和寄存器等 組成。
(14) 指令 (O) N.由匯編程序在匯編過程中執行的指令。
(15) 偽指令 (N) O.告訴CPU要執行的操作(一般還要指出操作數地址),在程序運行時 執行。
答:答案見題目的括號中。
第三章
3.1 給定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,試確定在以下各種尋址方式下的有效地址是什么? (1) 立即尋址 (2) 直接尋址
(3) 使用BX的寄存器尋址 (4) 使用BX的簡接尋址
(5) 使用BX的寄存器相對尋址 (6) 基址變址尋址 (7) 相對基址變址尋址
答:(1) 操作數在指令中,即立即數; (2) EA=D=7237H;
(3) 無EA,操作數為(BX)=637DH; (4) EA=(BX)=637DH; (5) EA=(BX)+D=0D5B4H; (6) EA=(BX)+(SI)=8E18H; (7) EA=(BX)+(SI)+D=1004FH;超過了段的邊界,最高進位位丟失,因此EA=004FH。
3.2 試根據以下要求寫出相應的匯編語言指令
(1) 把BX寄存器和DX寄存器的內容相加,結果存入DX寄存器中。
(2) 用寄存器BX和SI的基址變址尋址方式把存儲器中的一個字節與AL寄存器的內容相加,并把結果送到AL寄存器中。
(3) 用寄存器BX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個字和(CX)相加,并把結果送回存儲器中。
(4) 用位移量為0524H的直接尋址方式把存儲器中的一個字與數2A59H相加,并把結果送回存儲單元中。
(5) 把數0B5H與(AL)相加,并把結果送回AL中。
答:(1) ADD DX, BX (2) ADD AL, [BX][SI] (3) ADD [BX+0B2H], CX
(4) ADD WORD PTR [0524H], 2A59H (5) ADD AL, 0B5H
3.3 寫出把首地址為BLOCK的字數組的第6個字送到DX寄存器的指令。要求使用以下幾種尋址方式:
(1) 寄存器間接尋址 (2) 寄存器相對尋址 (3) 基址變址尋址