Stand: 18. November 2018

Inhaltsverzeichnis

über dieses Dokument
was es hierin gibt
wo man die neuste Version bekommt
wie man den Verfasser kontaktiert
welche gesetzlichen Einschränkungen es gibt
Lizenzlosigkeit
Verfasserschutz
Vorbehalt für zusätzliche Einschränkungen für zukünftige Versionen

allgemeine Informationen über die Variablentypen
was es ist
von der x86-Architektur hardwaremäßig unterstützte Variablentypen
Schreibweise von Zahlen
von der x86-Architektur nicht hardwaremäßig unterstützte Variablentypen
Unterscheidungskriterien

die Details von den Variablentypen
Unterscheidung nach Größe
Typen
Einschränkungen bei der Nutzung
Überlappung
Unterscheidung nach Informationsart
Typen
Allgemeines
Flaggen
Bitfeld
Beschreibung
Zahlen
Fließkommazahl mit Vorzeichen
Beschreibung
Größen
Ganzzahl mit Vorzeichen
Beschreibung
Größen und Wertebereiche
Interpretation vom gespeicherten Wert
Ganzzahl ohne Vorzeichen
Beschreibung
Größen und Wertebereiche
Interpretation vom gespeicherten Wert
Zeichenketten
Bit-Zeichenkette
Beschreibung
Größe
Byte-Zeichenkette
Beschreibung
Größe
Zeiger
logische Adresse
Beschreibung
Bezeichnungen
Größen
Verwendung bei Segmentierungsmethoden
Offset zum Segmentanfang
Beschreibung
Bezeichnungen
Größe
Verwendung bei Segmentierungsmethoden

Stichwortverzeichnis
Variablentypen
Arten
Namen
deutsch
englisch

weiteres Material zu diesem Thema
Dokumente
Aufnahme von weiteren Materialien


über dieses Dokument

was es hierin gibt

Dieses Dokument
Die Fließkommazahlen werden zwar ebenfalls häufig verwendet, sie sind aber in dieser Dokumentation weitgehend außer Acht gelassen.

wo man die neuste Version bekommt

Derzeit nutze ich OnTheServer.de/Downloads/ um neue Versionen zugänglich zu machen. Sie müsste irgendwo dort in den Unterverzeichnissen sein; das kann sich hin und wieder ein bischen ändern.

Dort gibt es vielleicht auch dieses Dokument in anderen Sprachen.

Die Versions-Angabe von diesem Dokument steht oben rechts ("Stand: ...").

wie man den Verfasser kontaktiert

Der Verfasser von diesem Dokument kann mit der Hilfe von einer elektronischen Nachricht kontaktiert werden. Das hierfür eingerichtete Postfach ist mit der Hilfe von der folgenden Adresse erreichbar:
Kontakt@On(entferne mich)TheServer.de

welche gesetzlichen Einschränkungen es gibt

Lizenzlosigkeit

Dieses Dokument
  • ist an keine Lizenz gebunden.
  • unterliegt nicht den Einschränkungen durch das Urhebergesetz.
  • soll allgemeinfrei (public domain) behandelt werden. Also so, als wenn es sich um ein Eigentum von der Allgemeinheit handelt.

Im Übrigen soll alles, was man auf OnTheServer.de und den Subdomains öffentlich zugänglich findet, entsprechend behandelt werden.

Es gibt auf OnTheServer.de allerdings eine Ausnahme:
Ich lege gelegentlich im Verzeichnis "OnTheServer.de/temp/" urheberrechtlich geschütztes Material ab.

Es ist nicht gestattet, auf irreführendeweise vorzutäuschen, dass das (ursprüngliche) Dokument an eine Lizenz gebunden wäre.

Verfasserschutz

Es ist nicht gestattet, auf irreführendeweise vorzutäuschen, dass man der (ursprüngliche) Verfasser vom Dokument wäre. Der (ursprüngliche) Verfasser muss jedoch nicht namentlich genannt werden.

Vorbehalt für zusätzliche Einschränkungen für zukünftige Versionen

Ich (der ursprüngliche Verfasser) behalte die Möglichkeit, Einschränkungen für
  • die Veränderung oder/und
  • die Verbreitung
aufzuerlegen. Von den Einschränkungen wären lediglich neue Versionen betroffen. Was bisher veröffentlicht wurde, erhält keine weiteren Einschränkungen.

Von diesem Recht werde ich hoffentlich nie gebrauch machen müssen.


allgemeine Informationen über die Variablentypen

was es ist

Ein Variablentyp definiert die grundlegenden Merkmale von einer Variable.

Es können also mehrere Variablen im Speicher existieren, welche vom selben Typ sind. Also beispielsweise mehrere Variablen vom Variablentyp "Ganzzahl ohne Vorzeichen".

Eine Variable hat, im Gegensatz zum Variablentyp, von welchem sie ist, auch einen Wert gespeichert.

von der x86-Architektur hardwaremäßig unterstützte Variablentypen

In der x86-Architektur gibt es mehrere Variablentypen, welche hardwaremäßig unterstützt werden.

Manche haben eine fixe Größe, andere, zum Beispiel Zeichenketten, haben eine variable Größe.

Wenn
  • eine Variable mehrere Bits groß ist und
  • die Variable im Arbeitsspeicher gespeichert ist,
dann
  • sind alle Bits direkt hintereinander gespeichert. Es gibt also keine Variablentypen, welche durch die x86-Architektur hardwaremäßig unterstützt werden, von denen die einzelnen Bits vom Wert im Arbeitsspeicher verstreut sind.

Wenn
  • eine Variable mehrere Bytes groß ist,
dann
  • sind auch die einzelnen Bytes alle direkt hintereinander gespeichert.

Wenn
  • die Adresse von einer Variable angegeben wird,
dann
  • wird das erste Byte vom Wert angegeben.

    Beispielsweise sind bei der Speicherstelle "100|d" bei einer "4 Byte"-großen Variable auch die Speicherzellen
    • "101|d",
    • "102|d" und
    • "103|d"
    belegt.

Schreibweise von Zahlen

Wenn
  • eine Variable im Arbeitsspeicher gespeichert ist und
  • diese Variable eine Zahl gespeichert hält, welche mehrere Byte lang ist,
dann
  • ist
    • das niederwertigste Byte links (d. h. in der Speicherzelle mit der niedrigsten Adresse) und
    • das höchstwertigste Byte rechts (d. h. in der Speicherzelle mit der höchsten Adresse).
    Von den 8 Bits von jedem Byte ist
    • das niederwertigste Bit rechts und
    • das höchstwertigste Bit links.

Beispiel:
reguläre Schreibweise: Schreibweise im Arbeitsspeicher:
Wert: Zahlensystem:
00010010 00110100 01010110 01111000 2er-System
(Binär-System)
305.419.896 10er-System
(Dezimal-System)
12 34 56 78 16er-System
(Hexadezimal-System)

"00010010 00110100 01010110 01111000"
 │      │ │      │ │      │ │      └─ Wertigkeit: 20
 │      │ │      │ │      │ └─ Wertigkeit: 27
 │      │ │      │ │      └─ Wertigkeit: 28
 │      │ │      │ └─ Wertigkeit: 215
 │      │ │      └─ Wertigkeit: 216
 │      │ └─ Wertigkeit: 223
 │      └─ Wertigkeit: 224
 └─ Wertigkeit: 231
Wert: Zahlensystem:
01111000 01010110 00110100 00010010 2er-System
(Binär-System)
120 086 052 018 10er-System
(Dezimal-System)
78 56 34 12 16er-System
(Hexadezimal-System)

"01111000 01010110 00110100 00010010"
 │      │ │      │ │      │ │      └─ Wertigkeit: 224
 │      │ │      │ │      │ └─ Wertigkeit: 231
 │      │ │      │ │      └─ Wertigkeit: 216
 │      │ │      │ └─ Wertigkeit: 223
 │      │ │      └─ Wertigkeit: 28
 │      │ └─ Wertigkeit: 215
 │      └─ Wertigkeit: 20
 └─ Wertigkeit: 27

von der x86-Architektur nicht hardwaremäßig unterstützte Variablentypen

Prinzipiell ist es auch möglich, dass sich der Programmierer eigene Variablentypen schafft.

Diese werden dann allerdings von der x86-Architektur
  • nicht, oder
  • nur teilweise,
hardwaremäßig unterstützt. Es sind also beispielsweise mehrere Maschinenbefehle notwendig, um eine Variable von diesem Typ korrekt zu handhaben.

Unterscheidungskriterien

Variablentypen, welche durch die x86-Architektur hardwaremäßig unterstützt werden, können


die Details von den Variablentypen

Unterscheidung nach Größe

Typen

Variablen mit fixer Größe
betroffene Variablentypen: existiert seit: Größe:
1978, mit der Einführung des 8086- und 8088-Prozessors 1 Byte, also 8 Bit
1978, mit der Einführung des 8086- und 8088-Prozessors 2 Byte, also 16 Bit
1985, mit der Einführung des Intel386-Prozessors, wurden "4 Byte"-große Ganzzahlen unterstützt.

Mit der Einführung der "x87-floating point unit" ("x87-FPU") wurden Fließkommazahlen unterstützt.

1989, mit der Einführung des Intel486-Prozessors, wurde der erste Prozessor auf den Markt gebracht, der die "x87-FPU" im selben Gehäuse integriert hatte, wo auch der CPU untergebracht war.
4 Byte, also 32 Bit
1985, mit der Einführung des Intel386-Prozessors 6 Byte, also 48 Bit
1989, mit der Einführung des Intel486-Prozessors 8 Byte, also 64 Bit
Mit der Einführung der "x87-floating point unit" ("x87-FPU").

1989, mit der Einführung des Intel486-Prozessors, wurde der erste Prozessor auf den Markt gebracht, der die "x87-FPU" im selben Gehäuse integriert hatte, wo auch der CPU untergebracht war.
10 Byte, also 80 Bit
26. Februar 1999, mit der Einführung von der Modellreihe "Pentium 3", da diese zum ersten Mal die "streaming single instruction multiple data extensions" ("SSE") hatte 16 Byte, also 128 Bit

Variablen mit variabler Größe
betroffener Variablentyp: existiert seit: Größe:
Bitfeld
Bit-Zeichenkette 1978, mit der Einführung des 8086- und 8088-Prozessors (Anzahl der Zeichen * Größe von einem Zeichen)

Wenn
  • in der verwendeten Speichermethode ein Abschlusszeichen verwendet wird,
dann
  • muss noch die Größe von einem Zeichen hinzuaddiert werden.
Byte-Zeichenkette 1978, mit der Einführung des 8086- und 8088-Prozessors (Anzahl der Zeichen * Größe von einem Zeichen)

Wenn
  • in der verwendeten Speichermethode ein Abschlusszeichen verwendet wird,
dann
  • muss noch die Größe von einem Zeichen hinzuaddiert werden.

Einschränkungen bei der Nutzung

Wenn in "32 Bit"-Versionen der x86-Architektur Variablentypen verwendet werden sollen, welche größer als 32 Bit sind, dann können hierfür die regulären Maschinenbefehle nicht direkt benutzt werden. Stattdessen können beispielsweise die Befehlssatzerweiterungen
  • "multimedia extention" ("MMX") und
  • "streaming single instruction multiple data extensions" ("SSE")
verwendet werden.

Diese Befehlssatzerweiterungen bieten nur einige spezifische Funktionen. Um diese dennoch nutzen zu können, müssen in manchen Fällen beispielsweise vorher 2 reguläre "32 Bit"-Befehle ausgeführt werden, um die Daten zusammenzutragen. Anschließend kann kann ein "64 Bit"-Befehl ausgeführt werden, um die Daten zu verarbeiten.

Überlappung

Variablen können sich im Arbeitsspeicher durchaus überlappen:

Adresse: 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
Wert von einer "1 Byte"-großen Variable: FB
Wert von einer "2 Byte"-großen Variable: 1A 23
Wert von einer "4 Byte"-großen Variable: 1A 23 08 15
Wert von einer "8 Byte"-großen Variable: 24 D2 43 19 9C 13 27 61
Wert von einer "16 Byte"-großen Variable: 9C 13 27 61 55 FB 06 22 1A 23 08 15 11 22 99 8A

Unterscheidung nach Informationsart

Typen

Allgemeines
Variablen halten mehrere Bits gespeichert, deren Wert jeweils entweder "0" oder "1" ist.

Wenn
  • die Variablentypen allerdings nach der Art von der Information unterglieder werden, welche der Wert von einer Variable von einem solchen Typ gespeichert hält,
dann
  • bedeutet dies, dass die Variablentypen anhand dessen untergliedert werden, wie die einzelnen Bits interpretiert werden.

Beim Variablentyp "Ganzzahl ohne Vorzeichen" ist beispielsweise festgelegt, dass die Gesamtmenge an Bits eine Ganzzahl bilden und dass die einzelnen Bits jeweils eine bestimmte Wertigkeite vom Wert haben.

Bei einem Variablentyp von der Art "Zeiger" ergibt sich aus der Gesamtmenge an Bits eine Adresse von einer Speicherzelle.

Der Programmierer kann allerdings zu einer Variable von einem Variablentyp von der Art "Zeiger" eine Ganzzahl hinzuaddieren. Technisch ist dies möglich. Je nach Interpretation ergibt sich nun eine neue Ganzzahl oder eine neue Adresse.

Der Prozessor hält also nirgends gespeichert, von welchem Variablentyp die Variablen sind. Entscheidend ist vielmehr, welchen Maschinenbefehlen der Programmierer die Werte von den Variablen als Parameter übergibt.

Die einzelnen Maschinenbefehle erwarten zwar einen bestimmten Variablentyp. Wenn der Programmierer dem Befehl allerdings eine Variable von einem anderen Typ übergeben hat, dann macht der Befehl trotzdem genau das was er immer tut.

Ein Additionsbefehl, zum Beispiel, addiert. Egal welche Variablentypen er als Parameter bekommen hat. Er addiert sie einfach. Und das immer nach dem selben Verfahren.

Wenn er einen falschen Variablentyp erhalten hat, dann interpretiert er die Bits nach dem Muster, wie er sie interpretieren müsste, wenn er den richtigen Variablentyp bekommen hätte. Dadurch kann das Ergebnis unbrauchbar sein.

Flaggen
Bitfeld
Beschreibung
Dieser Variablentyp ist dafür vorgesehen, wenn einzelne Bits ausgelesen oder beschrieben werden müssen.

Eine typische Anwendung hierfür ist das Speichern von mehreren einzelnen Variablen, welche entweder den Wert "unwahr" oder "wahr" gespeichert halten.

Dieser Variablentyp kann in jedem Byte vom Arbeitsspeicher und in jedem Bit vom Byte beginnen.

Zahlen
Fließkommazahl mit Vorzeichen
Beschreibung
Bei jeder Fließkommazahl, die von der x86-Architektur hardwaremäßig unterstützt wird, wird jeweils das höchstwertigste Bit genutzt, um das Vorzeichen zu speichern.

  • Wenn das höchstwertigste Bit den Wert "0" gespeichert hält, dann ist der Wert als positiv zu interpretieren.
  • Wenn das höchstwertigste Bit den Wert "1" gespeichert hält, dann ist der Wert als negativ zu interpretieren.

Es gibt also keine Fließkommazahlen ohne Vorzeichen, die von der x86-Architektur hardwaremäßig unterstützt werden.

Alle anderen Bits werden zur Speicherung des Werts genutzt.

In dieser Dokumentation werden Fließkommazahlen weitgehend außer Acht gelassen.

Größen
existiert seit: Größe:
Mit der Einführung der "x87-floating point unit" ("x87-FPU").

1989, mit der Einführung des Intel486-Prozessors, wurde der erste Prozessor auf den Markt gebracht, der die "x87-FPU" im selben Gehäuse integriert hatte, wo auch der CPU untergebracht war.
4 Byte, also 32 Bit
Mit der Einführung der "x87-floating point unit" ("x87-FPU").

1989, mit der Einführung des Intel486-Prozessors, wurde der erste Prozessor auf den Markt gebracht, der die "x87-FPU" im selben Gehäuse integriert hatte, wo auch der CPU untergebracht war.
8 Byte, also 64 Bit
Mit der Einführung der "x87-floating point unit" ("x87-FPU").

1989, mit der Einführung des Intel486-Prozessors, wurde der erste Prozessor auf den Markt gebracht, der die "x87-FPU" im selben Gehäuse integriert hatte, wo auch der CPU untergebracht war.
10 Byte, also 80 Bit

Ganzzahl mit Vorzeichen
Beschreibung
Bei einer Variable diesem Typ wird jeweils das höchstwertigste Bit genutzt, um das Vorzeichen zu speichern.

Alle anderen Bits werden zur Speicherung des Werts genutzt.

Größen und Wertebereiche
existiert seit: Größe: Wertebereich:
1978, mit der Einführung vom 8086- und 8088-Prozessor 1 Byte, also 8 Bit -128 bis 127
1978, mit der Einführung vom 8086- und 8088-Prozessor 2 Byte, also 16 Bit -32.768 bis 32.767
1985, mit der Einführung vom Intel386-Prozessor 4 Byte, also 32 Bit -2.147.483.648 bis 2.147.483.647
1989, mit der Einführung vom Intel486-Prozessor.

Beispielsweise mit der Hilfe vom Befehl
  • "load integer" ("fild") oder
  • "store integer and pop register stack" ("fistp").
8 Byte, also 64 Bit -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807

Interpretation vom gespeicherten Wert
  • Wenn das höchstwertigste Bit den Wert "0" gespeichert hält, dann ist der Wert als positiv zu interpretieren.
  • Wenn das höchstwertigste Bit den Wert "1" gespeichert hält, dann ist der Wert als negativ zu interpretieren.

Es folgen einige Beispielwerte für eine Variable von diesem Typ, welche "1 Byte"-groß ist:

gespeicherter Wert:
(in der dezimal-Schreibweise)
Wertigkeit vom Bit:
27 26 25 24 23 22 21 20
-128 1 0 0 0 0 0 0 0
-127 1 0 0 0 0 0 0 1
-2 1 1 1 1 1 1 1 0
-1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1
126 0 1 1 1 1 1 1 0
127 0 1 1 1 1 1 1 1

Anhand der Tabelle können gedanklich verschiedene Additions- und Subtraktionsmöglichkeiten ausprobiert werden.

Bei einer Addition oder Subtraktion ergibt sich das richtige Ergebnis, ohne dass dem Additions- oder Subtraktionsbefehl bekannt sein muss, ob die Parameter vom Variablentyp "Ganzzahlen ohne Vorzeichen" oder "Ganzzahlen mit Vorzeichen" sind.

 1111 1110     -2
+0000 0001    + 1
----------    ---
=1111 1111    =-1

Der Taschenrechner von Windows stellt übrigens die Dezimalzahl "-1" in der Binärdarstellung ebenfalls als "1111 1111" dar, anstatt "-0000 0001" zur Darstellung zu verwenden.

Wegen dieser Interpretation vom gespeicherten Wert können manche Maschinenbefehle sowohl Variablen vom Typ "Ganzzahlen ohne Vorzeichen" als auch Variablen vom Typ "Ganzzahlen mit Vorzeichen" korrekt verarbeiten. Andere Maschinenbefehle, wie zum Beispiel die Maschinenbefehle, um eine Division oder eine Multiplikation durchzuführen, können nur Ganzzahlen eines bestimmten Typs korrekt verarbeiten.

Ganzzahl ohne Vorzeichen
Beschreibung
Bei einer Variable von diesem Typ werden alle Bits für den Wert genutzt.

Größen und Wertebereiche
existiert seit: Größe: Wertebereich:
1978, mit der Einführung vom 8086- und 8088-Prozessor 1 Byte, also 8 Bit 0 bis 255
1978, mit der Einführung vom 8086- und 8088-Prozessor 2 Byte, also 16 Bit 0 bis 65.535
1985, mit der Einführung vom Intel386-Prozessor 4 Byte, also 32 Bit 0 bis 4.294.967.295
1989, mit der Einführung vom Intel486-Prozessor.

Beispielsweise mit der Hilfe vom Befehl
  • "load integer" ("fild") oder
  • "store integer and pop register stack" ("fistp").
8 Byte, also 64 Bit 0 bis 18.446.744.073.709.551.615

Interpretation vom gespeicherten Wert
Da nicht gespeichert wird, ob der Wert negativ oder positiv ist, liegt die Interpretation des Werts am Programmierer.

Oft werden Werte ohne Vorzeichen als positive Werte interpretiert. Es ist aber auch möglich, die Werte als negative Werte zu interpretieren und dann beispielsweise eine Addition von 5 und 10 durchzuführen und als (-5) + (-10) = -15 zu interpretieren.

Manche Maschinenbefehle können sowohl Variablen vom Typ "Ganzzahlen ohne Vorzeichen" als auch Variablen vom Typ "Ganzzahlen mit Vorzeichen" korrekt verarbeiten. Andere Maschinenbefehle können nur Ganzzahlen eines bestimmten Typs korrekt verarbeiten.

Zeichenketten
Bit-Zeichenkette
Beschreibung
Eine Variable von diesem Typ hält einzelne Zeichen in jeweils einer fixen Anzahl von Bits gespeichert.

Eine typische Anwendung hierfür ist das Speichern einer ASCII-kodierte Zeichenkette, von der jedes Zeichen "7 Bit"-groß ist.

Dieser Variablentyp kann in jedem Byte des Arbeitsspeichers und in jedem Bit des Bytes beginnen.

Wie sich das Platzieren im Arbeitsspeicher auf die Anzahl der notwendigen Speicherzugriffe auswirkt, konnte ich bisher noch nicht herausfinden. (Notiz: das sollte ich prüfen)

Größe
Für eine Variable von diesem Typ wird die Größe eines Zeichens definiert, indem die Anzahl der notwendigen Bits angegeben wird. Die Gesamtgröße der Zeichenkette ergibt sich dann aus der Größe für ein Zeichen und der Anzahl der gespeicherten Zeichen.

Die Gesamtgröße kann aber nicht größer als 4.294.967.295 Bit (ca. 512 MB) sein.

Manche Speichermethoden sehen vor, dass das Ende der Zeichenkette markiert wird, indem ein weiteres Zeichen angehängt wird, von dem alle Bits auf "0" gesetzt sind.

Dieses zusätzliche Zeichen wird dann "Abschlusszeichen" (im Englischen: "termination character") genannt.

Byte-Zeichenkette
Beschreibung
Eine Variable von diesem Typ hält einzelne Zeichen in jeweils einer fixen Anzahl von Bytes gespeichert.

Dieser Variablentyp bietet sich besonderst an, wenn in der vorgesehenen Zeichenkodierung die notwendigen Bits für ein einzelnes Zeichen sich restlos durch 8 teilen lässt.

Intel gibt für diesen Variablentyp keine ausdrücklichen Hinweise, ob und wie dieser Typ für Zeichenketten genutzt werden kann, bei denen die einzelnen Zeichen unterschiedlich groß sind, aber die Anzahl der Bits pro Zeichen sich dennoch restlos durch 8 teilen lässt. (Notiz: das sollte ich prüfen)

Dies ist beispielsweise bei der Zeichenkodierung "UTF-8" der Fall.

Dieser Variablentyp kann in jedem Byte des Arbeitsspeichers beginnen.

Wie sich das Platzieren im Arbeitsspeicher auf die Anzahl der notwendigen Speicherzugriffe auswirkt, konnte ich bisher noch nicht herausfinden. (Notiz: das sollte ich prüfen)

Größe
Für eine Variable von diesem Typ wird die Größe eines Zeichens definiert, indem die Anzahl der notwendigen Bytes angegeben wird.

Es folgt eine Auflistung der zulässigen Größen pro Zeichen:

existiert seit: Größe:
1978, mit der Einführung vom 8086- und 8088-Prozessor 1 Byte, also 8 Bit
1978, mit der Einführung vom 8086- und 8088-Prozessor 2 Byte, also 16 Bit
1985, mit der Einführung vom Intel386-Prozessor 4 Byte, also 32 Bit

Die Gesamtgröße der Zeichenkette ergibt sich dann aus der Größe für ein Zeichen und der Anzahl der gespeicherten Zeichen.

Manche Speichermethoden sehen vor, dass das Ende der Zeichenkette markiert wird, indem ein weiteres Zeichen angehängt wird, von dem alle Bits auf "0" gesetzt sind.

Dieses zusätzliche Zeichen wird dann "Abschlusszeichen" (im Englischen: "termination character") genannt.

Zeiger
logische Adresse
Beschreibung
Eine Variable von diesem Typ ist eine Kombination von
  • einer "2 Byte"-großen Segment-Identifikationskennung und
  • einem "2 Byte"-großen oder "4 Byte"-großen Offset vom Segmentanfang.

Bei einem "4 Byte"-großen Wert geben
  • die Bits der Wertigkeiten 20 bis 215 den Offset vom Byte vom Segmentanfang an und
  • die Bits der Wertigkeiten 216 bis 231 die Segment-Identifikationskennung an.

Bei einem "6 Byte"-großen Wert geben
  • die Bits der Wertigkeiten 20 bis 231 den Offset vom Byte vom Segment-Anfang an und
  • die Bits der Wertigkeiten 232 bis 247 die Segment-Identifikationskennung an.

Die beiden Einzelwerte von diesem Variablentyp werden genauso gespeichert, wie Werte vom Variablentyp "Ganzzahl ohne Vorzeichen" gespeichert werden. Daher können beispielsweise Additionsbefehle (Plus rechnen) und Subtraktionsbefehle (Minus rechnen) auch auf einen der beiden Einzelwerte angewand werden.

Was allerdings nicht so einfach möglich ist, ist einen Additionsbefehl (Plus rechnen) oder Subtraktionsbefehl (Minus rechnen) auf den kompletten Wert von diesem Variablentyp, also die Offset-Angabe und die Segment-Angabe, anzuwenden. Auch wenn der Wert von diesem Variablentyp "4 Byte"-groß ist, könnte durch eine Addition (Plus rechnen) in der Offset-Angabe ein Übertrag entstehen, welcher dann zur Segment-Angabe hinzugerechnet wird.

Bezeichnungen
Dieser Variablentyp wird auch
  • "ferner Zeiger" (im Englischen: "far pointer")
genannt.

Größen
Eine Variable von diesem Typ ist
  • entweder "32 Bit"-groß, also "4 Byte"-groß,
  • oder "48 Bit"-groß, also "6 Byte"-groß.

Verwendung bei Segmentierungsmethoden
Segmentierungsmethode: Zweck:
einheitliche Segmente (im Englischen: real-address mode memory model) zur Angabe von der vollständigen Adresse
einzelnes Segment (im Englischen: flat memory model) zur Angabe von der vollständigen Adresse
separate Segmente (im Englischen: segmented memory model) zur Angabe von der vollständigen Adresse

Offset zum Segmentanfang
Beschreibung
Eine Variable vom Typ "Offset zum Segmentanfang" gibt ein Byte in einem bis zu "4 Gigabyte"-großen Segment an.

Der Wert von diesem Variablentyp wird genauso gespeichert, wie der Wert vom Variablentyp "Ganzzahl ohne Vorzeichen" gespeichert wird. Daher können beispielsweise Additionsbefehle (Plus rechnen) und Subtraktionsbefehle (Minus rechnen) auch auf Werte vom Variablentyp "Offset zum Segmentanfang" angewand werden.

Bezeichnungen
Diese Variablentyp wird auch
  • "naher Zeiger" (im Englischen: "near pointer")
genannt.

Wenn dieser Variablentyp im Zusammenhang mit der Segmentierungsmethode "separate Segmente" (im Englischen: segmented memory model) verwendet wird, dann wird er auch
  • "effektive Adresse" (im Englischen: "effective address") oder
  • "Offset"
genannt. Diese Bezeichnungen beziehen sich dann allerdings meist eher auf den Wert als auf den Variablentyp.

Größe
Eine Variable von diesem Variablentyp ist
  • "16 Bit"-groß, also "2 Byte"-groß oder
  • "32 Bit"-groß, also "4 Byte"-groß.

Verwendung bei Segmentierungsmethoden
Segmentierungsmethode: Zweck:
einheitliche Segmente (im Englischen: real-address mode memory model) zur Angabe vom Offset vom Segmentanfang
einzelnes Segment (im Englischen: flat memory model) zur Angabe von der vollständigen Adresse
separate Segmente (im Englischen: segmented memory model) zur Angabe vom Offset vom Segmentanfang


Stichwortverzeichnis

Variablentypen

Arten


Namen

deutsch


englisch


weiteres Material zu diesem Thema

Dokumente

Name vom Sprache: Umfang vom Inhalt: Weblink:
Autor: Dokument:
x86-Architektur - allgemeine Informationen deutsch
  • allgemeine Informationen über die x86-CPU-Architektur
OnTheServer.de/Downloads/
x86-Architektur - Maschinensprache
  • enthält Hintergrundinformationen über Maschinensprachen,
  • beschreibt die Maschinensprache von der x86-CPU-Architektur und
  • zeigt, wie die Maschinensprache von der x86-CPU-Architektur benutzt werden kann
x86-Architektur - Register beschreibt häufig verwendete Prozessor-Register von der x86-Architektur
Intel Corporation Intel® 64 and IA-32 Architectures - Software Developer's Manual - Volume 1: Basic Architecture

Bestellnummer: 253665
englisch
  • gibt in den Kapiteln
    • "1.3.4 Segmented Addressing" und
    • "3.3 MEMORY ORGANIZATION"
    Informationen über die verschiedenen Methoden, den Speicher zu adressieren
  • gibt im Kapitel
    • "CHAPTER 4 - DATA TYPES"
    Informationen über die verschiedenen hardwareunterstützten Variablentypen
intel.com/products/processor/manuals/

Aufnahme von weiteren Materialien

Wenn dann
Sie dürfen durchaus auch Ihre eigenen Materialien zuschicken.

Bei den zugesendeten Materialien werde ich beurteilen, ob sie sich für die Auflistung eignen. Manche Materialien werden nicht aufgenommen, weil beispielsweise ein Hinweis enthalten ist, dass Es besteht kein Anspruch darauf, dass zugesendete Materialien aufgenommen werden.

Link zum Kapitel "wie man den Verfasser kontaktiert".