Макрос MASM для вывода отдельных строк в MessageBox - PullRequest
0 голосов
/ 08 апреля 2020

Теперь я просто делаю 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

1 Ответ

1 голос
/ 08 апреля 2020

Я не уверен, правильно ли я понял ваш вопрос, но если вы хотите создать вспомогательный макрос, который принимает строковые литералы, то вы можете сделать что-то вроде этого:

.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
...