Autor Thema: Warum DX ?  (Gelesen 2783 mal)

bscreator

  • Gast
Gespeichert
« am: 16. July 2004, 13:59 »
Hi Programmierer,
hab´ da ne Frage zum Thema 'Interrupts erstellen' :
In der Ausgabe 3 von LowLevel wird das behandelt. Im Listing 2, (beim registrieren in der IVT) lautet die erste Zeile 'push dx'. Warum speichern wir da DX, wenn sich doch die Daten standardmäßig im DS befinden ?
Warum heißt es also nicht 'push ds' anstatt 'push dx' ?

mfg,
bscreator

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 16. July 2004, 16:08 »
also bei mir geht der code so, wie er da abgebildet wird. es wird nur gepusht, weil es verändert wird, das hat nichts mit dem einrichten zu tun... man könnte es auch weglassen, aber dann haste halt nach dem einrichten in DX einen anderen wert als davor... das mit dem DS wird ja in einer anderen zeile gemacht, die da lautet:
mov [es:0x21*4+2], cs           ; Pointer auf CS
mfg

JOACHIM NEU
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,...

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 16. July 2004, 21:46 »
Der Code geht bei mir auch so, wie er abgebildet ist. Dass der Wert von DX verändert wird, ist bei mir egal, da dass DX-Register bei meinem OS sowieso kaum Verwendung findet. Da wollte ich bloß noch mal sicher gehn, ob, bei einem Entfernen von push DX, irgendwelche Komplikationen auftreten.
Aber das mit dem DS versteh ich irgendwie nicht.
Das DS und das CS sind meines Wissens verschiedene Segmente:
Im DS-Register werden die Variablen gespeichert und im CS doch das Codesegment. Warum wird dann DS, da dort die Variablen drin stehn, nicht AUCH gespeichert ?

mfg,
bscreator

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 16. July 2004, 22:33 »
weil die vars in einem int auch nicht benutzt werden dürfen! es wird nur die Offset- und die Segment-Adresse gespeichert, also CS als Segment und _int0x21 als Offsetadresse, weil das ja vom assembler umgewandelt wird in eine Offsetadresse abhängig zum Segment in CS... also wird bei einem int nur ein jump in den speichertbereich gemacht, wo das int steht und dann wieder durch iret zurück! das push dx und pop dx am anfang und am ende kannste also weg lassen, wenn das segment nichts wichtiges speichert. les' dir mal die ausgabe nochmal durch, ich kann das schlecht erklären!

mfg

JOACHIM NEU
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