高级汇编语言技术.ppt_第1页
高级汇编语言技术.ppt_第2页
高级汇编语言技术.ppt_第3页
高级汇编语言技术.ppt_第4页
高级汇编语言技术.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第七章 高级汇编语言技术 7.1 宏汇编 7.2 重复汇编 7.3 条件汇编 宏(Macro)是汇编语言的一个特点,它 是与子程序类似又独具特色的另一种简化 源程序的方法 统称宏结构 1 7.1 宏汇编 在汇编语言中,如果在源程序中多次使用 到同一个程序段,则可以将这个程序段定 义成一个“指令”,叫宏指令。 2 w 仅是源程序级的简化:宏 调用在汇编时进行程序语 句的展开,不需要返回; 不减小目标程序,执行速 度没有改变 w 通过形参、实参结合实现 参数传递,简捷直观、灵 活多变 还是目标程序级的简化: 子程序调用在执行时由 CALL指令转向、RET指令返 回;形成的目标代码较短 ,执行速度减慢 需要利用寄存器、存储单 元或堆栈等传递参数 比较 宏子程序 共同点:简化源程序的书写;节省编程的工作量 3 w宏与子程序具有各自的特点,程序员应 该根据具体问题选择使用那种方法 w通常,当程序段较短或要求较快执行时 ,应选用宏;当程序段较长或为减小目 标代码时,要选用子程序 比较 宏子程序 4 7.1 宏汇编 宏:具有宏名的一段汇编语句序列 宏定义时书写 宏指令:这段汇编语句序列的缩写 宏调用时书写 宏展开:宏指令处用这段宏代替的过程 宏汇编时实现 宏的参数功能强大,颇具特色 配合宏,还有宏操作符和有关伪指令 5 一、宏定义 mainbegin MACRO ;定义名为mainbegin的宏,无参数 mov ax,data;宏定义体 mov ds,ax ENDM;宏定义结束 宏名 macro 形参表 宏定义体 endm mainendMACRO retnum;带有形参retnum mov al, 0 mov ah, retnum ;宏定义中使用参数 int 21h ENDM 宏注释符 6 宏调用及其展开 start:mainbegin;宏调用,建立DS内容 mainend 4ch ;宏调用,返回DOS end start 宏名 实参表 w 宏调用的实质是在汇编过程中进行宏展开 w 对于宏来说,先定义,后调用。 w 宏展开的具体过程是:当汇编程序扫描源程序遇 到已有定义的宏调用时,即用相应的宏定义体取代 源程序的宏指令,同时用位置匹配的实参对形参进 行取代 7 宏展开 start:mainbegin;宏指令 1mov ax,data;宏展开 1mov ds,ax mainend 4ch;宏指令 1mov al,0;宏展开 1mov ah,4ch 1int 21h 在汇编时,用宏定义体的代码序 列替代宏指令的过程 8 宏展开 当宏汇编程序扫描到宏指令语句(即宏 调用)时,宏汇编程序就把宏指令定义中宏 体的程序段代码替代宏指令语句。 若是带参数的宏调用,则同时用相应的 实参替代宏体中对应形参的位置,并对原有 宏体代码作修改。 9 宏展开 下面是一个源程序的列表文件,它展示了宏 定义、宏调用和宏展开的全部过程。 在列表文件中,左边带“+”号的指令是宏汇 编程序在宏展开时自动生成的指令。 宏定义本身不生成任何目标代码,宏指令 语句本身也不生成目标代码,它仅表示宏调用 出现的位置。 10 EXCH_MEMMACRO MEM_l,MEM_2,REG MOV REG,MEM_1 XCHG REG,MEM_2 MOV MEM_1,REG ENDM DATA SEGMENT DA_W1 DW 55AAH DA_W2 DW 6688H DATA ENDS CODE SECMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOVAX,DATA MOV DS,AX 11 ;宏调用和宏展开 EXCH_MEM DA_W1,DA_W2,AX ;宏指令语句 + MOV AX ,DA_Wl + XCHG AX,DA_W2 + MOV DA_W1,AX MOV AH,4CH INT 21H CODE ENDS END START 12 子程序调用和宏调用的区别 子程序时在程序执行期间由主程序调 用的,它只占有它自身大小的一个空间 宏调用是在汇编期间展开的,每调用 一次就把宏定义体展开一次,因而它占有 的存储空间与调用次数有关。 13 宏的参数宏的参数 w 可以无参数,例如mainbegin w 可以带有一个参数,例如mainend w 也可以具有多个参数; w 参数可以是常数、变量、存储单元、指令( 操作码)或它们的一部分,也可以是表达式 ; w 宏定义体可以是任何合法的汇编语句,既可 以是硬指令序列,又可以是伪指令序列; 14 ;宏定义 shlextmacro shloprand,shlnum push cx mov cl,shlnum shl shloprand,cl pop cx endm ;宏指令 shlext ax,6 ;宏展开 1push cx 1mov cl,06 1shl ax,cl 1pop cx 15 宏的参数宏的参数 为了宏定义和引用的某些特殊需要,有时 实参是由字符、空格等特殊符号组成的,因此 汇编程序支持几个具有特定含义的运算符。 1连接运算符宏调用 LEAP Z,THERE LEAP NZ,HERE ;宏展开 JZ THERE JNZ HERE 17 宏的参数宏的参数 2. 文本操作符 文本操作符是一对尖括号,用它括起来的内容 将作为一个字符串来进行形式参数的整体替换。 在宏引用时,如果实参内包含逗号、空格等 间隔符,则必须使用该操作符,以保证实参的完 整性。如果实参是某个具有特殊含义的字符,为 了使它只表示该字符本身,也需要用该运算符括 起来。 18 NUMBERMACROTHEDATA DBTHEDATA ENDM 假设在程序中调用此宏指令: DATA SEGMENT NUMBER DATA ENDS 则宏展开为: DATA SEGMENT DB 1,3,5 DATA ENDS 如果不加,则在宏展开为: DB 1 ; 而3,5按规则被忽略 19 宏的参数宏的参数 3 表达式操作符 进行宏调用时,如要在实参中使用“ ”,则在宏指令调用时宏汇编程序将获 取“”后常数表达式的值作为参数,而非 表达式本身。 20 NUMBER MACRO X,Y,Z, DB X,Y,Z ENDM 若宏调用为: I EQU 10 J EQU 50 NUMBER 16,I+J,J-I 则相应的宏展开为: DB 16,60,40 21 宏的参数宏的参数 4字符操作符! 字符操作符!的使用表明,“!”后的字符不 是特殊字符,而是普通字符。这样对于包 含在“”、“!”、“%”之间的文本串 ,汇编程序将能以普通字符处理。如将 “!”作为普通字符,则使用!。 22 例如宏指令定义: DEFIN_ST MACRO STRING DB 等效于db A 1char = char +1 1db char;等效于db B 1char = char +1 . 1db char;等效于db Z 1char = char +1 35 按参数个数重复按参数个数重复 FOR 形参,实参表 重复体 ENDM FOR regad, push regad ENDM 1push ax 1push bx 1push cx 1push dx 36 按参数字符个数重复按参数字符个数重复 FOR 形参,字符串 重复体 ENDM FOR regad,dcba pop 满足,汇编分支语句体1 分支语句体1 ELSE;不满足,汇编分支语句体2 分支语句体2 ENDIF;条件汇编结束 41 条件汇编伪指令 伪指令汇编条件 IF 1在第一遍扫描时,扫视条件语句块 IF 2在第二遍扫描时,扫

温馨提示

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

评论

0/150

提交评论