【问题标题】:using text macros @date or @time in MASM x86在 MASM x86 中使用文本宏 @date 或 @time
【发布时间】:2021-05-25 06:43:18
【问题描述】:

这里的学生:

我想要一种方法来创建一个包含当前构建日期/时间的字符串,我可以将其输出到控制台。我有一个 consolOut,它逐个字符地输出字符串(字符串以 null 结尾),但我不知道如何实际使用我书中列出的 @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

【问题讨论】:

    标签: assembly x86 masm masm32


    【解决方案1】:

    可能在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-30
      • 2023-03-09
      • 1970-01-01
      • 2014-11-24
      • 2020-02-11
      • 2016-07-08
      • 1970-01-01
      相关资源
      最近更新 更多