我正在尝试使用 CMake 为 Windows 11 上的 Visual Studio 生成的项目,通过 NASM 编译汇编代码。
我直接从命令行运行 nasm -f win64
,它报告了与 VS 相同的错误:
hello_world.asm:1: error: parser: instruction expected
我的汇编代码(适用于 32 位 Linux,不适用于 Windows):
section .text
global _start ; необходимо для линкера (ld)
_start: ; сообщает линкеру стартовую точку
mov edx,len ; длина строки
mov ecx,msg ; строка
mov ebx,1 ; дескриптор файла (stdout)
mov eax,4 ; номер системного вызова (sys_write)
int 0x80 ; вызов ядра
mov eax,1 ; номер системного вызова (sys_exit)
int 0x80 ; вызов ядра
section .data
msg db 'Hello, world!', 0xa ; содержимое строки для вывода
len equ $ - msg ; длина строки
我尝试使用所有可能的预设(调试/发布/x86/x64 等)运行构建,但仍然没有结果。
我的 NASM 版本是 2.16.02rc6
。我要求另一位程序员使用完全相同的参数和 NASM 构建为我组装这段代码,这对他来说很有效。
连下面的程序都无法编译,错误和之前一模一样
section .text
global main
main:
ret
最佳答案
程序集源文件以 UTF-8 编码 with BOM .
NASM 不接受 BOM,只接受纯 UTF-8 或 ASCII。
(它确实允许使用非 ASCII UTF-8 来表示标签名称和注释等内容。)
将源文件编码更改为 ASCII 解决了该问题。
关于windows - Windows 上的 NASM 在 UTF-8 源代码的第一行出现错误,无论它是什么 : hello. asm:1: 错误:解析器:需要指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77706205/