汇编语言第7章答案.doc
文本预览下载声明
7.1 编写一条宏指令CLRB,完成用空格符将一字符区中的字符取代的工作。字符区首地址及其长度为变元。
答:宏定义如下:
CLRB MACRO N, CFIL
MOV CX, N
CLD
MOV AL, ‘ ’ ;;取空格符的ASCII码
LEA DI, CFIL
REP STOSB
ENDM
7.2 某工厂计算周工资的方法是每小时的工资率RATE乘以工作时间HOUR,另外每工作满10小时加奖金3元,工资总数存放在WAG中。请将周工资的计算编写成一条宏指令WAGES,并展开宏调用:
WAGES R1, 42, SUM
答:宏定义如下:
WAGES MACRO RATE, HOUR, WAG
MOV AL, HOUR ;;计算周工资(WAG),公式为:HOUR* RATE
MOV BL, RATE
MUL BL
MOV WAG, AX
MOV AL, HOUR ;;计算奖金存入(AX),公式为:HOUR/10的商*3
MOV AH, 0
MOV BL, 10
DIV BL
MOV BL, 3
MUL BL
ADD WAG, AX ;;计算周工资总数
ENDM
宏调用:
WAGES R1, 42, SUM
宏展开:
1 MOV AL, 42
1 MOV BL, R1
1 MUL BL
1 MOV SUM, AX
1 MOV AL, 42
1 MOV AH, 0
1 MOV BL, 10
1 DIV BL
1 MOV BL, 3
1 MUL BL
1 ADD SUM, AX
7.3 给定宏定义如下:(注意:此宏指令的功能是V3←|V1-V2|)
DIF MACRO X, Y
MOV AX, X
SUB AX, Y
ENDM
ABSDIF MACRO V1, V2, V3
LOCAL CONT
PUSH AX
DIF V1, V2
CMP AX, 0
JGE CONT
NEG AX
CONT: MOV V3, AX
POP AX
ENDM
试展开以下调用,并判定调用是否有效。
(1) ABSDIF P1, P2, DISTANCE
(2) ABSDIF [BX], [SI], X[DI], CX
(3) ABSDIF [BX][SI], X[BX][SI], 240H
(4) ABSDIF AX, AX, AX
答:(1) 宏调用 ABSDIF P1, P2, DISTANCE 的宏展开如下:此宏调用有效。
1 PUSH AX
1 DIF P1, P2
1 MOV AX, P1
1 SUB AX, P2
1 CMP AX, 0
1 JGE ??0000
1 NEG AX
1 ??0000: MOV DISTANCE, AX
1 POP AX
(2) 宏调用 ABSDIF [BX], [SI], X[DI], CX 的宏展开如下:此宏调用有效。
1 PUSH AX
1 DIF [BX], [SI]
1 MOV AX, [BX]
1 SUB AX, [SI]
1 CMP AX, 0
1 JGE ??0001
1 NEG AX
1 ??0001: MOV X[DI], AX
1 POP AX
(3) 宏调用 ABSDIF [BX][SI], X[BX][SI], 240H 的宏展开如下:此宏调用无效。
1 PUSH AX
1 DIF [BX][SI], X[BX][SI]
1 MOV AX, [BX][SI]
1 SUB AX, X[BX][SI]
1 CMP AX, 0
1 JGE ??0002
1 NEG AX
1 ??0002: MOV 240H, AX
1 POP AX
(4) 宏调用 ABSDIF AX, AX, AX 的宏展开如下:此宏调用有效但无多大意义。
1 PUSH AX
1 DIF AX, AX
1 MOV AX, AX
1 SUB AX, AX
1 CMP AX, 0
1 JGE ??0003
1 NEG AX
1 ??0003: MOV AX, AX
1 POP AX
7.4 试编制宏定义,要求把存储器中的一个用EOT(ASCII码04H)字符结尾的字符串传送到另一个存储区去。
答:宏定义如下:
SEND MACRO SCHARS, DCHARS
LOCAL NEXT, EXIT
PUSH AX
PUSH SI
MOV SI, 0
NEXT: MOV AL, SCHARS[SI]
MOV DCHARS[SI], AL
CMP AL, 04H ;;是EOT字符吗?
JZ EXIT
INC SI
JMP NEXT
EXIT: POP SI
POP AX
ENDM
7.5 宏指令BIN_SUB完成多个字节数据连减的功能:
RESULT←(A-B-C-D-…)
要相减的字节数据顺序存放在首地址为OPERAND的数据区中,减数
显示全部