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

下载本文档

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

文档简介

4.7 高级汇编语言技术,4.7.1 宏指令 4.7.2 宏指令的使用过程 4.7.3 宏操作符 4.7.4 局部符号伪指令LOCAL 4.7.5 宏库的使用 4.7.6 重复汇编 4.7.7 条件汇编,返回,4.7.1 宏指令,在汇编语言程序设计过程中,可以将具有一定功能,需多次重复使用,且比较短的程序段定义成一条宏指令。 使用宏指令语句可以减少程序书写错误,缩短源程序长度,使源程序编写像高级语言一样清晰、简洁。特别是使用宏库后,可以提高编程效率。,返回本节,4.7.2 宏指令的使用过程,1宏定义 2宏调用 3宏扩展,1宏定义,(1)带参宏定义 宏指令名 MACRO 形参1,形参2, 宏体 ENDM (2)无参宏定义 宏指令 MACRO 宏体 ENDM,2宏调用,格式: 宏指令名 实参1,实参2, 例如:对上面的宏定义的三种调用形式为: PRINT BUF1 PRINT BUF2 PRINT BUF3 ,3宏扩展, + LEA DX,BUF1 + MOV AH,9 + INT 21H + LEA DX,BUF2 + MOV AH,9 + INT 21H, + LEA DX,BUF3 + MOV AH,9 + INT 21H ,例如:上面三次宏调用,其展开的形式为:,返回本节,4.7.3 宏操作符,1文本操作符 【例4.19】在程序中定义大小及初值不同的堆栈段。 可用如下宏定义: DSTACK MACRO A STACK SEGMENT STACK DB A STACK ENDS ENDM,【例4.20】表达符操作%示例。 DATA1 MACRO A, B, C, D DW A, B, C DB D DUP(0) ENDM 如果宏调用为: X=10 Y=20 DATA1 %X+2, 5,%X+Y, %Y-5 DATA1 X+2, 5, X+Y, Y-5,则相应的宏扩展为: + DW 12, 5, 30 + DB 15 DUP(0) + DW X+2, 5, X+Y + DB Y-5 DUP (0),返回本节,4.7.4 局部符号伪指令LOCAL,【例4.21】局部符号伪指令LOCAL应用。 SUM MACRO X,Y LOCAL L MOV CX,X MOV BX,Y MOV AX,0 L: ADD AX,BX INC BX LOOP L ENDM,如果两次调用宏指令如下: SUM 100,1 SUM 50,1 则宏扩展形式为: MOV CX,100 MOV BX,1 MOV AX,0,?0000: ADD AX,BX INC BX LOOP ?0000 MOV CX,50 MOV BX,10 MOV AX,0 ?0001: ADD AX,BX INC BX LOOP ?0001 ,返回本节,4.7.5 宏库的使用,语句格式:INCLUDE 库文件名 假设已建立一名为MACRO.LIB的宏库,其内容如下: INPUT MACRO A LEA DX,A MOV AH,10 ;10号系统功能调用 INT 21H ENDM PRINT MACRO A LEA DX,A MOV AH,9 ;9号系统功能调用 INT 21H ENDM,RETURN MACRO MOV AH,2 MOV DL,0AH INT 21H MOV DL,0DH ;回车换行 INT 21H ENDM OUT2 MACRO A MOV DL,A MOV AH,2 ;2号系统功能调用 INT 21H ENDM,STACK0 MACRO A STACK SEGMENT STACK DB A STACK ENDS ENDM 现要从键盘输入一串字符到系统缓冲区,然后将字符按相反顺序打印,采用调用宏库的办法,其程序如下:,INCLUDE MACRO.LIB STACK0200 DUP (0) ;定义堆栈段 DATA SEGMENT INF01 DB INPUT STRING: INF02 DB OUTPUT STRING: BUFA DB 81 DB ? DB 80 DUP(0),BUFB DB 81 DUP(0) DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX RETURN ;输出回车换行 PRINT INFO1 ;输出字符变量INFO1 代表的字符串 INPUT BUFA ;键盘输入字符中到缓冲区; LEA SI,BUFA+1 MOV CH,0 MOV CL,SI ADD SI,CX LEA DI,BUFB,NEXT: MOV AL,SI MOV DI,AL DEC SI INC DI LOOP NEXT MOV BYTE PTR DI, RETURN ;输出回车换行 PRINT INF02 ;输出的字符串变量INF02代表 PRINT BUFB ;反向输出输入字符串 MOV AH,4CH INT 21H CODE ENDS END START,返回本节,4.7.6 重复汇编,1给定次数的重复汇编伪指令 语句格式:REPT 表达式 重复块 ENDM 功能:宏汇编程序将重复块连续地汇编表达式给定的次数。 2不定次数的重复汇编伪指令,有IRP和IRPC两种伪指令。,【例4.22】,某一源程序需要多次将AX,BX,CX,DX寄存器的内容压入堆栈,则可定义如下宏指令。 PUSHR MACRO IRP REG,AX,BX,CX,DX PUSH REG ENDM ENDM 调用上述宏定义后,将展开成下列语句: + PUSH AX + PUSH BX,+ PUSH CX + PUSH DX 又如: IR PW,1122H,3344H,5566H,7788H DW W ENDM 汇编程序在汇编时将产生语句: + DW 1122H,3344H,5566H,7788H。 (2)IRPC 语句格式:IRPC 形参,字符串 重复块 ENDM,返回本节,4.7.7 条件汇编,条件汇编指在汇编期间,宏汇编程序根据条件是否成立决定具体汇编哪一程序段。条件汇编用条件汇编伪指令来定义。如表4.1所示。 语句格式:IF 表达式 条件块1 ELSE 条件块2 ENDIF,表4.1 条件汇编伪指令,【例4.25】试用条件汇编编写一宏定义,能完成多种DOS系统功能调用。 源程序如下: DOSYS MACRO N,BUF IFE N EXITM ENDIF IFDEF BUF LEA DX,BUF MOV AH,N INT 21H ELSE,MOV AH,N INT 21H ENDIF ENDM ; DATA SEGMENT MSG DB INPUT STRING: BUF DB 81,0,80 DUP(0) DATA ENDS STACK SEGMENT STACK DB 200 DUP(0),STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK BEGIN: MOV AX,DATA MOV DS,AX DOSYS 9,MSG DOSYS 10 ,BUF DOSYS 4CH CODE ENDS END START,*宏指令 宏指令是指程序员事先定义的特定的单一“指令”,是一组重复出现的代码块的缩写。此后在宏指令出现的地方,汇编程序自动地把它们替换成相应定义的代码块。 宏是源程序中一段有独立功能的程序代码。它只需要在源程序中定义一次,就可以多次调用它。 使用宏的好处:简化源程序的编写、传递参数较为灵 活。,1宏指令的定义 宏定义伪指令的格式: 宏名 MACRO 形式参数表 ( 宏定义体 ) ENDM 宏名:在宏指令名语句(宏调用)中引用宏体时使用 的符号名。在整个程序中是唯一的,不能与其 它标号、变量名、常量名等重名。 宏定义体:一个语句序列组成。 形式参数表:宏指令中允许修改的部分,用形参表示。 在宏指令中用实参来取代。,2、宏调用 经宏定义定义后的宏指令就可以在源程序中调用。 调用时只需要有一个宏指令语句就可以了。 宏调用的格式是: macro name 实参表 实参:数字、符号名,宏定义部分本身不在程序的目标代码中。 宏定义可以在程序的任何位置上。通常在源程序的开始处。,3、宏展开 当源程序被汇编时,汇编程序将对每个宏调用作宏展开。宏展开就是将宏体的程序目标代码插入在宏指令语句的位置上,即用宏定义体取代源程序中的宏指令名,而且有实元取代宏定义中的哑元。 实参:数字、符号名 实参与形参的类型一致。 实参与形参的个数相同。 实参个数形参个数:多余的实参自动被略去。 实参个数形参个数:多余的形参自动用“空白串”取代。,下面我们用一个例子来说明宏定义、宏调用和宏展开的情况。 例 用宏指令定义两个字操作数相乘,得到一个16位 的第三个操作数,作为结果宏定义: MULTIPLY MACRO opr1,opr2,RESULT PUSH DX PUSH AX MOV AX,opr1 IMUL opr2 MOV RESULT,AX POP AX POP DX ENDM 宏调用: ,MULTIPLY CX,WORD PTR VAR,XYZBX MULTIPLY 240,BX,SAVE 宏展开: + PUSH DX + PUSH AX + MOV AX,CX + IMUL VAR + MOV XYZBX,AX + POP AX + POP DX + PUSH DX + PUSH AX,+ MOV AX,240 + IMUL BX + MOV SAVE,AX + POP AX + POP DX,2 宏指令举例 例 宏定义可以无变元宏定义: SAVEREG MACRO PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI ENDM,宏调用: SAVEREG 宏展开则将宏定义体的内容全部列出。,EXCHANGE MACRO MEM1,MEM2,REG,宏操作符 1、连接操作符& 2、表达式操作符% 3、文本操作符 4、字符操作符! 5、宏注解符;,LOCAL 伪指令,宏嵌套,宏库,*重复汇编,*条件汇编 汇编程序能根据条件把一段源程序包括在汇编语言程序内或者把它排除在外,这里就用到条件伪操作。条件伪操作的一般格式是: IF argument 自变量满足给定条件汇编此块 ELSE 自变量不满足给定条件汇编此块 ENDIF,自变量必须在汇编程序第一遍扫视后就成为确定的数值,条件伪操作中的表示条件如下: IF expression 汇编程序求出表达式的值,如此值不为0则满足条件 IFE expression 如求出表达式的值为0则满足条件。 IFDEF symbo1 如符号已在程序中定义,或者已用EXTRN伪操作说明该符号是在外部定义的,则满足条件。 IFNDEF symb

温馨提示

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

评论

0/150

提交评论