以下宏在寄存器AX中返回值17 * y + x 但是当我称之为它时会给出不同的结果:
nr 09h 03h
mov ah,09h
mov al,03h
nr ah al
结果应该相同但不是。为什么呢?
nr MACRO x, y
push bx
push ax
xor ax,ax
xor bx,bx
mov al,y
mov bl, 17
mul bl ;ax=17*y
mov bl,x
add ax,bx
pop bx
pop bx
ENDM
答案 0 :(得分:1)
与函数不同,宏只是在源文件中替换 text ,就像你在那里写的一样。
nr ah al
插入源代码:
push bx
push ax
xor ax,ax
xor bx,bx
mov al,al
mov bl, 17
mul bl ;ax=17*y
mov bl,ah
add ax,bx
pop bx
pop bx
mov al,al
和mov bl,ah
由宏组成。宏只插入文本“啊”resp。 “al”,不寄存器的值。但是,之前的指令xor ax,ax
和xor bx,bx
已经破坏了寄存器的前值。此外,mul bl
会破坏任何以前的AX
值。