高级语言汇编技术宏汇编重复汇编条件汇编伪指令.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:19 大小:141KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

高级语言汇编技术宏汇编重复汇编条件汇编伪指令.ppt

高级语言汇编技术宏汇编重复汇编条件汇编伪指令.ppt

预览

免费试读已结束,剩余 9 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

8.1宏汇编2.宏展开当宏汇编程序扫描到宏指令语句(即宏调用)时,宏汇编程序就把宏指令定义中宏体的程序段代码替代宏指令语句。若是带参数的宏调用,则同时用相应的实参替代宏体中对应形参的位置,并对原有宏体代码作修改。下面是一个源程序的列表文件,它展示了宏定义、宏调用和宏展开的全部过程。在列表文件中,左边带“+”号的指令是宏汇编程序在宏展开时自动生成的指令。宏定义本身不生成任何目标代码,宏指令语句本身也不生成目标代码,它仅表示宏调用出现的位置。EXCH_MEMMACROMEM_l,MEM_2,REGMOVREG,MEM_1XCHGREG,MEM_2MOVMEM_1,REGENDMDATASEGMENTDA_W1DW55AAHDA_W2DW6688HDATAENDSCODESECMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX┇;宏调用和宏展开EXCH_MEMDA_W1,DA_W2,AX;宏指令语句+MOVAX,DA_Wl+XCHGAX,DA_W2+MOVDA_W1,REG┇MOVAH,4CHINT21HCODEENDSENDSTART8.1.3宏调用中的参数使用为了宏定义和引用的某些特殊需要,有时实参是由字符、空格等特殊符号组成的,因此汇编程序支持几个具有特定含义的运算符。1.连接运算符&在宏定义中,如果形式参数与其它字符连接在一起,或形式参数出现在字符串之中,那么,就必须使用连接运算符(&)。在宏指令定义的具体使用时,连接操作符&可以在形参的前面,也可在形参的后面。在宏指令展开时,对应形参的实参就与它前面或后面的符号连接在一起构成一个新的符号。【例8.3】宏指令SHIFT_N功能是:对某一个寄存器进行由COUNT确定的移位次数,由DIRECT确定逻辑或算术左/右移位,移位的方向可通过&将S和DIRECT对应的实参连接起来。SHIFT_NMARCOREG,DIRECT,COUNTMOVCL,COUNTS&DIRECTREG,CLENDM如SHIFT_NBX,HR,3的宏指令的展开为:+MOVCL,3+SHRBX,CL这样就实现了使BX逻辑右移3位。形参DIRECT被实参HR代替,通过连接符&将S和HR连接成SHR。同理SHIFT_NAX,HL,5可实现AX逻辑左移5位。2.文本操作符<>文本操作符是一对尖括号<>,用它括起来的内容将作为一个字符串来进行形式参数的整体替换。在宏引用时,如果实参内包含逗号、空格等间隔符,则必须使用该操作符,以保证实参的完整性。如果实参是某个具有特殊含义的字符,为了使它只表示该字符本身,也需要用该运算符括起来。NUMBERMACROTHEDATADBTHEDATAENDM假设在程序中调用此宏指令:DATASEGMENTNUMBER<1,3,5>DATAENDS则宏展开为:DATASEGMENT+DB1,3,5DATAENDS如果不加<>,则在宏展开为:+DB1;而3,5按规则被忽略3.表达式操作符%进行宏调用时,如要在实参中使用“%”,则在宏指令调用时宏汇编程序将获取“%”后常数表达式的值作为参数,而非表达式本身,如:NUMBERMACROX,Y,Z,DBX,Y,ZENDM若宏调用为:IEQU10JEQU50NUMBER16,%I+J,%J-I则相应的宏展开为:+DB16,60,404.字符操作符!字符操作符!的使用表明,“!”后的字符不是特殊字符,而是普通字符。这样对于包含在“<”、“>”、“!”、“%”之间的文本串,汇编程序将能以普通字符处理。如将“!”作为普通字符,则使用!!。例如宏指令定义:DEFIN_STMACROSTRINGDB‘&String&S’ENDM则宏调用:DEFIN_ST<PleaseInputaInteger(!>0):$>其宏展开为:+DB‘PleaseInputaInteger(>0):$’8.1.4宏嵌套2.在宏定义中嵌套宏调用在宏定义中嵌套宏调用的基本形式为:这种嵌套形式比较简单,只需在宏定义中(像在程序中一样)写出宏指令即可。但必须先定义,后调用。ABCD_lMACRO;定义一个宏┇ENDMABCD_2MACROABCD_l;在宏定义中调用宏┇ENDM8.1.5宏汇编中的伪指令8.1.6宏库8.2重复汇