如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1、宏调用——在程序中使用宏指令格式:宏指令名[实参1[,实参2…]]说明:实参是调用时根据宏定义形参要求代入的实际参数;实参的个数、类型和顺序要与形参保持一致。例3.42MOADMACROFIR,SED,SUM;宏定义MOVAL,FIRADDAL,SEDMOVBYTEPTRSUM,ALENDMDATASEGMENTBUFDB20H,30HRESTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA宏展开,宏体取代程序中的宏定义MOAD。+MOVAL,BUF+ADDAL,BUF+1+MOVBYTEPTRREST,AL三、宏定义中的标号与变量宏展开为…+MOVCX,50+MOVBX,1+MOVAX,0+NEXT:ADDAX,BX+ADDBX,2+LOOPNEXT…2、局部标号与变量例2、SUMMACROA,BLOCALNEXTMOVCX,AMOVBX,BMOVAX,0NEXT:ADDAX,BXADDBX,2LOOPNEXTENDM宏展开为…+MOVCX,50+MOVBX,1+MOVAX,0+??0000:ADDAX,BX+ADDBX,2+LOOP??0000…四、宏指令与子程序的区别1、宏指令简化源程序的书写,但不简化目标程序,调几次宏则在调用处插入几次宏的目标代码(宏展开),因此不节省内存,但执行速度快.<本章要求>五、宏指令应用举例例1,输入字符串并回显INPUTCMACRO;输入字符宏MOVAH,01H;INT21H;ENDM;INPUTSMACROBB;输入字符串宏MOVDX,OFFSETBB;MOVAH,0AH;INT21H;ENDM;OUTPUTSMACROMM;输出字符串宏MOVDX,OFFSETMM;MOVAH,09H;INT21H;ENDM;STACKSEGMENTSTACKDW256DUP(?);TOPLABELWORD;STACKENDS;DATASEGMENTSTR1DB‘Doyouwantinputastring?(Y/N)’,0DH,0AH,‘$’STR2DB‘Pleaseinputstring.’,0DH,0AH,‘$’BUFFDB20H,00H,20HDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;MOVDS,AX;MOVAX,STACK;MOVSS,AX;MOVSP,OFFSETTOP;OUTPUTSSTR1;INPUTC;CMPAL,’Y’;JENEXT;CMPAL,’y’;JNEDONE;NEXT:OUTPUTSSTR2;INPUTSBUFF;MOVAL,BUFF+1;读字符串实长CBW;扩展为字LEASI,BUFF+2;取字符串的首地址ADDSI,AX;指向字符串末单元MOVBYPEPTR[SI],’$’;加结束符号OUTPUTSBUFF+2;DONE:MOVAH,4CH;INT21H;CODEENDS;ENDSTART;例5、模拟REP重复前缀自定义一个宏指令REPMACROINSTRU;LOCALLOP;LOP:INSTRU;LOOPLOP;ENDM;宏定义A子程序A例2、密码输入程序。INPUTCMOCRO;输入字符不回显宏MOVAH,07H;INT21H;ENDM;INPUTSMACROBB;输入字符串宏MOVDX,OFFSETBB;MOVAH,0AH;INT21H;ENDM;OUTPUTSMACROMM;输出字符串宏MOVDX,OFFSETMM;MOVAH,09H;INT21H;ENDM;STACKSEGMENTSTACKDW256DUP(?);TOPLABELWORD;STACKENDS;DATASEGMENTSTR1DB‘Pleaseinputyourpassword.’,0dH,0aH,‘$’;STR2DB‘Wrong,Again!’,0dh,0ah,‘$’;STR3DB‘OK!’,0dh,0ah,‘$’;STR4DB‘NO!’,0dh,0ah,‘$’;BUFF1DB‘12345678’;密码BUFF2DB08H,?,08HDUP(?