Autor Thema: Problem mit Protect Mode  (Gelesen 3270 mal)

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« am: 13. May 2005, 17:51 »
Ich hab mich mit dem Protect Mode schon etwas länger theoretisch befasst aber was ich Programmier habe funktioniert nicht. So habe ich das Tutorial, welches auf dieser Seite zu lesen ist, etwas Modifiziert,  aber das funktioniert auch nicht. Es ist nur ein blinkender Curser zu sehen.

Hier die Modifizierungen:

Ein weiterer Diskriptator für den Videospeicher:
dk3:
dw 0x1F40
dw 8000
db 0xB
db 10110010b
dw 0


für den Video Modus:
start:
mov ax,3
int 0x10

cli


und dieser Code um „hallo“ auszugeben:
END:
mov ax, 3
shl eax, 3
mov ds, ax
xor si,si
mov al, 'h'
mov [si],al
inc si
mov al, 7
mov [si],al
inc si
mov al, 'a'
mov [si],al
inc si
inc si
mov al, 'l'
mov [si],al
inc si
inc si
mov [si],al
inc si
inc si
mov al, 'o'
mov [si],al
inc si
inc si
h:
xor ax,ax
jmp h


Warum funktionier diese Modifizierung nicht?

matthieuriolo

  • Beiträge: 226
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 13. May 2005, 18:14 »
Zitat von: Hauke


h:
xor ax,ax
jmp h



macht das nicht ne endlosschleife?

Du machst oben nen cli, aber das wieder auflösen tust du ned. Sti ... so aus dem gedächniss ;)


nicht schlagen... kann eigentlich kein asm... aber das is mir so aufgefallen...

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 13. May 2005, 23:45 »
@matthieuriolo: doch, aber da is er ja schon am ende.
@hauke:
ist der deskriptor richtig gesetzt?
blinkt der cursor nur, oder kackt er auch ab nach einiger zeit?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 14. May 2005, 12:24 »
Der Deskriptor ist glaub ich richtig gesetzt ich gehe ihn noch einmal durch

Die Größe soll 2 Videoseiten im 3. Textmodus sein also 25x80x2x2=8000=1F40h also:
dw       0x1F40
Die Offsetadresse ist B8000h also
dw       8000
und Bit 16-23 dann:
db       0xB
Und dann im Speicher vorhanden 1. Privilegstufe, Speichersegement Segementtype 1 (Lesen + Schreichen) und das letzte Bit wird doch vom Prozessor gesetzt also egal ob 1 oder 0 ergibt:
db       10110010b
und das letzte Word insgesamt dann 0
dw       0

Und der Cursor blinkt nur. und macht nichts weiteres.

Hauke

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 14. May 2005, 15:08 »
Oh nein, das war der Fehler. Das ist mir gar nicht aufgefallen. Der Teufel steckt halt im Detail.

Trotzdem vielen Dank.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 14. May 2005, 21:44 »
Geht es jetzt? Versuch das ganze beim Test am besten unter Bochs (Emulator). Das zeigt zumindest bei einem Crash wichtige Informationen, worans gescheitert ist!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen