Autor Thema: [Gelöst] Textausgabe im Protected-Mode  (Gelesen 4002 mal)

stackless

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
« am: 17. January 2009, 19:42 »
Hallo,

ich versuche mich seit kurzem in der Assembler-Programmierung. Die einfache Testausgabe im Real-Mode ist mir bereits gelungen. Ich denke auch, dass ich das Prinzip mittlerweile so einigermaßen verstanden habe. Nur leider habe ich mit dem Protected-Mode so meine Probleme. Folgender Code scheint im Prinzip zu funktionieren , also es gibt kein Tripple-Fault ;), nur leider klappt die Textausgabe nicht. Nach "mov edi, 0xB8000" scheint 0x88000 in edi zu stehen, dort scheinen dann auch die Zeichen zu landen (wenn ich den Debugger richtig bedient habe ;) ). Was habe ich falsch gemacht?

Vielen Dank für eure Hilfe.

[BITS 16]

; Segmente setzen
mov ax, 0x7C0
mov ds, ax
mov ss, ax
mov sp, 0xFFFF

; In Code-Segment springen
jmp 0x07C0:realModeEntry

nullDescriptor:
dd 0x0
dd 0x0

codeSegmentDescriptor:
dw 0xFFFF
dw 0x0
db 0x0
db 0x9A
db 0xCF
db 0x0

dataSegmentDescriptor:
dw 0xFFFF
dw 0x0
db 0x0
db 0x92
db 0xCF
db 0x0

gdt:
.limit dw 0
.base dd 0

message db 'Hello World!', 0

realModeEntry:
cli ; Interrupts deaktivieren

mov [gdt.base], DWORD nullDescriptor + 0x7C00
mov [gdt.limit], WORD gdt - nullDescriptor - 1
lgdt [gdt]

mov eax, cr0
or eax, 1
mov cr0, eax

jmp 0x8:protectedModeEntry + 0x7C00

protectedModeEntry:
mov eax, 0x10
mov ds, eax
mov es, eax
mov ss, eax

mov eax, 0
mov fs, eax
mov gs, eax
mov esp, 0xFFFF

mov ah, '#'
mov al, 0x0F
mov edi, 0xB8000
stosw

mov esi, DWORD message + 0x7C00

printMessage:
mov edi, 0xB8000

.loop:
lodsb

test al, al
jz .done

stosb

mov al, 0x0F
stosb

jmp .loop

.done:
jmp $

TIMES 510-($-$$) db 0
dw 0xAA55
« Letzte Änderung: 17. January 2009, 19:51 von stackless »

stackless

  • Beiträge: 2
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 17. January 2009, 19:51 »
Hmm, ich vergaß den Protected-Mode Abschnitt als 32-BIT zu kennzeichnen ... Jetzt funktioniert es  :-D

 

Einloggen