如何解决在 MASM x86
这里的学生:
我想要一种方法来创建一个包含当前构建日期/时间的字符串,我可以将其输出到控制台。我有一个 consolOut 一个字符一个字符地输出字符串(字符串以空结尾),但我不知道如何实际使用在我的书中列为“符号”的@date @time 宏并在期间输出一个字符串组装时间。
如果我把它们放在引号中,它会不加改变地输出“@date”。如果我不把它放在引号中,它就不会构建。
我是否以某种方式在运行时调用它们,然后使用 mov 将它们存储在 .data 中?我什至如何与他们互动,他们似乎比我的 eax 还大?
(这在我的作业中不是必需的 - 我只是喜欢漂亮的标题。)
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。