📄 macros.inc
字号:
ENDIF
.code
IFE issize(udwordvalue, 4)
echo ------------------------
echo udword$ - requires DWORD
echo ------------------------
.ERR
ENDIF
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR udfmt, udwordvalue
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
sdword$ MACRO sdwordvalue:req
;; signed dword
LOCAL buffer, sdtmp
.data?
sdtmp SDWORD ?
buffer BYTE 12 dup(?)
IFNDEF sdfmt
.data
sdfmt BYTE "%ld", 0
ENDIF
.code
IFE issize(sdwordvalue, 4)
echo -------------------------
echo sdword$ - requires SDWORD
echo -------------------------
.ERR
ENDIF
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR sdfmt, sdwordvalue
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
xdword$ MACRO xdwordvalue:req
;; unsigned hex dword
LOCAL buffer, xdtmp
.data?
xdtmp DWORD ?
buffer BYTE 12 dup(?)
IFNDEF xdfmt
.data
xdfmt BYTE "%lX", 0
ENDIF
.code
IFE issize(xdwordvalue, 4)
echo ------------------------
echo xdword$ - requires DWORD
echo ------------------------
.ERR
ENDIF
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR xdfmt, xdwordvalue
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
uqword$ MACRO uqwordvalue:req
;; unsigned qword
LOCAL buffer
.data?
buffer BYTE 24 dup(?)
IFNDEF uqwfmt
.data
uqwfmt BYTE "%I64u", 0
ENDIF
.code
IFE issize(uqwordvalue, 8)
echo ------------------------
echo uqword$ - requires QWORD
echo ------------------------
.ERR
ENDIF
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR uqwfmt, uqwordvalue
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
sqword$ MACRO sqwordvalue:req
;; signed qword
LOCAL buffer
.data?
buffer BYTE 24 dup(?)
IFNDEF sqwfmt
.data
sqwfmt BYTE "%I64d", 0
ENDIF
.code
IFE issize(sqwordvalue, 8)
echo ------------------------
echo sqword$ - requires QWORD
echo ------------------------
.ERR
ENDIF
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR sqwfmt, sqwordvalue
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
xqword$ MACRO xqwordvalue:req
;; unsigned hex qword
LOCAL buffer
.data?
buffer BYTE 20 dup(?)
IFNDEF xqwfmt
.data
xqwfmt BYTE "%I64X", 0
ENDIF
.code
IFE issize(xqwordvalue, 8)
echo ------------------------
echo xqword$ - requires QWORD
echo ------------------------
.ERR
ENDIF
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR xqwfmt, xqwordvalue
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
real4$ MACRO r4value:req
LOCAL buffer, r8value, r4tmp
.data?
r4tmp REAL4 ?
r8value REAL8 ?
buffer BYTE 48 dup(?)
IFNDEF r8fmt
.data
r8fmt BYTE "%lf", 0
ENDIF
.code
IFE issize(r4value, 4)
echo ------------------------
echo real4$ - requires REAL4
echo ------------------------
.ERR
ENDIF
IF isregister(r4value)
push r4value
pop r4tmp
finit
fld r4tmp
ELSE
finit
fld r4value
ENDIF
fstp r8value
fwait
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR r8fmt, r8value
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
real8$ MACRO r8value:req
LOCAL buffer
.data?
buffer BYTE 320 dup(?)
IFNDEF r8fmt
.data
r8fmt BYTE "%lf", 0
ENDIF
.code
IFE issize(r8value, 8)
echo ------------------------
echo real8$ - requires REAL8
echo ------------------------
.ERR
ENDIF
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR r8fmt, r8value
EXITM <OFFSET buffer>
ENDM
; ----------------------------------------------
real10$ MACRO r10value:req
LOCAL buffer, r8value
.data?
r8value REAL8 ?
buffer BYTE 320 dup(?)
IFNDEF r8fmt
.data
r8fmt BYTE "%lf", 0
ENDIF
.code
IFE issize(r10value, 10)
echo -------------------------
echo real10$ - requires REAL10
echo -------------------------
.ERR
ENDIF
fld r10value
fstp r8value
fwait
mov buffer[0], 0
invoke crt_sprintf, ADDR buffer, ADDR r8fmt, r8value
EXITM <OFFSET buffer>
ENDM
; ------------------------
; sscanf conversion macros
; ------------------------
a2ub MACRO pStr:req
LOCAL ub
.data
ub BYTE 0
IFNDEF ubfmt
.const
ubfmt BYTE "%hhu",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR ubfmt, ADDR ub
EXITM <OFFSET ub>
ENDM
;---------------------------------------
a2sb MACRO pStr:req
LOCAL sb
.data
sb SBYTE 0
IFNDEF sbfmt
.const
sbfmt BYTE "%hhd",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR sbfmt, ADDR sb
EXITM <OFFSET sb>
ENDM
;---------------------------------------
h2ub MACRO pStr:req
LOCAL ub
.data
ub BYTE 0
IFNDEF xbfmt
.const
xbfmt BYTE "%hhX",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR xbfmt, ADDR ub
EXITM <OFFSET ub>
ENDM
;---------------------------------------
a2uw MACRO pStr:req
LOCAL uw
.data
uw WORD 0
IFNDEF uwfmt
.const
uwfmt BYTE "%hu",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR uwfmt, ADDR uw
EXITM <OFFSET uw>
ENDM
;---------------------------------------
a2sw MACRO pStr:req
LOCAL sw
.data
sw SWORD 0
IFNDEF swfmt
.const
swfmt BYTE "%hd",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR swfmt, ADDR sw
EXITM <OFFSET sw>
ENDM
;---------------------------------------
h2uw MACRO pStr:req
LOCAL uw
.data
uw WORD 0
IFNDEF xwfmt
.const
xwfmt BYTE "%hX",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR xwfmt, ADDR uw
EXITM <OFFSET uw>
ENDM
;---------------------------------------
a2ud MACRO pStr:req
LOCAL ud
.data
ud DWORD 0
IFNDEF udfmt
.const
udfmt BYTE "%u",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR udfmt, ADDR ud
EXITM <OFFSET ud>
ENDM
;---------------------------------------
a2sd MACRO pStr:req
LOCAL sd
.data
sd SDWORD 0
IFNDEF sdfmt
.const
sdfmt BYTE "%d",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR sdfmt, ADDR sd
EXITM <OFFSET sd>
ENDM
;---------------------------------------
h2ud MACRO pStr:req
LOCAL ud
.data
ud DWORD 0
IFNDEF xdfmt
.const
xdfmt BYTE "%X",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR xdfmt, ADDR ud
EXITM <OFFSET ud>
ENDM
;---------------------------------------
a2uq MACRO pStr:req
LOCAL uq
.data
align 8
uq QWORD 0
IFNDEF uqfmt
.const
uqfmt BYTE "%I64u",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR uqfmt, ADDR uq
EXITM <OFFSET uq>
ENDM
;---------------------------------------
a2sq MACRO pStr:req
LOCAL sq
.data
align 8
sq QWORD ?
IFNDEF sqfmt
.const
sqfmt BYTE "%I64d",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR sqfmt, ADDR sq
EXITM <OFFSET sq>
ENDM
;-------------------------------------------
h2uq MACRO pStr:req
LOCAL uq
.data
align 8
uq QWORD 0
IFNDEF xqfmt
.const
xqfmt BYTE "%I64X",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR xqfmt, ADDR uq
EXITM <OFFSET uq>
ENDM
;---------------------------------------
a2r4 MACRO pStr:req
LOCAL r4
.data
r4 REAL4 0.0
IFNDEF r4fmt
.const
r4fmt BYTE "%f",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR r4fmt, ADDR r4
EXITM <OFFSET r4>
ENDM
;-------------------------------------------
a2r8 MACRO pStr:req
LOCAL r8
.data
align 8
r8 REAL8 0.0
IFNDEF r8fmt
.const
r8fmt BYTE "%lf",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR r8fmt, ADDR r8
EXITM <OFFSET r8>
ENDM
;--------------------------------------------
a2r10 MACRO pStr:req
LOCAL r8, r10
.data
align 16
r10 REAL10 0.0
r8 REAL8 0.0
IFNDEF r8fmt
.data
r8fmt BYTE "%lf",0
ENDIF
.code
invoke crt_sscanf, pStr, ADDR r8fmt, ADDR r8
finit
fld r8
fstp r10
EXITM <OFFSET r10>
ENDM
;--------------------------------------------
; ******************************************************
; BASIC style conversions from string to 32 bit integer
; ******************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -