Затем полученные объектные файлы все вместе линкуются с помощью LD(GNU Linker) и OBJCOPY в единое приложение KolibriOS.
Сейчас используются следующие инструменты:
- uasm32(http://www.terraspace.co.uk/uasm.html)
- tasm32(Turbo Assembler)
- goasm(http://www.godevtool.com/)
- nasm(Netwide Assembler)
- fasm(Flat Assembler)
- as(GNU Assembler)
- c--(SPHINX C-- Compiler)
- bcc32(Borland C++ Compiler)
- dcc32(Borland Delphi Compiler)
- KolibriOS.Lib(можно взять из темы Delphi7 examples http://board.kolibrios.org/viewtopic.php?f=33&t=3469)
Для сборки с помощью LD+OBJCOPY нужны объектные файлы mscoff формата, так как, LD не понимает omf.
Если компилятор\ассемблер не делает mscoff, а делает omf,
то необходимо преобразовать объектные файлы из omf в mscoff, например, с помощью link -edit.
link - это Microsoft (R) Incremental Linker.
Если же у нас не просто omf, а Borland omf, то тогда для преобразования его в Intel omf перед link -edit понадобится ещё утилита omf2d.
Основной файл - test.asm. В нём происходит вызов функций из других файлов.
Функции, которые вызываются, просто возвращают указатель на строку "Hello from ...".
Эта строка затем выводится в консоль.
Если Вы не хотите использовать какой-либо инструмент, то нужно убрать из основного файла test.asm соответствующую строку "PrintHelloFrom(..."
Code: Select all
PrintHelloFrom(UASM)
PrintHelloFrom(TASM)
PrintHelloFrom(GoAsm)
PrintHelloFrom(NASM)
PrintHelloFrom(FASM)
PrintHelloFrom(GAS)
PrintHelloFrom(CMM)
PrintHelloFrom(BCC)
PrintHelloFrom(Delphi)
также необходимо убрать имя соответствующего объектного файла "Hello_..." из параметров линкера
Code: Select all
ld -T LScript.x ^
Test.obj ^
Hello_UASM.obj ^
Hello_TASM.obj ^
Hello_GoAsm.obj ^
Hello_NASM.obj ^
Hello_FASM.obj ^
Hello_GAS.obj ^
Hello_C--.obj ^
Hello_BCC.obj ^
Hello_Delphi.obj^
-o Test.kex ^
-L %KolibriOS% ^
-l KolibriOS
%KolibriOS% - директория, содержащая KolibriOS.lib(проще, как мне кажется, завести переменную среды с именем KolibriOS)
В исходниках можно увидеть, казалось бы, лишний код:
Code: Select all
mov eax, [HelloPtr]
mov edx, Offset Hello
mov [edx], eax
mov eax, [Hello]
Code: Select all
mov eax, Offset Hello
в которых находятся эти символы, были включены линкером в выходной файл.
Этот же пример можно собрать также и для Windows.
Основной файл - Test_Windows.asm. В качестве линкера я использовал GoLink(http://www.godevtool.com/).
Скриншоты(для KolibriOS и Windows):