Problem beim Kopieren eines Datenblocks



  • Hallo!
    Ich will meine GDT an einen anderen Platz verschieben, dies sollte ja eigentlich nicht so schwer sein - naja aber irgendwie funktioniert es nicht, hier mein Code:

    mov ax, 0x86C0
    mov es, ax
    xor di, di ;nach 86C0:0000 - dort fängt unsere GDT an
    
    mov ax, 0x07C00 ;von da wo wir grad sind ;)
    add ax, des_null
    mov gs, ax
    mov fs, ax
    
    mov cx, 28h ;Anzahl der Deskriptoren
    
    copygdt:
    mov ax, word[gs:di]
    mov [es:di], ax
    inc di
    loop copygdt ;selbst erklärend
    
    mov eax, es
    mov [global_table+GDTSTRUCT.base], eax
    
    lgdt [global_table]
    

    Also ich finde absolut keinen Fehler!
    Mit stosb hab ichs auch schonmal versucht, ging genau so wenig 😕

    Kevin



  • Hi.

    Du setzt die Segmentregister gs und fs falsch.
    fs:0000
    wuerde deinem code zufolge auf 7C00+16*des_null:0000 zeigen.
    Da aber dein Bootstrap schonmal nicht nach 7C00:0000 sondern nach 07C0:0000 oder 0000:7C00 kopiert wird, kann da was nicht stimmen 😃

    Also 1. nicht das Offset von des_null auf die Segmentregister addieren, sondern selbige einfach der "Org"-Anweisung am Anfang deines Codes entsprechend setzen.
    2. 2 verschiedene Indexregister verwenden, wovon der, der zum lesen der gdt verwendet wird das Offset von des_null beinhalten sollte... 😉
    3. *argh* zum verschieben eines bytes braucht man keine 16Bit-Register! 🙄



  • HI Danke!
    Aber normalerweise müsste doch dann das hier gehen, tuts aber nicht:

    mov ax, 0x0000
    mov ds, ax
    mov ax, 0x7c00 ;=> DS:SI = 0000:7C00
    mov si, ax
    
    mov ax, 0x86C0
    mov es, ax     ;=> ES:DI = 86C0:0000
    xor di, di
    
    mov cx, 40h
    rep movsb
    
    mov eax, 0x86C00
    mov [global_table+GDTSTRUCT.base], eax
    
    lgdt [global_table]
    

    Wenn ich das nun so ausführ sagt mir Bochs:
    00000569943p[CPU ] >>PANIC<< jump_protected: JUMP to busy 286 TSS unsupported.

    also scheint die GDT wieder nicht richtig kopiert zu sein, denn wenn ich sie normal aus meiner Anwendung ohne zu verschieben verwende funktioniert alles :((

    Kevin



  • Oh ich depp hab vergessen des_null noch dazuzu addieren - mein gott bin ich blöd

    Ich dank dir trotzdem!

    Meine dummen Anfängerfehler *wein*

    Kevin


Anmelden zum Antworten