在 MASM x86 中使用文本宏 @date 或 @time
using text macros @date or @time in MASM x86
这里的学生:
我想要一种方法来创建一个字符串,其中包含构建的当前 date/time,我可以将其输出到控制台。我有一个 consolOut 逐字符输出字符串(字符串以空结尾),但我不知道如何实际使用我书中列为“符号”的 @date @time 宏并在期间输出字符串集合时间。
如果我将它们放在引号中,它会输出“@date”而不会发生任何变化。如果我不把它放在引号中,它就不会构建。
我是否以某种方式在运行时调用它们,然后使用 mov 将它们存储在 .data 中?我什至如何与他们互动,他们看起来比我的 eax 大?
(这对我的家庭作业来说不是必需的 - 我只是喜欢 headers。)
NULL EQU 0 ;constants(ascii): null == 0
LF EQU 0Ah ;linefeed == LF
CR EQU 0Dh ;carrage return == CR
printHEADER PROC
.data
header byte '<myname> CS 340 ASSEMBLY '
byte @date, ' '
byte @time
byte LF, CR, NULL
.code
lea esi, header
call consolOut ;arguments: esi as string ending in 0
ret
printHEADER endP
MASM 本身或 MASM32 的某个库中可能已经存在用于处理此问题的东西。但是我找不到,所以我自己整理了一个简单的解决方案:
include \masm32\include\masm32rt.inc
NULL EQU 0 ;constants(ascii): null == 0
LF EQU 0Ah ;linefeed == LF
CR EQU 0Dh ;carrage return == CR
; Stringifies a text macro.
; Expands into a quoted expansion of arg.
stringify MACRO arg
LOCAL foo
foo CATSTR <'>,arg,<'>
EXITM foo
ENDM
.data
header byte '<myname> CS 340 ASSEMBLY '
byte stringify(@Date), ' '
byte stringify(@Time)
byte CR, LF, NULL
.code
start:
printf("%s", OFFSET header)
invoke ExitProcess,0
end start
这里的学生:
我想要一种方法来创建一个字符串,其中包含构建的当前 date/time,我可以将其输出到控制台。我有一个 consolOut 逐字符输出字符串(字符串以空结尾),但我不知道如何实际使用我书中列为“符号”的 @date @time 宏并在期间输出字符串集合时间。
如果我将它们放在引号中,它会输出“@date”而不会发生任何变化。如果我不把它放在引号中,它就不会构建。
我是否以某种方式在运行时调用它们,然后使用 mov 将它们存储在 .data 中?我什至如何与他们互动,他们看起来比我的 eax 大?
(这对我的家庭作业来说不是必需的 - 我只是喜欢 headers。)
NULL EQU 0 ;constants(ascii): null == 0
LF EQU 0Ah ;linefeed == LF
CR EQU 0Dh ;carrage return == CR
printHEADER PROC
.data
header byte '<myname> CS 340 ASSEMBLY '
byte @date, ' '
byte @time
byte LF, CR, NULL
.code
lea esi, header
call consolOut ;arguments: esi as string ending in 0
ret
printHEADER endP
MASM 本身或 MASM32 的某个库中可能已经存在用于处理此问题的东西。但是我找不到,所以我自己整理了一个简单的解决方案:
include \masm32\include\masm32rt.inc
NULL EQU 0 ;constants(ascii): null == 0
LF EQU 0Ah ;linefeed == LF
CR EQU 0Dh ;carrage return == CR
; Stringifies a text macro.
; Expands into a quoted expansion of arg.
stringify MACRO arg
LOCAL foo
foo CATSTR <'>,arg,<'>
EXITM foo
ENDM
.data
header byte '<myname> CS 340 ASSEMBLY '
byte stringify(@Date), ' '
byte stringify(@Time)
byte CR, LF, NULL
.code
start:
printf("%s", OFFSET header)
invoke ExitProcess,0
end start