首页 > 解决方案 > 用于在 MessageBox 中输出单独行的 MASM 宏

问题描述

现在我只做offset一个变量来输出数据。有没有办法将它作为一个可重复的宏,我可以使用它 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

标签: assemblyx86masmmasm32

解决方案


我不确定我是否正确理解了您的问题,但是如果您想创建一个接受字符串文字的便利宏,那么您可以执行以下操作:

.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

推荐阅读