Linke to *.ASM filer sammen?

Tags:    programmering

<< < 12 > >>
Hej allesammen.
Til dem der ved at jeg er igang med et operativ system skrevet i Assembly og C, vil jeg bare lige informere jeg om at jeg er begyndt forfra fordi, at jeg vil have at bootloaderen begynder at udføre en 32-bit stub-kernel som jeg så regner med kan starte udførelsen af C kernen
via endnu et far jump (det skal lige siges at jeg jmp'er til 0x0008:0x1000 hvor kernel.asm ligger, i bootloader.asm når jeg er kommet i protected mode).
Så min plan er altså at linke bootloader.asm sammen med kernel.asm, som så laver endnu et far jump til den egentlige kerne, som er skrevet i C.
Kan det gøres (altså, at linke de to ASM filer sammen)?



Indlæg senest redigeret d. 02.04.2010 09:49 af Bruger #15718
Yes det kan det. Du skal bruge et temporært object format der understøtter relocation. Her vil jeg nok anbefale elf

Hvis du bruger nasm er det bare at tilføje -felf til din commandline

Så for at kunne kalde rutiner i andre assembler filer eller C filer, skal du i filen erklære dem som global. Og for at kunne referere til dem fra en fil så skal de deri deklæres med extern

Lille eksempel:
test1.s
Fold kodeboks ind/udKode 


test2.s
Fold kodeboks ind/udKode 


Kommandoer
Fold kodeboks ind/udKode 




Yes det kan det. Du skal bruge et temporært object format der understøtter relocation. Her vil jeg nok anbefale elf

Hvis du bruger nasm er det bare at tilføje -felf til din commandline

Så for at kunne kalde rutiner i andre assembler filer eller C filer, skal du i filen erklære dem som global. Og for at kunne referere til dem fra en fil så skal de deri deklæres med extern

Lille eksempel:
test1.s
Fold kodeboks ind/udKode 


test2.s
Fold kodeboks ind/udKode 


Kommandoer
Fold kodeboks ind/udKode 

Fungerer disse også på Windows?



Det burde virke for alle nasm binaries, men ld er jo et GNU værktøj, så der skal du huske og danse en sælsom dans før du forsøger :P

Generelt burde det virke med alle binaries du kan finde, men med standard win32 binutils vil outputtet nok kun blive PE-i386-coff. Jeg går ikke ud fra at du har bygget binutils selv?



Det burde virke for alle nasm binaries, men ld er jo et GNU værktøj, så der skal du huske og danse en sælsom dans før du forsøger :P

Generelt burde det virke med alle binaries du kan finde, men med standard win32 binutils vil outputtet nok kun blive PE-i386-coff. Jeg går ikke ud fra at du har bygget binutils selv?

Nåå ja, hvad tænker jeg på.. binært kode er jo platforms uafhængigt..



Øhhm.. følgende kommandoer give mig disse fejl:
Fejl:
Fold kodeboks ind/udKode 

Kommandoer:
Fold kodeboks ind/udKode 




Jeg ville nok anbefale sections og et linker script istedet for at bruge org



Jeg ville nok anbefale sections og et linker script istedet for at bruge org

Du siger altså at jeg skal droppe [org 0x7c00] og [org 0x1000] og istedet placere filerne i hukommelsen via et linkerscript? Hvis dette er korrekt, kan du så ikke vise mig et linkerscript der kan gøre dette, og vise mig hvordan jeg implementerer dette script i kommandoerne? - Da jeg ikke rigtigt ved noget om linkerscripts og da det er svært at finde nogle færdige eksempler som viser processen på Windows..



Indlæg senest redigeret d. 03.04.2010 12:10 af Bruger #15718
Ups, sorry denne kommentar var en fejl.



Indlæg senest redigeret d. 03.04.2010 12:09 af Bruger #15718
Jo

Fold kodeboks ind/udKode 


Fold kodeboks ind/udKode 




Jo

Fold kodeboks ind/udKode 


Fold kodeboks ind/udKode 

Mange tak for linkerscriptet. Nu er der bare det problem at computeren ikke ser output filen som værende bootable længere..
Dette er toppen af bootloader.asm:
Fold kodeboks ind/udKode 

Og dette er toppen af kernel.asm:
Fold kodeboks ind/udKode 

Og dette er build.bat:
Fold kodeboks ind/udKode 

Og link.ld er præcist det du lagde ind ;).



<< < 12 > >>
t