Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly NASM无法声明初始化的数据_Assembly_Nasm_X86 64 - Fatal编程技术网

Assembly NASM无法声明初始化的数据

Assembly NASM无法声明初始化的数据,assembly,nasm,x86-64,Assembly,Nasm,X86 64,由于某些原因,我无法完成nasm程序。如果我尝试将某些内容放入.data部分,则会出错: 错误:操作数1后应为逗号(如果我声明了单变量),或 错误:如果声明了数组,则需要解析器:指令 我的代码(包括libs、声明数据、返回0和ret): 然后我用 nasm -f elf64 prog.asm -o prog.o gcc -o prog prog.o ../asm64_io/driver64.o ../asm64_io/asm64_io.o 如果我不使用asm64并使用_star

由于某些原因,我无法完成nasm程序。如果我尝试将某些内容放入.data部分,则会出错:
错误:操作数1后应为逗号(如果我声明了单变量),或
错误:如果声明了数组,则需要解析器:指令

我的代码(包括libs、声明数据、返回0和ret):

然后我用

    nasm -f elf64 prog.asm -o prog.o
    gcc -o prog prog.o ../asm64_io/driver64.o ../asm64_io/asm64_io.o
如果我不使用asm64并使用_startlabel作为入口点,我可以声明

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字符,使编译器混乱。

我发现我从手册中复制的文本有一些不可见的Unicode字符,使编译器混乱。

是否尝试了除
标签
以外的标签名称?这可能是一个关键字或已定义为宏。此外,不要使用
enter
指令;真的很慢。(除非你以牺牲其他一切为代价优化代码大小,而且你不能忽略帧指针。但你显然没有这样做,因为你没有有效地使用xor eax,eax
将RAX归零)@PeterCordes我只是想学习nasm。其他名称不会改变任何内容。我将您的源代码(不带
%include
行)复制粘贴到
foo.asm
。它与
nasm-felf64-Worphan labels-g-Fdwarf foo.asm
组合得很好。这不是一个好主意;您发布的代码不会产生您描述的错误。错误在哪一行?如果你省略了
%include
,它会消失吗?你在这个问题中显示的代码就是你计算机上出现故障的代码吗?您是否可能声明了一个包含单引号的字符串?是否尝试了
标签
以外的标签名称?这可能是一个关键字或已定义为宏。此外,不要使用
enter
指令;真的很慢。(除非你以牺牲其他一切为代价优化代码大小,而且你不能忽略帧指针。但你显然没有这样做,因为你没有有效地使用xor eax,eax
将RAX归零)@PeterCordes我只是想学习nasm。其他名称不会改变任何内容。我将您的源代码(不带
%include
行)复制粘贴到
foo.asm
。它与
nasm-felf64-Worphan labels-g-Fdwarf foo.asm
组合得很好。这不是一个好主意;您发布的代码不会产生您描述的错误。错误在哪一行?如果你省略了
%include
,它会消失吗?你在这个问题中显示的代码就是你计算机上出现故障的代码吗?您是否可能声明了一个包含单引号的字符串?FWIW、NASM、MASM、YASM等通常称为汇编程序,而不是编译器。FWIW、NASM、MASM、YASM等通常称为汇编程序,而不是编译器。
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