【问题标题】:I get a macro error in NASM: 'error: parser: instruction expected'我在 NASM 中收到一个宏错误:'错误:解析器:预期指令'
【发布时间】:2018-04-27 18:31:51
【问题描述】:

我不断收到同样的错误:error: parser: instruction expected
我通过以下行收到此错误:

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
  • 请看编辑
  • 请向我们展示整个文件并将其设为minimal reproducible example,而不是点点滴滴。您放置东西的顺序可能是个问题。
  • 例如我希望你的宏在你使用之前出现,否则你会得到一个错误。

标签: assembly x86 nasm x86-16


【解决方案1】:

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

【讨论】:

  • NASM 允许多字节字符常量。 16 位模式下的 NASM 将mov si, 'MESSAGE' 组装成BE 4D 45,并警告word data exceeds bounds [-w+number-overflow]。所以是的,您可以使用带引号的文字字符串作为立即数,但它会为您提供字节(以小端顺序,即SIL = M),而不是地址。
猜你喜欢
  • 2012-07-19
  • 2018-04-15
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 2013-04-05
相关资源
最近更新 更多