| Inhaltsverzeichnis
|  | Übersicht Kapitel 3
2.7 Systembus-Schnittstelle |  |  |  | 3.2 Befehlssätze

## 3.1 Datentypen und Datenformate

Prinzipiell kann zwar jeder Mikroprozessor jeden Datentyp verarbeiten, jedoch bestehen bei den verschiedenen Prozessoren große Unterschiede darin, welche Datentypen die Hardware selbst, also insbesondere die ALU im Rechenwerk, als Operanden zuläßt. Diese Datentypen können in den Maschinenbefehlen selbst angegeben werden. Alle anderen müssen durch ein geeignetes (Maschinen-)Programm auf elementarere Datentypen zurückgeführt und in mehreren Schritten berechnet werden, d.h. ihre Bearbeitung wird durch den Prozessor in Software emuliert.

In diesem Abschnitt werden Sie sehen, daß der Umfang der Datentypen, die direkt von der Hardware des Prozessors verarbeitet werden können, einen der größten Unterschiede zwischen den 8-bit-Prozessoren einerseits und den 16/32-bit-Prozessoren andererseits darstellt.

Ältere 16/32-bit-Prozessoren unterstützten zum Teil auch Datentypen, die sie in ihrem Rechenwerk selbst gar nicht direkt verarbeiten konnten. Dazu gehören die am Ende dieses Abschnittes beschriebenen Gleitpunktzahlen. Diese konnten vom Prozessor durch spezielle Befehle (nur) aus dem Speicher in seine Register eingelesen oder von dort in den Speicher übertragen werden. Durch die Möglichkeit, auf diese Datentypen im Speicher zugreifen zu können, wurde einerseits die Softwareemulation erleichtert. Andererseits konnte der Prozessor diese Daten aber auch zur Verarbeitung in einen Coprozessor übertragen und dessen Ergebnisse im Arbeitsspeicher ablegen. Seit dem Intel 80486 verfügen (fast) alle modernen universellen Mikroprozessoren über eine integrierte Gleitpunkt-Arithmetikeinheit.

- 3.1.1 Datentypen und Datenformate bei 8-bit-Prozessoren
- 3.1.2 Datentypen und Datenformate von 16/32-bit-Prozessoren
- 3.1.3 Bit- und blockorientierte Datentypen und ihre Formate
- 3.1.4 Weitere Datentypen und Datenformate

### 3.1.1 Datentypen und Datenformate bei 8-bit-Prozessoren |

Im Bild 3.1-1 sind die Datentypen und ihre Formate dargestellt, die von 8-bit-Mikroprozessoren direkt verarbeitet oder unterstützt werden. Sie werden im folgenden kurz beschrieben.

Bild 3.1-1: Datentypen und Datenformate bei 8-bit-Prozessoren

3.1.1.1 8-bit-Integers (16-bit-Integers)

Daten dieses Typs stellen ganze Zahlen dar. 8-bit-Integers sind bei 8-bit-Prozessoren die längsten Zahlen, die in einem Schritt von der ALU verarbeitet werden können. Moderne 8-bit-Prozessoren verarbeiten jedoch auch 16-bit-Integers, auch wenn dies durch die ALU in mehreren Schritten durchgeführt werden muß. Eine 8-bit-Integerzahl wird gewöhnlich auch als Byte, eine 16-bit-Integerzahl als Wort bezeichnet. 8/16-bit-Integers können sowohl als vorzeichenlose (unsigned, Ordinal) wie auch als vorzeichenbehaftete (signed) Zahlen verarbeitet werden. Im letzten Fall wird das Vorzeichen durch das höchstwertige Bit angegeben. Dabei werden negative Zahlen im Zweierkomplement repräsentiert und ihr Vorzeichenbit ist '1'. Die Wertigkeiten der einzelnen Bits und die darstellbaren Zahlenbereiche sind in der folgenden Tabelle angegeben.

Tabelle 3.1-1: Bit-Wertigkeiten und Zahlenbereiche der Integer-Zahlen

Format | vorzeichenlos | vorzeichenbehaftet
| Bit-Wertigkeiten | Zahlenbereich | Bit-Wertigkeiten | Zahlenbereich
8 bit (Byte) | 27,.....,20 | 0 £ Z £ 255 | -27, 26,....,20 | -128 £ Z £127
16 bit (Wort) | 215,.....,20 | 0 £ Z £ 65535 | -215, 214.....,20 | -32768 £ Z £32767

3.1.1.2 BCD-Zahlen

Jeweils 4 Bits des Datums werden als binär codierte Dezimalziffer (Binary Coded Decimal BCD) aufgefaßt. Bei der Speicherung und Verarbeitung von BCD-Zahlen besteht einerseits die Möglichkeit, in jedem Byte nur die unteren 4 Bits mit einer BCD-Ziffer zu belegen und die oberen durch Nullen aufzufüllen (unpacked BCD). Andererseits kann man zwei BCD-Ziffern in einem Byte unterbringen und spricht dann von 'gepackten' BCD-Zahlen (packed BCD). Bei einigen Prozessoren kann die ALU BCD-Zahlen direkt verarbeiten, bei anderen muß durch einen besonderen Befehl (z.B.SIZE=1 DAADecimal Adjust Accumulator) nach jedem arithmetischen Befehl das Ergebnis im Akkumulator in eine BCD-Zahl umgewandelt werden. Dazu wird das Hilfs-Übertragsbit (Half-Carry Flag) im Statusregister benutzt (s. Abschnitt 2.4.1).

3.1.1.3 Pointer

Ein Pointer (Zeiger) ist eine Adresse - also eine vorzeichenlose ganze Zahl -, die auf einen Operanden im Speicher zeigt. In der Regel kann durch einen Pointer der gesamte logische Adreßraum des Mikroprozessors angesprochen werden, d.h. die Länge des Pointers stimmt mit der Länge der (logischen) Adresse überein.

3.1.1.4 Statuswort

Das Statuswort entspricht dem Inhalt des im Abschnitt 2.4.1 beschriebenen Statusregisters. Wie dort bereits erwähnt, ist es eine Verkettung von einzelnen Bits, zwischen denen kein logischer Zusammenhang besteht. Dieses Wort kann in das Statusregister geladen oder von dort gelesen werden. Oft sind einige Bits des Statusregisters nicht benutzt. Die korrespondierenden Bits im Statuswort haben dann keine Bedeutung (don't care).

3.1.1.5 Boolesche Daten

Die meisten Prozessoren unterstützen Boolesche Daten in der Form, daß sie die Bits eines Speicherworts oder Registers als unabhängige logische Größen behandeln, die jeweils den Wert '0' (logisch: falsch - false) oder '1' (logisch: wahr - true) annehmen können. Durch spezielle, logische Befehle kann mit diesen Booleschen Werten gerechnet werden, wobei die ausgewählte Operation parallel mit allen Bits ausgeführt wird (s. Abschnitt 3.2).

### 3.1.2 Datentypen und Datenformate von 16/32-bit-Prozessoren |

Bei den 16/32-bit-Prozessoren kommen zu den bisher beschriebenen Datentypen und ihren Formaten noch eine Reihe weiterer hinzu. Diese sind im Bild 3.1-2 dargestellt.

Bild 3.1-2: Zusätzliche Datentypen bei 16/32-bit-Prozessoren

3.1.2.1 32/64-bit-Integers

Die maximale Länge einer ganzen Zahl wird (bei einigen Prozessoren) auf die doppelte Datenbusbreite erweitert, d.h. bei 16-bit-Prozessoren werden 32-bit-Integers, bei 32-bit-Prozessoren 64-bit-Integers direkt verarbeitet. Man spricht im ersten Fall von einem Doppel- oder Langwort, im zweiten Fall existiert nur der englische Begriff Quadword (vierfaches Wort). Wie bei den 8-bit-Integers können auch diese Zahlen vorzeichenlos (unsigned, Ordinal) oder vorzeichenbehaftet (signed) sein. Im letzten Fall wird das Zweierkomplement benutzt, und das höchstwertige Bit gibt das Vorzeichen an. Die Prozessoren legen diese Wörter auf unterschiedliche Weise im Speicher ab: Einerseits werden die einzelnen Bytes des Wortes/Doppelwortes mit steigender Wertigkeit in Speicherzellen mit aufsteigenden Adressen (Little Endian Memory Format), andererseits mit absteigenden Adressen (Big Endian Memory Format) gelagert.

Selbsttestaufgabe S3.1-1: (–>Lösungsvorschlag)
Bestimmen Sie näherungsweise für 32- und 64-bit-Integers mit bzw. ohne Vorzeichen den darstellbaren Zahlenbereich.

3.1.2.2 Pointer

Bei 16/32-bit-Prozessoren ist der oben beschriebene Datentyp Pointer den komplexeren Adressierungsarten und Speicherverwaltungs-Mechanismen angepaßt. Ein Datum vom Typ Pointer enthält nun nicht mehr nur die logische Adresse eines Operanden, sondern die Nummer eines bestimmten Segments des Adreßraumes und die Adreßdistanzen (Offsets) zu einem bestimmten Registerinhalt. (Darauf wird im Abschnitt 3.3 ausführlich eingegangen.)

3.1.2.3 Gleitpunktzahlen(Floating-Point Numbers)

Im Abschnitt 2.4.4 wurden Darstellung und Bearbeitung von Gleitpunktzahlen (reelle Zahlen) durch die Gleitpunkt-Einheit des Mikroprozessors bereits kurz beschrieben. Moderne (universelle) RISC- und CISC-Mikroprozessoren sowie die Gleitpunkt-DSPs besitzen diese auch als Arithmetik-Einheit (Floating-Point Unit - FPU) bezeichnete Komponente bereits auf dem Chip. Ältere Prozessoren konnten Gleitpunktzahlen zwar wie Integer-Zahlen im Speicher ansprechen, aber nicht direkt verarbeiten. In diesen Systemen mußte die Verarbeitung entweder durch einen eigenständigen Arithmetik-Prozessor übernommen oder aber durch ein Maschinenprogramm des Mikroprozessors ausgeführt ("emuliert") werden. Während bis zur Mitte der 80er Jahre die meisten Hersteller von Arithmetik-Prozessoren und FPUs nur ihre eigenen Formate für Gleitpunktzahlen unterstützen, hat sich seitdem ein Standard für Gleitpunktzahlen, der im folgenden Exkurs beschrieben wird, weitgehend durchgesetzt. Diesen wollen wir nun ausführlicher beschreiben.

Der IEEE-754-Standard

Mit dem IEEE-754-Standard des Institute of Electrical and Electronics Engineers (IEEE, USA, 1985) wurde in der ersten Hälfte der 80er Jahre die erste Norm für eine (binäre) Gleitpunkt-Arithmetik erstellt. In ihr sind die benutzbaren Datenformate, die Rundungsvorschriften sowie die Behandlung von Ausnahmesituationen, wie Bereichsüberlauf usw., geregelt. Außerdem gibt sie einen Grundstock an mathematischen Funktionen vor, die mit diesen Datenformaten durchführbar sein müssen. Auf diese Funktionen gehen wir erst im Abschnitt 3.2 näher ein.
Der IEEE-754-Standard wurde bei der Entwicklung aller modernen Arithmetik-Prozessoren zugrunde gelegt. Dadurch ist es nun möglich, mathematische Berechnungen, die für einen bestimmten Rechnertyp aufgestellt wurden, auch auf anderen Rechnern ohne Abweichungen in den Ergebnissen ablaufen zu lassen ("Portabilität"). Aus Kompatibilitätsgründen können einige DSPs jedoch wahlweise nach dem IEEE-Standard oder dem proprietären Zahlenformat des Prozessorherstellers rechnen. Der IEEE-754-Standard definiert zwei Basis-Gleitpunktformate, die im Bild 3.1-3 a) und b) skizziert sind:

- einfach-genaue Zahlen der Länge 32 bit (single),
- doppelt-genaue Zahlen der Länge 64 bit (double),

Im DSP-Bereich wird z.T. noch ein 40-bit-Format benutzt, das gegenüber der 32-bit-Darstellung nur eine um 8 bit verlängerte Mantisse besitzt. Der IEEE-Standard läßt darüber hinaus noch erweiterte Formate (extended) zu, die für Mantisse und Exponent eine größe Anzahl von Bits erlauben. Im Bild 3.1-3c) ist dazu das erweitert-genaue 80-bit-Format (double extended) dargestellt, das von vielen Arithmetik-Einheiten und DSPs unterstützt wird. Im Unterschied zu den beiden ersten Formaten ist das 80-bit-Format im IEEE-Standard nicht bis auf die Bitebene herab exakt definiert. Dieses Format ist nur für Zwischenergebnisse gedacht, um eine höhere Rechengenauigkeit zu erreichen. Endergebnisse sollen stets auf das 32- bzw. 64-bit-Format gerundet werden. Auf andere erweiterte Formate wollen wir hier nicht eingehen. Jede Zahl Z wird, wie bereits oben beschrieben, durch drei Bitfelder dargestellt:

- Das höchstwertige Bit gibt das Vorzeichen (VZ) der Zahl an. Wie üblich gilt dabei für positive Zahlen VZ=0 und für negative Zahlen VZ=1.
- Die Mantisse liegt in normalisierter Form vor, bei der aber die höchstwertige '1' vor den Punkt "verschoben" wird. So bekommt sie die Form '1.M'. Um Platz zu sparen, wird die führende '1', außer beim 80-bit-Format, jedoch nicht dargestellt. Die Mantisse 1.M wird im englischen Sprachgebrauch auch als Significand, der Teil M der Mantisse hinter dem Dezimalpunkt mit Fraction bezeichnet. Er ist beim 32-bit-Format 23 bit und beim 64-bit-Format 52 bit lang. Beim 80-bit-Format beträgt die Länge der Mantisse (1.M) 64 bit.

Bild 3.1-3: Gleitpunktzahlen nach dem IEEE 754 Standard

Anders als bei den ganzen Zahlen der Standard-Mikroprozessoren üblich, werden die Mantissen der negativen Gleitpunktzahlen jedoch nicht im Zweierkomplement, sondern nach Betrag und Vorzeichen dargestellt. Die Zahl 0 wird durch '0'-Bits in allen Positionen repräsentiert. Das Vorzeichen ist dabei beliebig, so daß es eine positive und eine negative Darstellung der 0 gibt. Sei k die Anzahl der durch die Mantisse belegten Bits. Die Nachpunktstelle mi (i=0,..,k-1) der Mantisse 1.M in der Darstellung nach Bild 3.1-3 hat dann für die drei beschriebenen Formate die folgende Wertigkeit Wi:

- 32-bit-Format, k=23: Wi = 2i-k
- 64-bit-Format, k=52: Wi = 2i-k
- 80-bit-Format, k=64: Wi = 2i-k+1

Der Mantissenwert liegt (in binärer Darstellung) zwischen den Grenzen:

1.000...002 <= (1.M)2 <= 1.111...112.

Diesen Ungleichungen entspricht:

1.0£ (1.M)2 < 2.0 ,

da (1.111...11)2 ungefähr 2 ist. Der Anzahl k der Bits der Mantisse entsprechen k/log210, also ungefähr k/3.32, Dezimalziffern. Daher besitzen die vorgestellten Zahlenformate eine Genauigkeit von 7, 15 bzw. 19 Dezimalstellen.

Bei allen von 0 verschiedenen Zahlen wird anstatt eines Exponenten E die Charakteristik C (biased Exponent) angegeben. Diese hat je nach Format eine Länge von n = 8, 11 oder 15 bit. Sie nimmt alle Werte zwischen 0 und 2n-1 an. Die Grenzwerte C=0 und C=2n-1 dienen aber, wie unten gezeigt wird, zur Kennzeichnung bestimmter Ausnahmesituationen. Die Charakteristik entsteht durch Addition einer festen Basiszahl (bias) zum Exponenten:

- 32-bit-Format: C = E + 127 , für -127 <= E <= 127,
- 64-bit-Format: C = E + 1023 , für -1023 <= E <= 1023,
- 80-bit-Format: C = E + 16383 , für -16383 <= E <= 16383.

Damit lassen sich für alle Werte von C (0 < C < 2n-1) die darstellbaren Zahlen nach folgender Vorschrift berechnen:

- 32-bit-Format: (-1)VZ×2 C-127×(1.M)2 ,
- 64-bit-Format: (-1)VZ×2 C-1023×(1.M)2 ,
- 80-bit-Format:(-1)VZ2 C-16383×(1.M)2.

Ausnahmen bei den Zahlenformaten

Die niederstwertige Charakteristik C=0 (mit M¹ 0) bzw. die höchstwertige Charakteristik C=2n-1 sind zur Zahlendarstellung nicht zugelassen, da diese beiden Werte zur Kennzeichnung der folgenden Ausnahmesituationen nach einer Operation dienen:

- C=0, M ungleich 0: Z = (-1)VZ×2-K(0.M)2, mit K=2n-2, also K=126 im 32-bit-Format, K=1022 im 64-bit-Format. Hier liegt ein Unterlauf vor, d.h. die Zahl Z wird in denormalisierter Form dargestellt, wodurch mit jeder führenden Null in M ein Verlust an Genauigkeit eintritt;
- C=2n-1, M ungleich 0:
  Z ist keine gültige Gleitpunktzahl (Not a Number - NaN);
- C=2n-1, M=0: Z = (-1)VZ × unendlich:
  Das Ergebnis einer Operation ist positiv unendlich (+unendlich , VZ=0) oder negativ unendlich (-unendlich , VZ=1).

Der IEEE-754-Standard sieht vor, daß beim Auftreten einer dieser Ausnahmesituationen im Coprozessor auch eine Ausnahmesituation (Trap) im Mikroprozessor gemeldet und entsprechend behandelt wird, wie es im Abschnitt 2.3 beschrieben wurde.

Rundung von Gleitpunktzahlen

Sehr viele Gleitpunkt-Einheiten arbeiten intern immer im 80-bit-Format. Alle reellen (vorzeichenbehafteten) Zahlen, die bei einer Operation als Ergebnis auftreten und innerhalb der Grenzen des darstellbaren Zahlenbereiches liegen, aber nicht ins gewählte Format passen, können nach einer der folgenden Varianten gerundet werden:

- Rundung zur nächstgelegenen darstellbaren Zahl,
- Rundung zur nächstgrößeren darstellbaren Zahl,
- Rundung zur nächstkleineren darstellbaren Zahl,
- Rundung zur betragsmäßig nächstkleineren darstellbaren Zahl (Abschneiden, truncate).

Als Ergänzung zu den dualen Gleitpunkt-Zahlen des IEEE-Standards wird in Bild 3.1-3d) nur eine von vielen Möglichkeiten für die Darstellung von (doppelt-genauen) Gleitpunkt-Dezimalzahlen angegeben. Bei dieser Darstellung besitzen Exponent und Mantisse die vom IEEE-Standard gerade noch zugelassen Größen, für die eine fehlerfreie Konvertierung ins duale 80-bit-Format und zurück garantiert werden kann. Anders als bei den Dualzahl-Formaten wird hier der Exponent durch Betrag und Vorzeichen (VE) angegeben und bezieht sich selbstverständlich auf die Basis '10'. Der Betrag des Exponenten liegt zwischen 0 und 999. Die ganzzahlige Mantisse M besteht aus 17 Dezimalziffern. Der Wert einer Zahl Z ergibt sich damit zu

Z = +/- M * 10 +/-E ,

wobei dir Vorzeichen (+/-) durch die Bits VM und VE bestimmt sind. Durch zwei Bits wird der Typ der Zahl festgelegt, wobei zwischen positiv und negativ unendlich sowie gültige und nicht gültige Zahl (NaN - not a number) unterschieden wird. In der Regel werden diese Zahlen von der Arithmetik-Einheit nicht direkt verarbeitet. Statt dessen werden die Eingabeoperanden zunächst in duale Gleitpunktzahlen umgewandelt, vom Rechenwerk bearbeitet und das Ergebnis dann wieder in das dezimale Format zurück gewandelt.

Selbsttestaufgabe S3.1-2: (–>Lösungsvorschlag)
a) Bestimmen Sie für die 32- bzw. 64-bit-Zahlenformate den darstellbaren (absoluten) Zahlenbereich. b) Stellen sie die Zahlen Z1=-1,75 und Z2=36 864 im 32-bit-Zahlenformat als Binärzahl dar.

Eine Mittelstellung zwischen den ganzen Zahlen (Integers) und den Gleitpunktzahlen (Floating-Point Numbers) bilden die Festpunktzahlen (Fixed-Point Numbers), die besonders im Bereich der DSPs eine große Bedeutung besitzen. Die Rechenwerke vieler DSPs können häufig sowohl Integer-Zahlen wie auch Festpunktzahlen berechnen. In diesem Kurs wollen wir es mit einer kurzen Darstellung der Festpunkt-Zahlenformate im Abschnitt 3.1 bewenden lassen. Besonderheiten der Festpunkt-Rechenwerke werden bei der Beschreibung der DPSs behandelt.

### 3.1.3 Bit- und blockorientierte Datentypen und ihre Formate |

Im Bild 3.1-4 werden zunächst strukturierte Datentypen dargestellt, bei denen die kleinste unterscheidbare Informationseinheit ein Bit ist. Im Bild 3.1-4 unten ist mit dem "Block" auch die komplexeste Datenstruktur skizziert, die von Mikroprozessoren (ohne spezielle Arithmetik-Einheit) verarbeitet werden kann.

Bild 3.1-4: Bit- bzw. blockorientierte Datentypen.

3.1.3.1 Bit

Das Datum ist hier ein einzelnes Bit in einem ausgewählten Byte eines Registers oder einer Speicherzelle. Die Auswahl geschieht zweistufig dadurch, daß zunächst das Basisbyte (Base Byte) angesprochen wird, in dem das Bit liegt, und darin dann das gewünschte Bit.

3.1.3.2 Bitfelder(Bit Fields)

Zwischen 1 und 32 hintereinander folgende Bits im Speicher können zu einem Datum zusammengefaßt werden. Diese müssen in einem von Prozessor zu Prozessor verschieden großen Speicherbereich liegen.

- Im Minimalfall ist er nur 32 bit (4 byte) groß, und das Basisbyte, d.h. das Byte, das durch den Befehl selbst adressiert wird, enthält das erste Bit des Feldes als höchstwertiges Bit (Most Significant Bit - MSB).
- Im Maximalfall ist der Bereich 232 bit lang. Das MSB des Basisbytes ist nun der Bezugspunkt: Die Position des ersten Bits im Feld wird durch eine vorzeichenbehaftete Distanz (Offset, Einheit: Bits) zu diesem Bezugspunkt bestimmt. Der Befehl besteht hier also aus dem OpCode, der Adresse des Basisbytes und dem Offset.

Bitfelder spielen insbesondere bei der Verarbeitung von Audio- und Videodaten eine große Rolle, da dort die Daten - je nach akustischer oder optischer Auflösung - eine variable Länge besitzen können. Die Farbinformation eines Bildpunktes kann z.B. aus drei 8-bit-Bitfeldern bestehen, die hintereinander im Speicher abgelegt sind. Sie bestimmen jeweils den Anteil der drei Grundfarben Rot, Grün oder Blau und erzeugen so eine von 224 Farben.

1.7.3.3 Bitketten(Bit Strings)

Dies sind Erweiterungen der Bitfelder auf bis zu 4 Gbit. Die Auswahl geschieht analog der zuletzt bei den Bitfeldern beschriebenen, jedoch liegt die Bitkette immer symmetrisch zum MSB des Basisbytes. Natürlich können Bitketten - wegen ihrer Länge - nicht in ein internes Register des Prozessors geladen werden. Die Bearbeitung findet daher im Speicher statt und beschränkt sich i.d.R. auf das Einfügen und Entfernen, das Setzen, Rücksetzen oder Invertieren bestimmter Bits sowie das Finden des ersten '1'-Bits.

1.7.3.4 Blöcke(Strings)

Dies sind zusammenhängende Folgen von bis zu 4*230Datenelementen (4 G) im Speicher. Ein Block enthält stets Daten von genau einem der beschriebenen Datentypen und ihrer Formate: 8-, 16-, 32-, 64-bit-Integers oder gepackte/nicht gepackte BCD-Zahlen. Wie die Bitketten können auch die Strings nicht in interne Prozessorregister geladen werden. Typische Operationen mit Strings sind das Verschieben oder Kopieren im Speicher, der Vergleich zweier Strings (Compare) sowie das Suchen nach einem bestimmten Datum (Scan).

### 3.1.4 Weitere Datentypen und Datenformate |

Über die bisher beschriebenen Datentypen hinaus unterstützen manche Prozessoren noch eine Reihe anderer, z.T. strukturierter Datentypen.

1.7.4.1 Festpunktzahlen (Fixed-Point Numbers)

Da Gleitpunkt-Rechenwerke relativ teuer sind, werden in Anwendungen der digitalen Signalverarbeitung, die - bei großen Stückzahlen - auf niedrige Kosten angewiesen sind, meist sogenannte Festpunkt-DSPs (Fixed-Point DSPs) eingesetzt. Sie verarbeiten Festpunktzahlen mit einer Wortlänge zwischen 16 und 24 bit, z.T. auch 32 bit. Die Lage des Punktes innerhalb einer Festpunktzahl kann prinzipiell beliebig festgelegt werden. Man spricht von einem m.n-Format, wenn in der gewählten Darstellung m Bits vor dem Punkt, n Bits nach dem Punkt stehen. Die Rechenwerke der Festpunkt-DSPs nehmen jedoch die Lage des Punktes üblicherweise nach dem höchstwertigen Bit an. Diese Zahlen im 1.n-Format werden häufig auch Fractionals genannt. Im Bild 3.1-5 sind beispielhaft 16-bit-Festpunkt-Zahlen im 1.15-Format dargestellt. Je nachdem, ob es sich um vorzeichenbehaftete oder vorzeichenlose Zahlen handeln soll, wird das Bit vor dem Punkt als Vorzeichen gewertet oder aber mit dem Gewicht 1 (20) interpretiert. Von links nach rechts halbiert sich das Gewicht der Nachpunkt-Stellen jeweils. Insgesamt ergeben sich daraus die im Bild 3.1-5 angegebenen Gewichte der Bits und die darstellbaren Zahlenbereiche (in hexadezimaler und dezimaler Form).

Bild 3.1-5: 16-bit-Festpunkt-Zahlen

3.1.4.2 Integer-Daten für Multimedia-Erweiterungen

Im Abschnitt 2.4.5 wurden bereits Aufbau und Funktion eines Rechenwerks für Multimedia-Anwendungen beschrieben, das auf die Bearbeitung gepackter Integer-Zahlen spezialisiert ist. Zusammen mit den unterstützten Datentypen und seinen speziellen Befehlen wird es von den Herstellern x86-kompatibler Prozessoren einheitlich als MMX-Einheit (Multi Media Extension) bezeichnet. Im Bild 3.1-6 sind die vom MMX-Rechenwerk verarbeiteten Daten dargestellt. Diese sind stets 64 bit lang. Sie werden bei einigen Prozessoren in den niederwertigen Bits der 80 bit langen Register der Gleitpunkt-Einheit (Floating-Point Unit - FPU) abgelegt. Dies ist im Bild grau unterlegt angedeutet.

Bild 3.1-6: MMX-Datentypen

Im einzelnen werden die folgenden Möglichkeiten unterschieden, Daten zu einer Datenstruktur zusammen zu fassen und parallel durch jeweils denselben Befehl verarbeiten zu lassen:

- gepackte Bytes (packed Bytes - B): acht Bytes B7,..,B0,
- gepackte Wörter (packed Words - W): vier 16-bit-Wörter W3,..,W0,
- gepackte Doppelwörter (packed Doublewords - D): zwei 32-bit-Doppelwörter D1, D0,
- Quadword (Q): ein 64-bit-Wort Q0.

Die Teildaten (B, W, D, Q) können als vorzeichenbehaftete oder vorzeichenlose ganze Zahlen aufgefaßt werden.

3.1.4.3 Gleitpunktdaten für Multimedia-Erweiterungen

Besonders bei der dreidimensionalen Darstellungen der graphischen Datenverarbeitung treten häufig Berechnungen auf, bei denen dieselben Befehle auf eine lange Folge von Gleitpunktzahlen angewendet werden müssen. Die Anforderungen an die Genauigkeit der Zahlen sind dabei relativ gering, so daß mit 32 bit langen Gleitpunktzahlen (nach dem IEEE-754-Standard) gerechnet werden kann. Im Abschnitt 2.4.5 wurden Aufbau und Struktur von Rechenwerken beschrieben, die diese Rechnungen parallel mit 2 bis 4 Operandenpaaren ausführen können. Diese Form der Berechnungen werden mit dem Begriff Single Instruction - Multiple Data bezeichnet. Im Bild 3.1-7 ist eine Datenstruktur skizziert, die aus mehreren gepackten Gleitpunktzahlen besteht.

Bild 3.1-7: Gepackte Gleitpunktzahlen

Zur Wiederholung ist darin auch der Aufbau der Zahlen aus Mantissen-Vorzeichen (Sign - S), Charakteristik (C - biased Exponent) und Mantisse (Fractional - F) eingezeichnet. Die x86-kompatiblen Prozessoren der Fa. AMD (Advanced Micro Devices) verarbeiten gepackte Gleitpunktzahlen aus zwei 32-bit-Zahlen. Dazu verwenden sie die gleichen acht (80-bit-)Registern wie die MMX-Einheit und die Gleitpunkt-Einheit (Floating-Point Unit - FPU). Die Intel-Prozessoren können mit gepackten Daten aus vier 32-bit-Zahlen rechnen und besitzen dazu acht spezielle 128-bit-Register.

3.1.4.4 Felder(Arrays)

Hier beschränkt sich die Unterstützung durch die Prozessor-Hardware darauf zu prüfen, ob der Index eines angesprochenen Feldelements innerhalb der vorgegebenen Grenzen liegt. Außerdem wird aus einem zweidimensionalen Index eines Feldelementes die Speicheradresse berechnet, unter der das Element abgelegt ist. Für beide Operationen stehen spezielle Befehle zur Verfügung (s. Abschnitt 3.2).

3.1.4.5 Kellerspeicher (Stack)

Im Abschnitt 6.9 wurde der (Software-)Stack als Teil des Arbeitsspeichers mit seiner speziellen Art der Verwaltung (LIFO) bereits beschrieben. Die im Stack abgelegten Daten bilden einen Block variabler Länge. Ein Datum kann nur an einem vorgegebenen Ende des Blocks angefügt oder von dort entnommen werden.

| Inhaltsverzeichnis
|  | Übersicht Kapitel 3
2.7 Systembus-Schnittstelle |  |  |  | 3.2 Befehlssätze