微型计算机原理与接口技术(周荷琴 冯焕清)第六版 课后习题答案 第三章(部分答案)
第三章
1.分別說明下列指令的源操作數和目的操作數各采用什么尋址方式。
? ??源操作數 ?目的操作數 ? ? ? ? ? ?源操作數? ? ? ? ? ? ? ? ? ? 目的操作數
(1)MOV AX, 2048H? ? ? ? ? ? ? ? ? ?立即尋址? ? ? ? ? ? ? ? ? ? ?寄存器尋址
(2) MOV CL, 0FFH? ? ? ? ? ? ? ? ? ? 立即尋址? ? ? ? ? ? ? ? ? ? ?寄存器尋址
(3) MOV BX, [SI]? ? ? ? ? ? ? ? ? ? ? ? 寄存器間接尋址? ? ? ? ? 寄存器尋址
(4) MOV 5[BX], BL? ? ? ? ? ? ? ? ? ? ?寄存器尋址? ? ? ? ? ? ? ? ? 寄存器相對尋址
(5) MOV [BP+100H],AX? ? ? ? ? ? ?寄存器尋址? ? ? ? ? ? ? ? ?寄存器相對尋址
(6) MOV [BX+DI], ‘$’? ? ? ? ? ? ? ? ? 立即尋址? ? ? ? ? ? ? ? ? ? ?基址變址尋址
(7) MOV DX, ES:[BX+SI]? ? ? ? ? ?基址變址尋址? ? ? ? ? ? ? 寄存器尋址
(8) MOV VAL[BP+DI], DX? ? ? ? ? 寄存器尋址? ? ? ? ? ? ? ? ? 相對基址加變址尋址
(9) IN AL, 05H? ? ? ? ? ? ? ? ? ? ? ? ? ? 直接尋址? ? ? ? ? ? ? ? ? ? ? 寄存器尋址
(10) MOV DS, AX? ? ? ? ? ? ? ? ? ? ? ?寄存器尋址? ? ? ? ? ? ? ? ? 寄存器尋址
2. 已知:DS=1000H, BX=0200H, SI=02H, 內存 10200H~10205H 單元的內容分別為 10H, 2AH, 3CH, 46H, 59H, 6BH。下列每條指令執行完后 AX 寄存器的內容各是什么?
(1)MOV AX, 0200H? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (AX)=0200H
(2) MOV AX, [200H]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(AX)=2A10H
(3) MOV AX, BX ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (AX)=0200H
(4) MOV AX, 3[BX] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (AX)=5946H
(5) MOV AX, [BX+SI]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(AX)=463CH
(6) MOV AX, 2[BX+SI] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (AX)=6B59H
6.指出下列指令中哪些是錯誤的,錯在什么地方
(1)MOV DL, AX? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,源和目的操作數類型不匹配,DL 是 8 位寄存器,AX 是 16 位寄存器。
(2)MOV 8650H, AX? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,立即數不能作為目的操作數。
(3)MOV DS, 0200H? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,不能用立即數直接給段寄存器賦值。
(4)MOV [BX], [1200H]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,MOV 不能在兩個存儲單元之間直接傳送數據
(5)MOV IP, 0FFH? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 錯誤,IP 不能作目的操作數或不能用立即數直接給 IP
寄存器賦值。
(6)MOV [BX+SI+3], IP? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,IP 不能做源操作數。
(7) MOV AX, [BX][BP]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,基址變址尋址方式必須是一個基址寄存器與一個變址寄存器,不能兩個同時為基址寄存器(BX、BP 均為基址寄存器)。
(8)MOV AL, ES:[BP]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 正確
(9)MOV DL, [SI][DI]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,基址變址尋址方式必須是一個基址寄存器與一個變址寄存器,不能兩個同時為變址寄存器(SI、DI 均為變址寄存器)。
(10)MOV AX, OFFSET 0A20H? ? ? ? ? ? ? ? ? ?錯誤,OFFSET 后必須是存儲單元標號地址,不能是立即數。
(11) MOV AL, OFFSET TABLE? ? ? ? ? ? ? ? ? ? ? ?錯誤,操作數類型不匹配,AL 為 8 位, TABLE 為 16 位。
(12)XCHG AL, 50H? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,交換指令 XCHG 的操作數不能是立即數。
(13)IN BL, 05H? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 錯誤,IN 指令的目的操作數必須是累加器
(14)OUT AL, 0FFEH? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?錯誤,OUT 指令的源操作數必須是累加器,目的操作數為 8 位 I/O 端口地址或用 DX 做橋梁的 16 位I/O 端口地址。
8. 已知當前數據數據段中有一個十進制數字 0~9 的 7 段碼表,其數值依次為 C0H, F9H, A4H, B0H, 99H, 92H, 82H, F8H, 80H, 98H。要求用 XLAT 指令將十進制數 57 轉換成相應的7 段碼值,存到 BX 寄存器中,試寫出相應的程序段。
解:
DATA SEGMENT
?TABLE DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 98H
DATA ENDS
……
MOV AL, 5
MOV BX, OFFSET TABLE
XLAT
MOV DL,AL
MOV AL, 7
XLAT
MOV BL,AL
MOV BH,DL
HLT
調試程序:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
?TABLE DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 98H
DATA ENDS
CODE SEGMENT
?ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
?MOV DS,AX
?MOV AL, 5
?MOV BX, OFFSET TABLE
?XLAT
?MOV DL,AL
?MOV AL, 7
?XLAT
?MOV BL,AL
?MOV BH,DL
?HLT
CODE ENDS
END START
11. 假設數據定義如下:
?DATA SEGMENT
?STRING DB ‘The Personal Computer & TV’
?DATA ENDS
試用字符串操作指令編程完成以下功能:
(1)把該字符串傳送到附加段中偏移地址為 GET_CHAR 開始的內存單元中。
解:程序段如下:
?LEA SI,STRING ;置源串偏移地址
?LEA DI,GET_CHAR ;置目的串偏移地址
?MOV CX,26 ;置串長度
?CLD ;方向標志復位
?REP MOVSB ;字符串傳送
?HLT
12.編程將 AX 寄存器中的內容以相反的次序傳送到 DX 寄存器中,并要求 AX 中的內容不被破壞,然后統計 DX 寄存器中 1 的個數是多少。
解:將 AX 的內容用 ROR 循環右移,16 次之后 AX 的內容不變(如果用算術/邏輯右移
SHL/SAL,則 AX 的內容破壞,需要用堆棧 PUSHU AX/POP AX 保護),其最低位移入 CF
中,再使用 RCL 循環左移將 CF 中的值移入 DX 中。并且,如果 CF 的值為 1,則將 BL 加
1。
MOV CX, 16
XOR BL, BL
LP1: ROR AX, 1
JNC LP2
INC BL
LP2: RCL DX,1
LOOP LP1
HLT
調試程序:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
?BUF DW 12
?BUF1 DW 100 DUP (?)
DATA ENDS
CODE SEGMENT
?ASSUME CS:CODE,DS:DATA,SS:STACK
START: PUSH DS
MOV AX,DATA
?MOV DS,AX
?MOV AX,1234H
?MOV CX, 16
?XOR BL, BL
LP1: ROR AX, 1
?JNC LP2
?INC BL
LP2: RCL DX,1
?LOOP LP1
?HLT
CODE ENDS
END START
15. 某班有七個同學的英語成績低于 80 分,分數存在 ARRAY 數組中,試編程完成以下工作:給每人加 5 分,結果存到 NEW 數組中.
解:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
?ARRAY DB 7 DUP(?)
NEW DB 7 DUP(?)
DATA ENDS
CODE SEGMENT
?ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV CX, 7
?MOV BX, 0
LP1: MOV AL, ARRAY[BX]
?ADD AL, 05H
?DAA
?MOV NEW[BX], AL
?INC BX
?LOOP LP1
?HLT
CODE ENDS
END START
調試程序:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
?ARRAY DB 65H,76H,78H,54H,90H,85H,68H
?NEW DB 7 DUP(?)
?BUF1 DW 100 DUP (?)
DATA ENDS
CODE SEGMENT
?ASSUME CS:CODE,DS:DATA,SS:STACK
START: PUSH DS
MOV AX,DATA
?MOV DS,AX
?MOV CX, 7
?MOV BX, 0
LP1: MOV AL, ARRAY[BX]
?ADD AL, 05H
?DAA
?MOV NEW[BX], AL
?INC BX
?LOOP LP1
?HLT
CODE ENDS
END START
總結
以上是生活随笔為你收集整理的微型计算机原理与接口技术(周荷琴 冯焕清)第六版 课后习题答案 第三章(部分答案)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个屌丝程序猿的人生(一百二十三)
- 下一篇: sja1000 中断_SJA1000的错