无法使用 NASM、CMake 和 Visual Studio 编译汇编代码

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

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

Visual Studio 中的错误是:

我的CMake项目脚本:

cmake_minimum_required(VERSION 3.27)

project(AssemblyTest LANGUAGES CXX ASM_NASM)


if(CMAKE_ASM_NASM_COMPILER)
    message("NASM is present")
else()
    message("Download NASM")
endif()

set(MY_SOURCES src/hello_world.asm)

add_executable(AssemblyTest ${MY_SOURCES})

我的汇编代码:

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等)运行构建,但仍然没有结果。

UPD1:我尝试直接运行 NASM,当我尝试汇编上面的代码时,它报告了此错误:

hello_world.asm:1: error: parser: instruction expected

UPD2:我的 NASM 版本是

2.16.02rc6
。我要求另一位程序员使用完全相同的参数和 NASM 构建为我组装这段代码,这对他有用。

UPD3:即使下面的程序也无法组装,并出现与

UPD1

中提到的完全相同的错误
section .text
global main
main:
    ret
windows assembly cmake nasm
1个回答
0
投票

已修复

发生错误的原因是源程序集文件采用带 BOM 的 UTF-8 编码。显然 NASM “不喜欢它”,因此将源文件编码更改为 ASCII 解决了这个问题。

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