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):

Code: [Select]
#DEFINE CHAR DB
...which is understandable.  Then a few lines later was this:

Code: [Select]
%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:

Code: [Select]
#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.
Code: [Select]
#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:
Code: [Select]
%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!