1 / 29

第七章 高级汇编语言技术

第七章 高级汇编语言技术. 宏汇编 重复汇编 条件汇编. 宏定义和宏调用. 宏 : 源程序中的一段有独立功能的程序代码。在源程序 中定义一次可以多次调用。. 宏定义. 定义格式: 宏名 MACRO [ 哑元参数列表 ] (宏定义体) ENDM MACRO 与 ENDM 是一对伪操作。 宏名的要求: 第一个符号必须是字母。 调用格式: 宏名 实参列表 定义: MULTIPLY MACRO OPR1,OPR2,RESULT PUSH DX PUSH AX

ogden
Download Presentation

第七章 高级汇编语言技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章 高级汇编语言技术 宏汇编 重复汇编 条件汇编

  2. 宏定义和宏调用 宏:源程序中的一段有独立功能的程序代码。在源程序 中定义一次可以多次调用。

  3. 宏定义 定义格式: 宏名 MACRO [哑元参数列表] (宏定义体) ENDM MACRO 与ENDM是一对伪操作。 宏名的要求: 第一个符号必须是字母。 调用格式: 宏名 实参列表 定义:MULTIPLY MACRO OPR1,OPR2,RESULT PUSH DX PUSH AX MOV AX,OPR1 IMUL OPR2 MOV RESULT,AX POP AX POP DX ENDM 调用:MULTIPLY CX,VAR,XXYZ[BX]

  4. 宏展开 PUSH DX PUSH AX MOV AX,CX IMUL VAR MOV XYZ[BX],AX POP AX POP DX

  5. 子程序调用工作方式 Q: ret

  6. 宏调用工作方式

  7. 宏与子程序的区别 A、宏指令是为了简化源程序的书写定义的程序段, 在汇编时汇编程序处理宏指令,将其展开到宏调用处。不会简化目标代码,不节省内存空间。 B、子程序汇编后产生的目标代码少,占用的空间少, 但执行时,每调用一次都要保存断点或现场;返回时恢复现场或断点从而增加的额外的开销,执行时间长、速度慢。

  8. 宏定义中的参数 1、宏定义可以无变元 例:SAVEREG MACRO PUSH AX PUSH BX PUSH DX PUSH SI PUSH DI ENDM 宏调用:SAVEREG

  9. 宏定义中的参数 2、宏定义中变元可以是操作码 例:FOO MACRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM 宏调用:FOO WORD-VAR,INC,AX

  10. 宏定义中的参数 3、宏定义中变元可以是操作码的一部分,但在宏定义体中必须用&作为分隔符 例:LEAP MACRO COND,LAB J&COND LAB ENDM 宏调用:LEAP Z,THERE

  11. 宏定义中的参数 4、宏定义中变元使用%操作符的情况 格式:%expression 含义:汇编程序把跟在%之后的表达式的值转换成当前基数下的数,在展开期间,用这个数来取代哑元。 例:MSG MACRO COUNT,STRING MSG&COUNT DB STRING ENDM ERRMSG MACRO TEXT CNTR=CNTR+1 MSG %CNTR,TEXT ENDM 宏调用:CNTR=0 ERRMSG ‘SYNTAX ERROR’ . . . ERRMSG ‘INVALID OPERAND’

  12. 宏定义中的参数 在MASM6中,可以用:REQ指明某个变元是必须有的 例:DIF MACRO A,B DB B-A ENDM DIF1 MACRO A:REQ,B:REQ DB B-A ENDM DIF2 MACRO A:REQ,B DB B-A ENDM

  13. 宏定义中的参数 在MAST6中,可以用:=为变元提供缺省的参数值 例:DIF3 MACRO A:=<10>,B:=<12> DB B-A ENDM 宏调用:DIF3 DIF 3 5,8 DIF3 5

  14. LOCAL伪指令 LOCAL伪指令:如果宏体中有分支,循环,必然有标号,两次以上调用这样的宏指令必然出现标号重复定义的错误,可以用LOCAL解决这一问题. 格式:LOCAL 标号名表

  15. LOCAL伪指令例子 .486 CRLF MACRO MOV AH,OEH MOV AL,ODH INT 10H MOV AL,0AH INT 10H ENDM

  16. LOCAL伪指令例子 DISP MACRO VAR,NN LOCAL LAST1,LAST2 MOV CH,NN/4 LAST1:MOV CL,4 LAST2:MOV AL,’0’ ROL VAR,1 ADC AL,0 MOV AH,0EH INT 10H DEC CL

  17. LOCAL伪指令例子 JNZ LAST2 MOV AL,’ ‘ INT 10H DEC CH JNZ LAST1 CRLF ENDM

  18. LOCAL伪指令例子 CODE SEGMENT USE16 ASSUME CS:CODE NUM DB 88H BEG:MOV EBX,12345678H DISP BH,8 DISP BX,16 DISP EBX,32 DISP NUM,8 MOV AH,4CH INT21H CODE ENDS END BEG

  19. 在宏定义中使用宏 宏定义中允许使用宏调用,其限制条件是:必须先定义后调用。 例:DIF MACRO X,Y MOV AX,X SUB AX,Y ENDM DIFSQR MACRO OPR1,OPR2,RESULT PUSH DX PUSH AX DIF OPR1,OPR2 IMUL AX MOV RESULT,AX POP AX POP DX ENDM 宏调用:DIFSQR VAR1,VAR2,VAR3

  20. 在宏定义中使用宏 宏定义中包含宏定义 例:DEFMAC MACRO MACNAM,OPERATOR MACNAM MACRO X,Y,Z PUSH MOV AX,X OPERATOR AX,Y MOV Z,AX POP AX ENDM ENDM 宏调用:DEFMAC ADDITION,ADD

  21. 列表伪指令 .XALL:指示清单中只列出产生目标码的宏展开(缺省);.LISTMACROALL(MASM6) .LALL:列出包括注释在内的所有宏展开;(但不列出;;的注释);.LISTMACRO(MASM6) .SALL:不列出任何展开信息;.NOLISTMACRO(MASM6)

  22. 宏库的建立与调用 宏库:将编程中常用的宏定义建立成一个独立的文件,这个只包含若干宏定义的文件可称为宏库。通常用扩展名MAC或INC来表示。 宏库的调用:INCLUDE C:\MACRO.MAC

  23. PURGE 伪操作 格式:PRUGE 宏名[,宏名,…] 含义:删除一个不在使用的宏定义,使该宏定义为空,程序中如果出现了一个已被删除宏定义的宏调用,则汇编程序将不会出错,但它将忽略该宏调用,当然不会展开。

  24. 重复汇编 重复伪操作 格式:REPT 表达式 . . .(重复块) ENDM 含义:将重复块重复表达式这么多次 例:X=0 REPT 10 X=X+1 DB X ENDM

  25. 重复汇编 不定重复伪操作 格式:IRP DUMMY,<ARGUMENT LIST> . . .(重复块) ENDM 含义:把重复块中的代码重复若干次,每次重复把重复块中的哑元用自变量表中的一项来取代,下一次取代下一项,重复次数由自变量个数来确定。自变量表必须用尖括号来括起来,它可以是常数,符号和字符串等。 例:IRP X,<1,2,3,4,5,6,7,8,9,10> DB X ENDM

  26. 条件汇编 IF ;条件成立 … … [ELSE] ;否则 … … ENDIF ;结束条件汇编语句

  27. 条件汇编 IF的形式: IF操作数 ;若OPR≠0时 IFE操作数 ;若OPR=0时 IFDEF标号或变量;如果标号或变量已被定义 IFNDEF标号或变量;如果标号或变量未被定义 IFB〈变量〉 ;若变量为空时 IFNB〈变量〉 ;若变量不为空时 IFIDN〈OPR1〉,〈OPR2〉;若〈OPR1〉=〈OPR2〉 IFDIF〈OPR1〉,〈OPR2〉;若〈OPR1〉≠〈OPR2〉 IF1 ;若汇编程序在第1遍扫描时 IF2 ;若汇编程序在第2遍扫描时

  28. 条件汇编 例: SHIFT MACRO VAR,NN,LR IF LR EQ ‘L’ ROL VAR,NN ELSE ROR VAR,NN ENDIF ENDM

  29. 条件汇编 MOV EBX,12345678H PUSH EBX SHIFT EBX,8,’L’ POP EBX SHIFT EBX,8,’R’

More Related