在掌握基本的汇编语言程序设计方法之后进一步学习如何提.ppt
《在掌握基本的汇编语言程序设计方法之后进一步学习如何提.ppt》由会员分享,可在线阅读,更多相关《在掌握基本的汇编语言程序设计方法之后进一步学习如何提.ppt(58页珍藏版)》请在三一文库上搜索。
1、1,在掌握基本的汇编语言程序设计方法之后,进一步学习如何提高编程效率的各种实用方法。,第5章 高级汇编语言程序设计,宏 汇 编 重 复 汇 编 条 件 汇 编,2,宏汇编 重复汇编 条件汇编 统称宏结构,宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法,宏具有宏名的一段汇编语句序列(宏定义时书写) 宏指令这段汇编语句序列的缩写(宏调用时书写) 宏展开宏指令处用这段宏代替的过程(宏汇编时实现) 宏的参数功能强大,颇具特色 配合宏,还有宏操作符和有关伪指令,5. 1 宏汇编,宏(Macro)是源程序中一段有独立功能的程序代码。它只需在源程序中定义一次,就可以
2、多次调用它,调用时只需用一个宏指令语句就可以了。,宏定义是用一组伪操作来实现的其格式是:,宏名 macro 形参表 宏定义体 endm,其中macro和endm是一对伪操作,这对伪操作之间是宏定义体(一组有独立功能的程序代码)宏名给该宏定义的名称,调用时就使用宏名来调用该宏定义。 宏名的第一个符号必须是字母,其后可以跟字母、数字和下划线字符。,5,MAINBEGING MACRO ;定义名为MAINBEGIN的宏,无参数 MOV AX,DATA ;宏定义体 MOV DS,AX ENDM ;宏定义结束 MAINEND MACRO RETNUM ;带有形参RETNUM MOV AL,RETNUM
3、;宏定义中使用参数 MOV AH,4CH INT 21H ENDM,6,MULTIPLY MACRO OPR1,OPR2,RESULT ;定义名具有三个参数的宏 PUSH DX ;宏定义体 PUSH AX MOV AX,OPR1 IMUL OPR2 MOV RESULT,AX POP AX POP DX ENDM ;宏定义结束,宏名 实参表,宏调用 经宏定义定义后的宏指令可以在源程序中调用,这种对宏指令的调用称为宏调用。其格式为:,宏调用的实质是在汇编过程中进行宏展开,8,例: START: MAINBEGIN ;宏调用,建立DS内容 MULTIPLY 240,BX,SAVE ;宏调用,显示字
4、符串 MAINEND 0 ;宏调用,返回DOS END START 宏调用的实质是在汇编过程中进行宏展开,宏展开,在汇编时,用宏定义体的代码序列取代源程序中的宏指令名,而且用实际参数取代形式参数的过程。,宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代,而且在取代时,实参与形参是一一对应的。,10,START: 1 MOV AX,DATA ;宏指令MAINBEGIN的宏展开 1 MOV DS,AX 1 PUSH DX ;宏指令MULTIPLY的宏展开 1 PUSH AX 1 MOV AX,OPR1 1 IM
5、UL OPR2 1 MOV RESULT,AX 1 POP AX 1 POP DX 1 MOV AL,0 ;宏指令MAINEND 0 的宏展开 1 MOV AH,4CH 1 INT 21H END START,宏的参数:,宏的参数使用非常灵活,宏定义时, 可以无参数,例如:MAINBEGIN 可以带有一个参数,例如:MAINEND 也可以具有多个参数;例如:MULTIPLY 参数可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式; 宏定义体可以是任何合法的汇编语句,既可以是硬指令序列,又可以是伪指令序列;,例: ;宏定义 SHLEXT MACRO SHLOPRAND,SH
6、LNUM PUSH CX MOV CL,SHLNUM SHL SHLOPRAND CL POP CX ENDM ;宏指令 SHLEXT AX,6 ;宏展开 1 PUSH CX 1 MOV CL,06 1 SHL AX,CL 1 POP CX,;统一4条移位指令的宏指令(shl,shr,sal,sar) shift macro soprand,snum,sopcode push cx mov cl,snum s&sopcode& soprand,cl pop cx endm 例:宏调用: shift ax,4,ar 宏展开: 1 push cx 1 mov cl,4 1 sar ax,cl 1
7、pop cx,参数可以是操作码的一部分,但在宏定义中必须用&作为分隔符。&是一个操作符,它在宏体中可作为形参的前缀,展开时把&前后两个符号合并形成一个符号,这个符号可是操作码、操作数和一个字符串。,14,;统一移位和循环移位8条指令的宏指令 shrot macro sroprand,srnum,sropcode push cx mov cl,srnum sropcode sroprand,cl pop cx endm 例: 宏调用:shrot ax,4,rcl 宏展开: 1 push cx 1 mov cl,4 1 rcl ax,cl 1 pop cx,例: ;宏定义 dstring macr
8、o string db &string&,0dh,0ah,$ endm ;宏调用 dstring dstring ;宏展开 1 db This is a example., 0dh,0ah,$ 1 db 0 Number 10, 0dh,0ah, $,转义注释符,传递注释符,宏操作符,;宏注释符,用于表示在宏定义中的注释。采用这个符号的注释,在宏展开时不出现 &替换操作符,用于将参数与其他字符分开。如果参数紧接在其他字符之前或之后,或者参数出现在带引号的字符串中,就必须使用该伪操作符,宏操作符,字符串传递操作符,用于括起字符串。在宏调用中,如果传递的字符串实参数含有逗号、空格等间隔符号,则必须
9、用这对操作符,以保证字符串的完整 !转义操作符!,用于指示其后的一个字符作为一般字符,不含特殊意义 %表达式操作符,用在宏调用中,表示将后跟的一个表达式的值转换成当前基数下的数(默认为10进制)作为实参,而不是将表达式本身作为参数,18,例: MSG MACRO COUNT,STRING ;宏定义 MSG&COUNT DB STRING ENDM ERRMSG MACRO TEXT CNTR =CNTR +1 MSG %CNTR,TEXT ENDM 宏调用: CNTR =0 ERRMSG SYNTAX ERROR ERRMSG INVALID OPPERAND 宏展开: CNTR=0 1 CN
10、TR=CNTR+1 1 MSG %CNTR, SYNTAX ERROR 2 MSG1 DB SYNTAXERROR 1 CNTR=CNTR+1 1 MSG %CNTR,INVALID OPPERAND 2 MSG2 DB INVALID OPPERAND,与宏有关的伪指令,局部标号伪指令 格式:LOCAL 标号列表(各标号之间用逗号分隔) 宏定义体采用了标号,应使用LOCAL加以说明,它必须是宏定义MACRO语句之后的第一条语句。汇编程序对LOCAL伪指令的局部标号表中每个局部标号建立惟一的符号(用?0000-?FFFF)以代替在展开中存在的每一个局部标号。,;宏定义 absol macro
11、oprd local next cmp oprd,0 jge next neg oprd next: endm,例:,;宏调用 absol word ptr bx absol bx ;宏展开 1 cmp word ptr bx,0 1 jge ?0000 1 neg word ptr bx 1 ?0000: 1 cmp bx,0 1 jge ?0001 1 neg bx 1 ?0001:,21,宏定义删除伪指令 格式: PURGE 宏名表 为了删除汇编时引入到内存的无用的宏定义,可以用PURGE伪指令把它删除 宏定义退出伪指令 格式: EXITM 伪指令EXITM表示结束当前宏调用的展开,22
12、,宏指令名可以与指令助记符或伪操作名相同,在这种情况下,宏指令的优先级最高,而同名的指令或伪操作就失效了.伪操作PURGE可以用来在适当的时候取消宏定义,以便恢复指令的原始含义. 宏定义: ADD MACRO OPR1,OPR2,RESULT . ENDM 宏调用: . ADD XX,YY,ZZ PURGE ADD .,23,在宏调用后,用PURGE伪操作取消定义,以便恢复ADD指令的原始含义,在PURGE ADD后面所用的ADD指令,则服从机器指令的定义. PURGE伪操作可同时取消多个宏操作,此时各宏指令之间用逗号隔开.,24,宏定义中允许使用宏调用,其限制条件是:必须先定义后调用。 例:
13、宏定义: DIF MACRO X,Y MOV AX,X SUB AX,Y ENDM DIFSQR MACRO OPR1,OPR2,RESULT PUSH DX PUSH AX DIF OPR1,OPR2 IMUL AX MOV RESULT,AX POP AX POP DX ENDM 宏调用: DIFSQR VAR1,VAR2,VAR3,25,宏定义体内不仅可以使用宏调用,也可以包含宏定义. 宏定义: DEFMAC MACRO MACNAM,OPERATOR MACNAM MACRO X,Y,Z PUSH AX MOV AX,X OPERATOR AX,Y MOV Z,AX POP AX EN
14、DM ENDM 其中MACNAM是内层的宏定义名,但又是外层宏定义的形参,所以调用DEFMAC时,就形成一个宏定义.,26,宏调用: DEFMAC ADDITION,ADD 宏展开: 1 ADDITION MACRO X,Y,Z 1 PUSH AX 1 MOV AX,X 1 ADD AX,Y 1 MOV Z,AX 1 POP AX 1 ENDM 形成加法宏定义ADDITION. 同样,宏调用: DEFMAC SUBTRACT,SUB 会形成减法的宏定义.,27,当然在形成这些宏定义后,就可以使用宏调用 ADDITION VAR1,VAR2,VAR3 而展开成: 1 PUSH AX 1 MOV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 掌握 基本 汇编 语言程序设计 方法 之后 进一步 学习 如何
链接地址:https://www.31doc.com/p-2733916.html