汇编语言程序设计第8章.pptx
《汇编语言程序设计第8章.pptx》由会员分享,可在线阅读,更多相关《汇编语言程序设计第8章.pptx(91页珍藏版)》请在咨信网上搜索。
1、第8章 高级汇编技术第8章 高级汇编技术 8.1 宏汇编宏汇编 8.2 重复汇编和条件汇编重复汇编和条件汇编8.3 汇编语言与高级语言的混合编程汇编语言与高级语言的混合编程 第8章 高级汇编技术8.1 宏汇编宏汇编8.1.1 宏指令的定义、调用和展开宏指令的定义、调用和展开 1宏定义伪指令宏定义伪指令 宏的概念与过程很相似,也是用一个宏名字来代替源程序中经常需要用到的一个程序模块(代码段),宏定义语句格式与过程定义语句格式也相似。格式:宏名 MACRO 形式参数表 ;宏体 ENDM ;宏定义结束 功能:定义一个宏。第8章 高级汇编技术说明:宏名必须是惟一的,它代表着所定义的宏体的内容,在其后面
2、的源程序中,可通过该名字来调用宏。形式参数表是用逗号(或空格,或制表符)分隔的一个或多个形式参数。它是可选项。选用了形式参数时,所定义的宏称为带参数的宏。当调用宏时,需用对应的实际参数去取代,以实现向宏中传递信息。第8章 高级汇编技术 宏体可以是汇编语言所允许的任意指令和伪指令语句序列,它决定了宏的功能。在宏体中还可以定义或调用另一个宏,这就是宏嵌套。宏一经定义,就像为指令系统增加了新的指令一样,在程序中就可像指令一样通过宏名对它进行任意次的调用,故又称为宏指令或宏调用。要注意的是,宏定义必须放在第一条调用它的指令之前,一般都将它放在程序的开头。第8章 高级汇编技术 2宏的调用与展开宏的调用与
3、展开 (1)在汇编语言源程序中,为了使在源程序中不重复书写需要多次使用的程序段,可以用一条宏指令来代替,由汇编程序在汇编时产生所需要的代码。例如,为了实现ASCII码与BCD码之间的相互转换,往往需要把AL中的内容左移4位或右移4位,可以用80 x86的指令来实现。若要左移4位,可用:MOV CL,4 SAL AL,CL第8章 高级汇编技术若要多次使用,就可以用一条宏指令来代替,宏定义是:SHIFT MACRO MOV CL,4 SAL AL,CL ENDM 这样,以后凡要使AL中的内容左移4位,就可以用这条宏指令SHIFT来代替。第8章 高级汇编技术 宏定义中,SHTFT是宏指令名,MACR
4、O是宏定义的定义符,ENDM是宏定义的结束符,这两者必须成对出现。宏汇编一般由可执行的指令语句和管理语句(即由伪指令构成的语句)所构成。经宏定义后,就可以引用宏指令,这称作宏调用。宏汇编程序遇到这样的调用时,就用对应的宏体来代替这条宏指令,以产生目的代码,这称作宏展开。第8章 高级汇编技术 (2)宏定义不但能使源程序的书写简洁,而且由于宏指令具有接收参量的能力,所以功能就更灵活。例如,上述的宏指令只能使AL中的内容左移4位。若每次使用时,要移位的次数不同,或要使不同的寄存器移位,就不方便了。但是,若在宏定义中引入参量,就可以满足上述要求。第8章 高级汇编技术例例8-1 定义满足不同移位次数要求
5、的宏。SHIFT MACRO X MOV CL,X SAL CL,CL ENDM其中,X是一个形式参量(此处用来代表移位次数)。在调用时可把实际要求的移位次数作为实在参量代入。如 SHIFT 4就可以用实在参量4代替在宏定义体中出现的形式参量X,从而实现左移4位的功能。第8章 高级汇编技术又如:SHIFT 6就可以左移6次。这样,就可以由调用时的实在参数来规定任意的移位次数。第8章 高级汇编技术 例例8-2 定义满足使用不同寄存器实现移位要求的宏,可再引入一个形式参量Y。SHIFT MACRO X,Y MOV CL,X SAL Y,CL ENDM用形式参量Y来代替需要移位的寄存器。只要在调用时
6、,把要移位的寄存器作为实在参量代入,就可以对任一个寄存器实现指定的左移次数。SHIFT 4,AL SHIFT 4,BX SHIFT 6,DI第8章 高级汇编技术 在汇编这些宏指令时,分别产生以下指令语句,宏汇编程序在每一条由宏展开产生的指令前冠以加号“+”:+MOV CL,4+SAL AL,CL+MOV CL,4+SAL BX,CL+MOV CL,6+SAL DI,CL 第一条宏指令使AL左移4位;第二条宏指令使16位寄存器BX左移4位;第三条宏指令使DI左移6位。第8章 高级汇编技术 (3)形式参量不仅可以出现在操作数部分,也可以出现在操作码部分。例例8-3 用宏指令定义操作码。SHIFT
7、MACRO X,Y,Z MOV CL,X S&Z Y,CL ENDM 其中第三个形式参量Z代替操作码中的一部分。若在宏定义体中的形式参量没有适当的分隔符,则不被看作为形式参量,调用时也不被实在参量所代替。第8章 高级汇编技术 例如,上例中的操作码部分S&Z中,若Z与S之间没有分隔,则此处的Z就不被看作形式参量。要定义它为形式参量,必须在其前面加上符号&。所以S&Z中Z就被看作是形式参量。若有以下调用:SHIFT 4,AL,AL SHIFT 6,BX,AR SHIFT 8,SI,HR第8章 高级汇编技术在汇编这些宏指令时,分别产生以下指令语句。+MOV CL,4 +SAL AL,CL +MOV
8、CL,6 +SAR BX,CL +MOV CL,8 +SHR SI,CL 这里的SHIFT宏指令可以对任一个寄存器进行任意的移位操作(算术左移、算术右移、逻辑右移、可移任意指定的位数)。第8章 高级汇编技术8.1.2 宏操作符宏操作符 主要的宏操作伪指令有:1)MACRO 格式:宏指令名 MACRO ;宏体 ENDM第8章 高级汇编技术 宏指令名是一个宏定义调用的依据,也是不同宏定义相互区分的标志,是必须要有的。对于宏指令名的规定与对标识符的规定是一致的。宏定义中的形式参量表是任选的,可以没有形式参量,也可以有若干形式参量。若有一个以上的形式参量时,它们之间必须用逗号分隔。对形式参量的规定与对
9、标识符的规定是一致的。形式参量的个数没有限制,只要一行限制在152个字符以内就行。在调用时的实在参量多于1个时,也要用逗号分隔,它们与形式参量在顺序上相对应。但IBM宏汇编并不要求它们在数量上必须一致。若调用时的实在参量多于形式参量,则多余的部分被忽略;若实在参量少于形式参量,则多余的形式参量变为NULL(空)。第8章 高级汇编技术2)PURGE一个宏指令名,可以用伪指令PURGE来取消,然后就可以重新定义。格式:PURGE 宏指令名,功能:取消多个宏定义。第8章 高级汇编技术3)REPT格式:REPT ;指令体 ENDM 功能:重复执行在它的指令体部分所包含的语句。重复执行的次数,由表达式的
10、值所决定。第8章 高级汇编技术例例8-4 X=0 REPT 10 X=X+1 DB X ENDM实现的功能是把1到10分配给10个连续的内存单元。第8章 高级汇编技术4)IRP格式:IRP 形式参量,;指令体 ENDM 功能:重复执行指令体部分所包含的语句,重复的次数由参数表中的参数的个数决定(参数表中的参数必须用两个尖括号括起来,参数间用逗号分隔),且每重复一次,依次用参数表中的参数来代替形式参量。第8章 高级汇编技术例例8-5 IRP X,DB X ENDM 因为参数表中的参数个数为10,故指令体部分重复执行10次。例8-4中的指令体部分只有一条伪指令DB X,其中X为形式参量。在第一次执
11、行时用参数表中的第一个参数1代替形式参量,就为DB 1;第二次执行时,用参数表中的第二个参数2代替形式参量,就为DB 2;所以例8-4也是把1到10分配给10个连续的内存单元。第8章 高级汇编技术5)IRPC格式:IRPC 形式参量,字符串(或);指令体 ENDM 功能:重复执行指令体部分所包含的语句。重复执行的次数,取决于字符串中的字符个数,每次重复时,依次用字符串的字符代替形式参量。IRPC伪指令与IRP伪指令很类似,只是用字符串(此字符串可以包括在两个三角括号中,也可以不包括)代替了IRP指令中的参数表。第8章 高级汇编技术 例例8-6 IRPC X,DB X ENDM实现的功能是:把字
12、符A到F分配给内存中的6个连续单元。以上MACRO、REPT、IRP和IRPC 4个宏定义的伪指令都必须以伪指令ENDM作为它的结束符。第8章 高级汇编技术 有两点需要特别指出:宏定义也可以像程序设计语言中的标准函数一样,构成一个标准函数库,供其他源程序使用。以文件的形式组织若干个宏定义即形成宏程序库。程序设计中使用了宏程序库中的宏定义时,在源程序中应使用INCLUDE伪指令。宏汇编程序在汇编源程序时,当遇到该伪指令,就把INCLUDE伪指令所包含的宏程序库中的文件扫描一遍,如同在程序中使用自己定义的宏一样,在后面的程序中就可以对宏库中的宏定义直接进行宏调用了。第8章 高级汇编技术 与子程序一
13、样,宏定义也可以嵌套。宏定义的嵌套有两种方式:宏定义嵌套和宏定义内嵌套宏调用。在一个宏定义中包含了另一个宏定义,则称为宏定义嵌套;在一个宏定义的宏体内有宏调用,则称为宏定义内嵌套宏调用。在宏定义内嵌套宏调用中,被调用的宏指令必须是已定义的。宏定义嵌套常用于产生一些新的宏定义,而宏定义内嵌套宏调用则可以使宏定义简化,功能单一,便于通过组合的方法实现一个功能较为复杂的宏定义。第8章 高级汇编技术8.1.3 LOCAL伪指令伪指令 如果宏定义中含有变量名或标号,且在同一源程序中又多次被宏调用,那么宏汇编程序在宏展开时,产生多个相同的变量名或标号,这就不能满足变量名和标号在同一程序中必须惟一的要求,从
14、而产生汇编出错,即产生“ERROR A2005:SYMBOL IS MULTIDEFINED”的错误。为达到在宏定义中使用变量名和标号,又能避免这个错误的目的,可在宏定义中使用局部符号伪指令LOCAL对变量名或标号进行说明。第8章 高级汇编技术 格式:LOCAL 功能:对在符号表中的每个符号,在汇编时每扩展一次便建立一个“?XXXX”惟一的符号,保证汇编时生成名字的惟一性。说明:(1)符号表是在宏定义中定义的变量名和标号,多个符号之间用逗号分隔。(2)LOCAL伪指令指定的变量名和标号自动生成格式为“?XXXX”,符号的后四位顺序使用0000FFFF的十六进制数字。第8章 高级汇编技术8.1.
15、4 宏和过程的比较宏和过程的比较 宏和过程都可用来简化源程序,并可使程序多次对它们进行调用,从而使程序结构简洁清晰,符合结构化程序设计风格。因此,对于那些需重复使用的程序模块,既可用过程也可用宏来实现。第8章 高级汇编技术宏和过程的主要区别在于:(1)宏操作可以直接传递和接收参数,它不需通过栈等其他媒介来进行,因此编程比较容易。而过程不能直接带有参数,当过程之间需要传递参数时,必须通过栈、寄存器或存储器来进行,所以相对于宏而言,它的编程要复杂一些。第8章 高级汇编技术 (2)宏调用只能简化源程序的书写,缩短源程序长度,它并没有缩短目标代码的长度,汇编程序处理宏指令时,是把宏体插入到宏调用处,所
16、以目标程序占用内存空间并不因宏操作而减少。而过程(子程序)调用却能缩短目标程序的长度,因为过程在源程序的目标代码中只有一段,无论主程序调用多少次,除了增加CALL和RET指令的代码外,并不增加子程序段代码。(3)引入宏操作并不会在执行目标代码时增加额外的时间开销。相反,过程调用由于需要保护和恢复现场及断点,因而有额外的时间开销,会延长目标程序的执行时间。第8章 高级汇编技术 若在一个源程序中多次调用一段程序,则可用子程序,也可以用宏指令来简化源程序。用子程序的方法,汇编后产生的目标代码少,即目标程序占用的内存空间少,节约内存空间。但是,子程序在执行时,每调用一次都要先保护断点,通常在程序中还要
17、保护现场。同样,在返回时,先要恢复现场,然后恢复断点(返回)。这些操作都额外增加了时间,因而执行时间长,速度慢。而宏指令恰好相反,它的目标程序长,占用的内存单元多,但在执行时不需要保护断点、现场以及恢复、返回等这些额外操作,因而执行时间短,速度快。第8章 高级汇编技术 所以,当要代替的程序段较短,速度是主要矛盾时,通常用宏指令。而当要代替的程序段较长,额外操作所附加的时间不明显,节省存储空间是主要矛盾时,通常用子程序。宏指令是机器的指令系统中没有的,但又可以作为一条指令使用。所以,从形式上看,宏指令扩充了机器的指令系统。第8章 高级汇编技术8.2 重复汇编和条件汇编重复汇编和条件汇编8.2.1
18、 重复汇编重复汇编 在汇编程序设计中,经常要连续地重复相同的或几乎完全相同的代码序列,这时可以使用重复伪指令。1重复伪指令 宏汇编语言提供的重复伪指令包括REPT、IRP、IRPC,其格式、功能及使用说明在8.1.2节中已讲述,这里不再赘述。第8章 高级汇编技术 2重复伪指令应用举例重复伪指令应用举例 例例8-7 使用不同重复伪指令定义10个数据,使其内容分别为0,1,9。第一种方法,使用REPT伪指令:COUNT0 REPT 10 DB COUNT COUNTCOUNT+1 ENDM第8章 高级汇编技术第二种方法,使用IRP伪指令:IRP X,DB X ENDM第三种方法,使用IRPC伪指令
19、:IRPC X 0123456789 DB X ENDM第8章 高级汇编技术以上三种方法具有同样的功能,汇编后产生的代码如下:+DB 0 +DB 1 +DB 2 +DB 3 +DB 4 +DB 5 +DB 6 +DB 7 +DB 8 +DB 9第8章 高级汇编技术例例8-8 下面两条重复伪指令具有相同的功能。(1)IRP指令:IRP REG,POP REG ENDM第8章 高级汇编技术(2)IRPC指令:IRPC R ABCD POP RX ENDM汇编后它们产生的代码如下:+POP AX +POP BX +POP CX +POP DX第8章 高级汇编技术8.2.2 条件汇编条件汇编 条件汇编
20、伪指令可使汇编程序根据某种条件对某部分源程序有选择地进行汇编,在形式上和高级语言中的条件语句类似,但实质不同。条件汇编语句是一种说明性语句,其功能由汇编系统实现;而一般高级语言的条件语句是执行性语句,其功能由目标程序实现。条件汇编语句通常在宏定义中使用,使得宏定义的适用范围更广。一般情况下,使用条件汇编语句可使一个源文件产生几个不同的源程序,它们可有不同的功能。第8章 高级汇编技术格式:IF 条件 语句序列1 ELSE 语句序列2 ENDIF 功能:当条件为真(满足)时执行汇编语句序列1,否则执行汇编语句序列2。第8章 高级汇编技术 说明:“条件”为IF伪指令说明符的一部分,ELSE伪指令及其
21、后面的语句序列2是可选择部分,表示条件为假(不满足)时的情况。如果属于非完全分支的判断,就不用这部分。整个条件汇编最后必须用ENDIF伪指令来结束。语句序列1和语句序列2中的语句是任意的,也可为条件汇编语句。以下5组条件汇编开始语句均可选用ELSE语句,以便汇编条件为假时执行语句序列2,但一个IF语句只能有一个ELSE与之对应。第8章 高级汇编技术1)是0否条件语句 语句有:IF和IFE。IF语句。格式:IF 表达式 功能:表达式值非0,则条件为真,执行汇编语句序列1。IFE语句。格式:IFE 表达式 功能:表达式值为0,则条件为真,执行汇编语句序列1。第8章 高级汇编技术2)扫描1否条件语句
22、 语句有:IF1和IF2。IF1语句。格式:IF1 功能:汇编处于第一次扫描时条件为真。IF2语句。格式:IF2 功能:汇编处于第二次扫描时条件为真。第8章 高级汇编技术3)符号有定义否条件语句语句有:IFDEF和IFNDEF。IFDEF语句。格式:IFDEF 符号 功能:符号已被定义或已由EXTRN伪指令说明,则条件为真。IFNDEF语句。格式:IFNDEF 符号 功能:符号未被定义或未由EXTRN伪指令说明,则条件为真。第8章 高级汇编技术4)空否条件语句语句有:IFB和IFNB。IFB语句。格式:IFB 功能:参数为空格,则条件为真。尖括号不能省略。IFNB语句格式:IFNB 功能:参数
23、不为空格,则条件为真。尖括号不能省略。第8章 高级汇编技术5)字符串比较条件语句语句有:IFIDN和IFDEF。IFIDN语句。格式:IFIDN,功能:字符串1与字符串2相同,则条件为真。第8章 高级汇编技术 IFDIF语句 格式:IFDIF,功能:字符串1与字符串2不相同,则条件为真。说明:这两条语句只能在宏定义中使用,检查传送给两个参数的实参是否相同。例8-9 将输入及输出字符的DOS功能调用放在一个宏定义中,通过判断参数为0还是非0值来选择是执行汇编输入还是输出的DOS功能。第8章 高级汇编技术所编制的程序描述如下,其中含有条件汇编的语句。INOUTMACRO X IF X MOV AH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。