The MASM Forum Archive 2004 to 2012

General Forums => The Campus => Topic started by: Kyle on February 19, 2010, 04:06:42 PM

Title: Confused with MASM Macro's
Post by: Kyle on February 19, 2010, 04:06:42 PM
I've been looking over optimized MASM code for sin, cos, etc. I've read into macro's before, and I'm used to seeing the params defined. But for the code from bMath, they don't use the usual format it seems. For example in the following code:

bSin        MACRO
      fist  _tmp1
      mov   edi, _tmp1
      fisub _tmp1             ;  TOS = signed fractional
      rol   edi, 4            ;  now edi is the adjusted
      and   edi, 8            ;   sign index (0 or 8)
      mov   esi, _tmp1
      and   esi, 03ffh
      rol   esi, 3
      sub   esi, edi
      fmul  _bs [esi]
      add   esi, edi
      fadd  _bsin [esi]       ;  Sin(BittiansIn) in TOS
ENDM


I've checked to see where _tmp1, _bs, and _bsin were defined, but I can't find them anywhere in the code. Am I just too C'd and I am misunderstanding something about MASM? Or what am I missing?

For anyone who hasn't ever seen bMath, I attached it. Its from http://www.bmath.net/
Title: Re: Confused with MASM Macro's
Post by: hutch-- on February 19, 2010, 04:14:47 PM
Kyle,

They are probably globals but you can emulate them just by working out the data size.
Title: Re: Confused with MASM Macro's
Post by: BogdanOntanu on February 19, 2010, 05:35:07 PM
A macro is expaned in the middle of the code where it is used (practically insterted with some extra parsing done to match arguments and locals). Hence a macro can make use of adiacent code's defined variables like any other "typed in" code can... if this is the wanted behaviour.

This kind of macro is considered a bad programming style but sometimes it is usefully. And you can do it in C also.
Title: Re: Confused with MASM Macro's
Post by: Kyle on February 19, 2010, 06:28:41 PM
Well I'm guessing theyre DWORD's, but I suppose what I'm really confused about is how params are passed to it since it isn't setup.
Title: Re: Confused with MASM Macro's
Post by: jj2007 on February 19, 2010, 06:46:31 PM
Quote from: Kyle on February 19, 2010, 06:28:41 PM
Well I'm guessing theyre DWORD's, but I suppose what I'm really confused about is how params are passed to it since it isn't setup.

A macro does not necessarily have parameters. It is just an alias for some lines that perform a repetitive task. In this case, as Hutch pointed already out, it works on a number of variables whose names have been defined elsewhere. They can be global or local.
Title: Re: Confused with MASM Macro's
Post by: BogdanOntanu on February 19, 2010, 07:06:40 PM
Quote from: Kyle on February 19, 2010, 06:28:41 PM
Well I'm guessing theyre DWORD's, but I suppose what I'm really confused about is how params are passed to it since it isn't setup.

The macro has NO parameters. Hence no parameters are actually passed to it.

Instead of using parameters the macro makes use of  some varibales already defined in code (this use is by refering to their names).

Of course that those variables (named exactly as the macro expects them) MUST exist when the macro is used but other than this there are no parameters defined.
Title: Re: Confused with MASM Macro's
Post by: MichaelW on February 20, 2010, 03:30:28 AM
Quote from: Kyle on February 19, 2010, 04:06:42 PM
I've checked to see where _tmp1, _bs, and _bsin were defined, but I can't find them anywhere in the code. Am I just too C'd and I am misunderstanding something about MASM? Or what am I missing?

They are defined in Bmath.inc