(完整word版)微机原理与接口技术(第二版)课后习题答案完整版 下载本文

微机原理与接口技术(第二版) 清华大学出版社

(6) SHL 指令中,当所移位数超过1 时,必须用CL取代所移位数。

3.对于下面的符号定义,指出下列指令的错误。

A1 DB ? A2 DB 10 K1 EQU 1024

(1) MOV K1,AX (2)MOV A1,AX (3)CMP A1,A2 (4)K1 EQU 2048 答:(1)K1 为常量,不能用MOV 指令赋值; (2)A1 为字节,AX 为字变量,类型不一致; (3)A1 和A2同为存储器寻址方式,不符合语法规则; (4)K1 重新赋值前,必须用PURGE 释放。

4.数据定义语句如下所示: FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) FORTH DB 4 DUP (?)

自FIRST 单元开始存放的是一个四字节的十六进制数(低位字节在前),要求: 编一段程序将这个数左移两位后存放到自SECOND 开始的单元,右移两位后存放到自THIRD 开始的单元,求补后放到FORTH开始的单元。(注意保留移出部分) 答:

DATA SEGMENT

FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) FORTH DB 4 DUP (?) DATA ENDS

CODE SEGMENT

13

微机原理与接口技术(第二版) 清华大学出版社

ASSUME CS:CODE,DS:DATA START:MOV AX,DATA

MOV DS,AX LEA SI,FIRST LEA DI,SECOND MOV CX,2 CLC

;左移2 位

MOV AX,WORD PTR [SI] ;AX=5F90H 为低十六位数据 INC SI INC SI

MOV DX,WORD PTR [SI] ;DX=696EH 为高十六位数据 PUSH DX ;保存原有的高十六位数据 PUSH AX ;保存原有的低十六位数据 ROL DX,CL

;将高位数据不带进位循环左移两位,即高2 位数据在DL 的低

2 位

AND DL,03H ;让DL 中仅保存移出的高2 位数据 MOV [DI+4] ,DL;将移出的高2 位数据放入SECOND 中的最高单元中 ROL AX,CL

;将低位数据不带进位循环左移两位,即AX 的高2 位在AL 的

低2 位

AND AL,03H;让AL 中仅保存移出的AX 高2 位数据 MOV BL ,AL;将AL 中的数据放入BL 中保存 POP AX;弹出原有的低十六位数据 POP DX;弹出原有的高十六位数据

SHL DX,CL;将高位数据算术逻辑左移2 位 SHL AX,CL;将低位数据算术逻辑左移2 位

OR DL,BL;将AX 中移出的高2 位数据放入DX 的低2 位 MOV WORD PTR [DI] ,AX MOV WORD PTR [DI+2] ,DX

14

微机原理与接口技术(第二版) 清华大学出版社

;右移2 位

LEA SI,FIRST LEA DI,THIRD MOV CX,2 CLC

MOV AX,WORD PTR [SI] ;AX=5F90H 为低十六位数据 INC SI INC SI

MOV DX,WORD PTR [SI] ; DX=696EH 为高十六位数据 PUSH DX;保存原有的高十六位数据 PUSH AX;保存原有的低十六位数据

ROR AX,CL;将低位数据不带进位循环右移两位,即低2 位数据在AH 的高2 位

AND AH,0C0H;让AH 中仅保存移出的低2 位数据 PUSH CX MOV CX,6 SHR AH,CL POP CX

MOV [DI] ,AH ;将移出的低2 位数据放入THIRD 中的最低单元中 ROR DX, CL

;将低位数据不带进位循环左移两位,即AX 的高2 位在AL 的

低2 位

AND DH,0C0H ;让DH 中仅保存移出的DX 低2 位数据 MOV BL ,DH ;将DH 中的数据放入BL 中保存 POP AX ;弹出原有的低十六位数据 POP DX ;弹出原有的高十六位数据 SHR DX,CL ;将高位数据算术逻辑左移2 位 SHR AX,CL ;将低位数据算术逻辑左移2 位

OR AH,BL ;将DX 中移出的低2 位数据放入AX 的高2 位 MOV WORD PTR [DI+1] , AX MOV WORD PTR [DI+3] ,DX

15

微机原理与接口技术(第二版) 清华大学出版社

;求补 LEA SI,FIRST LEA DI,FORTH

MOV AX,WORD PTR [SI] ;AX=5F90H 为低十六位数据 INC SI INC SI

MOV DX,WORD PTR [SI] ; DX=696EH 为高十六位数据 XOR AX, 0FFFFH ;将低十六位取反 XOR DX, OFFFFH ;将高十六位按位取反 CLC

ADD AX,01H ;低位加1,即可为原数的求补 ADC DX,0 ;高位加低位加法时的进位 MOV WORD PTR [DI] , AX MOV WORD PTR [DI+2] ,DX MOV AH,4CH INT 21H

CODE ENDS

END START

5. 试编程序将内存从40000H到4BFFFH的每个单元中均写入55H,并再逐个单元读出比较,看写入的与读出的是否一致。若全对,则将AL置7EH; 只要有错,则将AL置81H。 答:

DATA SEGMENT DA1 DB 55H CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,4000H MOV DS,AX MOV CX,0C000H MOV BX,0000H

16