【发布时间】:2016-09-04 20:10:13
【问题描述】:
我有一个正在玩弄的模块化引导加载程序。我觉得将它设置为使用气体比将 nasm 移植到 cmake 更痛苦。似乎并非如此。 NAsm 无法找到包含文件。我错过了什么?
完整代码可以在This Github Repo找到
这是项目布局:
.
├── CMakeLists.txt
└── Failing_module
├── CMakeLists.txt
├── Print.inc
└── Stage1
└── Stage1.asm
./CMakeLists.txt:
cmake_minimum_required(VERSION 3.6)
project(fails C ASM_NASM)
add_subdirectory(Failing_module)
Failing_module/CMakeLists.txt:
enable_language(ASM_NASM)
set(CMAKE_ASM_NASM_OBJECT_FORMAT bin)
set(module_SRCS Stage1/Stage1.asm)
set(CMAKE_NASM_LINK_EXECUTABLE nasm)
add_executable(Stage1.bin ${module_SRCS})
set_target_properties(Stage1.bin PROPERTIES LINKER_LANGUAGE NASM)
install(TARGETS Stage1.bin DESTINATION bin)
Failing_module/Stage1/Stage1.asm:
bits 16
jmp main
%include "Print.inc"
msgHello db "Hello World", 0x00
main:
mov s, msgHello
call Print
Failing_module/Print.inc
Print:
lodsb
or al, al
jz PrintDone
mov ah, 0x0E
int 0x10
jmp Print
PrintDone:
ret
cmake的输出如下:
Failing_module/Stage1/Stage1.asm:6: fatal: unable to open include file `Print.inc'
make[2]: *** [Failing_module/CMakeFiles/Stage1.bin.dir/build.make:63: Failing_module/CMakeFiles/Stage1.bin.dir/Stage1/Stage1.asm.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:86: Failing_module/CMakeFiles/Stage1.bin.dir/all] Error 2
make: *** [Makefile:128: all] Error 2
EDIT 现在应该手动编译。这使它成为 SSCCE
【问题讨论】:
-
您绝对确定确切的文件名
Print.inc专门存在于Failing_module目录中?即使您克服了此错误,您的代码也不会汇编,因为这是无效的mov si "Hello World"。您必须在其中包含Hello World的标签(在您的代码之后)创建一个字节字符串,并将该标签的名称与mov si, hello之类的名称一起使用 -
确定 Print.inc 实际上是这样命名的并且在正确的位置。我写了这个作为例子。我已经通过手动方式编译了实际代码。
-
您确定这是您收到的错误消息而不是其他错误消息吗?您提供的第一个 NASM 文件不可能组装起来,因为它的语法不正确。
-
是的,我确定。 ibin.co/2txJI9WRDEV2.png 完整代码在github上并更新。
-
我正在为此使用 CLion。当我从终端尝试它时,它起作用了......