微型计算机原理与接口技术(周荷琴 吴秀清)课后答案 下载本文

4、答案略

5、参考答案:

(1)该数据段的存储状况如下表所示: A

B

C

D

E

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 24 10 43 4F 4D 50 55 54 45 52 34 12 FF 00 00 00 00 00 00 9A 45 00 12

注:①表格的第一行为变量名称;②第三行的每个小格子代表一个存储单元;③第二行为存储单元的偏移地址以十六进制表示,从中可以看出各变量在数据段中的偏移地址,A的偏移地址为0000H,B的偏移地址为0002H,C的偏移地址为000AH,D的偏移地址为000EH,E的偏移地址为0013H;④第三行为存储单元的具体内容,以十六进制表示。 (2)写出各条指令执行后的结果 指令

执行后的结果

AL=24H DX=1234H

DL=24H,A变量的第一个单元的内容变为34H

MOV AL,A MOV DX,C XCHG DL,A

MOV BX,OFFSET B BX=0002H MOV CX,3[BX] CX=5550H LEA BX,D BX=000EH LEA SI,E SI=0013H LEA DI,E DI=0013H 6、参考答案: 题号 (1) (2) (3) (4) (5) (6) (7) (8)

错误原因

两操作数的类型不一致 立即数不能做目的操作数

立即数不能直接传送给段寄存器

两操作数不能同时为存储器操作数

IP寄存器的内容不能由用户更改,而由系统自动修改 正确

两基址寄存器不能放在一起使用 正确

(9) 两变址寄存器不能放在一起使用

(10) 不能取立即数的偏移地址,OFFSET操作符使用不当 (11) 存储单元的偏移地址应为字类型,不能放到字节寄存器中 (12) XCHG指令的操作数不能为立即数

(13) IN指令从端口读取的数据只能放在累加器AL或AX中

(14) OUT指令的源操作数应为累加器,目的操作数应为端口地址,且如果端口地址超过0FFH(255),端口地址应放在DX寄存器中 7、程序片段如下: LEA BX,TABLE MOV AL,57 MOV AH,0 MOV DL,10 DIV DL PUSH AX XLAT MOV CH,AL POP AX MOV AL,AH XLAT

MOV CL,AL MOV BX,CX

8、解答:

SP的变化情况 指令执行后SP内容 PUSH AX SPSP-2 00FEH PUSH BX SPSP-2 00FCH POP BX SPSP+2 00FEH POP AX SPSP+2 0100H

9、已知AX=1234H,BX=3456H,CX=5678H,DX=789AH,CF=1则单独执行下列各条指令后,各相关寄存器内容是什么? 题号 指令执行后相关寄存器内容 (1) (2) (3) (4) (5) (6) (7)

AL=0ACH BX=8ACFH AX=EB24H BX=3455H CX=0A988H BL=57H

乘积为双字存放在DX:AX中:DX=03B8H AX=0AD78H

(8) 商存放在AL中,余数存放在AH中:AL=26H AH=64H 10、参考程序片段如下: ;定义数据段 DATA SEGMENT

ARRAY DB 60,65,72,76,77,66,79 NEW DB 7 DUP(0) SUM DB 0 AVERAGE DB 0 DATA ENDS ;程序代码如下 ?? MOV CX,7 MOV SUM,0 MOV SI,0

NEXT:

MOV AL,ARRAY[SI]

ADD SUM,AL ;总分存入SUM中 ADD AL,5 MOV NEW[SI],AL INC SI LOOP NEXT MOV AL,SUM MOV AH,0 MOV CL,7 DIV CL

MOV AVERAGE,AL ;平均分存入AVERAGE中 11、参考答案: 题号 结果 CF (1) AH=04H 0 (2) (3) (4) (5) (6) (7)

BL=36H 0

AX=0DAF7H 0

CX=0FFF4H 0

相关寄存器内容没有改变 0 相关寄存器内容没有改变 0 DX=0186H

0

(8) AL=04H 0

0 0 0

(9) BH=0F0H 0 (10) AX=4A10H (11) BX=1E6CH (12) DX=4186H 12、参考答案: (1)程序片段如下: LEA SI,STRING LEA DI,GET_CHAR MOV CX,26 CLD

REP MOVSB

(2)程序片段如下:先定义一个附加段,用来存放’The computer’ EXTRA SEGMENT S2 DB ‘The computer’ EXTRA ENDS ?

LEA SI,STRING LEA DI,S2 MOV CX,12 CLD

REPZ CMPSB

JZ NEXT ;若比较的两个字符串相同,则跳到NEXT执行 MOV AL,0 ; 若比较的两个字符串不相同 SUB CL,12 NEG CL MOV BL,CL RET NEXT: MOV AL,1 MOV BL,12

RET

(3)程序片段如下:

LEA DI,STRING;被查找的字符串STRING作为目的串 MOV AL,’&’ MOV CX,26 CLD

REPNZ SCASB

JNZ EXIT ;如果没有找到,直接退出 DEC DI ;找到’&’字符的位置

MOV BYTE PTR ES:[DI],20H ;用空格字符替换 EXIT: RET

(4)完整的程序如下*:

;这里的DATA既作为数据段,又作为附加段,即数据段和附加段公用一个段 DATA SEGMENT STRING DB ‘The Personal Computer & TV’

COUNT EQU $-STRING CAPS DB COUNT DUP(0) CHART DB COUNT DUP(0)

;比较的次数存入BL中

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,ES:DATA,CS:CODE MAIN PROC FAR

PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX

MOV ES,AX

;把字符串中大写字母传送到CAPS开始的单元中 LEA SI,STRING

LEA DI,CAPS MOV CX,COUNT CLD CMP AL,41H JB NEXT1 CMP AL,5AH JA NEXT1 STOSB

;把字符串中其余字母传送到CHART开始的单元中 LEA SI,STRING LEA DI,CHART MOV CX,COUNT CLD

AGAIN1:LODSB

NEXT1:LOOP AGAIN1

AGAIN2:LODSB CMP AL,41H

JB NEXT CMP AL,5AH JBE NEXT2

NEXT: STOSB

NEXT2:LOOP AGAIN2

;将STRING字符串清零 LEA DI,STRING MOV AL,0

MOV CX,COUNT CLD REP STOSB RET

MAIN ENDP CODE ENDS END MAIN

13、完整的程序如下: CODE SEGMENT ASSUME CS:CODE MAIN PROC FAR PUSH DS XOR AX,AX

PUSH AX