Ich habe versucht einen bootloader zu programmieren, doch der Sprung nach dem aktivieren des Protected Mode führt an Adresse 0xB866, obwohl er da nicht hin soll
.
Ich hab' den code bereits gefühlte 10000h mal gecheckt doch habe keinen Fehler gefunden

Wo ist der Fehler?
(Compiliert mit nasm, debuggt mit bochs und gdb)
.Ich hab' den code bereits gefühlte 10000h mal gecheckt doch habe keinen Fehler gefunden

Wo ist der Fehler?

(Compiliert mit nasm, debuggt mit bochs und gdb)
Code: [Auswählen]
[global main16]
[section .text]
[BITS 16]
main16:
cli
mov byte [bootdrive],dl
xor ax,ax
mov ds,ax
mov ss,ax
mov ebp,(main32-0xFF)
mov esp,(main32-0x01)
initdrive:
xor ah,ah
int 0x13
jc error16
load:
mov byte dl,[bootdrive]
mov ah,0x02
mov al,nsectors
xor dh,dh
xor ch,ch
mov cl,0x02
mov bx,(main32>>0x04)
mov es,bx
mov bx,(main32&0x0F)
int 0x13
jc error16
initgdt:
mov ecx,(gdt_template_end-gdt_template)
copytemplate:
dec ecx
mov byte bl,[gdt_template+ecx]
mov byte [gdt_start+ecx],bl
test ecx,ecx
jnz copytemplate
initgdtr:
mov word [gdtr],(gdt_template_end-gdt_template-1)
%line 20+1 loader.asm
lgdt [gdtr]
jmp switchpmode
error16:
jmp $
switchpmode:
mov eax,cr0
or eax,0x01
mov cr0,eax
%line 27+1 loader.asm
mov ax,codeseg
mov es,ax
jmp [es:b32]
[Bits 32]
b32:
mov ax,dataseg
mov ds,ax
mov ss,ax
mov ebp,(main32-0xFF)
mov esp,(main32-0x01)
jmp $
;Some stuff + jumping to main32
nsectors equ 0x08
main32 equ (0x10000-(nsectors*0x0200))
bootdrive equ 0x7BFF
gdt_start equ 0x9000
gdt_end equ 0xB000
gdtr:
dw gdt_end-gdt_start-1
dd gdt_start
gdt_template:
nullseg equ 0
dd 0x00000000, 0x00000000
codeseg equ $-gdt_template
dw 0xFFFF
dw 0x0000
db 0x00
db 0x9A
db 0xCF
db 0x00
dataseg equ $-gdt_template
dw 0xFFFF
dw 0x0000
db 0x00
db 0x92
db 0xCF
db 0x00
gdt_template_end:
times (0x01FE)-($-$$) db 0x00
db 0x55
db 0xAA

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert