The MASM Forum

Projects => Rarely Used Projects => GoAsm => Topic started by: satpro on July 13, 2015, 03:25:40 AM

Title: #DEFINE Question
Post by: satpro on July 13, 2015, 03:25:40 AM
I was browsing the GoAsm headers and found this (just a random example):

#DEFINE CHAR DB

...which is understandable.  Then a few lines later was this:

%CHAR STRUCT
    DB
ENDS


My question is:  Are these two related, and if so, why is it (or why would it be) necessary to do this?  Not all defined words are like this.


Also, in C source you often see DWORD, BYTE, etc.  Is it possible to create GoAsm definitions such as:

#DEFINE DWORD DD
#DEFINE WORD DW


...or would it conflict with GoAsm's operation somehow?


Thanks.  I feel like I may have read about this somewhere before but came up empty today (while quickly) looking for it.
Title: Re: #DEFINE Question
Post by: Yuri on July 13, 2015, 04:26:46 AM
No, they are not related. Those with a percent sign are used for the types of local variables in procedure frames. If you have defined a type somewhere, e.g.

#define PTR DD

you can't use PTR in a procedure frame. First because simple local types are specified with a single letter (D, Q, etc), and second because such type defines are not recognized by GoAsm for locals, I don't know why. But you can use structures for them. So you can define the pointer type for locals like this:

%PTR STRUCT
    DD
ENDS

Actually it's already defined that way in the headers.

Yes, you can define WORD and DWORD as well.
Title: Re: #DEFINE Question
Post by: satpro on July 13, 2015, 05:47:57 AM
Thanks a bunch, Yuri!