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
REPT 7
STORE %I
I=I+1
ENDM
7.11 试编写一段程序完成以下功能,如给定名为X的字符串长度大于5时,下列指令将汇编10次。
ADD AX, AX
答:程序段如下:
X DB ‘ABCDEFG’
IF ($-X) GT 5
REPT 10
ADD AX, AX
ENDM
ENDIF
7.12 定义宏指令FINSUM:比较两个数X和Y(X、Y为数,而不是地址),若X>Y则执行SUM←X+2*Y;否则执行
SUM←2*X+Y。
答:宏定义如下:
CALCULATE MACRO A, B, RESULT ;;计算RESULT←2*A+B
MOV AX, A
SHL AX, 1
ADD AX, B
MOV RESULT, AX
ENDM
FINSUM MACRO X, Y, SUM
IF X GT Y

CALCULATE Y, X, SUM
ELSE
CALCULATE X, Y, SUM
ENDIF
ENDM
7.13 试编写一段程序完成以下功能:如变元X=‘VT55’,则汇编MOV TERMINAL, 0;否则汇编
MOV TERMINAL, 1。
答:宏定义如下:
BRANCH MACRO X
IFIDN <X>, <VT55>
MOV TERMINAL, 0
ELSE
MOV TERMINAL, 1
ENDIF
ENDM
7.14 对于DOS功能调用,所有的功能调用都需要在AH寄存器中存放功能码,而其中有一些功能需要在DX中
放一个值。试定义宏指令DOS21,要求只有在程序中定义了缓冲区时,汇编为:
MOV AH, DOSFUNC
MOV DX, OFFSET BUFF
INT 21H
否则,无MOV DX, OFFSET BUFF指令。并展开以下宏调用:
DOS21 01
DOS21 0AH, IPFIELD
答:宏定义如下:
DOS21 MACRO DOSFUNC, BUFF
MOV AH, DOSFUNC
IFDEF BUFF
MOV DX, OFFSET BUFF
ENDIF

INT 21H
ENDM
宏展开:
DOS21 01
1 MOV AH, 01
1 INT 21H
DOS21 0AH, IPFIELD
1 MOV AH, 0AH
1 MOV DX, OFFSET IPFIELD
1 INT 21H
7.15 编写一段程序,使汇编程序根据SIGN中的内容分别产生不同的指令。如果(SIGN)=0,则用字节变量
DIVD中的无符号数除以字节变量SCALE;如果(SIGN)=1,则用字节变量DIVD中的带符号数除以字节变量SCALE,
结果都存放在字节变量RESULT中。
答:程序段如下:
MOV AL, DIVD
IF SIGN
MOV AH, 0
DIV SCALE
ELSE
CBW
IDIV SCALE
ENDIF
MOV RESULT, AL
7.16 试编写宏定义SUMMING,要求求出双字数组中所有元素之和,并把结果保存下来。该宏定义的哑元应
为数组首址ARRAY,数组长度COUNT和结果存放单元RESULT。
答:宏定义如下:
SUMMING MACRO ARRAY,COUNT,RESULT
LOCAL ADDITION
MOV ESI, 0

MOV ECX, COUNT
ADDITION: MOV EAX, ARRAY[ESI*4] ;;双字为4字节
ADD RESULT, EAX
ADC RESULT+4, 0 ;;将进位加到结果的高位双字中
INC ESI
LOOP ADDITION
ENDM
7.17 为下列数据段中的数组编制一程序,调用题7.16的宏定义SUMMING,求出该数组中各元素之和。
DATA DD 101246,274365,843250,475536
SUM DQ ?
答:程序如下:
SUMMING MACRO ARRAY,COUNT,RESULT
LOCAL ADDITION
MOV ESI, 0
MOV ECX, COUNT
ADDITION: MOV EAX, ARRAY[ESI*4] ;;双字为4字节
ADD RESULT, EAX
ADC RESULT+4, 0 ;;将进位加到结果的高位双字中
INC ESI
LOOP ADDITION
ENDM
.MODEL SMALL
.386
.DATA
DATA DD 101246,274365,843250,475536
SUM DQ ?
.CODE
START: MOV AX, @DATA

MOV DS, AX
SUMMING DATA, 4, SUM
MOV AX, 4C00H
INT 21H
END START
7.18 如把题7.16中的宏定义存放在一个宏库中,则题7.17的程序应如何修改?
答:程序修改如下:
INCLUDE MACRO.MAC ;假设存放的宏库名为MACRO.MAC
.MODEL SMALL
.386
.DATA
DATA DD 101246,274365,843250,475536
SUM DQ ?
.CODE
START: MOV AX, @DATA
MOV DS, AX
SUMMING DATA, 4, SUM
MOV AX, 4C00H
INT 21H
END START

参考文章

http://blog.sina.com.cn/s/blog_77f58b350100q4dv.html

https://wenku.baidu.com/view/303e0e114431b90d6c85c720.html

https://shentuzhigang.blog.csdn.net/article/details/106560578

《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第七章——自编解析与答案相关推荐

  1. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第二章——自编解析与答案

    2.1 在80x86微机的输入/输出指令中,I/O端口号通常是由DX寄存器提供的,但有时也可以在指令中直接指定00~FFH的端口号.试问可直接由指令指定的I/O端口数. 解析: P31-2.5 外部设 ...

  2. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第一章——自编解析与答案

    1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数: (1) 369   (2) 10000   (3) 4095   (4) 32767 解析: P4-1.1.3 十六进制数及其与二进制 ...

  3. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第十章——自编解析与答案

    10.1 写出指令,选择显示方式10H,并将背景设为绿色. 答: MOV AH, 00H MOV AL, 10H :选择显示方式10H(16色图形) INT 10H MOV AH, 10H MOV A ...

  4. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第八章——自编解析与答案

    8.1 写出分配给下列中断类型号在中断向量表中的物理地址. (1) INT 12H (2) INT 8 答:(1) 中断类型号12H在中断向量表中的物理地址为00048H.00049H.0004AH. ...

  5. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——自编解析与答案

    <IBM-PC汇编语言程序设计>(第2版)[沈美明 温冬婵]--第一章--自编解析与答案 <IBM-PC汇编语言程序设计>(第2版)[沈美明 温冬婵]--第二章--自编解析与答 ...

  6. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】答案

    内容修订.解析.扩展: <IBM-PC汇编语言程序设计>(第2版)[沈美明 温冬婵]--自编解析与答案 第 一 章. 习 题 1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数 ...

  7. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第十一章——自编解析与答案

    11.1 写出文件代号式磁盘存取操作的错误代码: (1) 非法文件代号 (2) 路径未发现 (3) 写保护磁盘 答:错误代码为: (1) 06 (2) 03 (4) 19 11.2 使用3CH功能建立 ...

  8. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第六章——自编解析与答案

    6.1 下面的程序段有错吗?若有,请指出错误. CRAY PROC PUSH AX ADD AX, BX RET ENDP CRAY 答:程序有错.改正如下: CRAY PROC ADD AX, BX ...

  9. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第五章——自编解析与答案

    5.1 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来. 答:程序段如下: BEGIN: MOV AH, 1 :从键盘输入一个字符的DOS调用 INT 21H CMP AL, 'a ...

  10. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第三章——自编解析与答案

    3.1 给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么? (1) 立即寻址 (2) 直接寻址 (3) 使用BX的寄存器寻址 (4) 使 ...

最新文章

  1. Maven 的classifier的作用
  2. iOS之深入了解控制器View的加载
  3. linux挂载windows共享的远程目录
  4. Android视频播放之VideoView
  5. python type help copyright_Python关于import的实验(8)__init__.py文件内部代码的执行以及内部的导入和内部的变量...
  6. [jQuery] 根据表单的不同参数跳转不同的链接
  7. 助农两年销量千万 “李佳琦公益”实现“造血式”帮扶
  8. react学习笔记2之正确使用状态
  9. 微信小程序傻瓜制作_傻瓜式教程:做一个带优惠券的微信小程序
  10. [FW]修复ubutnu12.04+win7的grub2引导
  11. C++中用stringstream类进行数据类型的转换
  12. flume学习(四):Flume Channel Selectors使用
  13. IntelliJ IDEA 无法导入HttpServlet包解决方法
  14. 自动将视频文件生成字幕的软件autosub的替代工具字幕酱(支持英文、日语和法语、德语、韩语)
  15. 拳皇格斗游戏3D版源代码
  16. 聚光灯效应:为什么没有人记得你做过什么
  17. 中移物联网综合面(害面试之前还是要休息好的)
  18. 职场社交赛道上,脉脉靠什么弯道超车
  19. 计算机在摄影应用,计算机X线摄影在临床中的应用
  20. https的数字签名流程

热门文章

  1. 海拨3000点位的岛型堰塞湖
  2. 《算法设计与分析基础》Chapt 2 算法效率分析基础
  3. C语言不好应该转专业吗,转专业后对于C语言补修的一些体会(1)
  4. python函数五要素_Python安装及关键要素
  5. python连接池原理_python redis之连接池的原理
  6. 函数调用关系图如何画_乌鲁木齐126中一校三址关系图出炉!佳源和绿谷应该如何选择?...
  7. 计算机word考试中的图文混排,2014招警考试公共基础计算机知识:Word的图文混排功能...
  8. oracle 存储 更新,oracle 更新空间数据存储过程语句
  9. ceph与hdfs的比较_分布式存储中HDFS与Ceph两者的区别是什么,各有什么优势?
  10. php制表网页打印到a4纸,A4纸网页打印 html网页页面的宽度设置成多少