将参数传递给宏。结果不同。部件

时间:2017-03-30 23:07:20

标签: assembly parameters macros masm emu8086

以下宏在寄存器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

1 个答案:

答案 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,almov bl,ah由宏组成。宏只插入文本“啊”resp。 “al”,寄存器的值。但是,之前的指令xor ax,axxor bx,bx已经破坏了寄存器的前值。此外,mul bl会破坏任何以前的AX值。