资源描述:
《chapter5高级汇编语言程序设计课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章教学重点在掌握基本的汇编语言程序设计方法之后,进一步学习如何提高编程效率的各种实用方法:高级语言特性宏结构模块化5.1高级语言特性MASM6.0引入高级语言的程序设计特性条件控制伪指令.IF.ELSE.ENDIF循环控制伪指令.WHILE.ENDW.REPEAT.UNTIL过程声明和过程调用伪指令.PROTO.INVOKE要调用带参数过程定义的过程,不应采用CALL指令,因为比较烦琐应该采用过程调用伪指令INVOKE使用INVOKE伪指令的前提是需要用PROTO伪指令对过程进行声明5.1.3过程声明和过程调用伪指令过程名PROC调用距离语言类型作用范围
2、<起始参数>USES寄存器列表,参数:类型LOCAL参数表…;汇编语言语句过程名ENDP第5章过程声明伪指令:用于事先声明过程的结构过程名PROTO调用距离语言类型,参数:类型过程调用伪指令INVOKE过程名,参数,...如何调用;汇编语言程序:lt503.asm.modelsmallchecksumdPROTOc,:word,:word;声明过程.stack.dataarraydb12h,25h,0f0h,0a3h,3db68h,71h,0cah,0ffh,90hcountequ$-array;数组的元素个数resultdb?;校验和.code.start
3、upINVOKEchecksumd,count,offsetarray;调用过程movresult,al;保存校验和.exit0例5.3-1/2列表文件checksumdPROCcUSESbxcx,countp:word,arrayp:wordmovbx,arrayp;BX←数组的偏移地址movcx,countp;CX←数组的元素个数xoral,alsumd:addal,[bx];求和:AL←AL+DS:[BX]incbxloopsumdretchecksumdendpend例5.3-2/2列表文件;lt503.asm的列表文件(lt503.lst)...
4、INVOKEchecksumd,count,offsetarray*movax,wordptrOFFSETarray*pushax*movax,+000Ah*pushax*callchecksumd*addsp,04hmovresult,al...例5.3-1/2指示该语句由汇编程序自动生成checksumdPROCcUSESbxcx,countp:word,arrayp:word*pushbp;起始代码*movbp,sp*pushbx;保护bx和cx*pushcxmovbx,arrayp;arrayp=[BP+6]movcx,countp;cuontp=
5、[BP+4]...ret*popcx;结尾代码*popbx*popbp*ret0000hchecksumcendp例5.3-2/2进入调试程序观察5.2宏结构程序设计宏汇编重复汇编条件汇编——统称宏结构宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法宏——具有宏名的一段汇编语句序列——宏定义时书写宏指令——这段汇编语句序列的缩写——宏调用时书写宏展开——宏指令处用这段宏代替的过程——宏汇编时实现宏的参数功能强大,颇具特色配合宏,还有宏操作符和有关伪指令5.2.1宏汇编第5章宏定义宏名macro[形参表]宏定义体endm
6、mainbeginMACRO;;定义名为mainbegin的宏,无参数movax,@data;;宏定义体movds,axENDM;;宏定义结束mainendMACROretnum;;带有形参retnummoval,retnum;;宏定义中使用参数movah,4chint21hENDM宏注释符宏调用宏名[实参表]start:mainbegin;宏调用,建立DS内容dispmsgstring;宏调用,显示字符串mainend0;宏调用,返回DOSendstart宏调用的实质是在汇编过程中进行宏展开宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即
7、用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代宏展开宏展开——在汇编时,用宏定义体的代码序列替代宏指令的过程。start:mainbegin;宏指令1movax,@data;宏展开1movds,axmainend0;宏指令1moval,0;宏展开1movah,4ch1int21h宏的参数宏的参数使用非常灵活宏定义时,可以无参数,例如5.4a的mainbegin可以带有一个参数,例如5.4a的mainend也可以具有多个参数;例如5.5a的shlext参数可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式;例如5.
8、5b的shift和shrot宏定义体可以是任何合法的