Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 23-03-2006, 23:47
Warsocket
Avatar van Warsocket
Warsocket is offline
Ik heb een programmatje (klein OS in de maak) geschreven in NASM, als ik mijn code test op bochs (x86 emulator) dan werkt mijn code prima

maar als ik mijn code wegschrijf in de bootsector van een floppy en hem opstart reboot mijn pc (triple fault waarschijnlijk).

Iemand een idee waarom dit op boachs wel werkt en op een echte pc niet.

(mijn standaard assembly forum is down, en ik kan geen fatsoenlijke andere vidnen, dus in mijn laatste hoop hier deze post)

alsvast heel erg bedankt, groeten Bram

Code:
bits 16
org 0x07c00             ; Start address 0000:7c00 
jmp start               ; Jump to start of boot routine & skip other data

dummy:

.586
.MMX

start:

mov ax, 0003h
int 10h

mov ax,0b800h
mov es, ax

xor bx, bx
mov dword [es:bx], 0f4d0f52h


mov ax, 0
int 16h


cli
lgdt [gdtr]

mov eax, CR0
or eax, 1
mov CR0, eax

jmp codesel:protc


bits 32
protc:

mov ax, datasel
mov ds, ax
mov es, ax

mov ax, videosel
mov gs, ax

mov eax, 2048
mov dword [DS:eax], 0f4d0f50h   ;PM in white
mov ebx, [ES:eax]

mov [gs:0], ebx

p:
jmp p


bits 16
gdtr :
   dw 8*4           ; Length of the gdt
   dd gdt           ; physical address of gdt

gdt:
    dd 0        ;NULL descriptor
    dd 0 
    
    codesel equ $-gdt
    dw 0ffffh   ;4gb code section
    dw 0h       ;begin at start adress
    db 0h       ;extra byte to set start offset
    db 09ah     ;wat flags
    db 0cfh     ;nogwat flags
    db 0h

    datasel equ $-gdt
    dw 0ffffh   ;4gb data section
    dw 0h       ;begin at start adress
    db 0h       ;extra byte to set start offset
    db 092h     ;wat flags
    db 0cfh     ;nogwat flags    
    db 0h

    videosel equ $-gdt	       ; ie 18h,next gdt entry
    dw 3999	       ; Limit 80*25*2-1
    dw 0x8000	 ; begin at start adress
    db 0x0b
    db 0x92	       ; present,ring 0,data,expand-up,writable
    db 0x00	       ; byte granularity 16 bit
    db 0x00

times 510-($-$$)  db 0  ; Fill bytes from present loc to 510 with 0s
              dw 0x0aa55  ; Write aa55 in bytes 511,512 to indicate that
__________________
01110100011001010111011001100101011001010110110000100000011101000
11010010110101001100100001000000011111100111111001000000011101001010000
Met citaat reageren
Advertentie
Oud 24-03-2006, 22:06
Warsocket
Avatar van Warsocket
Warsocket is offline
deze kan dicht probleem opgelost.

In het onwaarschijnlijke gevald a tiemand hier tegen hetzelfde probleem aanloopt.

onder start:

xor ax, ax
mov ds, ax

toevoegen

DS = datasegment wordt niet automatisch op 0 geinitialiseerd als je computer boot
__________________
01110100011001010111011001100101011001010110110000100000011101000
11010010110101001100100001000000011111100111111001000000011101001010000
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 12:37.