1
Lowlevel-Coding / Re: [Anfängerfrage] Textausgabe im Protected-Mode
« am: 17. January 2009, 19:51 »
Hmm, ich vergaß den Protected-Mode Abschnitt als 32-BIT zu kennzeichnen ... Jetzt funktioniert es
23. November 2024, 21:59
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
[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