Assembly NASM无法声明初始化的数据
由于某些原因,我无法完成nasm程序。如果我尝试将某些内容放入.data部分,则会出错: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
错误:操作数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