File Edit Search View Options He G:asn、MAc.LST multiply macro oprl, opr2, result push dx push ax mov ax, opr1 imul mov result. ax pop dx endm 0000 data segment 0000 0064 var dw 100 gg2??? xyz dw? 0004 data ends de segment 0000 man 上oc assume cs:code ds .data 0000 B8 R mov ax. data 0005 B9 0002 mov cx, 2 0008 BB 0000 ply cx, var, xyz Lbx 000B 5 push ax 900G 50 工11111 push ax mov ax, Cx G00F F7 2E 0000 R inu⊥Uar p8138987ggg2R xyz [bxI, g1758 g19B8 001C CD 4c00 4c0gh int 21h ain endp 001E code ends d start 在LST文件中看到的宏展开情况
6 在LST文件中看到的宏展开情况
宏定义 宏展开 abso MACRo oper LOCAL next cmp var, O cmp oper, 0 jge??0000 1 ned var Ige next 1??0000: neg oper next ENDM 111 cm 宏调用 jge??0001 neg bx absol var 1??0001 absol bx 7
7 例:求绝对值 宏定义: absol MACRO oper LOCAL next cmp oper,0 jge next neg oper next: ENDM 宏调用: …… absol var …… absol bx …… 宏展开: …… 1 cmp var,0 1 jge ??0000 1 neg var 1 ??0000: …… …… 1 cmp bx,0 1 jge ??0001 1 neg bx 1 ??0001: ……
absol macro oper local next cmp oper, g next neg oper next. endm data segment var dw -100 data ends code segment main proc assume cs:code, ds :data mov ax. data mou absol var mov bx-1 absol bx mot 21n cboh main endp code ends end start absol var 0005 83 3E 0000 R g 000A 7D 04 Gge ??0000 000C F7 1E 0000 R 111 neg var 0010 1?70000 0010 BB FFFF mov X, absol bx g138 g16 g18 P FB 90 Jge ??g8g1 001A h02带10a1份操作的宏展开情况
8 带local伪操作的宏展开情况
符号1&符号2 宏展开时合并前后两个符号形成一个符号 注释 宏展开时,后面的注释不予展开。 %表达式 汇编程序将%后面的表达式转换为数字,并在展开期间 用这个数取代哑元
9 宏汇编操作符: & ;; % 符号1 & 符号2 宏展开时,合并前后两个符号形成一个符号。 ;; 注释 宏展开时,;;后面的注释不予展开。 % 表达式 汇编程序将%后面的表达式转换为数字,并在展开期间 用这个数取代哑元
leap macro cond, lab j&cond lab endm 宏调用: 宏展开: leap Z, there jz there leap nz, here inz here
10 leap macro cond,lab j&cond lab endm 宏定义: 宏调用: leap z, there …… leap nz, here 宏展开: 1 jz there …… 1 jnz here