




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计,北京理工大学电子工程系,马永锋mayongfeng,第五章高级汇编语言技术,5.1宏的定义和引用5.2宏参数的特殊运算符5.3与宏有关的伪指令5.4重复汇编伪指令5.5条件汇编伪指令,5.1宏的定义和引用,宏是用来代表一个具有特定功能的程序段,它只需在源程序中定义一次,但可在源程序中引用多次。只要在编写程序时需要它,就可以直接使用它。,(1)宏的定义,在使用宏之前,必须先定义宏。定义宏一般格式如下:宏名MACRO形参1,形参2,;宏的定义体ENDM在书写宏定义时,必须遵照下列规定:,宏的定义,MACRO和ENDM是二个成对出现的关键字,分别表示宏定义的开始和结束;MACRO和ENDM之间的部分是宏的定义体,它是由指令、伪指令或引用其它宏所组成的程序片段,是宏所包含的具体内容;“宏名”是由程序员指定的一个合法的标识符,它代表该宏;宏名可以与指令助忆符、伪指令名相同。在这种情况下,宏指令优先,而同名的指令或伪指令都失效;在ENDM的前面不要再写一次宏名,这与段或子程序定义的结束方式不同;在宏定义的首部可列举若干形式参数(也称哑元),参数之间要用逗号分隔。,宏的定义,例9.1:定义一个把16位数据寄存器压栈的宏。PUSHRMACROPUSHAXPUSHBXPUSHCXPUSHDXENDM例9.2:定义二个字存储变量相加的宏。MADDMMACROOPRD1,OPRD2MOVAX,OPRD2ADDOPRD1,AXENDM,(2)宏的引用,在源程序中,一旦定义了某宏,那么,在该程序的任何位置都可直接引用该宏,而不必重复编写相应的程序段。引用宏的一般格式如下:宏名实参1,实参2,其中:实参的位置要与形参的位置要对应,但实参个数可以与形参个数不相等。当实参的个数多于形参的个数时,多出的实参被忽略;当实参的个数少于形参的个数时,没有实参对应的形参用“空”来对应。在宏展开时,所得到的指令必须是合法的汇编指令,否则,汇编程序将会给出出错信息。,(3)宏参数的传递,引用宏时,参数是通过“实参”替换“形参”的方式来实现传递的。参数形式灵活多样,参数可以是常数、寄存器、存储单元和表达式,还可以是指令的操作码。例9.3:定义二个字存储变量相加和相减的宏。方法1:定义二个宏,分别实现存储变量的加操作和减操作MADDMMACROOPRD1,OPRD2MOVAX,OPRD2ADDOPRD1,AXENDMMSUBMMACROOPRD1,OPRD2MOVAX,OPRD2SUBOPRD1,AXENDM方法2:定义一个宏,把存储变量的“加”和“减”操作合并在一起MOPMMACROOP,OPRD1,OPRD2MOVAX,OPRD2OPOPRD1,AXENDM其中:参数OP是一个对应于操作码的形式参数。,(4)宏与子程序的区别,宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别:在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;宏引用时,参数是通过“实参”替换“形参”来实现传递的,参数形式灵活多样,而子程序调用时,参数是通过寄存器、堆栈或约定存储单元进行传递的;宏引用语句扩展后,目标程序中就不再有宏引用语句。运行时,不会有额外的时间开销,而子程序调用指令存在于目标程序之中,执行调用指令需要时间。总之,当程序片段不长,速度是关键因素时,可采用宏来简化源程序,但当程序片段较长,存储空间是关键因素时,可采用子程序来简化源程序和目标程序。,5.2宏参数的特殊运算符(1),(1)连接运算符上述字节定义重复100次,重复汇编伪指令,例:定义100个初值分别为1,2,100的字节单元,该存储单元的起始符号地址为Table。TableLABELTYPECOUNT=1REPT100DBCOUNTCOUNT=COUNT+1ENDM上述重复块的汇编结果相当于:TableLABELTYPEDB1DB2DB100,重复汇编伪指令,例:计算1+2+1000,并把其值存入寄存器AX。方法1:用伪指令REPT来实现MOVAX,0COUNT=1REPT1000ADDAX,COUNTCOUNT=COUNT+1ENDM上述重复块的汇编结果与下面程序段相一致:MOVAX,0ADDAX,1ADDAX,2ADDAX,1000虽然上面这些语句的执行能完成本例所指定的功能,但它是用1000条加法指令来直接计算的,这1000条指令无疑会大大增加目标代码的长度。,重复汇编伪指令,方法2:用循环指令LOOP来实现MOVAX,0MOVCX,1000again:ADDAX,CXLOOPagain,伪指令REPT与循环指令起作用的时期和方式是截然不同的,主要差异见下表:,重复汇编伪指令,(2)伪指令IRP伪指令IRP的作用是用每个参数创建一组语句,其重复次数由伪指令后面参数表中参数的个数来确定。其一般使用格式如下:IRP形式参数,重复的语句组ENDM例:把16位通用寄存器之值相加,并把结果存入寄存器AX。解:由于16位通用寄存器名是一些不同的符号,不能用计数的方法来依次访问它们,所以,我们需要用伪指令IRP来实现。IRPREG,ADDAX,REGENDM,重复汇编伪指令,(3)伪指令IRPC伪指令IRPC的作用与IRP相似,其实参表是一个字符串,并对字符串中的每个字符创建一组语句,所以,其重复次数是由该字符串中的字符数来确定。IRPC形式参数,字符串重复的语句组ENDM例:把16位数据寄存器之值相加,并把结果存入寄存器DI。解:由于16位数据寄存器是AX、BX、CX和DX,它们的名称中只有第一个字符不同,所以,可以用伪指令IRPC来实现。XORDI,DIIRPCREG,ABCDADDDI,REG符号当符号DOS不为0时,则使用DOS的功能调用MOVAH,1HINT21HELSE;否则,将使用BIOS的功能调用MOVAH,10HINT16HENDIFENDM在引用宏INPUT时,汇编程序会根据DOS是否为0来生成不同的程序段。,条件汇编伪指令,例
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科研人员联合项目合作协议书范本
- 2025年港口货物仓储佣金结算协议
- 2025年教育资源共享平台合作协议书
- 农业人才培养计划
- 云计算网络拓扑设计指南
- 实验设计全程安全规范
- 体性处洲低惊
- 定量数据分析的基本原理与流程规范
- 地方政府利用外商投资的博弈逻辑与策略优化研究
- 地域通信网性能评估体系构建与实践探究
- 食材配送服务方案投标方案(技术方案)
- JT-T-1180.2-2018交通运输企业安全生产标准化建设基本规范第2部分:道路旅客运输企业
- 中国省市县行政区划
- 快手磁力聚星星选达人认证考试试卷答案
- 一元二次方程-相似三角形-锐角三角函数复习
- 冰皮月饼的制作方法课件
- 在职党员到社区报到登记表“双报到”登记表
- 降低10炉脱硝系统液氨消耗量0
- 地下储藏室产权使用权转让协议
- 高考专题复习:小说专题训练人称的交替使用
- 大数据在高速公路收费稽查打逃方面的应用
评论
0/150
提交评论