Assembly 错误A2094:操作数必须是可重定位的MASM32

Assembly 错误A2094:操作数必须是可重定位的MASM32,assembly,masm32,Assembly,Masm32,代码所做的是调用MessageBox,然后取决于我在eax寄存器中单击YES/NO/CANCEL得到6/7/2。如果我单击“取消”,它将跳到程序的末尾,如果我单击“是”或“否”,它将转到“cond”宏,If ELSE语句位于该宏中。 主要代码: TITLE <Зовнішні процедури> .686 .model flat, stdcall option casemap: none include C:\masm32\include\kernel32.inc include

代码所做的是调用MessageBox,然后取决于我在eax寄存器中单击YES/NO/CANCEL得到6/7/2。如果我单击“取消”,它将跳到程序的末尾,如果我单击“是”或“否”,它将转到“cond”宏,If ELSE语句位于该宏中。 主要代码:

TITLE <Зовнішні процедури>
.686
.model flat, stdcall
option casemap: none
include C:\masm32\include\kernel32.inc
include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
includelib C:\masm32\lib\user32.lib 
includelib C:\masm32\lib\kernel32.lib
include lab51.inc
include lab52.inc
include ifelse.inc

.data
MsgBoxText db "Yes-lab1 No-lab2 Cancel-Exit", 0
MsgBoxCaption db "Вибір", 0

MsgBoxTextLab1 db "Data transfer and modification", 0
MsgBoxCaptionLab1 db "Lab1", 0

MsgBoxTextLab2 db "y=a^4-3b/2d", 0
MsgBoxCaptionLab2 db "Lab2", 0

X dd 32127212h, 43121153h, 21344214h, 0064216340h, 23243245h, 51542145h
Y1 db 12 DUP(0FFh)
Y2 db 12 DUP(0FFh)
Y3 db 12 DUP(0FFh)
Y4 db 12 DUP(0FFh)
sumres dd 0


a SDWORD 3,-2,-4,5,10
b DWORD 5,7,10,15,25
d SDWORD -7,-2,-4,-12,-34
y SWORD 5 DUP (7777h)
td dd 0
res dw 0

cvar db 0


.code

start:
xor eax, eax
INVOKE MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption,\ 
                    MB_YESNOCANCEL+MB_SYSTEMMODAL+MB_ICONQUESTION

cmp eax, 2
je exitp    
sub eax, 6
mov cvar, al
cond cvar    
exitp:
INVOKE ExitProcess, 0 
end start
问题是在调用宏的行中出现了“错误A2094:操作数必须可重定位”。我怎样才能解决这个问题?其他宏中的其他变量没有问题


错误的是,对于初学者来说,当您需要运行时条件时,您使用的是编译时构造,因此无法工作。此外,您还试图将数据放在代码的中间。<代码>。如果是运行CMP或JCC指令的运行时的事情,<代码>如果是像CPP <代码> >的汇编时间指令,如果()是,谢谢您的答复。我的实验室的任务是在宏中使用IFELSE语句,我决定放弃MessageBox的想法,选择使用常量作为宏的参数来编译两个程序。
cond MACRO bo
IF bo eq 0
    labOne offset X, offset Y1, offset Y2, offset Y3, offset Y4, offset sumres
    EXITM
ELSE
    labTwo offset a, offset b, offset d, offset y, offset td, offset res
    EXITM
ENDIF
ENDM