Autor Thema: Allgemeine Frage zu Segmenten  (Gelesen 2827 mal)

SebE

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« am: 21. September 2008, 10:21 »
Ich habe als Beispiel folgenden Code:

MOV AX, BX ;Befehl_1

section .data

MOV BX, AX ;Befehl_2

section .data

MOV AX, BX ;Befehl_3

Befehl_2 und Befehl_3 kommen 2 verschiedene Daten-Segmente (ist das korrekt?)

Und wo kommt Befehl_1 hin?

Mir ist absolut nicht klar, was passiert, wenn man Segmente und "normalen" Code ohne Segmente mischt.

Was passiert eigentlich, wenn man nur "normalen" Code schreibt (ganz ohne Segmente)?
Kommt dann alles ins Code-Segment? (Also haben alle Daten und Befehle die Adresse CS:XXXX?)

Ich hoffe ihr versteht meine Frage(n) und könnt mich in dem ganzen Durcheinander aufklären.

Vielen Dank

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 21. September 2008, 11:27 »
Sections und Segmente sind zwei völlig unterschiedliche Sachen. Sections gibt es in einem Binärformat wie ELF (also in der Datei), Segmente gibt es in der CPU (also während der Ausführung). Umgekehrt wird ein Schuh draus: Wenn du Code und Daten auf zwei verschiedenen Segmenten unterbringen willst, mußt du beim Laden zwischen Code und Daten unterscheiden können und brauchst deswegen zwei verschiedene Sections.

Und Code ohne Sections gibt es nicht. Wenn du nichts anderes sagst, landet dein Code in .text.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

SebE

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 21. September 2008, 11:34 »
Ok, und was wäre, wenn ich statt "section" "Segment" geschrieben hätte (was ich eigentlich vor hatte :oops:

In welches Segment kommt dann befehl_1?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 21. September 2008, 12:18 »
Dann hätte dir dein Assembler eine Fehlermeldung an den Kopf geworfen, weil die Segmentierung nicht seine Sache ist, nehme ich an.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 21. September 2008, 13:01 »
In NASM ist segment ein Synonym für section. -> http://nasm.sourceforge.net/doc/nasmdoc5.html#section-5.3
Es passiert also das gleiche.
Dieser Text wird unter jedem Beitrag angezeigt.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 21. September 2008, 14:18 »
Hm... Ich glaube, ich sollte mich bei Assemblerfragen zurückhalten und nur noch zu richtigen Sprachen was sagen. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 21. September 2008, 15:03 »
Zitat
Befehl_2 und Befehl_3 kommen 2 verschiedene Daten-Segmente (ist das korrekt?)
Nein. Beide befehle kommen hintereinander in die gleiche Section( .data ).
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

 

Einloggen