Assembly 在宏中定义变量会导致同一变量的多个定义
问题是每次宏出现在程序中时,NASM预处理器都会为标签Assembly 在宏中定义变量会导致同一变量的多个定义,assembly,macros,nasm,Assembly,Macros,Nasm,问题是每次宏出现在程序中时,NASM预处理器都会为标签msg发明一个新名称,同一个字符串将有多个定义“Hello,world。”我可以定义没有%%前缀的字符串,但是如果宏将被多次使用,重新定义相同的符号时,我将收到一个汇编错误,msg。那么,如何避免该字符串的多个定义呢?我不确定在宏中添加“hello world”有什么意义。我想你应该想把要打印的文本作为参数传递给宏,不是吗 %macro printhello 0 section .rodata %%msg: db "Hello,
msg
发明一个新名称,同一个字符串将有多个定义“Hello,world。”
我可以定义没有%%
前缀的字符串,但是如果宏将被多次使用,重新定义相同的符号时,我将收到一个汇编错误,msg
。那么,如何避免该字符串的多个定义呢?我不确定在宏中添加“hello world”有什么意义。我想你应该想把要打印的文本作为参数传递给宏,不是吗
%macro printhello 0
section .rodata
%%msg: db "Hello, world.", 10, 0
section .text
push %%msg
call printf
add esp, 4
%endmacro
这是未经测试的,但“类似的东西”
最好的,
弗兰克我不确定我是否明白在宏中添加“hello world”的意义。我想你应该想把要打印的文本作为参数传递给宏,不是吗
%macro printhello 0
section .rodata
%%msg: db "Hello, world.", 10, 0
section .text
push %%msg
call printf
add esp, 4
%endmacro
这是未经测试的,但“类似的东西”
最好的,
弗兰克你可以这样做:
%macro printhello 1
section .rodata
%%msg: db %1, 10, 0
section .text
push %%msg
call printf
add esp, 4
%endmacro
section .text
_start ; (?)
printhello "hello world"
printhello "goodbye cruel world"
你可以这样做:
%macro printhello 1
section .rodata
%%msg: db %1, 10, 0
section .text
push %%msg
call printf
add esp, 4
%endmacro
section .text
_start ; (?)
printhello "hello world"
printhello "goodbye cruel world"
请注意,
section.text
将切换到.text
部分,即使该部分在调用宏时不是活动的部分,可能会破坏周围的代码。请注意,section.text
将切换到.text
部分,即使该部分在调用宏时不是活动的,也可能会破坏周围的代码。