Autor Thema: Und wieder CS und DS  (Gelesen 4245 mal)

bscreator

  • Gast
Gespeichert
« am: 02. March 2005, 22:29 »
Hi Leute,

ich hab ein paar Fragen zum CS und DS. Was ich weiß ist, dass CS den Quellcode und DS die Variablen des Codes enthält (Korrigiert mich bitte, falls ich falsch liege...)

1. Bei welchen Befehlen in NASM unterliegen CS und/oder DS Veränderungen ?
2. Welche Auswirkungen hat es, CS und DS zur Laufzeit NICHT zu sichern ?
3. Warum muss man CS und/oder DS eigentlich speichern (z.B. push CS), wenn sich der Code zur Laufzeit doch sowieso nicht ändert ?

Thanks,
bscreator

TPSeverino

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 02. March 2005, 22:53 »
Du solltest ds immer dann sichern, wenn du einen anderen Wert reinschreibst, weil du beispielsweise auf Daten in einem anderen Segment zugreifen willst. Wenn du ds nicht wiederherstellst, wirst du keinen Zugriff mehr auf die Daten haben, die in dem anderen Segment lagen. Befehle, die ds einfach verändern sind mir nicht bekannt. Mit ds passiert nichts, solange du es nicht veränderst ...
Für cs gilt dies analog...

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 03. March 2005, 10:09 »
Also immer wenn ich auf die Daten eines anderen Segments,  z.B. SS oder ES zugreife, geschieht dies mit dem Umweg über das DS und/oder CS-Segment, oder ?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 03. March 2005, 14:02 »
ohoh! also mit DS gibt man im RM ein Segment an, im PM ein deskriptor. im RM is das ändern von DS net strafbar, im PM kann man dafür als task mit priv 3 die todesstrafe bekommen ;-) genauso isses mit CS. allerdings kann man CS genauso wie (E)IP nur durch jumps, calls oder sonstiges ändern. normalerweise hat man DS und CS auf dem gleichen, weil die daten mithilfe von "db" und "dw"s in den code kommen, und sonst die adressierung des assemblers net ginge. der unterschied is nur, dass man DS halt nimmt, wenn man auf etwas zugreift, was im speicher is und mit CS halt calls und so ausführt.
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 #4 am: 03. March 2005, 17:54 »
Ich arbeite im Real-Mode. Also ändern sich CS und DS durch jmp´s und call´s, oder ?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 03. March 2005, 18:07 »
ne, DS ändert sich nicht, CS ändert sich bei calls und jumps und ints und so.
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 #6 am: 03. March 2005, 22:32 »
Und wann ändert sich DS (Wenn ich nicht manuell den Wert ändere) ?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #7 am: 04. March 2005, 10:04 »
erweiterte frage ;):
ändert sich ds auch net wenn man z.b ein stosb über ein segment hinaus macht?

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 04. March 2005, 11:28 »
Zitat von: zacK
erweiterte frage ;):
ändert sich ds auch net wenn man z.b ein stosb über ein segment hinaus macht?


Ich denke, dass die CPU so dumm ist und DI nach 0FFFFh auf 0 setzt. Ausserdem benutzt STOSB das ES- und nicht das DS-Register.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #9 am: 04. March 2005, 13:45 »
ich denke, die CPU setzt dann SI/DI auf 0, wenn es bei 0xFFFF angekommen ist und ändert DS/ES nicht... bin mir aber nicht sicher!
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,...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 04. March 2005, 16:03 »
DS und ES werden nicht verändert. Sonst würde die CPU unberechbar werden. Dumm ist das nicht, sondern eher das Gegenteil: Wenn Zugriffen auf SI sich DS ändern würden, würden alle nachfolgenden Speicheroperationen sonst wohin gehen. Das wäre eine ganz schöne Sauerei. (Bzw. Segment-Register-hin-und-her-gesichere ...)
Dieser Text wird unter jedem Beitrag angezeigt.

bscreator

  • Gast
Gespeichert
« Antwort #11 am: 04. March 2005, 19:35 »
Könnten wir bitte auf meine Frage zurückkommen ?

Zitat
Und wann ändert sich DS (Wenn ich nicht manuell den Wert ändere) ?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 04. March 2005, 20:06 »
Zitat von: bscreator
Und wann ändert sich DS (Wenn ich nicht manuell den Wert ändere) ?

gar nicht. außer du hast irgendwelchen code, von dem du nichts weisst (BIOS, anderer Fremdcode), der DS ändert.

Achja, bei Hardware-Taskswitchen ändert sich DS, aber das passiert ja nicht mal eben so ohne dein Wissen (und ist außerdem Protected Mode Stuff)
Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen