Собственно, есть один кодес на NASM, который я хочу переписать на FASM, но возникли проблемы со знанием самого FASM: Код (ASM): MBOOT_PAGE_ALIGN equ 1 << 0 MBOOT_MEM_INFO equ 1 << 1 MBOOT_HEADER_MAGIC equ 0x1BADB002 MBOOT_HEADER_FLAGS equ (MBOOT_PAGE_ALIGN) | (MBOOT_MEM_INFO) MBOOT_CHECKSUM equ -(MBOOT_HEADER_MAGIC + MBOOT_HEADER_FLAGS) use32 mboot: dd MBOOT_HEADER_MAGIC dd MBOOT_HEADER_FLAGS dd MBOOT_CHECKSUM dd mboot extern go.kernel.Load start: push ebx cli call go.kernel.Load hlt Ругается на строку dd MBOOT_HEADER_FLAGS. Видимо, потому, что препроцессор подставляет вместо equ текст того, что определено выше. go.kernel.Load определен во внешнем объектнике. Вроде, extern я применил правильно. А как экспортировать символы на FASM, чтобы mboot был доступен снаружи? В оригинале есть еще такие строки: Код (ASM): [GLOBAL mboot] [EXTERN code] [EXTERN bss] [EXTERN end] Для чего здесь имена секций указаны как extern? Есть аналог этих директив на FASM?
Ты просто синтаксис цэшный пытаешься на него натянуть, фасм не понимает чего ты от него хочешь. Код (Text): MBOOT_PAGE_ALIGN equ 1 shl 0 MBOOT_MEM_INFO equ 1 shl 1 MBOOT_HEADER_MAGIC equ 0x1BADB002 MBOOT_HEADER_FLAGS equ (MBOOT_PAGE_ALIGN) or (MBOOT_MEM_INFO) MBOOT_CHECKSUM equ -(MBOOT_HEADER_MAGIC + MBOOT_HEADER_FLAGS) --- Сообщение объединено, 24 мар 2019 --- Скорей всего аналог 'section' или 'data', почему extern надо в документации по насму смотреть. Могу предположить только, что global/extern и есть разница между секцией и директорией.
А как на FASM определяются внешние символы? Код (ASM): extrn 'go.kernel.Load' as kernel Компилятор ругается на этот код: illegal instruction Решил проблему: добавил format COFF
"Внешние символы" это импорт? Код (Text): section '.data' data readable writable data import library kernel32,'kernel32.dll' include 'api\kernel32.inc' end data --- Сообщение объединено, 24 мар 2019 --- Так бы и сказал, что нужен объектный файл, не готовый бинарник. У фасма в комплекте есть папка \EXAMPLES, в ней в общих чертах показаны темплейты для разных форматов и нужд.
Какими средствами под виндой можно слинковать несколько объектных файлов, написанных на разных языках, в исполняемый файл и при линковке использовать скрипт линкера? Нужны аналоги make и ld