Implementation af C kode I Assembly

Tags:    programmering

Jeg har for nylig sluppet af med den irriterende fejl, at min processor genstarter sig selv, da den prøvede at skifte til protected-mode i Assembly.
MEN, min lykke var kort, for da jeg skulle videre med at udføre et hop til en hukommelses-adresse, hvor min C kode til min kerne er blevet loadet ind, crasher CPU'en. IGEN :(.
Jeg bruger Bochs's virtuelle maskine og får følgende fejl besked når jeg kører følgende kode:
Fold kodeboks ind/udKode 

Dette er Assembly koden:
Fold kodeboks ind/udKode 

Dette er main.c:
Fold kodeboks ind/udKode 

video.c:
Fold kodeboks ind/udKode 

ports.c:
Fold kodeboks ind/udKode 

Dette er kommandoerne jeg bruger til at compile:
Fold kodeboks ind/udKode 

Og dette er outputtet, der kommer frem når jeg kører denne *.cmd fil:
Fold kodeboks ind/udKode 

Og det var vidst det hele ;).
Jeg ved godt at der er meget kode og meget tekst men jeg ville stadig sætte STOR pris på hjælp :).



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Problemet er nok at du har undefined references. Derved genererer ld et relocatable object når du ignorerer de fejl.

Derfor kan objcopy åbenbart ikke lave et binært output. Jeg tror at din kernel.bin er fyldt med nuller undtagen "kernel loaded.."

Jeg ville ændre dit compile script til noget ala dette:
Fold kodeboks ind/udKode 


og så ændre din main funktion til at hedde xmain. Problemet med main er at den vil lave magiske funktionskald

Og så skal du huske at loade det rigtige antal sektorer. Hvis du rent faktisk gør det så dokumenter det helst. Det gør det nemmere for andre at debugge



Hvad gør denne linje?

jmp 0x0008:0x01000



Hvad gør denne linje?

jmp 0x0008:0x01000

Den laver et far jump til den hukommelses adresse som min C kode er blevet loadet ind i.



Problemet er nok at du har undefined references. Derved genererer ld et relocatable object når du ignorerer de fejl.

Derfor kan objcopy åbenbart ikke lave et binært output. Jeg tror at din kernel.bin er fyldt med nuller undtagen "kernel loaded.."

Jeg ville ændre dit compile script til noget ala dette:
Fold kodeboks ind/udKode 


og så ændre din main funktion til at hedde xmain. Problemet med main er at den vil lave magiske funktionskald

Og så skal du huske at loade det rigtige antal sektorer. Hvis du rent faktisk gør det så dokumenter det helst. Det gør det nemmere for andre at debugge

Jeg kiggede lige i kernel.bin, og ja, ca. 98% af filen var besat med nuller.
Så jeg omdøbte min main funktion til xmain og brugte dit compiler script.
Det gav mig jo to BIN filer (kernel.bin og bootloader.bin) dem linkede jeg så sammen til en IMG fil med følgende kommando:
Fold kodeboks ind/udKode 

Men nu siger Bochs at den ikke kan genkende min floppy som et bootable device??



Indlæg senest redigeret d. 16.03.2010 13:19 af Bruger #15718
Hvor stor blev den resulterende fil?



Hvor stor blev den resulterende fil?

Jeg har fået det til at virke nu :).. det var fordi at jeg skulle bytte om på kernel.bin og bootloader.bin i den linje hvor jeg lavede min IMG fil. Men mange tak for hjælpen. Du har fået de 200 point.



Indlæg senest redigeret d. 16.03.2010 14:48 af Bruger #15718
t