assembly Windows上的NASM在UTF-8源代码的第一行出现错误,无论它是什么:hello.asm:1:error:parser:instruction expected

mcvgt66p  于 5个月前  发布在  Windows
关注(0)|答案(1)|浏览(98)

我正在尝试使用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              ; длина строки


我试着用所有可能的编译器(XNUMX/Release/x86/x64等)运行构建,但仍然没有结果。
我的NASM构建是2.16.02rc6。我让另一个程序员用完全相同的参数和NASM构建为我组装这些代码,它对他有效。
甚至下面的程序也不能被汇编,错误与以前完全相同

section .text
global main
main:
    ret

raogr8fs

raogr8fs1#

程序集源文件以UTF-8 with BOM编码。
NASM不接受BOM,只接受普通的UTF-8或ASCII。
(It不允许非ASCII UTF-8用于标签名称和注解等内容。)
将源文件编码更改为ASCII解决了此问题。

相关问题