欢迎来到天天文库
浏览记录
ID:35569618
大小:178.00 KB
页数:82页
时间:2019-03-29
《《汇编语言程序设计》-相伟-电子教案【第6章宏功能设计和子程序设计】》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、21世纪高等院校规划教材汇编语言程序设计相伟主编徐小平李珍香副主编中国水利水电出版社第6章宏功能设计和子程序设计本章主要讲解宏功能与子程序的基本知识和设计方法。通过本章学习,读者应掌握以下内容:宏定义与宏调用子程序定义、调用与返回主程序与子程序的参数传递子程序设计方法6.1宏功能程序设计在汇编语言源程序中,有时会多次用到这样的程序段,它们完成相同的功能,实现功能的语句或完全相同,或仅有某些变量差异,为了不重复书写这些程序段,提高编写程序的效率,可以使用宏汇编语言中的宏。宏就是源程序中一段有独立功能的程序代码,它
2、只需要在源程序中定义一次,就可以多次调用。调用时只需要用一个宏指令语句就可以。6.1.1宏定义与宏调用宏指令的使用要经过以下三个步骤:(1)宏定义:即用一组伪指令将重复的语句序列定义成宏指令。定义宏指令时可以根据需要设置形式参数,并指定宏指令名。(2)宏调用:在程序中需要的地方通过带实参的宏指令来调用宏定义。(3)宏展开:由宏汇编程序用宏定义中的语句序列来代替宏调用中的宏名,用实参代替形参。其中,前两步工作必须由用户自己完成,而第三步则由宏汇编程序在汇编期间完成。⒈宏定义宏定义是用一组伪指令来实现的。定义格式为
3、:宏指令名MACRO[形式参数表]宏定义体ENDM其中,MACRO和ENDM是一对伪指令,分别表示宏定义的开始和结束,中间是宏定义体,即一组有独立功能的程序代码。宏指令名给出该宏定义的名称,调用时就使用宏指令名来调用该宏定义。宏指令名的第一个字符必须是字母,后面可以跟字母、数字或下划线等字符。形式参数表给出了宏定义用到的形式参数(简称形参),参数与参数之间用逗号隔开。注意参数可以缺省。例如,在某程序中,需要多次输出缓冲区中的字符串,这就要反复进行9号功能调用:……LEADX,BUF1MOVAH,9INT21H…
4、…LEADX,BUF2MOVAH,9INT21H……LEADX,BUF3MOVAH,9INT21H……上述三次功能调用语句格式完全相同,只是每次输出缓冲区首址不同。为缩短程序行,简化程序设计,我们可以将9号功能调用的过程定义成宏指令,将输出缓冲区首址作为形式参数。定义格式如下:OUTPUTMACROALEADX,AMOVAH,9INT21HENDM其中OUTPUT是宏指令名,A是形式参数。⒉宏调用经宏定义定义后的宏指令就可以在源程序中调用。调用格式:宏指令名[实在参数表]其中,宏指令名必须与宏定义中的宏指令名一
5、致,实在参数表中的参数与宏定义中的形式参数表中的参数按位置关系一一对应。实在参数简称实参。按此格式,对前面宏定义的三次调用可写成下面形式:……OUTPUTBUF1……OUTPUTBUF2……OUTPUTBUF3……⒊宏展开当源程序被汇编时,汇编程序将对每个宏调用进行宏展开。宏展开就是用宏定义体取代源程序中的宏指令名,并用实参取代宏定义中的形参。在取代时,实参和形参是一一对应的。另外,展开后所得到的语句应该是有效的,否则汇编程序将指示出错。对于上面的三次宏调用,展开后形式为:……+LEADX,BUF1+MOVAH
6、,9+INT21H……+LEADX,BUF2+MOVAH,9+INT21H……+LEADX,BUF3+MOVAH,9+INT21H……注意在汇编列表文件中,宏展开后留下的宏体语句在每行的第31列用符号“+”标志。下面我们再用一个例子来说明宏定义、宏调用和宏展开的情况。例6-1:用宏指令定义两个字操作数相乘。源程序如下:宏定义MULTYMACROOPR1,OPR2,RESULTPUSHDXPUSHAXMOVAX,OPR1IMULOPR2MOVRESULT,AXMOVRESULT+2,DXPOPAXPOPDXEND
7、M宏调用……MULTYBX,CX,BUF1……MULTYN1,N2,BUF2宏展开+PUSHDX+PUSHAX+MOVAX,BX+IMULCX+MOVBUF1,AX+MOVBUF1+2,DX+POPAX+POPDX……+PUSHDX+PUSHAX+MOVAX,N1+IMULN2+MOVBUF2,AX+MOVBUF2+2,DX+POPAX+POPDX以上两次宏调用中,第一次用BX、CX寄存器存放实参,第二次用N1、N2两个存储单元存放实参,都可以正确地进行参数传递。这大大增加了宏汇编程序设计的灵活性。6.1.2宏
8、库的建立与使用⒈宏库的建立例如,建立一个宏库文件INOUT.LIB,该库文件中包含以下内容:INPUTMACROALEADX,AMOVAH,10;10号系统功能调用,接收键盘输入字INT21HENDMOUTPUT1MACROALEADX,AMOVAH,9;9号系统功能调用,输出DS:DX指向INT21H;以‘$’结尾的字符串ENDMOUTPUT2MACROAMOVDL,AMOVAH,2
此文档下载收益归作者所有