NASM 不能声明初始化数据 [英] NASM cannot declare initialized data

查看:62
本文介绍了NASM 不能声明初始化数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于某种原因,我无法编译 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆