Assembly 我在NASM中得到一个宏错误:';错误:分析器:应为指令';

Assembly 我在NASM中得到一个宏错误:';错误:分析器:应为指令';,assembly,x86,nasm,x86-16,Assembly,X86,Nasm,X86 16,我一直收到相同的错误:错误:预期的解析器:指令 我通过以下行获得此错误: WSTRING 'MESSAGE' 我的代码是: Bits 16 call clear_screen WSTRING 'MESSAGE' jmp $ %MACRO WSTRING 1 mov si, %1 call print %ENDMACRO 我尝试过这个,但也不起作用: Bits 16 MSG DB 'MESSAGE',0 call clear_scree

我一直收到相同的错误:
错误:预期的解析器:指令

我通过以下行获得此错误:

WSTRING 'MESSAGE'
我的代码是:

Bits 16  
call clear_screen  
WSTRING 'MESSAGE'  
jmp $   

%MACRO WSTRING 1  
     mov si, %1  
     call print  
%ENDMACRO   
我尝试过这个,但也不起作用:

Bits 16
MSG DB 'MESSAGE',0
call clear_screen
WSTRING MSG
jmp $

%MACRO WSTRING 1
    mov si, %1
    call print
%ENDMACRO

不能将文字字符串用作指令的操作数。您只能使用字符串的地址。这意味着,您需要指示汇编程序将该字符串放置在某个位置,然后使用其符号地址

不能将文字字符串用作指令的操作数。您只能使用字符串的地址。这意味着,您需要指示汇编程序将该字符串放置在某个位置,然后使用其符号地址

您可以使用实际的代码而不是宏,然后您将看到这两条指令中的哪一条是错误的。您需要做一些事情,比如在内存中的某个地方使用
msg_str:db“MESSAGE”,0
创建一个变量,然后执行
WSTRING msg_str
请参见编辑请将整个文件显示给我们,并将其设置为,不是零碎的。放置东西的顺序可能是一个问题。例如,我希望宏在使用之前出现,否则会出现错误。您可以使用实际代码而不是宏,然后您将看到这两条指令中的哪一条是错误的。您必须使用
msg\u str:db“MESSAGE”在内存中的某个位置创建一个变量,0
然后执行
WSTRING msg_str
请参见编辑请将整个文件显示给我们,并将其设置为,而不是零碎。放置东西的顺序可能是个问题。例如,我希望宏在使用之前出现,否则会出现错误。NASM允许多字节字符常量。16位模式下的NASM将
mov si,'MESSAGE'
汇编到
BE 4D 45
,并警告
字数据超出界限[-w+数字溢出]
。因此,是的,您可以使用带引号的文字字符串作为立即数,但它提供字节(以小尾端顺序,即
SIL=M
),而不是地址。NASM允许多字节字符常量。16位模式下的NASM将
mov si,'MESSAGE'
汇编到
BE 4D 45
,并警告
字数据超出界限[-w+数字溢出]
。因此,是的,您可以使用带引号的文字字符串作为立即数,但它提供字节(以小尾端顺序,即
SIL=M
),而不是地址。