微机原理课后答案7
- 格式:doc
- 大小:82.00 KB
- 文档页数:7
微机部分习题参考答案
2/22/2022 1 第七章部分习题解答
1、指出:(1) MOV AX,VAR;
(2) LEA AX,VAR;
(3) MOV AX,OFFSET VAR
三条指令之间的异同(VAR为数据段的一个变量名称)
解: (1)将VAR的一个字送AX,相当于MOV AX, [VAR]
(2) 将VAR的偏移地址送AX
(3) 将VAR的段内偏移地址送AX,功能与(2)相同。
2、若程序中多次使用某一程序段,问将该程序段设计成子程序和定义成宏指令各有何优缺点?
答:设计成子程序在整个程序占用内存少,但执行时间长;定义成宏指令程序汇编后占用内存多,但执行时间短。
3、下面列出的是一个汇编源程序中的一个程序段。试以图形表示出DATA段中各变量在存储器中的存储位置(标明偏移地址及有关单元的内容,地址与存储单元内容均用十六进制表示);写出CODE段内汇编后的可执行指令。 TABL
DATA SEGMENT
TABL DB‘ABCD’2 DUP(2 DUP(1,2),3)
VAR DW 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
ORG 100H
LEB1: LEA SI,TABL
MOV BX,OFFSET VAR
MOV AX,LENGTH VAR
MOV AX,TYPE VAR
MOV AL,SIZE VAR
MOV AH,SIZE TABL
MOV CX,(OFFSET VAR-(OFFSET TABL) VAR
LEA DX,LEB1
解: DATA段各变量的存储情况如右图所示,对CODE段可执行指令注释如下:
LEB1: LEA SI,TABL ;将TABL的偏移地址送SI
MOV BX,OFFSET VAR ;将VAR的偏移地址送BX
MOV AX,LENGTH VAR ;将VAR的项数(4)的送AX
MOV AX,TYPE VAR ;将VAR的符号名类型值02送AX
MOV AL,SIZE VAR ;将为VAR分配的字节(08)送AL
MOV AH,SIZE TABL ; 将为TABL分配的字节(0EH)送AL
MOV CX,(OFFSET VAR)-(OFFSET TABL) ;将OEH送CX
LEA DX,LEB1 将LEB1(100H)送DX。
4、试编写一个程序,将一个包括有20个字的数组中的正负数分开,正、负数个数分别‘A’
‘B’
‘C’
‘D’
1
2
1
2
3
1
2
1
2
3
?
?
?
?
?
?
?
? 微机部分习题参考答案
2/22/2022 1 存放在MM和NN单元中,正、负数分别存放在MM和NN后面的单元中。
解: 设20个字的数组是放在数据段偏移地址为ABC开始的单元中,汇编语言程序如下:
DATA SEGMENT
ABC DW 0A12H,8022H,┅,4000H;(20个数)
MM DW 0, 20 DUP ( ? )
NN DW 0, 20 DUP ( ? )
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, ES: DATA
START: MOV AX, DATA
MOV DS, AX
MOV SI, [ABC] ;SI指向数据区
MOV DI, [MM+1] ;DI指向正数区
MOV BX, [NN+1] ;BX指向负数区
MOV CX, 14H ;数据字个数送CX
KSHQF: MOV AX, [SI]; ;[SI]送AX,
TEST AX, 8000H ;最高位为1转移,否则继续执行
JNZ FSHQ
MOV [DI], AX ; AX 送 [DI], (将AX内容送正数缓冲区)
INC [MM]
JMP GXFL
FSHQ: MOV AX, [BX] ;AX 送 [BX],
INC [NN]
GXFL: INC SI ;修改指针
INC SI
INC DI
INC DI
INC BX
INC BX
LOOP KSHQF
MOV AH, 4CH
INT 21H
CODE ENDS
END START
6、比较两个一字节无符号数X1和X2的大小,把大数存入MAX单元。
解:设两个无符号数是80H和A0H,汇编语言程序如下:
DATA SEGMENT
X1 DB 80H
X2 DB A0H
MAX DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, 微机部分习题参考答案
2/22/2022 1 START: MOV AX, DATA ;为数据段寄存器赋值
MOV DS, AX
MOV AL,X1 ;取数
MOV BL,X2
CMP AL, BL ;比较两数
JC DSH
MOV [MAX],AL ;大数送MAX
JMP JSH
DSH:MOV [MAX],BL ;大数送MAX
JSH:MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START
7、在一个字符串中查找特定的字符‘$’,找到时,将‘$’字符所在单元的地址(偏移地址)存储在一个内存单元DYD中;否则,将‘0’存储在单元DYD中。
解: 分析 把要查找的关键字放到AL寄存器中,DI中存放字符串存储区首址PTRN,CX中存放字符串的字符个数,利用不相等则重复查找指令REPNE SCASB查找
源程序如下:
DATA SEGMENT
CHAR EQU ′$′ ;定义CHAR为`$`字符
PTRN DB ′THIS IS A EXAMPLE $′ ;定义字符串存储区
DYD DW ? ;定义所查找字符的地址存储单元
COUNT EQU 15 ;定义COUNT为字符串字符个数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DI,[PTRN] ;字符串存储区首址赋于DI
MOV AL,CHAR ;AL←′$′
MOV CX,COUNT ;CX赋计数器初值
CLD ;DF=0 清除方向标志
REPNE SCASB ;执行重复搜索查找
JZ PASTPR ;找到,转PASTPR
MOV DI,1 ;未找到,使DI=1
PASTPR: DEC DI ;退到 ′$′ 的所在地址
MOV CHRADDR,DI, ;保存地址
MOV AH,4CH
INT 21H
CODE ENDS
END START
8、试编写求两个数和的绝对值的程序。 微机部分习题参考答案
2/22/2022 1 解:设两个数分别为89H和50H,其符号地址分别为ABC1和ABC2,和的绝对值放ABC。源程序如下(该程序适用于求任意两个8位有符号和的绝对值):
DATA SEGMENT
ABC1 DB 85H
ABC2 DB 50H
ABC DB ( ? )
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA,
START: MOV AX, DATA ;为数据段寄存器赋值
MOV DS, AX
MOV AL, ABC1
ADD AL, ABC2
TEST AL, 80H
JNZ QB ;和的最高位为1转移(求补)
MOV [ABC], AL
JMP FH
QB: NEG AL
AND AL, 7FH
MOV [ABC], AL
FH: MOV AH, 4CH
INT 21H
CODE ENDS
END START
9、编写完整的程序,比较以存储变量D1和D2表示的两个有符号字数据的大小,并将其中较大的数据存放在BX寄存器中。(设两数分别为-123H和-120H)