汇编语言第七章答案

更新时间:2024-06-02 00:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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的数据区中,减数的个数存放在COUNT单元中,最后结果存入RESULT单元。请编写此宏指令。 答:宏定义如下:

BIN_SUB MACRO RESULT, A, OPERAND, COUNT LOCAL NEXT_SUB PUSH CX PUSH BX PUSH AX

MOV CX, COUNT MOV AL, A

LEA BX, OPERAND

CLC

NEXT_SUB: SBB AL, [BX] INC BX

LOOP NEXT_SUB MOV RESULT, AL POP AX POP BX

POP CX ENDM

7.6 请用宏指令定义一个可显示字符串GOOD: ‘GOOD STUDENTS: CLASSX NAME’,其中X和NAME在宏调用时给出。 答:宏定义如下:

DISP_GOOD MACRO X, NAME

GOOD DB ‘GOOD STUDENTS: CLASS&X &NAME’, 0DH, 0AH, ‘$’ ENDM

7.7 下面的宏指令CNT和INC1完成相继字存储。 CNT MACRO A, B A&B DW ? ENDM

INC1 MACRO A, B CNT A, %B

B=B+1 ENDM

请展开下列宏调用: C=0

INC1 DATA, C INC1 DATA, C 答:宏展开如下: C=0 INC1 DATA, C

1 DATA0 DW ? INC1 DATA, C 1 DATA0 DW ? (注意:C为0没有变)

7.8 定义宏指令并展开宏调用。宏指令JOE把一串信息‘MESSAGE NO. K’存入数据存储区XK中。宏调用为: I=0 JOE TEXT, I ┇

JOE TEXT, I ┇

JOE TEXT, I ┇

答:宏定义如下: MARY MACRO X, K

X&K DB ‘MESSAGE NO. &K’ ENDM

JOE MACRO A, I MARY A, %I I=I+1

ENDM

宏调用和宏展开: I=0

JOE TEXT, I

1 TEXT0 DB ‘MESSAGE NO. 0’ ┇

JOE TEXT, I

1 TEXT1 DB ‘MESSAGE NO. 1’ ┇

JOE TEXT, I

1 TEXT2 DB ‘MESSAGE NO. 2’ 7.9 宏指令STORE定义如下: STORE MACRO X, N MOV X+I, I I=I+1 IF I-N

STORE X, N ENDIF ENDM

试展开下列宏调用: I=0

STORE TAB, 7 答:宏展开如下: I=0

STORE TAB, 7 1 MOV TAB+0, 0 1 MOV TAB+1, 1 1 MOV TAB+2, 2 1 MOV TAB+3, 3 1 MOV TAB+4, 4 1 MOV TAB+5, 5

1 MOV TAB+6, 6

7.10 试编写非递归的宏指令,使其完成的工作与7.9题的STORE相同。 答:宏定义如下: STORE MACRO K MOV TAB+K, K ENDM 宏调用: I=0

本文来源:https://www.bwwdw.com/article/86n6.html

Top