微型计算机原理习题参考答案
(3) SAL (4) SAR (5) ROR (6) ROL (7) RCR (8) RCL DH,1 DX,CL DX,CL DL,CL DL,1 DX,CL DX=1001 0010 1011 1001(92B9H) DX=1111 1001 0011 0111(F937H) DX=0011 1001 0011 0111(3937H) DX=1100 1001 1100 1101(C9CDH) DX=1100 1001 1101 1100(C9DCH) DX=0100 1101 1100 1011(4DCFH) 8.已知 DX=1234H,AX=5678H,试分析下列程序执行后 DX、AX 的值各是什么?该程序完成了什么功能?
MOV CL,4 SHL DX,CL MOV BL,AH SHL BL,CL SHR BL,CL
OR DL,BL
解答:DX=2345H,AX=6780H。该程序完成的功能如图所示,将 DX,AX 拼装成双字后,
左移四位。
DX 1 2 3 4 DX 2 3 4 0
AX 5 6 7 8 AX
6 7 8 0 2 3 4 5 6 7 8 0 DX AX
9.试分析下列程序段:
ADD JNC SUB JNC JMP
AX,BX L2 AX,BX L3 SHORTL5
BX
如果 AX、BX 的内容给定如下: AX
(1)14C6H 80DCH
(2)B568H 54B7H
问该程序在上述情况下执行后,程序转向何处?
解答:(1)AX=AX+BX=14C6H+80DCH=95A2H;CF=0;无进位,转移至 L2;
(2)方法同(1),略
- 11 -
微型计算机原理习题参考答案
10.编写一段程序,比较两个 5 字节的字符串 OLDS 和 NEWS,如果 OLDS 字符串不同于
NEWS 字符串,则执行 NEW_LESS,否则顺序执行。
解答:编程如下,(说明:左测程序为常规编法,两个字符串在一个数据段中;右测的程序
要求 OLDS 在数据段中,NEWS 在附加段中,利用串操作的指令是可行的)
LEA SI,OLDS; LEA DI,NEWS; MOV CX,5;
NEXT: MOV AL,[SI];
MOV BL,[DI]; CMP AL,BL; JNZ NEW_LESS; INC SI; INC DI; LOOP NEXT; ??
JMP EXIT
NEW_LESS:
??
EXIT: ??
EXIT:
LEA SI,OLDS LEA DI,NEWS MOV CX,5 CLD
REPE CMPSB JNZ NEW_LESS ?? JMP EXIT
NEW_LESS:
?? ??
11.若在数据段中从字节变量 TABLE 相应的单元开始存放了 0~15 的平方值,试写出包含
有 XLAT 指令的指令序列查找 N(0~15)的平方。(设 N 的值存放在 CL 中) 解答: MOV BX,OFFSET TABLE;LEA BX,TABLE
MOV CL,N MOV AL,CL XLAT
12.有两个双字数据串分别存放在 ASC1 和 ASC2 中(低字放低地址),求它们的差,结
果放在 ASC3 中(低字放低地址)。 ASC1 DW 578,400
ASC2 ASC3
DW 694,12
DW ?,?解答:编程如下, LEA SI,ASC1 LEA DI,ASC2 LEA BX,ASC3 MOV CX,2 CLC
NEXT: MOV AX,[SI] MOV
DX,[DI]
SBB AX,DX MOV [BX],AX INC SI
- 12 -
微型计算机原理习题参考答案
INC SI INC DI INC DI INC BX INC BX LOOP NEXT
CH03 汇编语言程序设计
习题与思考题
1.下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。 VAR1 VAR2 VAR3 VAR4
DB DW DD
10,2
5 DUP(?),0 -1,1,0
DB ‘HOW ARE YOU?’,3 DUP(1,2)
解答:字节空间----VAR1:2;VAR2:12;VAR3:20;VAR4:12。 存储空间的分配图:
DS:0000
0010
0020
0A 02 00 00 00 00 00 00—00 00 00 00 00 00 48 57 20 20 41 52 45 20 20—59 4F 55 3F 01 02 01 01 02 FF FF FF FF 01 00—00 00 00 00 00 00
4F 02
2.假定 VAR1 和 VAR2 为字变量,LAB 为标号,试指出下列指令的错误之处。 (1)ADD (3)JMP (5) MOV 寄存器;
VAR1,VAR2 LAB[CX]
[1000H],100 (6)SHL
(2)SUB (4)JNZ
AL,VAR1 VAR1
AL, 4 解答:(1)两个操作数中至少有一个为
(2)AL 为字节,VAR1 为字变量,不匹配; (3)[]中不能用 CX,LAB 为标号,非变量; (4)转向地址应为标号,不能是变量; (5)目的操作数的类型不确定;
(6)SHL 指令中,当所移位数超过 1 时,必须用 CL 或 CX 来取代所移位数。 3.对于下面的符号定义,指出下列指令的错误。
A1 DB ? A2 DB 10
K1 EQU 1024 (1)MOV K1,AX (2)MOV A1,AX
EQU 2048 (3)CMP A1,A2 (4)K1
解答:(1)K1 为常量,不能用 MOV 指令赋值;
(2)A1 为字节,AX 为字变量,不匹配; (3)A1 未定义,无法做比较指令; (4)K1 重新赋值前,必须用 PURGE 释放。
- 13 -
微型计算机原理习题参考答案
4.数据定义语句如下所示:
FIRST DB SECOND DB 90H,5FH,6EH,69H 5 DUP(?)
THIRD DB 5 DUP(?) 自 FIRST 单元开始存放的是一个四字节的十
六进制数(低位字节在前),要求:
编一段程序将这个数左移两位后存放到自 SECOND 开始的单元,右移两位后存放到自 THIRD 开始的单元。(注意保留移出部分) 解答: DATA
SEGMENT
FIRST DB 90H,5FH,6EH,69H SECOND DB 5 DUP(?) THIRD DB 5 DUP(?) ENDS
SEGMENT
DATA CODE
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX LEA SI,FIRST LEA DI,SECOND MOV CX,2 CLC
MOV AX,[SI];AX=5F90H 为低十六位数据 INC SI INC SI
MOV DX,[SI];DX=696EH 为高十六位数据 PUSH DX;保存原有的高十六位数据 PUSH AX;保存原有的低十六位数据
ROL DX,CL;将高位数据不带进位循环左移两位,即高 2 位数据在 DL 的低 2 位 AND DL,03H;让 DL 中仅保存移出的高 2 位数据
;左移 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 POP
AX;弹出原有的低十六位数据 DX;弹出原有的高十六位数据
SHL DX,CL;将高位数据算术逻辑左移 2 位 SHL AX,CL;将低位数据算术逻辑左移 2 位
OR DL,BL;将 AX 中移出的高 2 位数据放入 DX 的低 2 位
MOV [DI] ,AX MOV [DI+2] ,DX ;右移 2 位
- 14 -
微型计算机原理习题参考答案
CODE END
LEA SI,FIRST LEA DI,THIRD MOV CX,2 CLC
MOV AX,[SI];AX=5F90H 为低十六位数据 INC SI INC SI
MOV DX,[SI];DX=696EH 为高十六位数据 PUSH DX;保存原有的高十六位数据 PUSH AX;保存原有的低十六位数据
ROR AX,CL;将低位数据不带进位循环右移两位,即低 2 位数据在 AH 的高 2 位 AND AH,0C0H;让 AH 中仅保存移出的低 2 位数据 PUSH CX MOV SHR POP
CX,6 AH,CL 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 POP
AX;弹出原有的低十六位数据 DX;弹出原有的高十六位数据
SHR DX,CL;将高位数据算术逻辑左移 2 位 SHR AX,CL;将低位数据算术逻辑左移 2 位
OR AH,BL;将 DX 中移出的低 2 位数据放入 AX 的高 2 位 MOV [DI+1] ,AX MOV [DI+3] ,DX MOV AH,4CH INT 21H ENDS START
5.(14)在当前数据区从 400H 开始的 256 个单元中存放着一组数据,试编程序将它们顺序搬移到从 A000H 开始的顺序 256 个单元中。 解答:
DATA SEGMENT
ORG 400H
DAT1 DB ...;256 DUP (?) ORG
0A000H
DAT2 DB ...;256 DUP (?) DATA ENDS ;
- 15 -