Hej allesammen!
Jeg har læst en artikel om at skifte til protected mode via Assembly.
Så jeg ville afprøve det selv, i min Assembly bootloader.
Efter jeg har overført følgende kode til en floppy disk, genstarter min computer når jeg booter fra pågældende floppy disk.
Dette er Assembly koden:
[bits 16]
[org 0x7c00]
booter:
mov ax, 0x0000
mov ds, ax
mov si, bootingSystem
call clearScreen
call output
mov si, switching
call output
call switch
clearScreen:
mov ax, 0x0600
mov cx, 0x0000
mov dx, 0x174f
mov bh, 0
int 0x10
ret booter
output:
mov ah, 0x0e
mov al, [si]
mov bh, 0x0000
mov bl, 0x0007
mov dx, 0x0000
cmp al, 0
jz hang
int 0x10
inc si
jmp output
hang:
ret booter
switch:
cli
lgdt[gdtr]
mov eax, cr0
or al, 0x01
mov cr0, eax
jmp codeSel:protectedMode
bits 32
protectedMode:
mov ax, dataSel
mov ds, ax
mov es, ax
mov ax, videoSel
mov gs, ax
mov word [gs:0], 0x741
gdtr:
dw gdtEnd-gdt-1
dd gdt
gdt
nullSel equ $-gdt
gdt0
dd 0
dd 0
codeSel equ $-gdt
codeGdt
dw 0x0ffff
dw 0x0000
db 0x00
db 0x09a
db 0x0cf
db 0x00
dataSel equ $-gdt
dataGdt
dw 0x0ffff
dw 0x0000
db 0x00
db 0x092
db 0x0cf
db 0x00
videoSel equ $-gdt
dw 3999
dw 0x8000
db 0x0b
db 0x92
db 0x00
db 0x00
gdtEnd
bootingSystem db "Booting process started..", 0dh, 0ah, 0
switching db "Switching to protected mode..", 0dh, 0ah, 0
times 510 - ($ - $$) db 0
dw 0xaa55
Kører jeg denne kode med Microsoft Virtual Machine, popper en dialogbox med følgende tekst op:
An unrecoverable processor error has been encountered.
The virtual machine will reset now.
Så hvis der er nogen som kan hjælpe ville det bare være super
.
By the way, så har jeg via udelukkelses-metoden fundet ud af at problemet opstår så snart den prøver at udføre denne linje:
mov cr0, eax
i min 'switch' funktion.
Indlæg senest redigeret d. 04.03.2010 22:19 af Bruger #15718