第七章+高级汇编语言技术.ppt
《第七章+高级汇编语言技术.ppt》由会员分享,可在线阅读,更多相关《第七章+高级汇编语言技术.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 高级汇编语言技术高级汇编语言技术7.1 宏汇编宏汇编7.2 重复汇编重复汇编7.3 条件汇编条件汇编宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法统称宏结构统称宏结构17.1 宏汇编宏汇编 在汇编语言中,如果在源程序中多次使用在汇编语言中,如果在源程序中多次使用到同一个程序段,则可以将这个程序段定到同一个程序段,则可以将这个程序段定义成一个义成一个“指令指令”,叫,叫宏指令。宏指令。2w仅是仅是源程序级的简化源程序级的简化:宏:宏调用调用在汇编时在汇编时进行程序语进行程序语句的展开,不需要返回;句的展开,不需要返回;不减小目标程序,执行速
2、不减小目标程序,执行速度没有改变度没有改变w通过形参、实参结合实现通过形参、实参结合实现参数传递,简捷直观、灵参数传递,简捷直观、灵活多变活多变w还是还是目标程序级的简化目标程序级的简化:子程序调用子程序调用在执行时在执行时由由CALLCALL指令转向、指令转向、RETRET指令返指令返回;形成的目标代码较短,回;形成的目标代码较短,执行速度减慢执行速度减慢w需要利用寄存器、存储单需要利用寄存器、存储单元或堆栈等传递参数元或堆栈等传递参数比较比较宏宏子程序子程序共同点:共同点:简化源程序的书写;节省编程的工作量简化源程序的书写;节省编程的工作量3w宏与子程序具有各自的特点,程序员应宏与子程序具
3、有各自的特点,程序员应该根据具体问题选择使用那种方法该根据具体问题选择使用那种方法w通常,当程序段较短或要求较快执行时,通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标应选用宏;当程序段较长或为减小目标代码时,要选用子程序代码时,要选用子程序比较比较宏宏子程序子程序47.1 宏汇编宏汇编宏:宏:具有宏名的一段汇编语句序列具有宏名的一段汇编语句序列宏定义宏定义时书写时书写宏指令:宏指令:这段汇编语句序列的缩写这段汇编语句序列的缩写宏调用宏调用时书写时书写宏展开:宏展开:宏指令处用这段宏代替的过程宏指令处用这段宏代替的过程宏汇编宏汇编时实现时实现宏的参数宏的参数功能强大,颇具
4、特色功能强大,颇具特色配合宏,还有配合宏,还有宏操作符宏操作符和有关伪指令和有关伪指令5一、宏定义宏定义mainbeginmainbegin MACROMACRO ;定义名为定义名为mainbeginmainbegin的宏,无参数的宏,无参数movmov ax,data ax,data;宏定义体宏定义体movmov ds,axds,axENDMENDM;宏定义结束宏定义结束宏名宏名 macro macro 形参表形参表 宏定义体宏定义体endmendmmainendmainendMACRO MACRO retnumretnum;带有形参带有形参retnumretnummovmov al,0 a
5、l,0movmov ah,ah,retnumretnum ;宏定义中使用参数宏定义中使用参数intint 21h 21hENDMENDM宏注释符宏注释符6宏调用及其展开宏调用及其展开start:start:mainbeginmainbegin;宏调用,建立宏调用,建立DSDS内容内容mainendmainend 4ch 4ch ;宏调用,返回宏调用,返回DOSDOSend startend start宏名宏名 实参表实参表 w宏调用的实质是在汇编过程中进行宏展开宏调用的实质是在汇编过程中进行宏展开w对于宏来说,对于宏来说,先定义,后调用。先定义,后调用。w 宏展开的具体过程是:当汇编程序扫描源
6、程序遇宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进源程序的宏指令,同时用位置匹配的实参对形参进行取代行取代7宏展开宏展开start:start:mainbeginmainbegin;宏指令宏指令 1 1movmov ax,data ax,data;宏展开宏展开 1 1movmov ds,axds,axmainendmainend 4ch4ch;宏指令宏指令 1 1movmov al,0 al,0;宏展开宏展开 1 1movmov ah,4ch ah,4ch 1 1i
7、ntint 21h 21h在汇编时,用宏定义体的代码序在汇编时,用宏定义体的代码序列替代宏指令的过程列替代宏指令的过程8 宏展开 当宏汇编程序扫描到宏指令语句当宏汇编程序扫描到宏指令语句(即宏即宏调用调用)时,宏汇编程序就把宏指令定义中宏时,宏汇编程序就把宏指令定义中宏体的程序段代码替代宏指令语句。体的程序段代码替代宏指令语句。若是带参数的宏调用,则同时用相应的若是带参数的宏调用,则同时用相应的实参替代宏体中对应形参的位置,并对原有实参替代宏体中对应形参的位置,并对原有宏体代码作修改。宏体代码作修改。9 宏展开 下面是一个源程序的列表文件,它展示了宏下面是一个源程序的列表文件,它展示了宏定义、
8、宏调用和宏展开的全部过程。定义、宏调用和宏展开的全部过程。在列表文件中,左边带在列表文件中,左边带“+”号的指令是宏号的指令是宏汇编程序在宏展开时自动生成的指令。汇编程序在宏展开时自动生成的指令。宏定义本身不生成任何目标代码,宏指令宏定义本身不生成任何目标代码,宏指令语句本身也不生成目标代码,它仅表示宏调用语句本身也不生成目标代码,它仅表示宏调用出现的位置。出现的位置。10EXCH_MEMEXCH_MEMMACRO MACRO MEM_lMEM_l,MEM_2MEM_2,REGREG MOV MOV REGREG,MEM_1MEM_1XCHG XCHG REGREG,MEM_2MEM_2MOV
9、 MOV MEM_1MEM_1,REGREGENDMENDMDATADATA SEGMENTSEGMENT DA_W1 DW 55AAHDA_W1 DW 55AAH DA_W2 DA_W2 DW 6688HDW 6688H DATA DATA ENDSENDSCODE SECMENTCODE SECMENTASSUME CSASSUME CS:CODECODE,DSDS:DATADATA,SSSS:STACKSTACKSTARTSTART:MOVMOVAXAX,DATADATA MOV MOV DSDS,AXAX 11;宏调用和宏展开宏调用和宏展开 EXCH_MEM DA_W1,DA_W2,A
10、X ;宏指令语句宏指令语句 +MOV AX,DA_Wl +XCHG AX,DA_W2 +MOV DA_W1,AX MOV AH,4CHINT 21HCODE ENDS END START12子程序调用和宏调用的区别子程序调用和宏调用的区别 子程序时在程序执行期间由主程序调子程序时在程序执行期间由主程序调用的,它只占有它自身大小的一个空间用的,它只占有它自身大小的一个空间 宏调用是在汇编期间展开的,每调用宏调用是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关。的存储空间与调用次数有关。13宏的参数宏的参数w可以可以无参数无
11、参数,例如,例如mainbeginw可以带有可以带有一个参数一个参数,例如,例如mainendw也可以具有也可以具有多个参数多个参数;w参数可以是参数可以是常数、变量、存储单元、指令常数、变量、存储单元、指令(操作码)或它们的一部分(操作码)或它们的一部分,也可以是,也可以是表达表达式式;w宏定义体可以是任何合法的汇编语句,既可宏定义体可以是任何合法的汇编语句,既可以是以是硬指令序列硬指令序列,又可以是,又可以是伪指令序列伪指令序列;14;宏定义;宏定义shlextshlextmacro macro shloprand,shlnumshloprand,shlnumpush push cxcxm
12、ovmov cl,shlnumcl,shlnumshlshl shloprand,clshloprand,clpop pop cxcxendmendm;宏指令宏指令shlextshlext ax,6 ax,6;宏展开宏展开 1 1push push cxcx 1 1movmov cl,06 cl,06 1 1shlshl ax,clax,cl 1 1pop pop cxcx15宏的参数宏的参数 为了宏定义和引用的某些特殊需要,有时为了宏定义和引用的某些特殊需要,有时实参是由字符、空格等特殊符号组成的,因此实参是由字符、空格等特殊符号组成的,因此汇编程序支持几个具有特定含义的运算符。汇编程序支持
13、几个具有特定含义的运算符。1 1连接运算符连接运算符&在宏定义中,如果形式参数与其它字符连接在一在宏定义中,如果形式参数与其它字符连接在一起,或形式参数出现在字符串之中,那么,就起,或形式参数出现在字符串之中,那么,就必须使用连接运算符必须使用连接运算符(&)。在宏指令定义的具体。在宏指令定义的具体使用时,连接操作符使用时,连接操作符&可以在形参的前面,也可可以在形参的前面,也可在形参的后面。在宏指令展开时,对应形参的在形参的后面。在宏指令展开时,对应形参的实参就与它前面或后面的符号连接在一起构成实参就与它前面或后面的符号连接在一起构成一个新的符号。一个新的符号。16;宏定义;宏定义LEAP
14、MACRO COND,LAB J&COND LABENDM;宏调用LEAP Z,THERELEAP NZ,HERE;宏展开JZ THEREJNZ HERE17宏的参数宏的参数2.2.文本操作符文本操作符 文本操作符是一对尖括号文本操作符是一对尖括号,用它括起来的内容,用它括起来的内容将作为一个字符串来进行形式参数的整体替换。将作为一个字符串来进行形式参数的整体替换。在宏引用时,在宏引用时,如果实参内包含逗号、空格等如果实参内包含逗号、空格等间隔符,则必须使用该操作符,间隔符,则必须使用该操作符,以保证实参的完以保证实参的完整性。如果实参是某个具有特殊含义的字符,为整性。如果实参是某个具有特殊含
15、义的字符,为了使它只表示该字符本身,也需要用该运算符括了使它只表示该字符本身,也需要用该运算符括起来。起来。18NUMBERMACROTHEDATADBTHEDATAENDM 假设在程序中调用此宏指令:假设在程序中调用此宏指令:DATA SEGMENT NUMBER DATA ENDS 则宏展开为:则宏展开为:DATA SEGMENT DB 1,3,5 DATA ENDS 如果不加如果不加,则在宏展开为:,则在宏展开为:DB 1 ;而而3,5按规则被忽略按规则被忽略19宏的参数宏的参数3 3 表达式操作符表达式操作符 进行宏调用时,如要在实参中使用进行宏调用时,如要在实参中使用“”,则在宏指令
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 高级 汇编语言 技术
限制150内