Gå til innhold

Kjerneuavhennig C++? Bootloader?


Anbefalte innlegg

Eg veit godt at det ikkje går ann å lage ein bootloader utan ASM, men går det ann å bruke C++ med ASM-koden internt? Og korleis skulle ein kompilert det då? :hmm:

 

Eit eksempel:

// Ingen inkludering av standard bibliotek sidan dei ofte er avhennige av kjerne

void loadBoot() {
   asm {
     ; Bootloading
   }//asm
}//end loadBoot

void consolePrint(char &text) {
   asm {
       mov si, &text
       mov ah, 4
       int 21h
   }//end asm
}//end consolePrint

int main() {
   loadBoot();
   consolePrint("Welcome to floppy :)");
   return 0;
}//end main

Er dette mogleg? :hmm:

Endret av knuto
Lenke til kommentar
Videoannonse
Annonse

Den print-rutina funker hvertfall ikke. Kan ikke kalle interrupt 21h uten at den er satt opp...

 

EDIT: en bootloader kan sikkert like enkelt skrives i assembly. Snekra sammen en:

 

	org 7C00h
jmp start

tekst db "Hei, dette er en bootloader (som ikke gjør noe)",0

start:
mov si, tekst

print:
mov al, [si]
mov ah, 0Eh
cmp al, 0
je slutt
inc si
jmp print

slutt:
jmp slutt 

Endret av Johan123321
Lenke til kommentar
Den print-rutina funker hvertfall ikke. Kan ikke kalle interrupt 21h uten at den er satt opp...

5371369[/snapback]

Er klar over det. Men det ville derimot fungert i MS-DOS, viss eg ikkje tek feil... :)

5376881[/snapback]

 

Interrupt 21,4 er ikke for å vise tekst. Det er 21,9 som er det, og den fungerer ved at adressen til første byte i strengen er i DX, og ikke SI :)

 

Slik du viser det der, ligner mer på mitt OS, merkelig nok! Der er adressen til første byte i SI, og 21,4 brukes til å vise strengen!

 

EDIT: med "21,4" mener jeg 21 som interrupten og 4 som funksjonen.

Endret av Johan123321
Lenke til kommentar
[...] Interrupt 21,4 er ikke for å vise tekst. Det er 21,9 som er det, [...]

5376982[/snapback]

Ja. Sjølvsagt. :) Kvar i all verda kom den fireren frå? :hmm: Er det 4 som er til for å avslutte eit program? :hmm:

5377141[/snapback]

 

4C, er for å avslutte program. 4 er "Auxiliary Output" - altså output til en COM-port og lignende.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...