NASM “错误:操作数后逗号,冒号,装饰或行结束预期”

问题描述:

我在Debian 9.这些都是错误:NASM “错误:操作数后逗号,冒号,装饰或行结束预期”

[email protected]:~/Assembly/sandbox$ nasm -f elf -g -F stabs sandbox.asm 
sandbox.asm:8: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:9: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:11: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:12: error: comma, colon, decorator or end of line expected after operand 

这是代码:

section .data 
section .text 

global _start 

_start: 
    nop 
    mov eax 10 
    mov ebx 12 

    mov eax 1 
    mov ebx 0 
    int 80H 
    nop 

section .bss 

导致这些错误的问题是什么,我该如何解决?

如果我用下面的代码,我修复操作数之间的逗号,我收到了不同的错误:

section .data 
section .text 

    global_start 

_start: 
    nop 
    mov eax,10 
    mov ebx,12 

    mov eax,1 
    mov ebx,0 
    int 80H 
    nop 

section .bss 

我得到的错误是:

sandbox.asm:4: warning: label alone on a line without a colon might be in error 

为什么我得到这个错误,我该如何解决它?

+0

在你描述为“正确”的代码中,有'global_start',这看起来不正确。正如我在答复中所写的那样,它应该是'global _start'。在更正之后,当您尝试编译代码时,是否会遇到同样的错误? –

我假设有缺少空间,它应该是:

在第4行

我也怀疑十六进制常数可能是不正确的格式,因为缺少0前缀

global _start 

,但只要数字以数字开头,应该可以,因为迈克尔佩奇在评论中提及(并根据NASM的文档可在此获得:http://www.nasm.us/doc/nasmdoc3.html)。

+0

我的错误是,我发布了新代码,旧代码在mnemonics.sorry.global _start出错后也缺少逗号。 – Andrea

+1

没有必要在这个'int 080h'前加一个额外的零。 'int 80h'很好。如果第一个数字不在0和9之间,则只需将开头零置于开头。如果数字为A0十六进制,则必须为'0A0h',因为十六进制数字A不在0和9之间。 –

+0

是的,你说得对,我会纠正这一点。 –