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
。如果我尝试在控制台中这样做,也许有办法做到这一点,并暂停控制台,以便我可以看到控制台中的字符串?例如,在宏中调用标准输出三次。我该怎么做?