汇编语言高级编程技术

汇编语言高级编程技术

ID:44006477

大小:453.50 KB

页数:78页

时间:2019-10-17

汇编语言高级编程技术_第1页
汇编语言高级编程技术_第2页
汇编语言高级编程技术_第3页
汇编语言高级编程技术_第4页
汇编语言高级编程技术_第5页
资源描述:

《汇编语言高级编程技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第8章汇编语言高级编程技术8.1宏8.2汇编高级语法8.3模块化程序设计8.4C和汇编的混合编程8.5程序优化8.1宏8.1.1宏指令的定义和使用宏指令的使用有3个步骤:宏定义宏调用宏扩展宏定义格式:宏指令名MACRO[形式参数表]…;宏指令体ENDM形式参数表给出形参,形参之间用逗号隔开。宏调用和宏扩展宏调用的格式:宏指令名[实参数表]实参应和形参顺序一致宏扩展:用宏指令体的语句序列替换宏指令名并用实参替换形参2.LOCAL伪操作程序中多次调用宏指令,展开时其中的标号重复,导致编译出错。解决办法:将宏定义体中的标号说明为局部标号格式:local标号1[,标号2,标号3,…]3.PU

2、RGE伪指令PURGE伪指令取消已定义的宏指令格式为:PURGE宏指令名[,宏指令名,…]注意:宏指令被取消的程序就不能再使用这个宏指令指令取消之前的宏调用已经被展开,不受影响8.1.2宏指令中参数的使用1.MOVE宏指令MOV指令不允许源操作数和目标操作数同时为内存操作数,我们如此定义:dwVarADWORD?dwVarBDWORD50MOVEMACROX,YPUSHYPOPXENDM调用MOVEdwVarA,dwVarB,可将后者内容赋给前者2.SUBX宏指令SUB指令执行后,目标操作数中的被减数被“差”替换掉。我们可以定义一个新的宏指令,它包括3个参数:被减数(minuend)

3、、减数(subtrahend)、差(difference)。SUBXMACROminuend,subtrahend,differencePUSHEAXMOVEAX,minuendSUBEAX,subtrahendMOVdifference,EAXSUBX宏指令(续);接上页程序POPEAXENDM要计算ECX=EDX–8,就调用SUBX宏:SUBXEDX,8,ECX3.Idx宏指令对给定的数组下标i,j,元素的地址为:数组首地址+(i*RowSize+j)*ElementSizeRowSize表示为数组每行的大小ElementSize表示为每个元素的大小横线部分可以用宏指令表示:Id

4、xMACROI,J,RowSizeIMULEBX,I,RowSizeADDEBX,JIdx宏指令(续);接上页程序ADDEBX,EBXSHLEBX,2ENDM调用上述Idx宏指令就可求得数组元素的位置8.1.3特殊的宏操作符1.操作符&宏定义体中将&放在形参前面宏扩展时把&后面的形参和前面的符号合并成一个符号通过&把前后两个符号合并成一个变量名:DefDataMACROName,Valuebyte&NameBYTEValueENDM调用宏:DefDataTemp,0DefData1,-5展开宏,形成以下语句:1byteTempBYTE01byte1BYTE-5用&连接的符号还可以形成

5、一条指令2.文本原样传递操作符<>把实参原封不动地传递到定义体中去替换形参可以保证实参的完整性用DefData定义一个5字节的数组Array5:DefDataArray5,<-2,-1,0,1,2>3.表达式操作符%用%可以取得符号常量的值宏调用时,%操作符后面的表达式立即求值后作为实参4.字符原意操作符!在宏的定义和调用时,“&<>!%”这些字符有其特殊的用途。如果要使用原意,就在字符前加!。!字符后面跟的一个字符被原样传送。!字符类似于C语言字符串中的转义字符宏调用DefStrBook,<>产生的语句为:strBookBYTE"strBook

6、:",0而宏调用DefStrBook,!!>产生的语句为:strBookBYTE"strBook:<>",08.1.4宏与子程序的区别1.工作方式的区别子程序在“空间”上占优势,使用子程序需要付出额外的开销,程序的体积较小而宏在“时间”上占优势,但程序的体积较大宏与子程序的区别2.参数传递方式不同宏调用时实参直接替换形参;实参可以是任何形式或意义的字符组合;参数替换是在编译时完成的。而子程序参数的传递是通过寄存器、堆栈等实现的;参数则只能是以数值形式出现;程序的参数传递是

7、程序运行时完成的。8.1.5重复汇编1.重复伪指令REPTREPT的格式为:REPTMACRO数值表达式…;重复块ENDMREPT也可以写做repeat。数值表达式决定重复次数重复块中可以是任何有效的汇编语句重复块中是指令序列的例子:打印数字9、99、999、9999的平方数FmtSqureStrBYTE'%d*%d=%d',0ah,0X=9REPT4INVOKEprintf,offsetfmtSqureStr,X,X,X*XX=X*10+9ENDM2.不

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。