NASM - The Netwide Assembler
NASM Forum => Using NASM => Topic started by: nobody on February 13, 2008, 03:56:21 AM
-
Is it possible to redirect nasms out put to a file if used :
..\..\bin\nasm -e %file%.asm -->mac.err ????
I' trying to make use of Nasms preprocessor. This macro does not behave as I expected..
I would like to check what kind of argument I'm passing to the macro
%define string db 'blablah,0
%define val dd 1234
%macro param 1-*
%rep %0
%ifstr %1
%error %1 'is string'
%endif
%ifid %1
%error %1 'is a label'
%endif
%ifnum %1
%error %1 'is a number'
%endif
%else ;this is an error
%error 'empty arg'
%endif
%rotate 1
%endrep
%endmacro
and calling it like:
param Function,'abcd',"efgh",,3,val,dword string
The Output is:
warning: Function 'is a label' ;no label Function defined???
error: abcd ;true
error: efgh ;true
error: 'empty arg' ;true
warning: 3 'is a number' ;true
warning: dword db blahblah 'is a label' ;label is string ?????
could someone help me with this?
Your help is appreeciated
-
Ahhh... I'm not good on macros...
As posted, you've got a missing "'" in string, and a mismatched else... Fixing those, it seems to act more-or-less as expected. Don't expect too much - %ifnum, for example, doesn't recognize "-1" as a number (use "0-1", if you need it).
You should be able to get preprocess-only output from "-e" - weirdly, the errors go to stderr, the rest to stdout, so you may need to do it twice to see it all. I'm not sure it'll help.
It *might* help figure out what's going on if you use something like "mov eax, 'str'"/"mov eax, 'id'"... instead of the "%error" mechanism...
Best,
Frank
-
Thanks Frank for your reply
"Ahhh... I'm not good on macros... ", neither am I
I copied my code rather hastely, so ... typos. As for the else statement, I placed it there to better illustrate what I intended to do. I would like to create a sizeof macro that would give me the size of a passed argument.
I have no problem to compile with the -e option. I also see all the out put on stdout. the reason to send out put to a file was so I could copy the out put and paste it in my post rather tha having to retype it all, just convenience.
What throws me is:
warning: Function 'is a label' ;no label Function defined???
error: abcd ;true
Why the difference of out put, warning: vs error:
Thanks for the suggestion mov eax, 'str'. I will play around with this.
Thanks in advance