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
为什么我得到这个错误,我该如何解决它?
我假设有缺少空间,它应该是:
在第4行我也怀疑十六进制常数可能是不正确的格式,因为缺少0
前缀
global _start
,但只要数字以数字开头,应该可以,因为迈克尔佩奇在评论中提及(并根据NASM的文档可在此获得:http://www.nasm.us/doc/nasmdoc3.html)。
我的错误是,我发布了新代码,旧代码在mnemonics.sorry.global _start出错后也缺少逗号。 – Andrea
没有必要在这个'int 080h'前加一个额外的零。 'int 80h'很好。如果第一个数字不在0和9之间,则只需将开头零置于开头。如果数字为A0十六进制,则必须为'0A0h',因为十六进制数字A不在0和9之间。 –
是的,你说得对,我会纠正这一点。 –
在你描述为“正确”的代码中,有'global_start',这看起来不正确。正如我在答复中所写的那样,它应该是'global _start'。在更正之后,当您尝试编译代码时,是否会遇到同样的错误? –