宏指令及子程序设计实验.docx
- 文档编号:28142733
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:14
- 大小:66.33KB
宏指令及子程序设计实验.docx
《宏指令及子程序设计实验.docx》由会员分享,可在线阅读,更多相关《宏指令及子程序设计实验.docx(14页珍藏版)》请在冰豆网上搜索。
宏指令及子程序设计实验
实验五:
宏指令及子程序设计实验
院系名称
:
电子工程学院
学生姓名
:
李倩(33)
专业名称
:
电子信息工程
班级
:
电子0808
宏指令及子程序设计实验
5.5.1实验目的
1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。
2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。
3、了解宏指令与子程序的异同以及各自的适用场合。
5.5.2实验预习要求
1、复习宏指令的定义与调用方法。
2、复习过子程序的定义与调用方法。
3、根据“2.5.3实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
4、从“2.5.4实验习题”中任选一道题目,编写源程序,以便上机调试。
5.5.3实验内容
从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来。
要求:
在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现;
将键盘输入的十进制数转换成二进制数由子程序DTOB实现;
在N个无符号字节型二进制数中找出最大数的功能由子程序FMAX实现;
将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现。
程序运行结果如右图所示。
1、编程指导
(1)显示提示信息的宏指令DSTRING的编写
宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。
这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。
读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。
下面给出实现提示信息显示的宏指令的定义:
DSTRINGMACROSTRING
PUSHDX
PUSHAX
MOVDX,OFFSETSTRING
MOVAH,09H
INT21H
POPAX
POPDX
ENDM
请读者注意,宏指令应该先定义,后调用。
因此,宏定义通常紧跟在代码段中段寄存器赋值指令之后给出。
(2)将键盘输入的十进制数转换为二进制数的子程序DTOB的编写
子程序的定义方法请参阅教材“5.6.4子程序设计”一节。
将十进制数转换为二进制数的程序代码请参阅本书“2.4.3实验内容”中“编程指导”部分。
(3)在N个无符号字节型二进制数中找出最大数的子程序FMAX的编写
请参阅教材“5.6.3循环程序设计”一节例5.12。
(4)将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的子程序BTOAD的编写
程序代码请参阅本书“2.4.3实验内容”中“编程指导”部分。
2、源程序:
COUNTEQU10
DATASEGMENT
MADB0
NUMDB10DUP(?
)
IBUFDB7,0,6DUP(?
)
OBUFDB6DUP(?
)
INFOR1DB"Pleaseinput10numbers:
(<256)",10,13,'$'
INFOR2DB"THEMAXFOOUNDINTHE10NUMBERSIS"
INFOR3DB10,13,'$'
DATAENDS
STACKSEGMENTSTACK
DATA2DW40DUP(?
)
TOPEQULENGTHDATA2
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
DSTRINGMACROSTI
PUSHDX
PUSHAX
LEADX,STI
MOVAH,9
INT21H
POPAX
POPDX
ENDM
DSTRINGINFOR1
MOVBX,OFFSETNUM
MOVCX,COUNT
LOOP1:
CALLSTOB
DSTRINGINFOR3
MOV[BX],AL
INCBX
LOOPLOOP1
MOVAX,OFFSETNUM
PUSHAX
MOVCX,COUNT
PUSHCX
CALLFMAX
DSTRINGINFOR2
CALLBTOAD
MOVAH,4CH
INT21H
STOBPROC
PUSHCX
PUSHBX
PUSHDX
MOVDX,OFFSETIBUF
MOVAH,10
INT21H
MOVCL,IBUF[1]
XORCH,CH
MOVDL,0
MOVBL,1
MOVSI,OFFSETIBUF[1]
INCSI
ADDSI,CX
LOP5:
MOVAL,[SI]
SUBAL,30H
MULBL
ADDDL,AL
MOVAL,10
MULBL
MOVBL,AL
DECSI
LOOPLOP5
MOVAL,DL
POPDX
POPBX
POPCX
RET
STOBENDP
;定义在N个无符号字节型二进制数中找出最大数的子程序FMAX
FMAXPROC
MOVBP,SP
MOVSI,[BP+4]
movCX,[BP+2]
DECCX
MOVAL,[SI]
LOP2:
INCSI
MOVAH,[SI]
CMPAH,AL
JBENEXT
XCHGAH,AL
NEXT:
LOOPLOP2
MOVMA,AL
RET
FMAXENDP
BTOADPROC
MOVAL,MA
XORAH,AH
MOVBL,100
MOVCX,3
LOP3:
DIVBL
PUSHAX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
MOVAL,BL
XORAH,AH
MOVBL,10
DIVBL
MOVBL,AL
POPAX
MOVAL,AH
XORAH,AH
LOOPLOP3
RET
BTOADENDP
CODEENDS
ENDSTART
实验结果:
2.5.4实验习题
1、从键盘输入N个十进制数,求它们的和(累加和要求不大于65535),并将累加结果在屏幕上显示出来。
要求给出必要的提示信息(用宏调用完成);累加功能由子程序调用实现;二进制数形式的累加和转换为十进制数并显示由子程序调用实现。
源程序:
COUNTEQU10
DATASEGMENT
NUMDW10DUP(?
)
IBUFDB6,0,6DUP(?
)
SUMDW0
INFOR1DB"Pleaseinput10numbers:
",10,13,'$'
INFOR2DB"THESUMIS"
INFOR3DB10,13,'$'
DATAENDS
STACKSEGMENTSTACK
DATA2DW40DUP(?
)
TOPEQULENGTHDATA2
STACKENDS
CODESEGMENT
assumeCS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
DSTRINGMACROSTI;显示字符信息的宏指令
PUSHDX
PUSHAX
PUSHBX
PUSHCX
LEADX,STI
MOVAH,9
INT21H
POPCX
POPBX
POPAX
POPDX
ENDM
DSTRINGINFOR1
MOVBX,OFFSETNUM
MOVCX,COUNT
LOOP1:
CALLSTOB
DSTRINGINFOR3
MOV[BX],AX
INCBX
INCBX
LOOPLOOP1
MOVAX,OFFSETNUM
PUSHAX;通过堆栈向子程序传递参数
MOVCX,COUNT
PUSHCX
CALLGETSUM
DSTRINGINFOR2
DSTRINGINFOR3
CALLBTOAD
MOVAH,4CH
INT21H
STOBPROC
PUSHCX
PUSHBX
PUSHDX
MOVDX,OFFSETIBUF
MOVAH,10
INT21H
MOVCL,IBUF[1]
XORCH,CH
MOVDX,0
MOVBX,1
MOVSI,OFFSETIBUF[1]
ADDSI,CX
LOP5:
MOVAL,[SI]
SUBAL,30H
PUSHDX
XORAH,AH
MULBX
POPDX
ADDDX,AX
PUSHDX
MOVAX,10
MULBX
MOVBX,AX
DECSI
POPDX
LOOPLOP5
MOVAX,DX
POPDX
POPBX
POPCX
RET
STOBENDP
GETSUMPROC
PUSHSI
PUSHBP
PUSHCX
PUSHDX
MOVBP,SP
MOVSI,[BP+12]
movCX,[BP+10]
MOVDX,0
LOP2:
MOVAX,[SI]
ADDDX,AX
ADDSI,2
LOOPLOP2
MOVAX,DX
MOVSUM,DX
POPDX
POPCX
POPBP
POPSI
RET
GETSUMENDP
BTOADPROC
PUSHDX
PUSHCX
PUSHBX
PUSHAX
XORDX,DX
MOVBX,10000
MOVCX,5
LOP3:
DIVBX
PUSHDX
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
MOVAX,BX
XORDX,DX
MOVBX,10
DIVBX
MOVBX,AX
POPAX
XORDX,DX
LOOPLOP3
POPAX
POPBX
POPCX
POPDX
RET
BTOADENDP
CODEENDS
ENDSTART
实验结果:
实验心得:
这次试验总体来说较难,调试了很久都没调试出来,最终和同学商量,把书本上有关代码看了好几遍,最终进行调试才得到了正确的程序。
总体来说,经过这次试验,我掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法,熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法,提高了自己的编程能力,通过自己亲手实践学到了更多知识。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指令 子程序 设计 实验