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

标签 windows assembly cmake utf-8 nasm

我正在尝试使用 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/

相关文章:

node.js - NodeJs 服务器无法从互联网访问

c - 函数指针局部变量的意外值

c++ - 错误 : ‘asm’ operand has impossible constraints when using gcc 32bit

无法在clion中运行c文件

cmake - CMake 中 ${${arg}} 的含义?

linux - 使用 PowerShell 从 com 端口获取 Linux 设备 IP 地址

Python 检查已完成和失败的任务 Windows 调度程序

windows - Windows中用FOR遍历路径变量

assembly - 带 MASM 的 2 阶段引导加载程序

c++ - 如何在我的项目中从cmake中的同一个项目中获取多个库