Windows 上的 NASM 在 UTF-8 源代码的第一行出现错误,无论它是什么:hello.asm:1: 错误:解析器:预期指令

问题描述 投票:0回答:1

我正在尝试使用 CMake 为 Windows 11 上的 Visual Studio 生成的项目,通过 NASM 编译汇编代码。

我直接从命令行运行 NASM,它报告与 VS 或 CMake 相同的错误:

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
windows assembly cmake utf-8 nasm
1个回答
1
投票

汇编源文件采用UTF-8编码,带有BOM
NASM 不接受 BOM,只接受纯 UTF-8 或 ASCII。
(它确实允许使用非 ASCII UTF-8 来表示标签名称和注释等内容。)

将源文件编码更改为 ASCII 解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.