asm
mov eax, dword ptr [v_addr]
invlpg [eax]
end asm
Damit funktioniert es jetzt, ich hoffe dass es jetzt nicht auf irgendeine andere Weise falsch ist.
Es sieht Korrekt aus. Der Compiler scheint ja alle im ASM block verwendeten Register automagisch zu sichern.
Schon mal vielen Dank für die Hilfe, aber darf ich dich noch fragen, wie du so etwas debuggst? Du hast ja vermutlich QEMU + GDB benutzt, aber benutzt du da eine GUI für GDB?
Ja. Mit Qemu und GDB, aber ohne GUI.
qemu-system-x86_64 -cdrom frost.iso -s -S # startet QEMU mit GDB-SERVER und wartet
src/kernel$ gdb --tui frost.krn
target remote localhost:1234 (mit Qemu verbinden)
break ELF::LOAD_IMAGE
c
Und dann kannst du mit s / n durch den code steppen, mit print VAR variablen ausgeben lassen, und parallel in QEMU die register ausgeben.
(Du must fast alle Labels in deinem Kernel GROß-Schreiben)
Um meinen Verdacht zu überprüfen habe ich deinen kernel mit "objdum -d" disassembliert und einen breakpoint mit 'break *0x0123' an der Adresse der invpg-Instruktion gesetzt und mir in Qemu die Register angeguckt.
Alles andere kannst du dir sicher mit Google und dem Wiki (
QEMU GDB) selbst aneignen.