Moin Moin,
da ich für diese Frage keinen passenden existierenden Thread gefunden habe, der halbwegs aktuell ist, erstelle ich mal wieder einen neuen.
Deswegen werde ich auch weitere Fragen dann hier stellen 
Und zwar beschäftige ich mich einfach mal so etwas mehr mit Assembler, was heißt, ich habe meinen GRUB Assembler-Part, damit der Kernel überhaupt geladen wird, übernommen und bin dabei einen kleinen Kernel in reinem Assembler zu schreiben.
Das erste Hindernis hat aber leider nicht lange auf sich warten lassen.
So sieht das momentan aus (klein und noch übersichtlich):
Wie man sieht, schiebe ich den String "string" als Parameter auf den Stack und rufe die Funktion auf. Hier versuche ich dann wie folgt den übergebenen String auszugeben:
Allerdings funktioniert dies nicht richtig. Der Ablauf ist, dass der string und danach einige kryptische Zeichen ausgegeben werden und dann anscheinend ein triple fault ausgelöst wird, da bochs neugestartet wird. Was habe ich hier falsch gemacht?
Gruß Christian
da ich für diese Frage keinen passenden existierenden Thread gefunden habe, der halbwegs aktuell ist, erstelle ich mal wieder einen neuen.
Deswegen werde ich auch weitere Fragen dann hier stellen 
Und zwar beschäftige ich mich einfach mal so etwas mehr mit Assembler, was heißt, ich habe meinen GRUB Assembler-Part, damit der Kernel überhaupt geladen wird, übernommen und bin dabei einen kleinen Kernel in reinem Assembler zu schreiben.
Das erste Hindernis hat aber leider nicht lange auf sich warten lassen.

So sieht das momentan aus (klein und noch übersichtlich):
Code: [Auswählen]
[SECTION .text]
global kernel_main
kernel_main:
push dword string ; parameter 1 der String
call video_write_string
ret
[SECTION .data]
string db "Hello World, From AsmOS",10,0 Wie man sieht, schiebe ich den String "string" als Parameter auf den Stack und rufe die Funktion auf. Hier versuche ich dann wie folgt den übergebenen String auszugeben:
Code: [Auswählen]
video_write_string:
push ebp
;push edi
mov ebp, esp
mov esi, [ebp+8]
mov edi, 0xB8000
.printloop:
lodsb
test al, al
jz .printdone
stosb
mov al, 0x0F
stosb
jmp .printloop
.printdone:
mov esp, ebp
;pop edi
pop ebp
ret
Allerdings funktioniert dies nicht richtig. Der Ablauf ist, dass der string und danach einige kryptische Zeichen ausgegeben werden und dann anscheinend ein triple fault ausgelöst wird, da bochs neugestartet wird. Was habe ich hier falsch gemacht?

Gruß Christian

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert



