汇编语言 课件 第7章_第1页
汇编语言 课件 第7章_第2页
汇编语言 课件 第7章_第3页
汇编语言 课件 第7章_第4页
汇编语言 课件 第7章_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章高级汇编语言技术

讲授要点宏汇编重复汇编条件汇编2/3/202380x86汇编语言程序设计7.1宏汇编

7.1.1宏定义、宏调用与宏展开

1.宏定义宏指令名 MACRO[形式参数表] ... ;宏体 ENDM2.宏调用宏指令名[实参数表]3.宏展开当源程序被汇编时,MASM用相应的宏体取代每个宏调用,并用实参数按位置替换宏定义中的形式参数。2/3/202380x86汇编语言程序设计4.说明在参数的类型与顺序应与宏定义时的形式参数一致。宏展开时,若实参数的个数多于形式参数,则忽略多余的实在参数;若实参数的个数少于形式参数,则多余的形式参数为空。宏定义只是告诉MASM用一个名字来表示一段语句序列,其本身不被汇编。宏指令的参数非常灵活,可以出现在指令的操作数或操作码部分,MASM在宏展开时对参数进行文本替换。宏定义可以写在程序的任何地方,但习惯上总是把宏定义写在程序的最前面。2/3/202380x86汇编语言程序设计【例】参照汇编程序的处理方法,对下面程序中的宏进行展开。back=4CHdosintEQU21HdispchMACROMOVAH,2MOVDL,'*'INT21HENDM2/3/202380x86汇编语言程序设计codeSEGMENTASSUMECS:codemain:dispchdispchMOV AH,backINT dosintcodeENDSEND main2/3/202380x86汇编语言程序设计【解】宏展开后的结果是:+MOV AH,2+MOV DL,'*'+INT 21H+MOV AH,2+MOV DL,'*'+INT 21HMOV AH,4CHINT 21H2/3/202380x86汇编语言程序设计7.1.2与宏有关的伪指令

1.LOCAL伪指令—用来指定宏内局部符号 LOCAL 符号名,...,符号名作用:在宏展开时,MASM将源文件中的所有局部符号统一按出现次序替换为唯一的标识符(??0000~??FFFF),以避免符号的重复定义。

2.EXITM伪指令

用来立即终止宏展开,通常与条件汇编结合使用。MASM忽略EXITM与ENDM之间的所有语句。

2/3/202380x86汇编语言程序设计【例7.16】设有如下宏定义:sumMACROa,bLOCALnextMOVCX,aLEABX,bXORAX,AXnext:ADDAX,[BX]ADDBX,2LOOPnextENDM并已知buf1和buf2是已定义的两个变量,展开下面的宏调用:sum5,buf1sum7,buf22/3/202380x86汇编语言程序设计【解】宏展开结果是:+MOVCX,5+LEABX,buf1+XORAX,AX+??0000:ADDAX,[BX]+ADDBX,2+LOOP??0000+MOVCX,7+LEABX,buf2+XORAX,AX+??0001:ADDAX,[BX]+ADDBX,2+LOOP??00012/3/202380x86汇编语言程序设计7.1.3宏操作符

1.<>

在宏调用时,当实参数包含空格或逗号等间隔符时,必须使用"<"和">"作为参数的定界符。2.&

在宏定义时,当形式参数作为标识符或字符串的一部分时,必须使用&作为分隔符。3.%

当宏调用时,若在实参数中使用%,则MASM将%后常数表达式的值作为参数,而非表达式本身。2/3/202380x86汇编语言程序设计4.!对于包含在<和>之间的文本串,MASM将出现在!之后的特殊字符(<、>、%、"、'和逗号)作为普通字符处理。若将!作为普通字符,则使用!!。!不适用于包含在引号中的字符串。5.;;在宏定义中,以;;开始的宏注释,在宏展开时被忽略。

2/3/202380x86汇编语言程序设计【例】设有宏定义如下:dataMACROp,qv&pDBqENDM以及下面的宏调用:x=1data%x,%xx=x+1data%x,%x其宏展开结果是:1v1DB11v2DB22/3/202380x86汇编语言程序设计7.1.3宏的嵌套定义【例】设某程序中已定义了3个字型变量v1、v2、v3,下面是源程序中的一段,试展开最后一行的宏调用。mm1 MACROx MOVAX,x MULAX ENDM2/3/202380x86汇编语言程序设计mm2MACROa,b,cmm1aMOVBX,AXmm1bADDAX,BXMOVc,AXENDM调用:mm2v1,v2,v32/3/202380x86汇编语言程序设计【解】展开mm2后得到:1mm1v11MOVBX,AX1mm1v21ADDAX,BX1MOVv3,AX其中还含有宏调用,再把两个mm1展开后可得到如下结果: 2MOVAX,v1 2MULAX 1MOVBX,AX 2MOVAX,v2 2MULAX 1ADDAX,BX 1MOVv3,AX2/3/202380x86汇编语言程序设计7.2.4宏指令与过程的区别

在汇编后产生的目标文件中,过程定义依然存在,而宏定义却不复存在。过程调用是在执行时通过CALL指令完成的,而宏调用是在汇编时进行宏展开,被相应宏体所取代。将多次调用的一段代码定义为宏指令,与使用过程相比,其执行速度要快(因为过程需要调用和返回),但目标代码长。宏指令的参数是在汇编时进行形实替换的,而过程的参数是在执行时通过寄存器或堆栈等方式传递的。

2/3/202380x86汇编语言程序设计7.2重汇编

7.2.1重复伪操作1.格式

REPT 数值表达式 ... ;重复体ENDM2.功能

以数值表达式表示的无符号值作为重复次数,连续汇编重复体中的语句。2/3/202380x86汇编语言程序设计【例】前面提到的把1到10的整数作为字节型变量的初值可以用下面的方式编写:x=1REPT10DBxx=x+1ENDM汇编后产生的结果如下:1DB11DB2……1DB91DB102/3/202380x86汇编语言程序设计7.2.2不定重复伪操作

IRP伪操作1.格式

IRP参数名,<参数值,...,参数值> ... ;重复体ENDM2.功能

为<>内的每一项重复一次,每次用相应的参数值取代参数名。3.实例2/3/202380x86汇编语言程序设计【例7.19】把除SP以外的各通用寄存器入栈需要7条PUSH指令,如果用重复汇编可以写成:IRPregs,<AX,BX,CX,DX,SI,DI,BP>PUSHregsENDM汇编后展开的结果是:1PUSHAX1PUSHBX1PUSHCX1PUSHDX1PUSHSI1PUSHDI1PUSHBP2/3/202380x86汇编语言程序设计IRPC伪操作1.格式IRPC 参数名,<字符串> ;包含字符串的<>可以省略 ... ;重复体ENDM2.功能

与IRP不同的是,其重复次数由字符串的长度决定,每次以相应字符取代参数名。

2/3/202380x86汇编语言程序设计重复块可以用在宏定义体内,也可单独使用。重复块没有名字,不能被调用。与宏指令不同的是,重复块未将定义与调用分离。在汇编时,MASM展开遇到的每个重复块。若希望产生可调用的重复块,则可放在宏定义内。重复块是在汇编时处理的。2/3/202380x86汇编语言程序设计7.3条件汇编

条件汇编的作用:根据指定条件来确定是否汇编某些代码,以便在不同操作环境下生成不同的目标代码。条件汇编类似于高级语言的条件编译。条件汇编语句的一般形式如下:

IFxx

表达式 <语句序列1> [ELSE <语句序列2>]

ENDIF2/3/202380x86汇编语言程序设计较常用的条件汇编语句:IF、IFDEF

使用条件汇编的场合与实例:在不同CPU下汇编不同代码。在程序中插入调

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论