汇编语言-宏令.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言-宏令

本章学习要点: (1)宏汇编 (2)重复汇编 (3)条件汇编 一、宏、宏汇编 宏是计算机软件系统中一个广泛存在的概念。从办公软件OFFICE到程序开发语言C等等,可以把某项要操作的某一个过程定义为宏。 具体到在汇编语言中,宏也是汇编的主要特点之一,它是与子程序类似但又独具特色的另外一种简化源程序的方法。 (一)宏指令的定义和使用 宏指令在使用之前要先定义,其格式一般如下: 宏指令名 MACRO [形式参数表] ;参数的另外一个名称变元 ……(宏定义体) ENDM 可选的形式参数表可由若干参数组成,各形参间用逗号分隔。 例如,把通过DOS的1功能调用从键盘读入一个字符的程序片段定义为一个宏: GETCH MACRO MOV AH , 1 INT 21H ;从键盘键入一个字符时,该字符存入AL ENDM 在定义宏指令后,就可以通过宏指令来表示对应的程序片段,这成为宏调用。其格式为: 宏指令名 [实参表] 在对源程序汇编时,汇编程序把程序中的宏指令替换成对应的宏定义体,这称为宏展开或宏扩展。如: …… …. GETCH 对应为 --- MOV AH , 1 …… INT 21H … 尽管都实现了调用,但是宏调用和子程序的调用是有差别的: 宏调用更多地是表示一种替换! (二)宏指令的用途 1. 缩短源代码 2. 扩充指令集 3. 更改某些指令助记符的意义 (宏指令的优先级高于指令和伪指令) (三)宏指令中参数的使用 宏指令可以不带参数,但往往带有参数的宏指令更具灵活性。 1. 指令的参数可以是常数、寄存器和存储单元,还可以是表达式。 例: MOV CL , 4 SAL AL , CL 如上述代码要多次使用,就可以定义为: SHIFT MACRO MOV CL , 4 SAL AL , CL ENDM 但是,如果每次的移位次数不同了,则可定义为: SHIFT MACRO X ;X为参数 MOV CL , X SAL AL , CL ENDM 这是,调用方式可为: SHIFT 4 ;移4位 SHIFT 6 ;移6位,显然,有参数时使用起来更灵活。 2. 宏指令的参数可以是操作码 例如:有下面的宏定义: MANDM MACRO OPR , X , Y MOV AX , X OPR AX , Y MOV X , AX ENDM 该宏定义的意思是????? 改宏被调用和展开的时候,意义就明确了。如: MANDM MOV , [BX] , [SI] MANDM ADD , [BX] , ES:[1234H] 参数还可以是操作码的一部分: SHIFT MACRO X , Y , Z MOV CL , X SZ Y , CL ;起符号连接作用 ENDM 调用:SHIFT 4 , AL , AL 展开为: MOV CL , 4 ;4为参数X SAL AL , CL ;第1个“AL”为参数Z,第2个“AL”为参数Y 该宏的调用方式还可以是: “SHIFT 6 , BX , AR” 或 “SHIFT 8 , SI , HR ”等等。 3. 宏调用参数个数可以与定义时不一致 正常情况下,宏调用时使用的实参个数应该与宏定义时的形参个数一致,但汇编程序并不要求他们它们必须相等。 若实参个数多于形参个数,那么多余的实参被忽略; 若实参个数少于形参的个数,那么多余的形参用“空”代替。 4. 两个特殊的宏运算符 (1)强迫替换运算符 在宏定义中,若参数在其它字符的紧前或紧后,或者参数出现在带引号的字符串中时,就必须使用该运算符,以区分参数。 例:在下面宏指令JUMP中,参数CON作为操作码一部分。 JUMP MACRO CON , LAB JCON LAB ENDM 则调用时,JUMP NZ HEAR - JNZ HEAR JUMP Z , THERE - JZ THERE 例:在下面宏指令MSGGEN中,两个参数合并成一个标号,一个参数用在字符串中。 MSGGEN MACRO LAB , NUM , XYZ LABNUM DB ‘HELLO MR.XYZ’ , 0DH , 0AH , 24H MSGGEN 则调用 MSGGEN MS

文档评论(0)

173****7830 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档