NASM - The Netwide Assembler

NASM Forum => Using NASM => Topic started by: nobody on August 13, 2009, 03:33:05 PM

Title: nasm macro problems
Post by: nobody on August 13, 2009, 03:33:05 PM
Hi,

im trying to create a multiline macro that takes any number of parameters...
parameters look like  par1:size1, par2:sizre2.... (eg. a:dword, b:qword, c:byte) ... like in %local and %arg
My problem is how to separate the name from the size, i need to know the total size of all the parameters
Title: Re: nasm macro problems
Post by: Frank Kotler on August 13, 2009, 07:26:05 PM
Well, this ain't gonna be pretty! I *think* what you're going to have to do is find the ":", isolate the size with %substr, compare it with "byte" etc. to convert it to a number... and I guess add it into a "sum"... It *may* be that someone has already written a macro to do this, or similar, which would save you a lot of trouble. I don't know where to find such a thing (I'm not much of a macro user).

Suppose you had it... "my_thingy a:dword, b:qword, c:byte", and you added 'em up to get 13. Is this the number you want? Or does the "byte" parameter really need to be a dword? Are you going to want "movzx byte eax, [c]"? Or "movsx" perhaps? Are you going to want to pack multiple "byte" parameters into a dword? This could get hellishly complicated! Think carefully about what you want this macro to do, before you start writing it!

I don't know if it's still true, but some versions of Masm screw it up if you use a "byte" parameter in "invoke". Six (!) bytes on the stack! This suggests "it ain't easy!", to me...

Best,
Frank
Title: Re: nasm macro problems
Post by: nobody on August 13, 2009, 07:49:45 PM
byte counts as 1... so its 13
i tried the thing with strings but nasm says %defstr dont exists (error: unknown preprocessor directive `%defstr') wich i need here...
Title: Re: nasm macro problems
Post by: Frank Kotler on August 13, 2009, 09:29:24 PM
"%defstr" is pretty new - I'm not sure which version, offhand. Grab the latest from:

http://www.nasm.us/ (http://www.nasm.us/)

and I'm pretty sure you'll find it. Hope it helps!

Best,
Frank