The MASM Forum

General => The Campus => Topic started by: gelatine1 on October 24, 2015, 07:24:35 AM

Title: retrieve a qword's address in a macro
Post by: gelatine1 on October 24, 2015, 07:24:35 AM
Another macro question... So I created some working code working with real4 (see previous macro posts fom me..) and now I also wanted to created a similar macro for real8. I now have this :


procR8 MACRO prc:REQ,args:VARARG
LOCAL item,txt,temp
txt TEXTEQU <prc>
FOR item, <args>
IF ISFLOAT?(item) ;name says it all.
temp EQU offset <FLT8(item)>
% echo temp
txt CATSTR txt,<,> , <[%temp]> ,<,>, <[%temp+4]> ;Something wrong here
ELSE
txt CATSTR txt,<,> , <item>
ENDIF
    ENDM
%echo <txt>
invoke txt
ENDM



below is the FLT8 macro but it's not so important to read this (just in case..)



gfl_glb_cntr8 = 0
FLT8 MACRO lit:REQ  ;Thanks to qword!
LOCAL lbl

grc_const_found8 = 0
grc_cntr8 = 0
WHILE grc_cntr8 LT gfl_glb_cntr8
% IFIDN <&lit>,<@CatStr(<const_flt8__>,%grc_cntr8)>
grc_const_found8 = -1
EXITM
ENDIF
grc_cntr8 = grc_cntr8 + 1
ENDM
IF grc_const_found8 EQ 0
.const
lbl REAl8 lit
.code
@CatStr(<const_flt8__>,%gfl_glb_cntr8) TEXTEQU <&lit>
@CatStr(<const_flt8_lbl__>,%gfl_glb_cntr8) TEXTEQU <lbl>
gfl_glb_cntr8 = gfl_glb_cntr8 + 1
EXITM <lbl>
ELSE
EXITM @CatStr(<const_flt8_lbl__>,%grc_cntr8)
ENDIF
ENDM


So in the procR8 macro I would like to push the QWord / real8 value onto the stack. Because I read that it is not possible to push 64 bits directly onto the stack I decided to get the address of the real8 value and then use addres,address+4 in the invoke at the end. But clearly the code I have is not getting/using that address in the right way. What would be the correct way to do this ?

thanks in advance (once again..)
Title: Re: retrieve a qword's address in a macro
Post by: qWord on October 26, 2015, 01:25:17 AM
Quote from: gelatine1 on October 24, 2015, 07:24:35 AMtemp EQU offset <FLT8(item)>
RTFM

temp TEXTEQU FLT8(item)
...
push temp[4]
push temp[0]
Title: Re: retrieve a qword's address in a macro
Post by: gelatine1 on October 26, 2015, 10:24:16 PM
Quote from: qWord on October 26, 2015, 01:25:17 AM
RTFM

Thanks, What manual do you suggest ? the following code was what did the trick


temp TEXTEQU FLT8(item)
...
push dword ptr temp[4]
push dword ptr temp[0]
Title: Re: retrieve a qword's address in a macro
Post by: dedndave on October 28, 2015, 01:34:56 AM
he's probably refering to the masm programmers ref manual
which isn't particularly well written in my opinion, but, the info is there if you read it enough times
Title: Re: retrieve a qword's address in a macro
Post by: qWord on October 29, 2015, 12:13:35 AM
The user Shosen from the old board did create PDFs from the original Word Documents (http://www.masmforum.com/board/index.php?topic=5433.45). I did upload the zip file again: MASM_6.1_Manuals_[High_Quality_PDF] (http://www.file-upload.net/download-11002049/MASM_6.1_Manuals_High_Quality_PDF.zip.html)

To learn macro writing, first read Chapter 9 in the Programmer's guide.
If syntax questions come up, also take a look in the MASM Reference (Reference.pdf).
Title: Re: retrieve a qword's address in a macro
Post by: GoneFishing on October 29, 2015, 12:25:12 AM
@Qword:
   Do you have MASM_6.1_Manual_Artworks_[EPS_Format].zip archive that Shosen was refering to in that thread?