微机原理及汇编语言课后习题解答 下载本文

MOV AL,BUFFER MOV CL,4 SHR AL,CL CMP AL,10 JC L1 ADD AL,7 L1: ADD AL,30H MOV ANSWER,AL

MOV AL,BUFFER

AND AL,0FH CMP AL,10 JC L2 ADD AL,7 L2: ADD AL,30H

MOV ANSWER+1,AL

MOV AH,4CH

INT 21H CODE ENDS

END START

6. 假设数据项定义如下:

DATA1 DB ‘HELLO! GOOD MORNING!’ DATA2 DB 20 DUP(?)

用串操作指令编写程序段,使其分别完成以下功能: i. 从左到右将DATA1中的字符串传送到DATA2中;

ii. 传送完后,比较DATA1和DATA2中的内容是否相同; iii. 把DATA1中的第3和第4个字节装入AX; iv. 将AX的内容存入DATA2+5开始的字节单元中。 解:编写程序段如下: (1) LEA SI,DATA1 LEA DI,DATA2 MOV CX,20

CLD

REP MOVSB (2) LEA SI,DATA1 LEA DI,DATA2 MOV CX,20

CLD

第 13 页 共 27 页

REPE CMPSB

JNZ NO ;不同转移到NO ;否则二字符串相同

NO:

(3) LEA SI,DATA1+2 LODSB MOV AH,AL LODSB

(4) LEA DI,DATA2+5 XCHG AH,AL STOSB MOV AL,AH STOSB

7. 执行下列指令后,AX寄存器中的内容是多少?

TABLE DW 10,20,30,40,50 ENTRY DW 3 ?

MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 解:分析:

MOV BX,OFFSET TABLE ;BX=0000H ADD BX,ENTRY ;BX=0003H MOV AX,[BX] ;AX=1E00H

由以上分析可知,执行指令后,AX=1E00H。

8. 编写程序段,将STRING1中的最后20个字符移到STRING2中(顺序不变)。

解:程序编写如下: LEA SI,STRING1 LEA DI,STRING2 MOV CX,60 CLD LOAD:LODSB DEC CX CMP CX,20 JNZ LOAD REP MOVSB

9. 假设一个48位数存放在DX:AX:BX中,试编写程序段,将该48位数乘2。

解:编写程序段如下:

第 14 页 共 27 页

CLC

SHL BX,1 SHL AX,1 SHL DX,1

10.试编写程序,比较AX,BX,CX中带符号数的大小,并将最大的数放在AX中。

解:编写程序如下:

CMP AX,BX

JG LL1 XCHG AX,BX

LL1: CMP AX,CX JG LL2 XCHG AX,CX LL2:

11.若接口03F8H的第1位(b1)和(b3)同时为1,表示接口03F8H有准备好的8位数

据,当CPU将数据取走后,b1和b3就不再同时为1了。仅当又有数据准备好时才再同时为1。

试编写程序,从上述接口读入200B的数据,并顺序放在DATA开始的地址中。 解:编写程序如下:

LEA BX,DATA MOV CX,200

LP0: MOV DX,03F8H ;状态端口地址

LP1: IN AL,DX AND AL,0AH CMP AL,0AH JNZ LP1

MOV DX,03F9H ;数据端口地址 IN AL,DX MOV [BX],AL INC BX

LOOP LP0

12.画图说明下列语句分配的存储空间及初始化的数据值。 (1)DATA1 DB ‘BYTE’,12,12H,2 DUP(0,?,3) (2)DATA2 DW 4 DUP(0,1,2),?,-5,256H

解:(1)存储空间分配情况如图(a)所示; (2) 存储空间分配情况如图(b)所示。

第 15 页 共 27 页

图(a) 图(b)

13.请用子程序结构编写如下程序:从键盘输入一个二位十进制的月份数(01~12),然

后显示出响应的英文缩写名。 解:编写程序如下:

DATA SEGMENT

TAB DB “Jan.Feb.Mar.Apr.May.Jun.Jul.Aug.Sep.Oct.Nov.Dec.” MESS DB “请输入二位月份:”,24H CR DB 10,13,24H DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: MOV AX,DATA MOV DS,AX LP: LEA DX,MESS MOV AH,9 INT 21H

CALL KEYMONTH ;键盘输入二位月份 CMP AL,‘Q’ JZ QUIT

CALL DISMONTH ;显示月份的英文缩写名 JMP LP QUIT: MOV AH,4CH INT 21H

第 16 页 共 27 页