Assembly 用于MessageBox中单独行输出的MASM宏

Assembly 用于MessageBox中单独行输出的MASM宏,assembly,x86,masm,masm32,Assembly,X86,Masm,Masm32,现在,我只需对一个变量执行偏移量,即可输出数据。有没有一种方法可以作为一个可重复的宏来执行,我可以使用它3次或更多次,传递不同的文本字符串作为参数 .386 .model flat, stdcall option casemap: none include \masm32\include\masm32rt.inc .data wTitle db 'Result',0 person db "Line1",10 db "Line2",10 db "Line3"

现在,我只需对一个变量执行
偏移量
,即可输出数据。有没有一种方法可以作为一个可重复的宏来执行,我可以使用它3次或更多次,传递不同的文本字符串作为参数

.386
.model flat, stdcall
option casemap: none

include \masm32\include\masm32rt.inc

.data   
wTitle db 'Result',0

person db "Line1",10
       db "Line2",10
       db "Line3",0

.code
start:
  invoke MessageBox,0,offset person,addr wTitle,MB_OK
  invoke ExitProcess,0
end start

我不确定我是否正确理解了您的问题,但如果您想创建一个方便的宏来接受字符串文字,那么您可以这样做:

.686
.model flat, stdcall
option casemap:none

include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\windows.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

Message MACRO title,msg
    LOCAL _szTitle
    LOCAL _szMsg
    .data
    _szTitle db &title&,0
    _szMsg db &msg&,0   
    .code
    invoke MessageBoxA, NULL, ADDR _szMsg ,ADDR _szTitle, MB_OK
ENDM

.code
start:

Message "Title","Hello world!"
invoke ExitProcess,0

end start

非常感谢。问题是关于不同的东西,我想为我想要输出的每一行文本调用一个宏(在一个MessageBox中)。或者,这在控制台中更容易实现。但每次我打印一行时都需要调用它。这是可能的吗?为什么不能有一个带换行符的字符串呢?为什么它必须是多个宏调用?这有点像我的第一个示例所做的,有3个换行符提前生成。但我想找到一种方法来解构一个过程,即稍微推几行,然后从不同的变量逐行推。在这种情况下,听起来您应该首先构建完整的消息字符串(使用
StringCchCatA
或其他什么),然后将该字符串的地址传递到
MessageBox
。如果我尝试在控制台中这样做,也许有办法做到这一点,并暂停控制台,以便我可以看到控制台中的字符串?例如,在宏中调用标准输出三次。我该怎么做?