NASM编译报label or instruction expected at start of line错误求助
问题原因
- 核心错误是你使用了NASM的**保留关键字
word**作为自定义数据标签的名称。word是NASM中用于表示16位数据宽度的内置操作符,不允许被用作自定义变量、标签的标识符,这直接触发了三处报错:- 第2行:
word:作为标签开头时,NASM将word识别为关键字而非标签名,因此提示找不到合法的标签或指令 - 第3行:计算
wordlen时引用了非法的word标签,导致表达式语法错误 - 第14行:给
ecx赋值时引用了非法的word标签,同样触发表达式语法错误
- 第2行:
解决方法
将所有代码中自定义的word标签替换为非保留字的名称,例如常用的msg即可。
修改后完整代码
SECTION .data msg: db 'напиши что-нибудь', 10 msglen: EQU $-msg SECTION .bss smth: resb 80 SECTION .text GLOBAL _start _start: mov eax,4 mov ebx,1 mov ecx,msg mov edx,msglen int 80h mov eax,3 mov ebx,0 mov ecx,smth mov edx,80 int 80h mov eax,1 mov ebx,0 int 80h
编译测试说明
这段是32位Linux汇编代码,编译链接需要使用32位参数:nasm -f elf32 lab3-1.asm -o lab3-1.o && ld -m elf_i386 lab3-1.o -o lab3-1
运行生成的可执行文件即可正常输出俄文提示,同时支持读取80字节以内的用户输入。
内容的提问来源于stack exchange,提问作者Qwerty Qwark
相关产品推荐
相关产品推荐

