Ich habe einen modularen Bootloader, mit dem ich spiele. Ich hatte das Gefühl, dass es mehr ein Schmerz sein würde, Gas zu verwenden als nasm zu portieren. Es scheint nicht so zu sein. NAsm kann die Include-Datei nicht finden. Was vermisse ich?Warum kann nasm keine Anweisungen von cmake finden
Der gesamte Code kann hier in This Github Repo
zu finden ist das Projekt Layout:
.
├── 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
Der Ausgang des Cmake ist folgende:
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 Sollte kompilieren mit manuellen Mitteln jetzt. Dies macht es zu einem SSCCE
Sie absolut sicher, dass die genauen Dateinamen 'Print.inc' existieren speziell in' Failing_module' Verzeichnis? Selbst wenn Sie über diesen Fehler hinauskommen, wird Ihr Code nicht zusammengefügt, da dies ungültig ist. Mov si "Hello World". Sie müssen eine Zeichenkette an einer Beschriftung (nach Ihrem Code) mit 'Hallo Welt' darin erstellen und den Namen dieser Beschriftung mit etwas wie' mov si, hallo' verwenden. –
Sicher, dass die Print.inc tatsächlich ist benannte das und an der richtigen Stelle. Ich habe dies als Beispiel geschrieben. Ich habe den tatsächlichen Code durch manuelle Mittel kompilieren lassen. –
Sie sind sicher, dass dies die Fehlermeldung ist, die Sie erhalten, und nicht etwas anderes: Es gibt keine Möglichkeit, dass die erste NASM-Datei, die Sie angegeben haben, zusammengefügt worden wäre, da sie eine falsche Syntax hatte. –