ibm-pc汇编语言程序设计(沈美明第二版)第五章高级汇编语言技术_第1页
ibm-pc汇编语言程序设计(沈美明第二版)第五章高级汇编语言技术_第2页
ibm-pc汇编语言程序设计(沈美明第二版)第五章高级汇编语言技术_第3页
ibm-pc汇编语言程序设计(沈美明第二版)第五章高级汇编语言技术_第4页
ibm-pc汇编语言程序设计(沈美明第二版)第五章高级汇编语言技术_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、汇编语言程序设计汇编语言程序设计北京理工大学北京理工大学 电子工程系电子工程系马永锋马永锋编辑ppt第五章第五章 高级汇编语言技术高级汇编语言技术5.1 宏的定义和引用宏的定义和引用5.2 宏参数的特殊运算符宏参数的特殊运算符5.3 与宏有关的伪指令与宏有关的伪指令5.4 重复汇编伪指令重复汇编伪指令5.5 条件汇编伪指令条件汇编伪指令编辑ppt5.1 宏的定义和引用宏的定义和引用 宏宏是用来代表一个具有特定功能的程序段,它只需在源程序中定义一是用来代表一个具有特定功能的程序段,它只需在源程序中定义一次,但可在源程序中引用多次。只要在编写程序时需要它,就可以直接次,但可在源程序中引用多次。只要

2、在编写程序时需要它,就可以直接使用它。使用它。(1)宏的定义)宏的定义 在使用宏之前,必须先定义宏。定义宏一般格式如下:宏名宏名 MACRO 形参形参1, 形参形参2, ;宏的定义体宏的定义体 ENDM 在书写宏定义时,必须遵照下列规定:编辑ppt宏的定义宏的定义 MACRO和ENDM是二个成对出现的关键字,分别表示宏定义的开始和结束; MACRO和ENDM之间的部分是宏的定义体,它是由指令、伪指令或引用其它宏所组成的程序片段,是宏所包含的具体内容; “宏名”是由程序员指定的一个合法的标识符,它代表该宏; 宏名可以与指令助忆符、伪指令名相同。在这种情况下,宏指令优先,而同名的指令或伪指令都失效

3、; 在ENDM的前面不要再写一次宏名,这与段或子程序定义的结束方式不同; 在宏定义的首部可列举若干形式参数(也称哑元),参数之间要用逗号分隔。编辑ppt宏的定义宏的定义例:定义一个把例:定义一个把16位数据寄存器压栈的宏。位数据寄存器压栈的宏。PUSHRMACROPUSHAXPUSHBXPUSHCXPUSHDXENDM例:定义二个字存储变量相加的宏。例:定义二个字存储变量相加的宏。MADDMMACRO OPRD1, OPRD2MOV AX, OPRD2ADD OPRD1, AXENDM编辑ppt(2)宏的引用)宏的引用 在源程序中,一旦定义了某宏,那么,在该程序的任何位置都可直接引用该宏,而不

4、必重复编写相应的程序段。引用宏的一般格式如下:宏名宏名 实参实参1, 实参实参2, 其中:实参的位置要与形参的位置要对应,但实参个数可以与形参个数不相等。当实参的个数多于形参的个数时,多出的实参被忽略;当实参的个数少于形参的个数时,没有实参对应的形参用“空”来对应。 在宏展开时,所得到的指令必须是合法的汇编指令,否则,汇编程序将会给出出错信息。编辑ppt(3)宏参数的传递)宏参数的传递 引用宏时,参数是通过引用宏时,参数是通过“实参实参”替换替换“形参形参”的方式来实现传递的。的方式来实现传递的。参数形式灵活多样,参数可以是常数、寄存器、存储单元和表达式,还参数形式灵活多样,参数可以是常数、寄

5、存器、存储单元和表达式,还可以是指令的操作码。可以是指令的操作码。例:定义二个字存储变量相加和相减的宏。例:定义二个字存储变量相加和相减的宏。方法1:定义二个宏,分别实现存储变量的加操作和减操作MADDM MACRO OPRD1, OPRD2MOVAX, OPRD2ADDOPRD1, AXENDMMSUBM MACRO OPRD1, OPRD2MOVAX, OPRD2SUBOPRD1, AXENDM方法2:定义一个宏,把存储变量的“加”和“减”操作合并在一起MOPMMACRO OP, OPRD1, OPRD2MOVAX, OPRD2OPOPRD1, AXENDM其中:参数OP是一个对应于操作码

6、的形式参数。编辑ppt(4)宏与子程序的区别)宏与子程序的区别宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别:二者之间存在着以下本质的区别:在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;宏引用时,参数是通过“实参”替换“形参”来实现传递的,参数形式灵活多样,而子程序调用时

7、,参数是通过寄存器、堆栈或约定存储单元进行传递的;宏引用语句扩展后,目标程序中就不再有宏引用语句。运行时,不会有额外的时间开销,而子程序调用指令存在于目标程序之中,执行调用指令需要时间。总之,当程序片段不长,速度是关键因素时,可采用宏来简化源程序,但当程序片总之,当程序片段不长,速度是关键因素时,可采用宏来简化源程序,但当程序片段较长,存储空间是关键因素时,可采用子程序来简化源程序和目标程序。段较长,存储空间是关键因素时,可采用子程序来简化源程序和目标程序。编辑ppt5.2 宏参数的特殊运算符宏参数的特殊运算符(1)(1) 连接运算符连接运算符 &在宏定义中,如果形式参数与其它字符连接

8、在一起,或形式参数出现在字符串之中,那么,就必须使用连接运算符连接运算符(&)。例:定义一个转移宏JUMP,其一个参数决定转移类别,另一个参数指定转移目标。宏定义:宏定义:JUMPMACRO COND, here J&CONDhereENDM宏调用:宏调用: JUMP Z, THERE JUMP NZ HERE宏展开:宏展开: + JZ THERE + JNZ HERE编辑ppt宏参数的特殊运算符宏参数的特殊运算符(2)(2)字符串整体传递运算符)字符串整体传递运算符 字符串整体传递运算符是一对尖括号,用它括起来的内容将作为一个字符串来进行形式参数的整体替换。在宏引用时,如果实

9、参内包含逗号、空格等间隔符,则必须使用该操作符,以保证实参的完整性。如果实参是某个具有特殊含义的字符,为了使它只表示该字符本身,也需要用该运算符括起来。 假设有下面定义字符串的宏DEFMSG,DEFMSG MACRO MSG DB &MSG, 0DH, 0AH, $ ENDM 那么,使用和不使用该运算符的引用宏及其宏扩展如下所示:DEFMSG 1 DB Are you ready?, 0DH, 0AH, $ DEFMSG Are you ready?1 DB Are, 0DH, 0AH, $编辑ppt宏参数的特殊运算符宏参数的特殊运算符(3)(3)字符转义运算符)字符转义运算符 在引用

10、宏时,如果实参中含有特殊字符,而又要该特殊字符当作普通字符来出来,那么,就必须在该特殊字符前加上字符转义运算符“!”。DEFMSG 90):1DB Input one number(90):, 0DH, 0AH, $DEFMSG 90):1DB Input one number(90):, 0DH, 0AH, $ 在第一个引用宏的语句中,汇编程序会把第一个“”字符与字符“”字符前面加了字符转义运算符“!”,所以,汇编程序会把第一个“”当作“大于号”字符来处理,而把最后面的字符“”当作是与前面“”相比配的结束符。编辑ppt宏参数的特殊运算符宏参数的特殊运算符(4)(4)计算表达式运算符)计算表达

11、式运算符 在引用宏时,使用计算表达式运算符“%”表示把其后面表达式的结果当作实参进行替换,而不是该表达式的整个式子。DEFMSG %200+23-1001DB 123, 0DH, 0AH, $DEFMSG (200+23-100)1DB (200+23-100), 0DH, 0AH, $ 前者是先计算出表达式200+23-100的值,然后再把该值作为参数进行替换,而后者是把表达式(200+23-100)当作一个字符串来进行参数替换。编辑ppt5.3 与宏有关的伪指令与宏有关的伪指令(1)(1)局部标号伪指令)局部标号伪指令 LOCAL 在宏定义体中,如果存在标号,则该标号要用伪指令LOCAL说

12、明为局部标号,否则,当在源程序中,有多于一次引用该宏时,汇编程序在进行宏扩展后将会给出:标号重复定义的错误。 伪指令LOCAL的一般格式如下:LOCAL 标号1, 标号2, 伪指令LOCAL必须是伪指令MACRO后的第一条语句,在MACRO和LOCAL之间也不允许有注释和分号标志。 汇编程序在每次进行宏扩展时,总是把由LOCAL说明的标号用一个唯一的符号(从?0000到?FFFF)来代替,从而避免标号重定义的错误。编辑ppt与宏有关的伪指令与宏有关的伪指令例:编写求一个求绝对值的宏。解:方法1:ABSMACRO word1CMPword1, 0JGEnextNEGword1next:ENDM

13、假设对宏ABS有以下两次引用,ABSBXABSAL 汇编程序将显示“标号重复定义”的错误,我们需要用下面的方法定义该宏。编辑ppt与宏有关的伪指令与宏有关的伪指令方法2:ABSMACRO word1LOCAL nextCMPword1, 0JGEnextNEGword1next:ENDM假设有下面两次宏ABS的引用,ABSBX汇编程序对它们进行宏扩展时,将得到下列程序片段:ABSBX1CMPBX, 01JGE?00001NEGBX1 ?0000:编辑ppt与宏有关的伪指令与宏有关的伪指令 伪指令LOCAL在子程序中也可起作用,但它的作用与宏定义的作用是不同的,有关该伪指令在子程序和宏定义中功能

14、的主要差异如下表所列。伪指令LOCAL在子程序和宏中的比较在子程序中在宏定义中语句的位置在所有指令之前在所有指令之前伪指令的作用说明局部变量说明局部标号伪指令的格式可用一条伪指令来说明多个局部变量,也可连续用多条伪指令来说明可用一条伪指令来说明多个局部标号,也可连续用多条伪指令来说明调用或引用子程序的不同调用,其局部变量名保持不变在每次宏引用的扩展时,将会自动产生出一个唯一的局部标号编辑ppt与宏有关的伪指令与宏有关的伪指令(2) (2)取消宏定义伪指令)取消宏定义伪指令PURGE 伪指令PURGE的一般格式如下:PURGE宏名宏名1, 宏名宏名2, 该伪指令通知汇编程序取消“宏名1, 宏名2

15、, ”宏名表中的宏定义。 在此语句后,如果还有这些宏的引用语句,则汇编程序不会把它们当作宏引用来进行扩展,并且还将显示出错信息。(3)中止宏扩展伪指令)中止宏扩展伪指令 EXITM伪指令EXITM的一般格式如下:EXITM 该伪指令书写在宏定义体中,用来告诉汇编程序:如果遇到该伪指令,那么,立即中止对该伪指令之下语句的扩展。如果在嵌套的内层宏中遇到了该伪指令,则退出到宏嵌套的外层。 在一般情况下,伪指令EXITM与条件伪指令一起使用,以便在不同的条件下挑选出不同的语句。编辑ppt5.4 重复汇编伪指令重复汇编伪指令 在编写源程序时,有时会出现连续相同或相似的语句(组)。当出现这种情况时,可利用

16、重复伪指令来重复语句,从而达到简化程序的目的。 重复汇编伪指令所定义的重复块是宏的一种特殊形式,也是由伪指令ENDM来结束重复块。用重复汇编伪指令定义的重复块也可带有参数,并在汇编过程中参数被实参代替,但重复块不会被命名,不能在程序的其它地方引用。(1)伪指令)伪指令REPT 伪指令REPT的作用是把一组语句重复指定的次数,该重复次数由伪指令后面的数值表达式来确定。其一般使用格式如下:REPT数值表达式重复的语句组ENDM编辑ppt重复汇编伪指令重复汇编伪指令例:定义例:定义100个初值为个初值为32的字节单元,该存储单元的起始符号地址为的字节单元,该存储单元的起始符号地址为Table。方法1

17、:用伪指令REPT来实现Table LABEL TYPEREPT100DB 32ENDM 上述重复块的汇编结果如下:上述重复块的汇编结果如下:Table LABEL TYPEDB 32DB 32DB 32;上述字节定义重复100次编辑ppt重复汇编伪指令重复汇编伪指令例:定义例:定义100个初值分别为个初值分别为1,2,100的字节单元,该存储单元的起始符的字节单元,该存储单元的起始符号地址为号地址为Table。Table LABEL TYPECOUNT = 1REPT100DB COUNTCOUNT = COUNT + 1ENDM 上述重复块的汇编结果相当于:Table LABEL TYPE

18、DB 1DB 2DB 100编辑ppt重复汇编伪指令重复汇编伪指令例:计算1+2+1000,并把其值存入寄存器AX。方法1:用伪指令REPT来实现MOVAX, 0COUNT = 1REPT1000ADD AX, COUNTCOUNT = COUNT + 1ENDM 上述重复块的汇编结果与下面程序段相一致:MOVAX, 0ADD AX, 1ADD AX, 2ADD AX, 1000 虽然上面这些语句的执行能完成本例所指定的功能,但它是用1000条加法指令来直接计算的,这1000条指令无疑会大大增加目标代码的长度。编辑ppt重复汇编伪指令重复汇编伪指令方法2:用循环指令LOOP来实现MOVAX,

19、0MOVCX, 1000again:ADDAX, CXLOOPagain 伪指令REPT与循环指令起作用的时期和方式是截然不同的,主要差异见下表:伪指令REPT循环指令LOOP起作用的时期汇编程序把源文件翻译成目标文件时期程序的执行时期起作用的方式把被重复的指令(组)直接重复写入目标文件通过反复执行同一指令(组)来实现重复重复次数对目标文件的影响由于重复次数决定着被重复指令(组)写入目标文件的次数,所以,改变重复次数一定会改变目标文件的字节数由于重复的指令数与重复次数无关,所以,改变重复次数不会改变目标文件的字节数编辑ppt重复汇编伪指令重复汇编伪指令 (2)伪指令)伪指令IRP 伪指令IRP

20、的作用是用每个参数创建一组语句,其重复次数由伪指令后面参数表中参数的个数来确定。其一般使用格式如下:IRP形式参数形式参数, 重复的语句组重复的语句组ENDM例:把16位通用寄存器之值相加,并把结果存入寄存器AX。解:由于16位通用寄存器名是一些不同的符号,不能用计数的方法来依次访问它们,所以,我们需要用伪指令IRP来实现。IRPREG, ADD AX, REGENDM编辑ppt重复汇编伪指令重复汇编伪指令 (3) 伪指令伪指令IRPC 伪指令IRPC的作用与IRP相似,其实参表是一个字符串,并对字符串中的每个字符创建一组语句,所以,其重复次数是由该字符串中的字符数来确定。IRPC形式参数,

21、字符串重复的语句组ENDM例:把16位数据寄存器之值相加,并把结果存入寄存器DI。解:由于16位数据寄存器是AX、BX、CX和DX,它们的名称中只有第一个字符不同,所以,可以用伪指令IRPC来实现。XORDI, DIIRPCREG, ABCDADD DI, REG&X;符号&是连接运算符ENDM编辑ppt5.5 条件汇编伪指令条件汇编伪指令(1) 条件汇编伪指令的功能条件汇编伪指令的功能条件汇编伪指令的一般格式如下:IFnnnn条件表达式语句组1ELSE语句组2ENDIF其中:IFnnnn是表伪指令,“”内的语句是可选的。 条件汇编伪指令是在汇编程序把源程序转换成目标程序时起作用,其一般含义是:若条件汇编伪指令后面的“条件表达式”为真,那么,语句组1将被汇编;否则,语句组2将被汇编(如果含有ELSE伪指令)。编辑ppt条件条件汇编伪指令汇编伪指令伪指令含义IF exp若表达式exp的值不为0,则语句组1包含在目

温馨提示

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

评论

0/150

提交评论