NASM 不能声明初始化数据 [英] NASM cannot declare initialized data
问题描述
由于某种原因,我无法编译 nasm 程序.如果我尝试将某些内容放入 .data 部分,则会出错:error: 在操作数 1 之后需要逗号
(如果我声明了信号变量),或者错误:解析器:需要指令
如果数组声明.
For some reason I am unable to complie nasm program. If I try to put something in .data section it errors out:
error: comma expected after operand 1
(if I declare signle variable), or
error: parser: instruction expected
if array declared.
我的代码(包括库,声明数据,返回 0 和 ret):
My code (include libs, declare data, return 0 and ret):
%include "../asm64_io/asm64_io.inc"
segment .data
label dw 1000 ; word labeled L2 with initial value 1000
segment .bss
segment .text
global asm_main
asm_main:
enter 0,0
;
mov rax, 0 ; return 0
leave
ret
然后我用
nasm -f elf64 prog.asm -o prog.o
gcc -o prog prog.o ../asm64_io/driver64.o ../asm64_io/asm64_io.o
如果我不使用 asm64 并使用 _start 标签作为入口点,我可以声明.
I can declare if I don't use asm64 and use _start label as entry point.
asm64_io.inc:
asm64_io.inc:
extern read_int, read_string, read_char
extern print_int, print_string, print_char
extern println_int, println_string, println_char, print_nl
extern sub_dump_regs, sub_dump_mem, sub_dump_math, sub_dump_stack
%macro dump_regs 1
push qword %1
call sub_dump_regs
%endmacro
推荐答案
我发现我从手册中复制的文本包含一些不可见的 Unicode 字符,这些字符会弄乱编译器.
I turned out that text I copied from manual had some invisible Unicode characters that messed compiler up.
这篇关于NASM 不能声明初始化数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!