205 60 16MB
German Pages 295 [296] Year 1977
de Gruyter Lehrbuch Niemeyer • Programmieren in ASSEMBLER
Gerhard Niemeyer
Einführung in das
Programmieren in ASSEMBLER Systeme IBM 360, IBM 370, Siemens 4004, Univac 9000
2., verbesserte Auflage
W DE G Walterde Gruyter • Berlin • New York 1977
Dr. rer. pol. Gerhard Niemeyer, o. Professor der Betriebswirtschaftslehre, insbes. Wirtschaftsinformatik, an der Universität Regensburg
CIP-Kurztitelaufnahme der Deutschen Bibliothek Niemeyer, Gerhard Einfuhrung in das Programmieren in ASSEMBLER: Systeme IBM 360, IBM 370, Siemens 4004, Univac 9000. - 2., verb. Aufl. - Berlin, New York: de Gruyter, 1977. (De-Gruyter-Lehrbuch) ISBN 3-11-007092-8
© Copyright 1976 by Walter de Gruyter & Co., vormals G. J. Göschen'sche Verlagshandlung, J. Guttentag, Verlagsbuchhandlung Georg Reimer, Karl J. Trübner, Veit & Comp., Berlin 30. Alle Rechte, insbesondere das Recht der Vervielfältigung und Verbreitung sowie der Übersetzung, vorbehalten. Kein Teil des Werkes darf in irgendeiner Form (durch Photokopie, Mikrofilm oder ein anderes Verfahren) ohne schriftliche Genehmigung des Verlages reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Printed in Germany. Satz: Mercedes-Druck, Berlin. - Druck: Color-Druck, Berlin. Bindearbeiten: Dieter Mikolai, Berlin.
Vorwort Die Programmiersprache ASSEMBLER ist eine maschinenorientierte Sprache für Bytemaschinen der Serien IBM/360, IBM/370, Siemens 4004 und Univac 9000. Aufgrund der außerordentlich großen Verbreitung dieser Anlagen im Bereich der Wirtschaft und der öffentlichen Verwaltung gehört ASSEMBLER zu den meist verwendeten Programmiersprachen für kaufmännische und verwaltungstechnische Aufgaben. Die von den Herstellern angebotenen problemorientierten Programmiersprachen COBOL (common business oriented language), PL/1 und RPG (report program generator), die ebenfalls auf derartige Aufgabenstellungen zugeschnitten sind und die den Programmieraufwand reduzieren sollen, konnten ASSEMBLER nicht aus seiner fuhrenden Position verdrängen. Dies mag teils mit der absoluten Universalität und dem Testkomfort der ASSEMBLER-Sprache zusammenhängen und teils durch die spürbar längeren Übersetzungszeiten für die in problemorientierten Sprachen geschriebenen Programme begründet sein. Hinzu kommen sicherlich auch „gefühlsmäßige" Präferenzen durch die Programmierer, die an der Programmiersprache ASSEMBLER die größere Freiheit der Programmgestaltung und die größere Transparenz der eigentlichen Datenverarbeitungsvorgänge in der Maschine schätzen. In der Tat erscheinen diese Faktoren geeignet, insbesondere den Neuling auf dem Gebiet der elektronischen Datenverarbeitung für diese Tätigkeit zu interessieren und ihn gründlich in dieses Gebiet einzuführen. Aus diesem Grunde sieht das vom Verfasser konzipierte Informatik-Studium für Studenten der Wirtschaftswissenschaften an der Universität Regensburg u. a. eine Einfuhrung in ASSEMBLER im Grundstudium vor. Über diese didaktischen Überlegungen hinaus muß jedoch auch auf die Bedeutung der ASSEMBLER-Sprache als universelle Basis für „höhere" Programmieraufgaben, wie Systemprogrammierung, Compilerbau und Aufbau von Datenbank- und Informationssystemen hingewiesen werden. Das Erlernen der ASSEMBLER-Sprache schafft also einen idealen Ausgangspunkt für vielerlei berufliche Spezialisierungen im Bereich der elektronischen Datenverarbeitung. Das vorliegende Lehrbuch ist als möglichst umfassende Einführung in ASSEMBLER gedacht und kann darüber hinaus vom Programmierer auch als Nachschlagewerk benutzt werden; letzteres allerdings mit der Einschränkung, daß wegen der Knappheit des verfugbaren Raumes nicht der gesamte Sprachumfang dargestellt werden konnte. Jedoch dürfte das Gebotene für die meisten Aufgabenstellungen ausreichen. Das Lehrbuch ist in vier Hauptabschnitte unterteilt: Der erste Abschnitt behandelt die Datendarstellung in Bytemaschinen, der zweite die Maschineninstruktionen und der dritte die ASSEMBLER-Sprache.
6
Vorwort
Der vierte Abschnitt zeigt die Anwendung anhand mehrerer Beispiele, die von einfachen kaufmännischen Problemen bis hin zu Problemen, wie sie im Compilerbau vorkommen, reichen. Bei der Lektüre des Buches empfiehlt es sich, mit den Beispielen in Hauptabschnitt 4 zu beginnen. Die dabei auftretenden Fragen können dann unter Benutzung des ausführlichen Schlagwortregisters in den Hauptabschnitten 1 bis 3 sowie im Anhang geklärt werden. Vor der Lektüre des Buches sollten allerdings Grundkenntnisse der Elektronischen Datenverarbeitung vorhanden sein, und zwar besonders hinsichtlich des Aufbaus und der Funktion der Zentraleinheit und der wichtigsten Peripherie-Geräte. Dazu sei als Lektüre u. a. [42], [18] und [5] empfohlen. Regensburg, im Februar 1973
Gerhard Niemeyer
Vorwort zur 2. Auflage Auch im Jahre 1976 erfreut sich die ASSEMBLER-Programmierung größter Beliebtheit — und dies, obwohl inzwischen ein gutes Jahrzehnt der COBOL- und PL/1 -Entwicklung ins Land gegangen ist. Zahlreiche Gespräche mit EDV-Praktikern in Wirtschaft und Verwaltung haben mir die im Vorwort zur 1. Auflage genannten Vorteile dieser Programmiersprache bestätigt und mich in der Absicht bestärkt, auch weiterhin ASSEMBLER als Einführungssprache für das Studium der Wirtschaftsinformatik zu verwenden. Die vorliegende 2. Auflage beseitigt alle Druck-und Flüchtigkeitsfehler, die in der 1. Auflage entdeckt werden konnten, behält jedoch im wesentlichen deren Aufbau und Umfang. San Jose, California, im November 1976
Gerhard Niemeyer
Inhalt 1. Die Darstellung von Daten in Bytemaschinen 1.1 Die Organisation des Arbeitsspeichers und der Register 1.2 Der EBCDI-Code 1.2.1 Die Darstellung von Ziffern, Zahlen und Vorzeichen 1.2.2 Die Darstellung von Buchstaben und Sonderzeichen 1.2.3 Die sedezimale Schreibweise von bit-Mustern 1.3 Die dezimal gepackte Zahlendarstellung 1.4 Die duale Zahlendarstellung 1.5 Die Zahlendarstellung im Halbwort, Wort und Festpunktregister 1.6 Exkurs: Zahlensysteme 1.6.1 Die polynomiale Zahlendarstellung 1.6.2 Die Umrechnung von Zahlen in andere Zahlensysteme . 1.7 Die Zahlendarstellung im Gleitpunktregister
9 9 11 11 12 13 16 17 19 21 21 23 29
2. Maschineninstruktionen und Operandenadressierung
31
2.1 Allgemeine Vorbemerkungen 2.2 Die Instruktionstypen und ihre Formate 2.3 Die Arbeitsspeicheradressierung 2.3.1 Einfache Adressierung 2.3.2 Indizierte Adressierung 2.4 Die Länge der Operanden 2.5 Die Ausrichtung von Operanden im Arbeitsspeicher
31 32 38 38 42 44 44
3. Die Programmiersprache ASSEMBLER 3.1 Allgemeine Vorbemerkungen 3.2 Die Elemente der Sprache 3.3 Ausdrücke 3.3.1 Symbole 3.3.2 Direktwerte 3.3.3 Der Stand des Zuordnungszählers 3.3.4 Längenattribute 3.3.5 Literale 3.4 Maschinenbefehle 3.4.1 Die Syntax der Maschinenbefehle 3.4.2 Die relative symbolische Adressierung 3.4.3 Beschreibung der wichtigsten Maschinenbefehle 3.4.3.1 Übertragungsoperationen im Arbeitsspeicher 3.4.3.2 Laden von Registern, Speichern von Registerinhalten 3.4.3.3 Codetransformationen 3.4.3.4 shift-Operationen in Festpunktregistern 3.4.3.5 Dezimalarithmetik 3.4.3.6 Duale Festpunktarithmetik 3.4.3.7 Sedezimale Gleitpunktarithmetik 3.4.3.8 Vergleichsoperationen 3.4.3.9 Verzweigungsoperationen
46 46 47 48 48 49 52 54 54 66 67 77 79 79 85 103 127 132 140 149 158 169
8
Inhaltsverzeichnis 3.5 Assembler-Anweisungen 3.5.1 Anweisungen zur Symbol-, Konstanten- und Felddefinition 3.5.2 Anweisungen zur Deklaration und Aufgabe von Basisregistern 3.5.3 Anweisungen zur Programmsegmentierung und Segmentverknüpfung. . 3.5.4 Anweisungen zur Steuerung des Zuordnungszählers 3.5.5 Anweisungen zur Modifikation des Übersetzungsprotokolls 3.6 Elementare Makxoprogrammierung 3.6.1 Die Definition von Makros 3.6.1.1 Die Aufstellung der Instruktionsfolge 3.6.1.2 Die Definition des Makroaufrufs (Musteranweisung) 3.6.1.3 Steuerung des Assembler 3.6.1.4 Das Eintragen der Makrodefinition 3.6.2 Der Aufruf von Makros 3.7 Systemmakros 3.7.1 Systemmakros zur Definition von Dateien 3.7.2 Systemmakros zum Öffnen und Schließen von Dateien 3.7.3 Makros zum Lesen und Schreiben von Dateien 3.7.4 Makros zur Steuerung peripherer Geräte 3.7.5 Das „Ende-Makro"
4. Übungsprogramme Übung 1: Auflisten von Adreßkarten Übung 2: Ausdrucken des Inhalts eines Festpunktregisters Übung 3: Dezimalarithmetik Übung 4 : Dualarithmetik Übung'5: Rechnungsschreibung Übung 6: Sortieren von Adreßkarten numerisch und alphabetisch Übung 7: Programmsegmentierung bei Übung 1 Übung 8a: Erzeugen einer Banddatei mit statistischen Erhebungsdaten Übung 8b: Auszählen statistischer Merkmale von einer Banddatei Übung 9: Sedezimale Gleitpunktarithmetik
5. Anhang: Programmierhilfen 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8
Lochkartenformat im A S S E M B L E R Tabelle der Maschinenbefehle Tabelle der 2er-Potenzen Umrechnungstabelle sedezimal - dezimal Tabelle der möglichen bit-Muster im Byte (sedezimal) Tabelle der maschineninternen Instruktionsformate Fehleranzeigen des Übersetzerprogramms (Übersetzungsphase) Fehleranzeigen des Betriebssystems (Ablaufphase)
180 181 185 189 195 196 198 199 199 199 200 201 202 203 203 208 209 213 215
216 216 219 222 228 234 244 250 253 255 264
275 275 276 282 283 283 289 289 290
Literaturverzeichnis
291
Stichwortverzeichnis
293
1. Die Darstellung von Daten in Byte-Maschinen 1.1 Die Organisation des Arbeitsspeichers und der Register a) Arbeitsspeicher Der Arbeitsspeicher der Byte-Maschinen ist so organisiert, daß je 8 bits 1 eine adressierbare Speichereinheit, ein sogenanntes Byte bilden. Die Speicheradresse ist eine Zahl, die die laufende Nummer eines Byte im Speicher angibt. Die Adressierung beginnt mit 0 und endet mit 2™ — 1, wobei n von der Größe der jeweiligen Anlage abhängt. Speicherorganisation (logisch): Adressen:
S07
508
xxxxxxxx
xxxxxxxx
Byte
Byte
509
Byte
Die Größe des Arbeitsspeichers wird üblicherweise in Kilobytes (KB) ausgedrückt, wobei jedoch ein KB nicht 1000 Bytes, sondern 2 1 0 = 1024 Bytes sind. Byte-Maschinen gibt es mit Arbeitsspeichergrößen zwischen 8 und 2000 KB. Für die Zwecke der Datenverschlüsselung ordnet man den einzelnen bits eines Byte sogenannte bit-Positionen zu, und zwar ist es praktisch, dem äußerst rechten bit die Position 0 und dem äußerst linken bit die Position 7 zu geben. Die bit-Positionen im Byte: bit-Positionen:
7 6 5 4 3 2 1 0 x x x x x x x x Byte
Jedes bit hat zwei mögliche Zustände, denen man die Werte 1, 0 oder „an", „aus" oder ,ja", „nein" zuordnen kann. Für die nachfolgenden Darstellungen sollen durchgängig die Werte 1 und 0 verwendet werden. Da der Zustand jedes bit unabhängig von den Zuständen der übrigen bits variierbar ist, lassen sich nach den Gesetzen der Kombinatorik aus den 8 bits eines Byte 2 8 = 256 verschiedene bit-Muster bilden. 1
In Wirklichkeit besteht ein Byte aus 9 bits. Das 9. bit dient jedoch als „parity bit" ausschließlich der maschineninternen Funktionskontrolle bei der Datenübertragung und braucht daher den Programmierer nicht zu interessieren.
10
1. Die Darstellung von Daten in Bytemaschinen
Zur Veranschaulichung sind nachfolgend die 2 3 = 8 möglichen bit-Muster aus 3 bits dargestellt. 0 0 0 0
0 0 1 1
0 1 0 1
1 1 1 1
0 0 1 1
0 1 0 1
Zur Übung bilde man die 2 4 = 16 möglichen bit-Muster aus 4 bits. Ordnet man jedem bit-Muster eine bestimmte Bedeutung zu, so lassen sich in einem Byte 256 verschiedene Informationen verschlüsseln. Für bestimmte Zwecke können auch mehrere Bytes zu größeren logischen Einheiten zusammengefaßt werden, wodurch sich die Zahl der möglichen bitMuster beträchtlich steigern läßt. Die bit-Positionierung läuft dann entsprechend über die Bytegrenzen hinweg (vgl. dazu auch S. 18). Folgende Gruppierungen sind möglich: 2 Bytes (16 bits) = ein Halbwort 4 Bytes (32 bits) = ein Vollwort 8 Bytes (64 bits) = ein Doppelwort Der Zugriff zu diesen Gebilden erfolgt durch die Angabe der jeweils niedrigsten Byteadresse. b) Register Byte-Maschinen verfügen über 20 Operandenregister, zu denen der Programmierer direkten Zugriff hat. Von diesen sind 16 sogenannte Festpunktregister mit je 32 bits und 4 sogenannte Gleitpunktregister mit je 64 bits. Die einzelnen bits der Register werden in der Regel durch Flip-Flop-Schaltungen realisiert mit Kippzeiten im Nanosekundenbereich. Zum Vergleich sei erwähnt, daß die Ummagnetisierungszeiten im Arbeitsspeicher im Mikrosekundenbereich liegen. Die Zustandsänderungen der einzelnen bits vollziehen sich also in den Registern etwa um den Faktor 103 mal schneller als im Arbeitsspeicher. Deswegen werden die Register vor allem dann benutzt, wenn hohe Rechenleistungen erzielt werden sollen. Die Adressierung der 16 Festpunktregister geschieht durch die Nummern 0 bis 15 und die Adressierung der Gleitpunktregister durch die Nummern 0, 2, 4 und 6. Die Unterscheidung von Festpunkt- und Gleitpunktregistern mit gleichen Nummern geschieht durch den jeweiligen Befehlscode, mit dem die Register angesprochen werden; d.h. es gibt spezifische Festpunktregister- und spezifische Gleitpunktregisterbefehle.
11
1.2 Der EBCDI-Code
1.2 Der EBCDI-Code Der Extended Binary Coded Decimal Interchange Code ist typisch für ByteMaschinen. Er basiert auf dem Prinzip: 1 Byte = 1 Zeichen (Ziffer, Buchstabe, Sonderzeichen) Die hauptsächlichen Anwendungen dieses Code liegen bei der Zeichenkettenverarbeitung und bei der Datenein- und Datenausgabe. Zeichenkettenverarbeitung bedeutet Umschichtung von Bytefolgen (oder einzelner Bytes) im Arbeitsspeicher und Vergleichen von Bytefolgen (oder einzelner Bytes) untereinander. Für diese Arbeiten sind die Daten in der Regel EBCDI-verschlüsselt. Die Ein- und Ausgabe ist bei Bytemaschinen so eingerichtet, daß Eingabedaten von Lochkarten oder Lochstreifen zunächst in den EBCDI-Code umgewandelt werden. Umgekehrt können Daten über den Schnelldrucker oder den Bedienungsblattschreiber nur ausgegeben werden, wenn sie im Arbeitsspeicher in EBCDI-Codierung bereitstehen. 1.2.1 Die Darstellung von Ziffern, Zahlen und Vorzeichen Für die Zifferndarstellung werden im Byte nur die bit-Positionen 0 bis 3 benötigt. Die bit-Positonen 4 bis 7 werden mit Einsen aufgefüllt. Zifferndarstellung: dezimal
EBCDI 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 111 111 111 111 111 111 111 111
7 6 5 4
0 0 0 0 0 0 0 1 0 0 10 0 0 11 0 10 0 0 10 1 0 110 0 111 10 0 0 10 0 1 321
0 1 2 3 4 5 6 7 8 9
o (bit-Positionen)
Die Zahlendarstellung im EBCDI-Code erfolgt durch die logische Zusammenfassung mehrerer Ziffernbytes, wobei jedem Byte ein bestimmter dezimaler Stellenwert zugeordnet wird.
12
1. Die Darstellung von Daten in Bytemaschinen
Zahlendarstellung (Beispiel): Adressen:
317
318
319
1111 \ 0001 1—
im !• oooo
m i i! ooio
i im •! ooii
320
Tausender
Hunderter
Zehner
Einer
Legt man fest, daß das Byte Nr. 317 den Stellenwert 10 3 , das Byte Nr. 318 den Stellenwert 102, das Byte Nr. 319 den Stellenwert 101 und das Byte Nr. 320 den Stellenwert 10° hat, dann läßt sich die oben dargestellte Bytekette als die Zahl 1023 interpretieren. Die Vorzeichendarstellung geschieht im Byte mit dem niedrigsten Stellenwert in den bit-Positionen 7 6 5 4. Zahlen, die in diesen Positionen die bit-Muster 1 1 1 1 aufweisen, gelten als positiv. Zur besonderen Markierung positiver Zahlen werden jedoch in diesen bit-Positionen auch folgende bit-Muster verwendet: 110 0 10 10 1 1 1 0 (1111) Zur Markierung negativer Zahlen dienen folgende bit-Muster: 110 1 10 11 Vorzeichendarstellung (Beispiele): + 1023
1023
1111 ! 0001 1
1 im ! oooo 0
1 im { ooio 2
I lioo ; ooii 1 + 3
i im ; oooi 1
Uli !i oooo 0
1111 i 0010 2
1 1101 | 0011 3
1.2.2 Die Darstellung von Buchstaben und Sonderzeichen Buchstaben werden im Byte in der Weise dargestellt, daß die bit-Muster 0 0 0 1 bis 1 0 0 1 zur Darstellung der Ziffern 1 bis 9 in den bit-Positionen 3 2 1 0 mit den bit-Mustern 1 1 0 0, 1 1 0 1 und 1 1 1 0 in den bit-Positionen 7 6 5 4 kombiniert werden. Die Darstellung geschieht in Analogie zum Lochkartencode, wobei die bit-Muster 1 1 0 0, 1 1 0 1 und 1 1 1 0 die Funktionen der Zonenlochungen 12, 11 und 0 übernehmen.. In diesem Zusam-
1.2 Der EBCDI-Code
13
menhang nennt man auch die bit-Positionen 7 6 5 4 den „Zonenteil" und die bit-Positionen 3 2 1 0 den „Ziffernteil" des Byte. Buchstabendarstellung bitPos.
32 10
3 2 10
3 2 10
32 10
32 10
32 10
3 2 10
32 10
32 10
76 54
0001
0010
0011
0100
0101
0110
Olli
1000
1001
1100 1101 1110
A J
B K S
c L T
D M U
E N V
F O W
G P X
H Q Y
I R Z
Für die Verschlüsselung der Sonderzeichen werden ebenfalls der Zonenteil und der Ziffernteil des Byte benötigt. Eine unmittelbare Analogie zum Lochkartencode läßt sich hierbei jedoch nicht herstellen. Sonderzeichendarstellung bit-
Pos.
32
7654
0000
0100 0101 0110
blank
O l l i
10
3 2 10
32 1 O
32
0001
1010
1011
* !
&
/
* ?
#
10
10
32 10
32 1
0
32 1 0
1100
1101
1110
1111
=
? Ii
1.2.3 Die sedezimale Schreibweise von Bit-Mustern Bei der Angabe von Byte-Inhalten ist es recht umständlich, die bit-Muster hinzuschreiben. Auch lassen sich diese bit-Muster wegen ihrer Unübersichtlichkeit nur schwer entschlüsseln. Um nun das Schreiben und Lesen von Byte-Inhalten zu erleichtern, wurde die sedezimale Schreibweise geschaffen. Diese Schreibweise beruht auf der Einteilung des Byte in zwei 4-er Gruppen (Tetraden) von bit-Positionen und der Kennzeichnung der bit-Muster in jeder Tetrade durch ein einfaches Zeichen. Die Aufteilung des Byte in zwei Tetraden ergibt sich aus der Natur des EBCDI-Code, bei dem für die Verschlüsselung von Ziffern, Buchstaben und Sonderzeichen die bit-Positionen 7 6 5 4 und 3 2 1 0 als selbständige logische Einheiten zusammenwirken. Für diese logischen Einheiten sind neben den Bezeichnungen „Zonenteil" und Ziffernteil" vor allem im Zusammenhang mit der sedezimalen Schreibweise auch die Bezeichnungen „linkes Halbbyte" und „rechtes Halbbyte" gebräuchlich.
1. Die Darstellung von Daten in Bytemaschinen
14
Mit den 4 bits einer Tetrade lassen sich 2 4 = 16 verschiedene bit-Muster erzeugen, denen man je eine Ziffer des Sedezimalsystems, zu Deutsch 16-er System, zuordnet. Die 16 Ziffern des Systems lauten 0 1 2 3 4 5 6 7 8 9 A B C D E F Die Zuordnung der Ziffern zu den bit-Mustern geschieht nun nicht willkürlich, sondern nach folgendem sinnreichen Prinzip: Die einzelnen bit-Positionen der Tetrade erhalten duale Stellenwerte, und zwar erhält die Position Nr. 0 den Wert 2°, die Position Nr. 1 den Wert 2 1 usw.; allgemein gilt: dualer Stellenwert = 2 bit P o s i t i o n Wichtig ist, daß die bit-Positionen in jeder Tetrade, also auch im linken Halbbyte von 0 bis 3 numeriert werden. Multipliziert man jetzt die Einsen eines bit-Musters mit den entsprechenden Stellenwerten und addiert man die Produkte, so erhält dieses bit-Muster einen bestimmten Dezimalwert. Dabei können sich Dezimalwerte zwischen 0 und 15 ergeben. Diesen Werten ordnet man schließlich die Sedezimalziffern 0 bis F entsprechend den Positionsnummern 0 bis 15 in der oben dargestellten Reihenfolge zu. Beispiel: Das bit-Muster 1011 hat den Dezimalwert 1 • 2 3 + 0 • 2 2 + 1 • 2 1 + + 1 • 2° = 11. Die elfte Sedezimalziffer lautet aber B. Folglich wird dem bitMuster 1011 die Ziffer B zugeordnet. Zuordnung von Sedezimalziffern zu bit-Mustern bit-Muster 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Dezimalwert
Sedezimalziffer
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 1 2 3 4 5 6 7 8 9 A B C D E F
2 3 22 2 1 2° (duale Stellenwerte) Anm.: Die Zeichen A bis F sind hier nicht als Buchstaben, sondern als Sedezimalziffern zu verstehen!
15
1.2 Der EBCDI-Code
Der Vorzug dieses Systems besteht wie gesagt in der Möglichkeit der Kompaktdarstellung von bit-Mustern in Halbbytes. Statt 1 1 1 0 schreibt man einfach E, oder statt 1 0 0 1 einfach 9. Nutzt man dies für die in den vorangehenden Kapiteln dargestellten EBCDI-Verschlüsselungen von Ziffern, Zahlen, Buchstaben und Sonderzeichen aus, so erhält man nunmehr folgende Codiertabellen:
Ziffern dezimal
EBCDI (sedezimal)
0 1 2 3 4 5 6 7 8 9
FO Fl F2 F3 F4 F5 F6 F7 F8 F9
Zahlen dezimal
EBCDI (sedezimal)
(+) 1023 + 1023
F1F0F2F3 F1F0F2C3 od. F1F0F2A3 od. F1F0F2E3 F1F0F2D3 od. F1F0F2B3
-
1023
Buchstaben linkes Halbbyte
rechtes Halbbyte 1 2 3 4 5 6 7 8 9
C D E
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
16
1. Die Darstellung von Daten in Bytemaschinen
Sondeizeichen linkes Halbbyte 4 5 6 7
0 blank &
1
rechtes Halbbyte A B C
$ !
/
>
it
=
In den nachfolgenden Ausfuhrungen wird ausgiebig von der sedezimalen Schreibweise Gebrauch gemacht. Aus diesem Grund wird empfohlen, sich mit den Grundzügen dieser Schreibweise vertraut zu machen. Vor allem sollte stets beachtet werden, daß mit jeder Sedezimalziffer ein 4-bit-Muster gemeint ist, denn nur in dieser Form befinden sich die Daten in der Maschine.
1.3 Die dezimal-gepackte Zahlendarstellung Eine Eigenheit von Bytemaschinen ist, daß arithmetische Operationen nicht im EBCDI-Code, sondern entweder im sogenannten dezimal-gepackten oder im dualen Code oder in der sedezimalen Gleitpunktdarstellung vorgenommen werden. Der ASSEMBLER-Programmierer hat dabei für die Umcodierung zu sorgen; d. h. die im EBCDI-Code eingelesenen Zahlen müssen zum Zweck der Dezimalrechnung gepackt werden. Umgekehrt ist zu beachten, daß das Ausdrucken von Zahlen nur im EBCDI-Code möglich ist; d.h. die Resultate irgendwelcher Rechnungen müssen zu diesem Zweck wieder entpackt werden. Soll dual gerechnet werden, so ist zu beachten, daß die Umwandlung vom EBCDI-Code in den Dual-Code nur über den dezimal-gepackten Code möglich ist. Das gleiche gilt auch für die Rückumwandlung. Die Code-Umwandlung in die und aus der sedezimalen Gleitpunkt-Darstellung ist nur mit Hilfe größerer Programmstücke möglich. Dabei werden in der Regel sowohl die dezimal-gepackte als auch die duale Zahlendarstellung als Zwischenstufen benötigt. Der Vorgang des Packens besteht nun darin, daß die EBCDI-verschlüsselten Zahlen in ein anderes Bytefeld umgespeichert werden, wobei jedoch nur die rechten Halbbytes, also die Ziffernteile übertragen werden. Zugleich wird so übertragen, daß in den neuen Bytes beide Halbbytes mit Ziffern belegt werden; die ohnehin redundanten bit-Muster 1 1 1 1 (sedezimal: F) aus den linken Halbbytes entfallen dabei. Ausgenommen von dieser Regel ist die niederst-
17
1.4 Die duale Zahlendarstellung
wertige (äußerst rechte) Stelle des Zahlenfeldes. Hier wird das bit-Muster 1 1 1 1 (bzw. 1 1 0 1, falls die Zahl negativ ist) zum Zweck der Vorzeichendarstellung mit übertragen, jedoch tauschen Vorzeichen und Ziffer die Halbbytes. Der Vorgang des Entpackens verläuft genau entgegengesetzt, wobei die bitMuster 1 1 1 1 automatisch in die linken Halbbytes eingesetzt werden. Auch das Vorzeichen wechselt wieder das Halbbyte. Beispiele: 4 Uli
2
! i
-
im ! ooio
0100
Packen 1
oioo ! ooio i
0001
1 0000
.
Entpacken
_
1111
/
i m ! oooo
! 0001 .x.
1
~7~ °
3
1101 ;
0011
X
ooii ! noi L
0101 \
1100
X
lioo ! oioi 1
In sedezimaler Schreibweise stellen sich diese Vorgänge wie folgt dar: F4
F2
D 3
4
2
3 D
1 ! X
Packen
Entpacken
/ IX 1
0
s s Fl
F0
5 C
C 5
1.4 Die duale Zahlendarstellung Die duale Zahlendarstellung spielt eine wichtige Rolle bei der Berechnung von Arbeitsspeicheradressen und bei der arithmetischen Verarbeitung numerischer Daten. Für letztere sind die Zahlen von der EBCDI-Verschlüsselung über die dezimal-gepackte Form in die duale Codierung zu überführen.
18
1. Die Darstellung von Daten in Bytemaschinen
Die duale Zahlendarstellung tritt auf im Halbbyte, Byte, IV2 Byte, Halbwort (2 Bytes), Wort (4 Bytes) und in den Festpunktregistern. Das allgemeine Codierungsprinzip ist, daß man den bit-Positionen dieser Bytegebilde duale Stellenwerte zuordnet, und zwar stets von rechts nach links, wie das folgende Schema zeigt.
1.5 Die Zahlendarstellung im Halbwort, Wort und Festpunktregister
19
Der duale Stellenwert ergibt sich aus dem Ausdruck 2bit-Position
Die in diesen Bytegebilden dargestellten Zahlen haben dann folgenden Dezimalwert: z„_! • 2 n _ 1 + z n _2 • 2 n ~ 2 + . . . + z 2 • 22 + Zj • 2 1 + z 0 • 2° = Zahl 10 Dabei haben die z, die Werte 0 oder 1 und n ist die Anzahl der Dualziffern. Beispiel: OlOllOOlj = 0 - 2 7 + 1 • 2 6 + 0 • 2 5 + 1 • 2 4 + 1 • 2 3 + 0 • 2 2 + 0 • 2 1 + 1 - 2 ° = 0 + 64 + 0 + 16 + 8 + 0 + 0 + 1 = 89 1 0 Die größte im Halbbyte darstellbare Zahl ist: 11112 = 2 3 + 2 z + 2 1 + 2° = 8 + 4 + 2 + l = 15 1 0 = 2 4 - 1 Die Zahl der möglichen bit-Muster ist hingegen 16 = 2 4 . Die größte im Byte darstellbare Zahl ist: I I I I I I I I 2 = 2 7 + 2 6 + 2S + 2 4 + 2 3 + 2 2 + 2* + 2° = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255iq = 28 -
1
Die Zahl der möglichen bit-Muster ist hingegen 256 = 2 8 . Die größte in 1 1 / 2 Bytes darstellbare Zahl ist: 111111111111 2 = 2 u + 2 1 0 + 2 9 + 2 8 + (2 8 - 1) = 2048 + 1024 + 512 + 256 + 255 = 4095 1 0 = 2 1 2 - 1 Die Zahl der möglichen bit-Muster ist hingegen 4096 = 2 12 . Die Zahlen 15, 255 und 4095 treten im Zusammenhang mit der Adreßrechnung sehr häufig auf. Es wird daher empfohlen, sie im Gedächtnis zu behalten.
1.5 Die Zahlendarstellung im Halbwort, Wort und Festpunktregister Halbwort und Wort im Arbeitsspeicher sind Operanden für die Dualarithmetik, die mit Hilfe der Festpunktregister abgewickelt wird. Die in diesen Bytegebilden verschlüsselten Zahlen müssen daher auf die Zahlendarstellung in den Festpunktregistern abgestimmt sein. Gegenüber der rein dualen Zahlendarstellung besteht hierbei insofern ein Unterschied, als im Halbwort, Wort und Festpunktregister die jeweils höchste
20
1. Die Darstellung von Daten in Bytemaschinen
(äußerst linke) bit-Position der Vorzeichendarstellung vorbehalten ist, und zwar gilt: Positive Zahlen beginnen mit einer 0 und negative Zahlen mit einer 1 in der 15. bzw. 31. bit-Position. Ferner gilt für negative Zahlen die Besonderheit, daß sie ausschließlich im sogenannten Zweierkomplement dargestellt werden. Diese Komplementierung geschieht in der Weise, daß von der bit-Position 0 ausgehend alle Nullen (so vorhanden) bis einschließlich der ersten Eins übernommen und daß von da ab alle Dualziffern umgekehrt werden. Also aus Einsen werden Nullen und umgekehrt. Um diese Komplementierung braucht sich jedoch der Programmierer normalerweise nicht zu kümmern, da sie von der Maschine automatisch vorgenommen wird. Allerdings sind diese Maschinenfunktionen auch durch den Programmierer ansprechbar. Beispiele: + lOSjo 15 31
0
- 105 l o 0
15 31
0
01101001 => 1
10010111 +
— 76i 0 15 31
1
O
15 31
76io O
10110100 =>0
01001100
Das letzte Beispiel zeigt, daß die Komplementierung einer negativen Dualzahl (des Zweierkomplements) wieder die ursprüngliche positive Dualzahl ergibt. Die größten im Halbwort und Wort darstellbaren positiven Zahlen sind: 15 31
14 30
o
0
11
1,
was den Dezimalzahlen 2 spricht.
1S
- 1 = 32767 bzw. 2 3 1 - 1 = 2147483647 ent-
Die dem Betrag nach größtmöglichen negativen Zahlen im Wort und Halbwort sind: 15 31
14 30
1 00
O
0,
15
was den Dezimalzahlen - 2 = - 3 2 7 6 8 bzw. - 2 3 1 = -2147483648 entspricht; dabei wird also die Vorzeichenstelle zugleich auch als Ziffernstelle ausgenutzt. Die Komplemente dieser größten negativen Zahlen ergeben sich nach der genannten Regel ebenfalls zu 15 31
1 00
o
0,
1.6 Exkurs: Zahlensysteme
21
d.h. sie bleiben negativ. Daher ist die Komplementierung der größten negativen Zahlen nicht möglich. Die Dualzahl
15 31 1 1 1
o 1 1
stellt eine dezimale — 1 dar, denn ihr Komplement ist 15 31 0
000
0 1,
also eine dezimale + 1. Die Dualzahl
15 31 1 1 1
o 1 10
stellt eine dezimale — 2 dar, denn ihr Komplement ist 15 31 000
o 0 1 0,
also eine dezimale + 2. Die Dualzahl
15 31 o 1 1 1 10 1 stellt eine dezimale — 3 dar, denn ihr Komplement ist 15 31 o 0 0 0 O l 1,
also eine dezimale + 3. Zur Übung stelle man die Zahlen —4 bis —10 im Dual-Code dar und überprüfe sie durch Rückkomplementierung.
1.6 Exkurs: Zahlensysteme 1.6.1 Die polynomiale Zahlendarstellung Das allen geläufige dezimale Zahlensystem basiert auf 10 Ziffern, nämlich 0 bis 9. Diese stehen in Gruppen zusammen und bilden durch Zuordnung zu dezimalen Stellenwerten die Dezimalzahlen. Nimmt man also beispielsweise die Zifferngruppe 9172 und ordnet man z.B. der 9 den Stellenwert 1000, der 1 den Stellenwert 100, der 7 den Stellenwert
22
1. Die Darstellung von Daten in Bytemaschinen
10 und der 2 den Stellenwert 1 zu, so erhält man die Dezimalzahl 9 • 1000 + 1 • 100 + 7 - 1 0 + 2 1 ; in Worten: neuntausendeinhundertzweiundsiebzig. Wählt man andere Stellenwerte, z.B. 10, 1, Vio, Vioo, so ergibt sich die Dezimalzahl 9 - 1 0 + 1 - 1 + 7 - 7 i o + 2-Vioo; die üblicherweise als 91,72 (in Worten: einundneunzig-Komma-siebenzwei) geschrieben wird. Aus den Beispielen erkennt man, daß es sich bei den Stellenwerten durchweg um 1 Oer-Potenzen handelt. Dezimalzahlen lassen sich daher allgemein als Polynome der folgenden Art beschreiben: Z 1 0 = z n - i • 1 0 n _ 1 + . . . + z 2 • 10 2 + Zj • 10 1 + z 0 • 10° + z _ ! • IQ" 1 + . . .
Darin bedeuten: Z10: 10: Zj: 101: n: m:
Dezimalzahl Basis des Zahlensystems Dezimalziffer, 0 < z, < 9 Stellenwert der Ziffer z, Zahl der Ziffern „vor dem Komma" Zahl der Ziffern „nach dem Komma"
Nun läßt sich nicht nur auf der Basis 10, sondern auf der Basis jeder natürlichen Zahl größer 1 ein Zahlensystem aufbauen. Zwei solcher Zahlensysteme, nämlich das duale und das sedezimale, wurden bereits vorgestellt. Die allgemeine Form der Zahlensysteme lautet: Z b = z „ _ 1 - b n - 1 + . . . + z 2 - b 2 t Z i - b 1 + z 0 - b ° +z_1-b~1
+. . .
. . . + z_m•b"m Darin bedeuten: Zb: b: z,: b1: n: m:
Zahl eines bestimmten Zahlensystems Basis des Zahlensystems Ziffer, 0 < z, < b — 1 Stellenwert der Ziffer Z; Anzahl der Ziffern „vor dem Komma" Anzahl der Ziffern „nach dem Komma"
1.6 Exkurs: Zahlensysteme
23
Übersicht über die im ASSEMBLER relevanten Zahlensysteme: Dezimalsystem Basis Ziffern Stellenwerte
Dualsystem2
2 0 bis 1 ...lOMO 1 10° 10"1... . . . 2 3 2 2 2 1 2 °
10 0 bis 9
Sedezimalsystem 16 0 bis F ...lóMóMó0^-1...
1.6.2 Die Umrechnung von Zahlen in andere Zahlensysteme Der ASSEMBLER-Programmierer wird häufig vor der Aufgabe stehen, Zahlen eines Zahlensystems in Zahlen eines anderen Zahlensystems umzurechnen. Diese Arbeit wird durch die in allen Programmierhandbüchern abgedruckten Umrechnungstabellen erleichtert (vgl. dazu auch Anhang S. 282). Jedoch dekken diese Tabellen zumeist nur einen eng begrenzten Zahlenbereich ab; auch sind diese Tabellen nicht immer zur Hand. Aus diesen Gründen ist es nützlich, die diesen Tabellen zugrundeliegenden Umrechnungsverfahren zu kennen. a) Umrechnung von Dualzahlen und Sedezimalzahlen in Dezimalzahlen Diese Umrechnung benutzt die polynomiale Zahlendarstellung, und zwar ist Z 1 0 = z n _ j - b " - 1 + . . . + z 2 -b 2 + z x V + Zq b° + z _ r b _ 1 + . . . • • . + z..m-b-m Darin bedeuten: Z 1 0 : gesuchte Dezimalzahl z,: Dualziffer (Sedezimalziffer) als Dezimalzahl geschrieben b1:
dualer (sedezimaler) Stellenwert als Dezimalzahl geschrieben
Beispiele: (1)
Die Dualzahl 011101 ist in eine Dezimalzahl umzurechnen. 0111012= 0 - 2 5 + 1 - 24 + 1 - 2 3 + 1 - 2 2 + 0 - 2 1 + 1 - 2° = 0 + 1 6 + 8 + 4 + 0 + 1 = 29i 0
(2)
Die Sedezimalzahl A2E ist in eine Dezimalzahl umzurechnen. A2E 16 = A• 162 + 2 • 161 + E-16° = 10 • 256 + 2 • 16 + 14 • 1 = 2606 10
2
Gebrochene Dualzahlen sind im Zusammenhang mit der elektronischen Datenverarbeitung nicht üblich.
24
(3)
1. Die Darstellung von Daten in Bytemaschinen
Die Sedezimalzahl E.3 ist in eine Dezimalzahl umzurechnen. E.3 16 = E • 16° + 3 • 16" 1 = 14 1 + 3 - 7 i 6 = 14.1875,,,
b) Umrechnung ganzzahliger Dezimalzahlen in Dualzahlen und in Sedizimalzahlen Die Umrechnung von ganzzahligen Dezimalzahlen in andere Zahlensysteme geht ebenfalls von der bereits vorgeführten polynomialen Schreibweise aus; jedoch bricht hier wegen der Ganzzahligkeit das Polynom mit dem Stellenwert b° ab. Z 1 0 = z n _ r b n - 1 + . . . + z 3 b 3 + z 2 -b 2 + z 1 b I + z 0 - b 0 Bekannt sind jetzt aber die Dezimalzahlen Z 1 0 und die Basis b des Zahlensystems, in das Z 1 0 umgerechnet werden soll. Gesucht werden hingegen die Ziffern z n _ j bis z 0 der betreffenden Zahl im b-Zahlensystem. Aus diesem Grunde wird das obige Polynom zunächst mit Hilfe des Hornerschemas dargestellt: Z 1 0 = z 0 + b(z 1 + b(z 2 + b(z 3 + . . • + b z n _ 1 ))) . . .) Sodann werden die gesuchten Ziffern z{ durch fortgesetzte Modulodivision3 dieses Polynoms mit der Basis b ermittelt. Dies ist möglich, weil die Ziffern z ; wegen 0 < Zj < b - 1 stets kleiner als die Basis b sind und daher als Divisionsreste herausfallen. Betrachtet man das obige Hornerschema, so ist leicht einzusehen, daß bei der Division von Z 1 0 durch b das Resultat z, + b(z 2 + b(z 3 + . . . + b z n _ 1 )) . . .) lautet, wobei z 0 als Rest bleibt. Dividiert man dieses Resultat wieder durch b, so erhält man z 2 + b(z 3 + . . . + b z n _ ! ) . . .) und als Rest bleibt z I, usw. Geht man ohne Beschränkung der Allgemeinheit von einem Polynom vierten Grades aus und bezeichnet man alle im Laufe des Algorithmus auftretenden Dividenden mit y i ; dann läßt sich dieses Polynom wie folgt auflösen: 3
Modulodivision ist eine Division, bei der als Resultat der jeweilige Divisionsrest genommen wird.
1.6 Exkurs: Zahlensysteme
25
Z10 = > z 0 + b (z, + b (z2 + b (z 3 + b • z 4' ))) v yo
>
v
,
yi = z, + b >(z 2 + b (z 3 + b • z' 4 )) v y 2 = z 2 + bv(z3 -^b z 4 ) y3 = z 3 + b - z ^ /4
Der schematische Ablauf des Algorithmus stellt sich dann wie folgt dar: Z10 = yo : b = yi
Rest z 0
y, : b = y 2
Rest Zj
y f ^ b = y3
Rest z 2
y3 : b = y4
Rest z 3
y4 : b = 0
Rest z 4
Die Dezimalzahl Z 1 0 wird also im b-Zahlensystem durch die Ziffernfolge z 4 z 3 z 2 Z[ z 0 repräsentiert. Beispiele: (1)
Gegeben sei die Dezimalzahl 38; gesucht wird die entsprechende Dualzahl 38 : 2 = 19
Rest 0 (z 0 )
19 : 2 = 9
Rest 1 ( z ^
9:2=
4
Rest 1 (z 2 )
4:2=
2
Rest 0 (z 3 )
2:2=
1
Rest 0 (z 4 )
1:2=
0
Rest 1 (z s )
Es ist also 38 1 0 = 1001102 Probe: 1 • 2S + 0 • 2 4 + 0 • 2 3 + 1 • 22 + 1 • 2 1 + 0 • 2° = 32 + 0 + 0 + 4 + 2 + 0 = 38 1 0
26
1- Die Darstellung von Daten in Bytemaschinen
(2)
Gegeben sei die Dezimalzahl 38; gesucht wird die entsprechende Sedezimalzahl 38 : 16 = 2
Rest 6 (z 0 )
2 : 16 = 0
Rest 2 ( z ^
Es ist also 38,o
=
26 1 6
Probe: 2 - 1 6 1 + 6 -16° = 32 + 6 = 3 8 1 0 c) Umrechnung von Dezimalbrüchen in Sedezimalbrüche Diese Umrechnung ist vor allem für das Verständnis der sedezimalen Gleitpunktarithmetik von Bedeutung. Ausgangspunkt der Rechnung ist wieder die polynomiale Darstellung; diese sieht für Dezimalbrüche wie folgt aus: ,Z 1 0 = z _ j • b - 1 + z _ 2 • b " 2 + . . . + z _ m • b - m oder als Hornerschema geschrieben: .Z 1 0 = b - 1 ( z _ 1 + b - 1 ( z - 2 + b - 1 ( z _ 3 + . . • + b - 1 - z _ m ) ) ) . . . ) Die Ziffern z _ x bis z _ m werden nun nicht durch fortgesetzte Modulodivision, sondern durch fortgesetzte Multiplikation mit der Basis b gewonnen. Betrachtet man das obige Hornerschema, so ist leicht einzusehen, daß sich bei der Multiplikation von .Z 1 0 mit b als Produkt z _ ! + b " 1 ( z _ 2 + b " 1 ( z _ 3 + . . . + b - 1 • z _ m ) ) . . .) ergibt. Spaltet man z_l ergibt sich z _ 2 usw.
ab und multipliziert man den Rest wieder mit b, so
Geht man ohne Beschränkung der Allgemeinheit von einem Polynom (minus) dritten Grades aus und bezeichnet man alle im Laufe des Algorithmus auftretenden Multiplikanden mit yj, dann läßt sich dieses Polynom wie folgt auflösen: .Z10=b"1(z_1 +b-1(z_2 + b-1-z_3)) v
y-i y_2
=
+
b
1
\
y_3 = b
z
-3)
v
-1
•z_3
I
1.6 Exkurs: Zahlensysteme
27
Der schematische Ablauf des Algorithmus stellt sich dann wie folgt dar: y _ i • b = z _ ! + y_2 y _ 2 • b = z _ 2 + y_3 y_3 • b = z_3 Der Dezimalbruch .Z 10 wird also im b-Zahlensystem durch die Ziffernfolge z _ ! z _ 2 z _ 3 repräsentiert. Beispiele: (1)
Gegeben sei der Dezimalbruch 0.3; gesucht wird der entsprechende Sedezimalbruch .3 • 16 = 4 + .8
usw. Schreibt man die gefundenen Werte z_ i als Sedezimalziffern, so erhält man 0.3 1 0 (2)
=
0.4CC . . . , 1 6
Gegeben sei die Dezimalzahl 213.04; gesucht wird die entsprechende Sedezimalzahl a) Umrechnung des ganzzahligen Teiles: 213 : 16 = 13 13 : 16 = 0
Rest
5
Rest 13(D)
b) Umrechnung des Dezimalbruchs: 0.04 1 6 = 0.64
0
+0.64 0.24 0.84
0 . 8 4 - 1 6 = 13(D) + 0.44 usw.
28
1. Die Darstellung von Daten in Bytemaschinen
Es ist also 213.04 l o = D5.0A3D . . . . 1 6 Probe: 13 • 161 + 5 • 16° + 0 • 1 6 _ 1 + 1 0 • 1 6 - 2 + 3 • 1 6 ~ 3 + 1 3 • 1 6 - 4 « 208 + 5 + 0 + 0.0391 + 0.0007 + 0.0002 = 213.04,0 d) Umrechnung von Dualzahlen in Sedezimalzahlen Für die Umrechnung einer Dualzahl Z 2 in eine Sedezimalzahl Z 1 6 benutzt man am einfachsten wieder die polynomiale Darstellung. Z16 = z n _ 1 1 6 " - 1 + . . . + z 0 1 6 ° Die Sedezimalziffern zn_l bis z 0 erzeugt man sich aus der Dualzahl, indem man diese von rechts nach links in Tetraden einteilt (dabei ist die äußerst linke bit-Gruppe eventuell mit führenden Nullen aufzufüllen) und diese dann in die entsprechenden Sedezimalziffern umcodiert. Beispiel: Gegeben sei die Dualzahl 111011011. Diese wird eingeteilt und umcodiert: 0001! 1101! 1011 i i 1 D B Dann ist Z 2 = 1 • 162 + D • 161 + B • 16° = 1DB 16 Zur Probe werden beide Zahlen in Dezimalzahlen umgerechnet: Z 2 = l - 2 8 + l - 2 7 + l - 2 6 + 0-2s + l - 2 4 + l - 2 3 + 0-22 + 1-21 + 1-2° = 256 + 128 + 64 + 0 + 16 + 8 + 0 + 2 + 1 = 475 1 0 oder Z 1 6 = 1 • 162 + D • 161 + B 1 6 ° = 1-256 + 13 16 + 11-1 = 256 + 208 + 11 = 475 1 0 e) Umrechnung von Sedezimalzahlen in Dualzahlen Für die Umrechnung einer Sedezimalzahl Z 1 6 in eine Dualzahl Z 2 empfiehlt sich ein analoges Vorgehen. Z2 = z „ _ i - 2 n - 1 + . . . + z 0 - 2 °
1.7 Die Zahlendarstellung im Gleitpunktregister
29
Die Dualziffern z n _ j bis z 0 erzeugt man sich aus den Sedezimalziffern, indem man diese in die entsprechenden Tetraden auflöst. Beispiel: Gegeben sei die Sedezimalzahl 2FA; diese Zahl wird in folgende Tetraden aufgelöst: 0010 J l l l l ! 1010 i ' Dann ist Z 1 6 = 1 • 29 + 0 • 2 8 + 1 -2 7 + 1 • 26 + 1 -2 5 + 1 • 24 + l - 2 3 + 0 - 2 2 + 1-2 1 + 0 - 2 ° = 10111110102 Zur Übung rechne man beide Zahlen in Dezimalzahlen um.
1.7 Die Zahlendarstellung im Gleitpunktregister Eine Gleitpunktszahl setzt sich zusammen aus dem Vorzeichen, dem Exponenten und der Mantisse; dabei enthält die Mantisse die Ziffernfolge und der Exponent gibt den Stellenwert der äußerst linken Ziffer an. Es besteht die Möglichkeit, Zahlen in Gleitpunktregistern in zwei verschiedenen Längen darzustellen und zu verarbeiten, wobei sich diese Längenunterschiede allein auf die Mantisse beziehen. Kurze Gleitpunktzahlen V Exp. 63
62
56 55
32
Es werden nur die bit-Positionen 63 bis 32 des Gleitpunktregisters benutzt. Lange Gleitpunktzahlen —1— V Exp. 63 62
56 55
0
Es werden alle bit-Positionen des Gleitpunktregisters benutzt. Vorzeichen Positive Zahlen haben in der bit-Position 63 eine 0; negative Zahlen haben dort eine 1. Das Vorzeichen-bit ist das einzige Unterscheidungsmerkmal zwi-
1. Die Darstellung von Daten in Bytemaschinen
30
sehen positiven und negativen Gleitpunktzahlen. Eine Komplementierung wie bei den dualen Festpunktzahlen findet nicht statt. Exponent Für die Verschlüsselung der Exponenten stehen 7 bit-Positionen zur Verfügung. Damit lassen sich Dezimalzahlen zwischen 0 und 127 dual verschlüsseln. Um nun aber negative und positive Exponenten zur Verfügung zu haben, wird der 0 der Wert - 65, der 1 der Wert - 64, . . . . , der 65 der Wert 0, der 66 der Wert +1, . . . . , der 126 der Wert +61 und schließlich der 127 der Wert + 62 zugeordnet. Auf diese Weise gewinnt man Exponenten im Bereich von - 6 5 bis +62. Mantisse Die Mantisse bietet die Besonderheit, daß in ihr Dualzahlen verschlüsselt werden, daß aber die bit-Muster tetradenweise als Sedezimalziffern interpretiert und verarbeitet werden. Der Exponent gibt also den sedezimalen Stellenwert der äußerst linken Sedezimalziffer der Mantisse (bit-Positionen 55, 54, 53, 52) an. Beispiele: 63
32
0110 6
0 ioo | oooi + 65-0
1110
... 0
00. .
E
_1 + 6 • 16° + E • 1 6 = + 6.E 16 = + 6.875 10 63 1 -
32
OH ; im 63 ~ - 2 -
1000
... 0
0....
8
8 • 16"-2 _ _ 0.08 16 = - 0.03125 10
63
32
0 ioo ! ooio i + 66- 1
1101
0101
0000
D
5
0
1010 A
0011 3
1101 D
+ D • 161 + 5 • 16° + 0 • 16 _ I + A • 1 6 - 2 + 3 • 1 6 - 3 + D • 1 6 - 4 = + D5.0A3D16 « + 213.04 10
2. Maschineninstruktionen und Operandenadressierung 2.1 Allgemeine Vorbemerkungen Bytemaschinen verfügen in der Regel über einen Vorrat von mehr als 140 Maschinenfunktionen, die der Verarbeitung der Daten, also dem Datentransport, dem Datenvergleich, der Datenveränderung und der dynamischen Programm-Modifikation dienen. Diese Funktionen werden durch Maschineninstruktionen ausgelöst; dies sind Bytefolgen im Arbeitsspeicher, deren bitMuster nach der Decodierung durch das Steuerwerk die betreffenden Funktionsmoduln der Maschine aktivieren. Eine Folge von Maschineninstruktionen bildet das sogenannte Maschinenprogramm (Objektprogramm), mit dessen Hilfe eine entsprechende Folge von Maschinenfunktionen zur automatischen Abwicklung einer Datenverarbeitungsaufgabe gesteuert wird. Die Erzeugung der Maschineninstruktionen und der Objektprogramme im Arbeitsspeicher wird Gegenstand späterer Erörterungen sein. Im folgenden sollen zunächst der Aufbau und die Wirkung der Maschineninstruktionen und insbesondere der in ihnen verankerte Zugriff zu den Operanden behandelt werden. Dazu sei vorweg bemerkt, daß es bei Bytemaschinen 4 verschiedene Arten von Operanden gibt, und zwar Registeroperanden, Arbeitsspeicheroperanden, Direktoperanden und Kanalworte 4 . Registeroperanden werden dadurch adressiert, daß in den Maschineninstruktionen die Nummern der Operandenregister (Festpunktregister 0 bis 15, Gleitpunktregister 0, 2, 4, 6) verschlüsselt sind. Speicheroperanden werden durch Basisadreßregister, Distanzadressen und bei bestimmten Instruktionstypen zusätzlich durch Indexregister adressiert; dabei bestimmt sich die Speicheradresse eines Operanden aus dem Inhalt des Basisadreßregisters plus Distanzadresse bzw. aus dem Inhalt des Basisadreßregisters plus dem Inhalt des Indexregisters plus Distanzadresse. Die Registernummern und die Distanzadressen sind in den Instruktionen verschlüsselt. Direktoperanden schließlich sind unmittelbarer Bestandteil der betreffenden Maschineninstruktion, d.h. ihr Wert ist in der Instruktion verschlüsselt; eine Adressierung ist daher nicht erforderlich. 4
Kanalworte werden in dieser Einfuhrung nicht behandelt.
32
2.2 Die Instruktionstypen und ihre Formate
Zur Darstellung des Aufbaus der Maschineninstruktionen werden üblicherweise Symbole verwendet, deren Bedeutung nachfolgend beschrieben wird. Op.-Code R B X D I L M
— Operationscode der Instruktion — Operandenregister — Basisadreßregister (Basisregister) — Indexadreßregister (Indexregister) — Distanzadresse (displacement) — Direktoperand (immediate operand) — Länge eines Speicheroperanden (in Bytes) — Bedingungsmaske bei Sprungbefehlen
Die Buchstaben R, B, X, D, I, L und M werden mit 1, 2 oder 3 indiziert, um die Operanden zu bezeichnen. Als Besonderheit bei den Registern gilt zu beachten, daß es sich bei den Basisregistern (B) und Indexregistern (X) stets um die Festpunktregister 0 bis 15 handelt. Die Operandenregister (R) können je nach Operation sowohl Festpunkt- als auch Gleitpunktregister sein. Die Vergabe der Symbole B, X und R richtet sich nur nach der aktuellen Verwendung: Wenn eines der Festpunktregister als Operandenregister für eine arithmetische oder logische Operation benutzt wird, nennt man es R; wenn es als Basisregister verwendet wird, heißt es B und wenn es als Indexregister fungiert, heißt es X. Die Symbole B, X und R sind somit nur funktionallogische Bezeichnungen. In einem Programm kann möglicherweise ein und dasselbe Festpunktregister alle 3 Funktionen ausüben.
2.2 Die Instruktionstypen und ihre Formate Byte-Maschinen haben 5 Instruktionstypen, die entsprechend der mit ihnen angesprochenen Operandenarten mit den mnemotechnischen Kürzeln RR (Register und Register), RX (Register und indizierter Speicher), RS (Register und Speicher), SI (Speicher und Direktoperand), SS (Speicher und Speicher) gekennzeichnet werden. Bei den SS-Instruktionen unterscheidet man die Versionen SS (logisch) und SS (arithmetisch), so daß man insgesamt auch von 6 Instruktionstypen sprechen kann. Alle Instruktionen haben einen Operationsteil und einen Operandenteil.
Operationsteil 1 Byte
Operanden teil
2.2 Die Instruktionen und ihre Formate
33
Die Verschlüsselung des Operationsteils erfolgt im äußerst linken Byte. Dabei ist von Interesse, daß die bit-Positionen 7 und 6 die Verschlüsselung des Instruktionstyps und der Instruktionslänge übernehmen: bit-Positionen
7 6
Instruktionslänge
Instruktionstyp
0 0 1 1
2 4 4 6
RR RX RS, SI SS
0 1 0 1
Bytes (1 Bytes (2 Bytes (2 Bytes (3
Halbwort) Halbworte) Halbworte) Halbworte)
Durch diese Codierung wird das Steuerwerk u. a. in die Lage versetzt, das Befehlszählregister um die Bytezahl des jeweiligen Befehls zu erhöhen und damit auf die Adresse des nachfolgenden Befehls einzustellen. An das Byte zur Verschlüsselung des Operationsteils schließen sich je nach Instruktionstyp 1, 3 oder 5 Bytes zur Verschlüsselung des Operandenteils an. Bei den Operanden handelt es sich einmal um Daten, die mit Hilfe der Instruktionen verarbeitet werden sollen. Diese Daten können in Operandenregistern, im Arbeitsspeicher oder in den Instruktionen selbst stehen. Der betreffende Operandenteil der Instruktionen besteht in diesen Fällen aus der Verschlüsselung der Registernummern oder Speicheradressen. Direktdaten sind in der Instruktion selbst verschlüsselt. Operanden können ferner aber auch Speicheradressen sein, die als Sprungziele dienen oder irgendwelchen Adreßrechnungen unterworfen werden sollen. Diese Adressen können ebenfalls in Operandenregistern stehen oder aber gleichsam als Direktoperanden auftreten. In diesen Fällen besteht der betreffende Operandenteil der Instruktionen ebenfalls aus der Verschlüsselung der Registernummern oder der betreffenden Speicheradressen. Operanden können sodann Steuergrößen für shift-Operationen sein. Sie treten in der Form von Speicheradressen als Direktoperanden auf. Es wird jedoch nicht auf eine Speicheradresse zugegriffen, sondern der Wert der „Adresse" bildet die Steuergröße. Operanden können schließlich Bedingungsschlüssel für Verzweigungsoperationen sein. Auch sie treten als Direktoperanden auf, indem sie wie Registernummern erscheinen. Es wird jedoch nicht auf ein Register zugegriffen, sondern die „Registernummer" bildet die Bedingungsmaske. Grundsätzlich haben alle Instruktionstypen zwei Operanden, mit Ausnahme einiger RS-Instruktionen, die drei Operanden haben. Jedoch läßt sich dieser Sonderfall so umdeuten, daß auch hier nur zwei Operanden im Spiel sind.
34
2. Maschineninstruktionen und Operandenadressierung
Ferner gilt, wenn auch mit vielen Ausnahmen, daß nur mit dem ersten Operanden etwas geschieht (Veränderung, Vergleich), während der zweite Operand für die betreffende Operation nur die Information liefert, selbst aber unverändert bleibt. In den Ausnahmefällen ist es genau umgekehrt, d.h. der zweite Operand ist Gegenstand der Operation und der erste Operand liefert die Information. Nachfolgend sollen die Instruktionstypen im einzelnen dargestellt und erläutert werden: RR-Instruktionen RR symbolisiert eine „Register und Register"-Operation, z.B. Addieren (Reg. 5> auf (Reg. 3>5, d.h. beide Operanden stehen in Operandenregistern. Im Arbeitsspeicher hat dieser Instruktionstyp folgendes Format: Ri
Op.-Code 1. Byte
2. Byte
Die Verschlüsselung der Registeradressen in je einem Halbbyte nutzt die Möglichkeiten des Dual-Code vollständig aus, denn mit 4 bits lassen sich die Dezimalzahlen 0 bis 15 darstellen, also alle möglichen Nummern der 16 Festpunktbzw. 4 Gleitpunktregister. Beispiel für eine RR-Instruktion: Addieren (Reg. 5> auf (Reg. 3> Addieren Register sedezimal :
1
Reg. 3
! A
3
0001 I 1010 1
binar:
1 5
0011 ! 0101 I
RX-Instruktionen RX bezeichnet eine „Register und indizierte Speicher"-Operation, z. B. subtrahieren Speicherwort von (Reg. 10); d.h. ein Operand steht in einem Register und ein Operand im Arbeitsspeicher. Die Indizierung stellt eine besondere Form der Speicheradressierung dar, die in Kapitel 2.3.2 ausführlich behandelt wird. Im Arbeitsspeicher hat dieser Instruktionstyp folgendes Format: Op.-Code 1. Byte 5
R,
;
X2
2. Byte
Bj
(• 3. Byte
• D2 -.
1
,1 l 4. Byte
•
Die Schreibweise (Reg. i ) bedeutet: „Inhalt des Registers i".
2.2 Die Instruktionstypen und ihre Formate
35
R j ist die Adresse des 1. Operanden (Nummer eines Festpunkt- bzw. Gleitpunktregisters), X 2 und B2 sind Nummern von Festpunktregistern, die als Indexregister und Basisregister zusammen mit der Distanzadresse D 2 die Adresse des 2. Operanden determinieren. Die Verschlüsselung der Distanzadresse in 3 Halbbytes (12 bits) begrenzt ihren Bereich auf 0 bis 4095. Beispiel für eine RX-Instruktion: Subtrahieren Wort von auf oder Vergleichen mit (Feld 2>; d.h. beide Operanden stehen im Arbeitsspeicher. Die SS-Instruktionen treten in zwei Versionen auf, und zwar als SS (arithmetisch) und als SS (logisch). Der Unterschied ist, daß bei SS (arithmetisch) jeder Operand eine besondere Längenangabe hat und daß die Operation jeden Operanden in der angegebenen Länge verarbeitet; z. B. wird ein 3 Bytes langer Operand auf einen 5 Bytes langen Operanden addiert. Bei SS (logisch) hat hingegen nur der 1. Operand eine Längenangabe und die Operation verarbeitet beide Operanden in der Länge des 1. Operanden; z.B. wird ein 5 Bytes langer 1. Operand mit einem ebenso langen 2. Operanden verglichen. Im Arbeitsspeicher hat der Instruktionstyp SS (arithmetisch) folgendes Format: SS (arithmetisch) Op.-Code l . Byte
L, - 1 i L: I 2. Byte
D, 3. Byte
14. Byte
S.Byte
6. Byte
Li und L 2 sind die Längen (in Bytes) des ersten bzw. zweiten Operanden. Aus Gründen der internen Operationsabwicklung sind die Längenangaben um je l kleiner als die tatsächlichen Längen. Die maximalen Längen sind Lj = 16. Bi, Dj und B2, D 2 ergeben die Speicheradressen der beiden Operanden. Beispiel für eine Instruktion vom Typ SS (arithmetisch): Addieren gepackt (Feld 2> auf (Feld 1 >, wobei L, = 5 und L2 = 3 ist.
2. Maschineninstruktionen und Operandenadressierung
38 Addieren gepackt
sedezimal
binär:
•
!
L2 - 1
4
2
8
0100
0010
1000
A
1 1111 ! 1010
Speicheradresse des 1. Operanden A
L, - 1
I1_ ! 0
I
0000
8
! 6
0001
0110
r ;
1000
Speicheradresse des 2. Operanden A
i
0
0001
0000
A
1010
Der Instruktionstyp SS (logisch) hat im Arbeitsspeicher folgendes Format: SS (logisch) Op.-Code
L, - 1
1. Byte
2. Byte
B,
D2 t-
D, 3. Byte
L. 6. Byte
5. Byte
4 . Byte
L t ist die Längenangabe des 1. Operanden. Sie bestimmt zugleich auch die Länge des 2. Operanden. Die maximale Länge ist L j = 256. Beispiel für eine Instruktion vom Typ SS (logisch): Vergleichen logisch (Feld 1 > mit , wobei Li = 11 ist. Vergleichen logisch
A
/
sedezimal:
binär:
D
: i
A
/
s
1101 | 0101
Speicheradresse des 1. Operanden
L, - 1
o
!
A
A
i 0000 | 1010
1
\
Olli
1
D
0001
1101
Speicheradresse des 2. Operanden
A
V i
0
! oooo
7
Olli
!
\
1
F
B
0001
1111
1010
Eine zusammenfassende Übersicht über alle Instruktionsformate befindet sich im Anhang auf Seite 289.
2.3 Die Arbeitsspeicheradressierung 2.3.1 Einfache Adressierung Bei der einfachen Adressierung werden Speicheradressen aus dem Inhalt der Basisregister B ; und aus den Distanzadressen Dj gebildet: Speicheradresse = < Bi > + Dj B, ist die Nummer irgendeines der 16 Festpunktregister, welches durch den Programmierer als Basisregister deklariert worden ist. Ferner muß der Program-
2.3 Die Arbeitsspeicheradressierung
39
mierer dafiir sorgen, daß in dieses Basisregister eine absolute Speicheradresse, die sogenannte Basisadresse geladen wird. Das geschieht für gewöhnlich mit Hilfe der Instruktion BALR
Basisregister-Nr., 0
während der Ausführungsphase des Programms. Dieser Vorgang läßt sich folgendermaßen erklären: Beim Laden des Programms erhält der Programmanfang eine absolute Ladeadresse, die das Ladeprogramm in das Befehlszählregister bringt. Angenommen, die BALR-Instruktion sei der Anfang des Programms: Sie lädt in der oben gezeigten Codierung den Inhalt des Befehlszählregisters in das angegebene Basisregister. Bevor jedoch dieser Befehl ausgeführt wird, ist das Befehlszählregister bereits um 2 (Länge der BALR-Instruktion) erhöht worden. Die Basisadresse ist also die Adresse der auf den Ladebefehl BALR folgenden Maschineninstruktion. Dj ist die positive Differenz zwischen der Speicheradresse des Operanden i und der Basisadresse. Die Adressierung der Operanden im Arbeitsspeicher erfolgt also relativ zur Basisadresse. Aus diesem Grunde wird Di auch relative Adresse, Distanzadresse oder englisch: displacement genannt. Angenommen das Festpunktregister Nr. 7 sei Basisregister und < Reg. 7 > sei nach Ausführung des BALR-Befehls gleich 1000. Ferner möge ein Operand im Arbeitsspeicher die absolute Adresse 1050 haben. 1050 1 o : i
1051 T 3 ! 4
1052 5
c
V Operand
Dann wird die Speicheradresse dieses Operanden wie folgt dargestellt: + Dj = + Dj = 1000 + 50. Die Verschlüsselung dieser Adresse in der Maschineninstruktion lautet: sedezimal:
binär:
allgemein:
7
!
o
Olli | 0000
Bi
3
2
0011
0010
D|
i i
»
Für die Verschlüsselung der Distanzadresse stehen bei allen dafür in Betracht kommenden Instruktionstypen 3 Halbbytes = 1 2 bits zur Verfügung. Damit lassen sich Werte zwischen 0 und 4095 darstellen.
40
2. Maschineninstruktionen und Operandenadressierung
Mit einem Basisregister lassen sich daher alle Operanden adressieren, die im Bereich der Speicheradressen (Bj > + 0 bis < Bj > + 4095 liegen, mit den Zahlen des obigen Beispiels also alle Operanden, die absolute Speicheradressen zwischen 1000 und 5095 haben. Überschreiten die Operandenadressen den höchsten Wert des Bereiches, so müssen ein oder mehrere zusätzliche Basisregister deklariert werden. Ferner muß der Programmierer dafür sorgen, daß die zusätzlichen Basisregister in der Ausfuhrungsphase des Programms die gewünschten Basisadressen erhalten. Werden beispielsweise die Register 8 und 9 als zusätzliche Basisregister deklariert, so muß der Programmierer Instruktionen vorsehen, die z. B. folgende Operationen ausfuhren: = + 4095 + 1 = 5096 + 4095 + 1 = 9192 Durch Register 8 lassen sich dann alle Operanden mit Adressen zwischen 5096 und 9191 und durch Register 9 alle Operanden mit Adressen zwischen 9192 und 13287 erreichen. Dabei wird weiterhin als Beispiel eine absolute Speicheradresse von 1000 in Register 7 angenommen. Diese bei Byte-Maschinen praktizierte Art der Operandenadressierung im Arbeitsspeicher ist zweifellos komplizierter und aufwendiger als die direkte Adressierung, wie sie vorwiegend bei Wortmaschinen verwendet wird. Die relative Adressierung mit variabler Basisadresse und fester Distanzadresse hat jedoch entscheidende Vorteile: Der wichtigste Vorteil ist, daß auf diese Weise eine leichte Verschieblichkeit der Programme und der zugehörigen Datenfelder im Arbeitsspeicher ermöglicht wird. Dies aber ist eine wichtige Voraussetzung für die Realisation eines timesharing-Betriebes, bei dem die absolute Lage der Programme im Arbeitsspeicher variabel sein muß. Durch die leichte Variierbarkeit der Basisadressen in den Basisregistern wird dieses Ziel auf rationelle Weise erreicht. Ein weiterer Vorteil dieser Adressierungsmethode ist, daß der Programmierer in die Adreßrechnung eingreifen und dadurch bei bestimmten Problemen zu eleganten Lösungen kommen kann: der Inhalt von Basisregistern kann durch bestimmte Instruktionen im Programm verändert werden, wodurch sich recht flexible Adressierungsmöglichkeiten für einzelne Operanden ergeben. Normalerweise hat jedoch der Programmierer mit der Adreßrechnung nicht viel zu tun, da im ASSEMBLER die Operanden im Arbeitsspeicher in der Regel symbolisch, d.h. durch Vergabe sinnreicher mnemotechnischer Kürzel (Namen) adressiert werden. Der Programmierer hat lediglich für die Nominierung der
2.3 Die Arbeitsspeicheradressierung
41
Basisregister und für das Laden der Basisadressen zu sorgen. Alles andere kann dem Übersetzerprogramm überlassen werden, welches aus den symbolischen Adressen die in den Maschineninstruktionen erforderlichen Distanzadressen Dj ermittelt. Um einen Eindruck von der Wirkungsweise des Übersetzerprogramms zu vermitteln, soll nachfolgend ein kleiner Ausschnitt eines ASSEMBLER-Programms „von Hand" übersetzt werden. Als Basisregister dient das Festpunktregister Nr. 7.
ASSEMBLER-Programm
FELD1 FELD2 ZAHL1 ZAHL2 RESULT WEITER
BALR USING PACK PACK AP MVC B DS DS DC DC DS CLC
7,0 *,7 FELD1, ZAHL1 FELD2, ZAHL2 FELD1, FELD2 RESULT, FELD1 WEITER CL3 CL3 C'1125' C'21041' CL3
Länge dez.
Distanz- Maschinenprogramm adr. dez. sedez. sedezimal 05 70
6 6 6 6 4.
'18
0 6 C 12
24
18
0 6 '12 1
F2 F2 FA D2 47
23 24 22 02 F0
70|[C] 7 0 g l 701F 7026 701C 701F 702B 701C 702E
>28
3 ^ 3 1 4 ^ 9 4 8 T43 6 '46
1F 26 2B 2E
F1F1F2F5 F2F1F0F4F1 D5
Die Instruktion BALR 7,0 sorgt dafür, daß in Register 7 die Adresse der ersten nachfolgenden Maschineninstruktion (F2 23 70IC 7022) gebracht wird, und zwar die absolute Arbeitsspeicheradresse, die diese Instruktion nach dem Laden des Programms erhalten hat. Die Instruktion USING *,7 erzeugt keine Maschineninstruktion und belegt daher auch keinen Speicherplatz. Sie ist vielmehr eine Anweisung an das Übersetzerprogramm, das Register 7 als Basisregister in die Maschineninstruktion einzusetzen. Der Übersetzungsvorgang spielt sich nun so ab, daß zunächst beginnend mit der auf BALR 7,0 folgenden Maschineninstruktion von allen Instruktionen,
42
2. Maschineninstruktionen und Operandenadressierung
Datenfeldern und Konstanten die Längen und daraus die Distanzadressen Di berechnet werden 6 , pabei erhält die erste Maschineninstruktion nach BALR 7,0 die Distanzadresse 0, denn diese Adresse wird ja wie gesagt in das Basisregister 7 geladen. In einem zweiten Durchgang werden sodann die Instruktionen und Konstanten übersetzt, wobei in die Maschineninstruktionen die Nummern der Basisregister und die Distanzadressen der Operanden eingesetzt werden. Weitere Einzelheiten werden bei der Behandlung der USING-Instruktion in Kapitel 3.5.2 gebracht.
2.3.2 Indizierte Adressierung Die indizierte Adressierung des Arbeitsspeichers ist für die jeweils zweiten Operanden in den RX-Instruktionen vorgesehen. Die Speicheradressen werden aus dem Inhalt von Indexregistern X 2 , dem Inhalt von Basisregistern B2 und aus den Distanzadressen D 2 gebildet: Speicheradresse = + + D2 X2 ist die Nummer irgendeines der 16 Festpunktregister, welches der Programmierer als Indexregister benutzt. Wird jedoch das Register Nr. 0 verwendet, so entfallt die Indizierung. Hinsichtlich der Größen B2 und D2 gilt das unter 2.3.1 Gesagte. Angenommen es sei = 10, = 1000 und D2 = 50, dann ist die Speicheradresse des betreffenden Operanden 10 + 1000 + 50 = 1060. Der Vorteil der indizierten Adressierung ist, daß durch einfache Variation des Inhalts eines Indexregisters eine Folge von Unterfeldern des mit + D 2 adressierten Operanden angesprochen werden kann. Beispiel: Eine Folge von 10 Wortoperanden im Arbeitsspeicher soll in einem Festpunktregister aufaddiert werden. Indexregister sei das Register 2 und Basisregister das Register 7. Ferner wird angenommen, daß das Basisregister nach dem Laden in der Ausführungsphase des Programms den Wert 998 hat. Durch sukzessives Erhöhen des Indexregisters 2 um jeweils 4, werden die Wortgrenzen 1020, 1024, 1028, 1032 usw. adressiert (vgl. S. 43). Eine weitere Möglichkeit einer indizierten Adressierung bei RS-, SI- und SSInstruktionen kann sich der Programmierer schaffen, indem er die Inhalte der bei der Operandenadressierung verwendeten Basisregister entsprechend variiert.
6
Für alle symbolisch adressierten Instruktionen und Operanden werden diese Informationen darüber hinaus in einer sogenannten symbol table gesammelt, die im Übersetzungsprotokoll mit ausgedruckt wird.
43
2.3 Die Arbeitsspeicheradressierung
Ul -Í) -fi 5^ ii (T) — (N ^ O O o o o o « r- r-» r- r-
• nicht indizierte Speicheradr. D 2 (,B 2 ) ->- Ausdr. 1 (,Ausdr.3) Ausdruck 1 und Ausdruck 3 vgl. oben! oder Operand 2 => Inhalt Indexreg. + Distanzadr. D2 (X2).-> Ausdr. 1 (Ausdr. 2) Ausdruck 1 und Ausdruck 2 vgl. oben! oder Operand 2 => indizierte Speicheradr. S 2 (X 2 ) -* Symbol (Ausdruck) Ausdruck ist meistens ein Direktwert oder ein Symbol. oder Operand 2 => nicht indizierte Speicheradr. S 2 -»• Symbol oder Operand 2 =» Direktkonstante LT 2
Literal
Die symbolischen Befehlsformate lauten: a) bei expliziter Adressierung (d.h. die Speicheradresse wird vom Programmierer durch D, B und evtl. X dargestellt)
3.4 Maschinenbefehle
S S S
Op.Code Op.Code Op.Code
69
Ri, D 2 (X 2 , B 2 ) Rj, D 2 (,B 2 ) R,,D2(X2)
indiziert nicht indiziert indiziert ohne Basisregister
Einfache Beispiele: L
5,0(10,2)
Der Inhalt des mit (X2> + (B2> + D 2 = (Reg. 10) + + 0 adressierten Speicherfeldes wird in das Register 5 geladen. NEU
A
5,4(,2)
Der Inhalt des mit (B2> + D 2 = (Reg. 2> + 4 adressierten Speicherfeldes wird auf den Inhalt des Registers 5 addiert. LA
3,10(3)
Der Inhalt des Registers 3 wird um 10 erhöht. b) bei impliziter Adressierung (d.h. die Speicheradresse wird vom Programmierer durch ein Symbol und evtl. X dargestellt) S S
Op.Code Op.Code
RL S 2 (X 2 ) R 1 ; S2
indiziert nicht indiziert
Einfache Beispiele: AB
S
5,W0RT(1O)
Der Inhalt des mit Symbol + (X2> = WORT + (Reg. 10) adressierten Speicherfeldes wird vom Inhalt des Registers 5 subtrahiert. Dem Symbol WORT wird bei der Übersetzung ein Basisregister und eine Distanzadresse zugeordnet, so daß die Adresse intern aus D 2 , X 2 und B2 berechnet wird. C
3,K0NST
Der Inhalt des Registers 3 wird mit dem Inhalt des mit dem Symbol K0NST adressierten Speicherfeldes verglichen. Dem Symbol K0NST wird bei der Übersetzung ein Basisregister und eine Distanzadresse zugeordnet, so daß die Adresse intern aus D 2 und B2 berechnet wird. c) bei Literalverwendung S
Op.Code
Ri, LT 2
Einfaches Beispiel: L0ESCH
L
7=F'0'
In das Register 7 wird eine Null geladen. Statt einer Operandenadresse wird hier eine Direktkonstante verwendet, die bei der Übersetzung irgendwo im Arbeitsspeicher dargestellt wird. Die echte Maschineninstruktion erhält zur Berechnung der betreffenden Speicheradresse ein Basisregister und eine Distanzadresse; das Indexregister wird mit Null eingesetzt.
3. Die Programmiersprache ASSEMBLER
70
RX-Instruktionen in der Sonderform als Sprungbefehle Allgemeine Formate a) normal mit explizitem Bedingungsschlüssel: S
Op.Code Operand 1, Operand 2
b) erweiterter Bedingungscode: S
Op.Code Operand 2
Operand 1 => Bedingungsschlüssel M, ->• Ausdruck Ausdruck ist meistens ein Direktwert oder ein Symbol. Operand2 => indiz. Speicheradr. D 2 (X 2 , B 2 ) Ausdr. 1 (Ausdr.2, Ausdr.3) Diese Version ist selten. Ausdruck 1 ist meistens ein Direktwert, ein Symbol, ein Längenattribut (L' Symbol) oder der Wert des Zuordnungszählers (evtl. ± Distanz). Ausdruck 2 und Ausdruck 3 sind meistens Direktwerte oder Symbole. oder Operand 2 =>• nicht indizierte Speicheradr. D 2 (,B 2 ) Ausdr. 1 (,Ausdr. 3) Diese Version ist selten. Ausdruck 1 und Ausdruck 3 vgl. oben! oder Operand 2 =»• indizierte Speicheradr. S 2 (X 2 ) Symbol (Ausdruck) Diese Version ist sehr selten. Ausdruck ist meistens ein Direktwert oder ein Symbol. oder Operand 2 => nicht indizierte Speicheradr. S 2 Symbol Diese Version wird fast ausschließlich benutzt. Die symbolischen Befehlsformate für diesen letzten Fall lauten: a) normal mit Bedingungsschlüssel S
Op.Code
M b S2
b) erweiterter Bedingungscode S
Op.Code
S2
Einfache Beispiele: BC BE
8,NEU NEU
Beide Instruktionen bewirken dasselbe: Nach einer Vergleichsoperation wird bei Gleichheit (equality) zu der symbolischen Adresse NEU verzweigt. Bei Ungleichheit setzt das Programm mit der nächsten Instruktion fort.
71
3.4 Maschinenbefehle
Der erweiterte Bedingungscode impliziert den Bedingungsschlüssel Mj. Bei der Übersetzung wird dieser zunächst aus dem Befehlscode ermittelt und dann in die betreffende echte Maschineninstruktion eingesetzt (vgl. S. 170).
RS-Instruktionen Allgemeines Format: Symb.Adr. Op.Code Operand 1, Operand 3, Operand 2 Operand 1 => Registernummer R j -» Ausdruck Ausdruck ist meistens ein Direktwert oder ein Symbol. Operand 3 => Registernummer R 3 Ausdruck vgl. oben!
Ausdruck
Operand 2 => Speicheradr. D 2 (B 2 ) Ausdruck 1 (Ausdruck 2) Ausdruck 1 ist meistens ein Direktwert, ein Symbol, ein Längenattribut (L' Symbol) oder der Wert des Zuordnungszählers (evtl. ± Distanz). Ausdruck 2 ist meistens ein Direktwert oder ein Symbol. oder Operand 2
Speicheradresse S 2
Symbol
oder Operand 2 => Direktkonstante LT 2
Literal
Die symbolischen Befehlsformate lauten a) bei expliziter Adressierung: S
Op.Code
Ri, R 3 , D 2 ( B 2 )
Einfaches Beispiel: LADEN LM
5,7,12(9)
In die Register 5, 6 und 7 werden 3 Speicherworte geladen, deren Adresse aus Registernummer R ( Ausdruck Ausdruck ist meistens ein Direktwert oder ein Symbol. Operand 2 => Verschiebezahl D 2 (B 2 ) Ausdruck 1 (Ausdruck 2) Ausdruck 1 ist meistens ein Direktwert oder ein Symbol. Ausdruck 2 wie Ausdruck 1! Die folgenden symbolischen Befehlsformate sind gebräuchlich: S
Op.Code
R 1 ; D 2 (B 2 )
Op.Code
R 1 ; D2
und S
Einfache Beispiele: SH
SRL
3,5(8)
Der Inhalt von Register 3 wird um 5 + < Reg. 8 > bit-Positionen nach rechts verschoben. SLDL
4,6
Der Inhalt des Registerpaares 4, 5 wird um 6 bit-Positionen nach links verschoben. Sl-Instruktionen Allgemeines Format: Symb.Adr. Op.Code Operand 1, Operand 2 Operand 1 => Speicheradresse Dt (B 2 ) Ausdruck 1 (Ausdruck 2) Ausdruck 1 ist meistens ein Direktwert, ein Symbol, ein Längenattribut
3.4 Maschinenbefehle
73
(L' Symbol) oder der Wert des Zuordnungszählers (evtl. ± Distanz). Ausdruck 2 ist meistens ein Direktwert oder ein Symbol. oder Operand 1 => Speicheradresse S!
Symbol
Operand 2 => Direktkonstante I 2 -»• Direktwert (1 Byte) Die symbolischen Befehlsformate lauten a) bei expliziter Adressierung: S
Op.Code
Ü! (BO, I 2
Einfaches Beispiel: M0VE MVI 5(8),C'A' Die Direktkonstante A wird in das mit < Reg. 8 > + 5 adressierte Byte übertragen. b) bei implizierter Adressierung: S
Op.Code
Si, I 2
Einfaches Beispiel: CLI
BYTE,X'OC'
Der Inhalt des mit BYTE adressierten Byte wird mit der sedezimalen Direktkonstante OC, also mit dem bit-Muster 0000 1100, verglichen. SS-Instruktionen (arithmetisch) Allgemeines Format: Symb.Adr. Op.Code Operand 1, Operand 2 Operandi und Operand2 => Speicheradr. u. Längenschi. Dj(Li, Bj) Ausdr. 1 (Ausdr.2, Ausdr.3) Ausdruck 1 ist meistens ein Direktwert, ein Symbol, ein Längenattribut (L' Symbol) oder der Wert des Zuordnungszählers (evtl. ± Distanz). Ausdruck 2 ist meistens ein Direktwert, ein Symbol oder ein Längenattribut (L' Symbol). Ausdruck 3 ist meistens ein Direktwert oder ein Symbol. oder Operand 1 und Operand 2 => Speicheradresse u. Längenschlüssel Sj(Lj) ->• Symbol (Ausdruck) Ausdruck ist meistens ein Direktwert, ein Symbol oder ein Längenattribut (L' Symbol). oder
3. Die Programmiersprache ASSEMBLER
74
Operandi und Operand2 => Speicheradresse Si
Symbol
oder Operand 2 =* Direktkonstante LT 2 -*• Literal Die symbolischen Befehlsformate lauten a) bei expliziter Adressierung und explizitem Längenschlüssel: S
Op.Code
D, (L 1 ( Bj), D 2 (L 2 , B 2 )
Einfaches Beispiel: PACK
0(2,7),5(4,7)
Der Inhalt des mit < Reg. 7 > + 5 adressierten 4 Bytes langen Feldes wird in das mit + 0 adressierte 2 Bytes lange Feld gepackt. b) bei impliziter Adressierung und implizitem Längenschlüssel (der Längenschlüssel der Felddefinition ist maßgebend): S
Op.Code
SL S 2
Einfaches Beispiel: PACK
FELD1,FELD2
Der Inhalt des mit FELD2 adressierten Feldes wird in das mit FELD1 adressierte Feld gepackt. c) bei impliziter Adressierung und explizitem Längenschlüssel (der explizite Längenschlüssel dominiert): S
Op.Code
S ^ L j ) , S2(L2)
Einfaches Beispiel: PACK
A I (3),B1 (4)
Der Inhalt des mit B1 adressierten und 4 Bytes langen Zahlenfeldes wird in der Länge 3 in das mit AI adressierte Feld gepackt. d) Mischformen (jeder Operand kann unabhängig vom anderen jede unter a) bis c) dargestellte Form haben): Einfache Beispiele: ADD PACK
AP SP PACK
0(2,7),FELD2 FELD1 (3),0(3,7) FELD1,FELD2(4)
e) bei Literalverwendung: S S S
Op.Code Op.Code Op.Code
Ü! (LL BJ), LT 2 S „ LT 2 Sj ( L ^ , LT 2
oder oder
75
3.4 Maschinenbefehle
Einfache Beispiele: AP
SUMME ,=X'710C'
Die als Sedezimalkonstante dargestellte gepackte Dezimalzahl + 710 wird auf den Inhalt des mit SUMME adressierten Feldes addiert. SUBTR SP
FELD(3),=B'01111100'
Die als Binärkonstante dargestellte gepackte Dezimalzahl + 7 wird vom Inhalt des 3 Bytes langen und mit FELD adressierten Feldes subtrahiert. PACK
4(3,8) =C'12345'
Die als Zeichenkonstante dargestellte Zahl 12345 wird in ein 3 Bytes langes mit Speicheradr. u. Längenschi. Di (Li, B ^ Ausdr. 1 (Ausdr. 2, Ausdr.3) Ausdruck 1, Ausdruck 2 und Ausdruck 3 vgl. bei SS (arithmetisch) oder Operand 1 =>• Speicheradr. u. Längenschi. S! ( L t ) Ausdruck vgl. bei SS (arithmetisch)
Symbol (Ausdruck)
oder Operand 1 => Speicheradresse S t
Symbol
Operand 2 => Speicheradresse D 2 (B 2 ) Ausdruck 1 (Ausdruck 2) Ausdruck 1 ist meistens ein Direktwert, ein Symbol, ein Längenattribut (L' Symbol) oder der Wert des Zuordnungszählers (evtl. ± Distanz). Ausdruck 2 ist meistens ein Direktwert oder ein Symbol. oder Operand 2 => Speicheradresse S 2
Symbol
oder Operand 2 => Direktkonstante LT 2
Literal
Die symbolischen Befehlsformate lauten: a) bei expliziter Adressierung und explizitem Längenschlüssel: S
Op.Code
Dj (L,, B ^ , D 2 (B 2 )
76
3. Die Programmiersprache ASSEMBLER
Einfaches Beispiel: M0VE
MVC
10(200,12),310(12)
In das 200 Bytes lange und mit (Reg. 12> + 10 adressierte Feld werden 200 Bytes ab der Adresse (Reg. 12> + 310 übertragen. b) bei impliziter Adressierung und implizitem Längenschlüssel (der Längenschlüssel der Felddefinition ist maßgebend): S
Op.Code
Si, S 2
Einfaches Beispiel: MVC
FELD1,FELD2
In das mit FELD1 adressierte Feld werden in der Länge von FELD1 Bytes ab der mit FELD2 adressierten Speicherstelle übertragen. c) bei impliziter Adressierung und explizitem Längenschlüssel (der explizite Längenschlüssel dominiert): S
Op.Code
Sj (Lj), S 2
Einfaches Beispiel: C0MP
CLC
A(5),ZAHL
Der Inhalt des mit A adressierten Feldes wird in der Länge 5 (beginnend bei A) mit dem Inhalt des mit ZAH L adressierten Feldes verglichen. d) Mischformen (jeder Operand kann unabhängig von anderen jede unter a) bis c) dargestellte Form annehmen): Einfache Beispiele: MVC CLC MVC
RECHF(5),201 (8) 0(20,7),FELD A,0(7)
e) bei Literalverwendung S S S
Op.Code Op.Code Op.Code
Di (Li, Bj), LT 2 Sj (L,), LT 2 Sj, LT 2
oder oder
Einfache Beispiele: MVC
17(3,11),=C'A11'
Die Zeichenkonstante A11 wird in ein 3 Bytes langes mit (Reg. 11 > + 17 adressiertes Feld übertragen. MVC
DRUCK(4),=C'NAME'
3.4 Maschinenbefehle
77
Die Zeichenkonstante NAME wird in der Länge 4 in das mit DRUCK adressierte Feld übertragen.
FELD
MVC
FELD,=X'00000C'
DS
CL3
Die als Sedezimalkonstante dargestellte gepackte Dezimalzahl + 0 wird in das mit FELD adressierte Feld übertragen. 3.4.2 Die relative symbolische Adressierung Um die Vergabe symbolischer Speicheradressen einzuschränken, kann relativ zu symbolischen Adressen adressiert werden. Die relative symbolische Adressierung ist also nur im Zusammenhang mit der impliziten Adressierung, also nur in Verbindung mit der Verwendung von Symbolen Sj möglich. Das allgemeine Operandenformat bei den dafür in Betracht kommenden Instruktionstypen lautet: Sj ± Ausdruckj Ausdruck ist meistens ein Direktwert, ein Symbol oder zuweilen auch ein Längenattribut (L' Symbol). Die Distanz „± Ausdruckj" bewirkt, daß bei der Übersetzung die Distanzadresse des Adreßsymbols Sj um den Wert von „Ausdruck}" vergrößert bzw. verringert wird und so in die echte Maschineninstruktion eingesetzt wird. Im einzelnen gelten folgende Operandenformate: RX- und RS-Instruktionen S2 ± Ausdruck2 Einfache Beispiele: L
5.W0RT+4
Der Inhalt des mit W0RT+4 adressierten Speicherwortes wird in das Register 5 geladen. ST
3,W+4(6)
Der Inhalt des Registers 3 wird in das mit W + 4 + < Indexreg. 6> adressierte Wort im Arbeitsspeicher gespeichert. STM
4,7,W0RTE+X'1O'
Die Inhalte der Register 4, 5, 6 und 7 werden in 4 aufeinanderfolgende Speicherworte gebracht, deren erstes mit W0RTE+16 adressiert ist.
78
3. Die Programmiersprache ASSEMBLER
SI-Instruktionen Si ± Ausdruck! Einfaches Beispiel: CLI
FELD—3 ,X'40'
Der Inhalt des mit FELD—3 adressierten Byte wird mit dem als Sedezimalkonstante dargestellten „blank", also mit dem bit-Muster 0100 0000, verglichen. SS (arithmetisch)-Instruktionen a) impliziter Längenschlüssel (ungeachtet der Adreßmodiflkation gelten die Längenschlüssel der Felddefinition): Si ± Ausdruckj, S 2 ± Ausdruck 2 Einfaches Beispiel: AP
FELD—1 ,ZAHL+3
Der Inhalt des mit ZAHL+3 adressierten Feldes wird in der Länge des Feldes ZAHL auf den Inhalt des mit FELD-1 adressierten Feldes addiert, wobei letztgenanntes die Länge des Feldes FELD hat. b) expliziter Längenschlüssel (die impliziten Längenschlüssel der Felddefinition werden ersetzt): Sj ± Ausdruck! ( L i ) , S 2 ± Ausdruck 2 ( L 2 ) Einfaches Beispiel: SP
A—3(5),B+6(2)
Der Inhalt des 2 Bytes langen und mit B+6 adressierten Feldes wird vom Inhalt des 5 Bytes langen und mit A—3 adressierten Feldes subtrahiert. c) Mischformen (Beispiele): PACK SP AP
ZAHL(5),EING+2 A+3(3),B—1 0(16,7),ZAHL+3(10)
SS (Iogisch)-Instruktionen a) impliziter Längenschlüssel (ungeachtet der Adreßmodiflkation gilt beim ersten Operanden der Längenschlüssel der Felddefinition): S! ± Ausdruck j , S 2 ± Ausdruck 2 Einfaches Beispiel: MVC
FELD+13,ZAH L—4
Der Inhalt des mit ZAHL—4 adressierten Feldes wird in das mit FELD+13 adressierte Feld übertragen, und zwar in der Länge von FELD.
3.4 Maschinenbefehle
79
b) expliziter Längenschlüssel (der implizite Längenschlüssel der Felddefinition wird bei ersten Operanden ersetzt): S! ± Ausdruckj (Lx), S 2 ± Ausdruck^ Einfaches Beispiel: MVC
FELD+13(5),ZAHL—4
Der Inhalt des mit ZAHL—4 adressierten Feldes wird in der Länge 5 in das mit FELD+13 adressierte Feld übertragen. c) Mischformen (Beispiele): CLC MVC CLC
7(5,8), A - 1 0 FELD+13,FELD A—3(200),0(8)
3.4.3 Beschreibung der wichtigsten Maschinenbefehle 3.4.3.1 Übertragungsoperationen im Arbeitsspeicher Befehl: MVC Typ:
(move characters; Übertragen Zeichen)
SS (logisch)
Formate symbolisch: MVC MVC MVC
D , ( L „ BO, D 2 ( B 2 ) S i ( L , ) , S2 S„ S2
Format maschinenintern: L, - 1 1. Byte
2. Byte
B,
B2
D, 3. Byte
4. Byte
S.Byte
6. Byte
Wirkungsweise: Übertragung von L x Bytes ab der durch + D 2 angegebenen Adresse in das mit + Di adressierte Feld. Maximal können 256 Bytes übertragen werden. Die Übertragung beginnt mit den Bytes, die die kleinsten Speicheradressen haben und geht von links nach rechts. Codierungsbeispiele: MVC
FELD1,FELD2
3. Die Programmiersprache ASSEMBLER
80
Übertragen von Bytes ab der symbolischen Adresse FELD2 in das mit FELD1 adressierte Feld. Es werden so viele Bytes übertragen, wie der implizite Längenschlüssel von FELD1 angibt. (Dieser sei beispielsweise gleich 3.) 1 vorher:
nachher:
4 ! 0 FELD1 FELD1 1 C 11
2 1 4 11 0
4 • 0 i
1 C !» 2
C •1 3
MVC
3 C I3 FELD2
7(200,8),FELD2
Übertragen von 200 Bytes ab der symbolischen Adresse FELD2 in das mit + 7 adressierte Feld. MVC FELD1+3,208(8) Übertragen von Bytes ab der expliziten Adresse + 208 in das mit FELD 1+3 adressierte Feld. Es werden so viele Bytes übertragen, wie der implizite Längenschlüssel von FELD1 angibt. MVC 10(21,8) ,301 (8) Übertragen von 21 Bytes ab der expliziten Adresse
i
1
!
4
4 1 0
! I
0
0
! I
4
]
•
-y 4
|
F
!
F
< Reg. 9)
+0 MV0
RESU LT(3),RESULT(2)
Wegbringen der letzten pezimalstelle: RESULTI2)
1—
i : 2
3 | C
1 1 5
1. Operand
RESULTO)
0 | 1
I RESULT
1
2 !
S I c
1
1. Operand nach M V 0
1
3.4.3.2 L a d e n v o n Registern, Speichern v o n
Registerinhalten
Befehl: LA Typ:
(load address; Laden Adresse)
RX
Formate symbolisch12:
12
LA
R , , D 2 ( X 2 ) B2)
LA
R „ S2 (X2)
LA
Ri, S2
Neben diesen Standard-Formaten gibt es bei RX-Instruktionen noch folgende Sonderformen, deren Einsatz insbesondere beim LA-Befehl sinnvoll sein kann: Rl, D2(,B2) R1;D2(X2) Rl, D2
statt statt statt
R1,D2(0)B2) R!,D2(X2,0) R i , D 2 (0, 0)
86
3. Die Programmiersprache ASSEMBLER
Format maschinenintern: 4
:
R,
i
1- Byte
,
X2
B2
2. Byte
| I« i 3. Byte
n
- 1
1
•
4. Byte
Wirkungsweise: In die 24 niederstwertigen bits des mit R^ adressierten Registers wird die durch + (Reg. B2> + D 2 angegebene Speicheradresse geladen. Die 8 höherwertigen bits von R j werden gleich Null gesetzt. Programmierhinweis: Die Angabe von X 2 oder B 2 oder von beiden kann unterbleiben. Im letzteren Falle wird in das Register R j der Wert D 2 geladen. Codierungsbeispiele: LA
3,FELD
Der Wert der Adresse FELD, d.h. + D 2 , wird in das Register 3 geladen. LA LA
4,15(5,0) 4,15(5)
oder
Der im Indexregister 5 gespeicherte Wert wird um D 2 = 15 erhöht und in das Register 4 geladen. LA LA
4,15(0,5) 4,15(,5)
oder
Der im Basisregister 5 gespeicherte Wert wird um D 2 = 15 erhöht und in das Register 4 geladen. In beiden Fällen handelt es sich um dasselbe Register 5. Ob es als Index- oder als Basisregister interpretiert wird, hängt von der Stellung in der Klammer ab. Wichtig ist ferner, daß wann immer das Register 0 als Basis- oder Indexregister angegeben wird, dessen Inhalt mit Null angenommen wird! LA
7.FELD1 (5)
Der Wert der Adresse FELD1 wird um den Wert des Indexregisters 5 erhöht und in das Register 7 geladen. LA
8,FELD3+16(4)
Der Wert der Adresse FELD3+16 wird um den Inhalt des Indexregisters 4 erhöht und in das Register 8 geladen.
3.4 Maschinenbefehle
87
LA
2,19(3,5)
Die Inhalte des Indexregisters 3 und des Basisregisters 5 werden zusammengezählt; sodann wird die Summe um D2 = 19 erhöht und in das Register 2 gebracht. LA 2,5(2) Der Inhalt des Indexregisters 2 wird um D2 = 5 erhöht und in das Register 2 geladen; d.h. der Inhalt des Registers 2 wird um 5 erhöht. Dasselbe würde erreicht durch: LA 2,5(,2). LA
2,0(2,2)
Die Inhalte des Indexregisters 2 und des Basisregisters 2 werden zusammengezählt und die Summe wird in das Register 2 geladen; d.h. der Inhalt des Registers 2 wird verdoppelt. LA LA LA LA
5,4(0,0) 5,4(0) 5,4(,0) 5,4
oder oder oder
Der Wert D2 = 4 wird in das Register 5 gebracht. LA
5,0
Das Register 5 wird gelöscht.
Befehl: LR Typ:
(load register; Umladen Registerwert)
RR
Format symbolisch: LR R l R2 Format maschinenintern: 1
18 I 1. Byte
R,
I! Rj
I
2. Byte
Wirkungsweise: Der Inhalt des Registers R 2 (alle 32 bits) wird in das Register R t umgeladen.
88
3. Die Programmiersprache ASSEMBLER
Codierungsbeispiel: LR
5,14
Der Inhalt des Registers 14 wird in das Register 5 umgeladen.
Befehl: L Typ:
(load; Laden Vollwort)
RX
Formate symbolisch: L L L
R„ D2(X2,B2) R,,S2(X2) Ri, S 2
Format maschinenintern: 5
; s
R,
1. Byte
i
! x2 2. Byte
^
i 3. Byte
4. Byte
Wirkungsweise: In das mit R! adressierte Register wird der gesamte Inhalt (32 bits) des durch + (B2> + D 2 adressierten Wortes geladen. Programmierhinweis: Die Speicheradresse des 2. Operanden muß auf eine Vollwortgrenze ausgerichtet sein (vgl. Seite 44). Codierungsbeispiele: L
2,W0RT(3)
Der Inhalt des Wortes mit der (durch das Indexregister 3 modifizierten) symbolischen Adresse W0RT wird in das Register 2 geladen. L
5,15(7,9)
Der Inhalt des durch (Reg. 7) + (Reg. 9> + 15 adressierten Wortes wird in das Register 5 geladen.
3.4 Maschinenbefehle
89
L
7,W
Der Inhalt des durch W adressierten Wortes wird in das Register 7 geladen.
Befehl: LH Typ:
(load halfword; Laden Halbwort)
RX
Formate symbolisch: LH R l D 2 (X 2 , B 2 ) LH R„S2(X2) LH R u S2 Format maschinenintem: 1
4
|
R,
8
l.Byte
!
1— 1«
B2
X2
2. B y t e
1
• -
D:
3. B y t e
-j
•
4. Byte
Wirkungsweise: Das mit + + D 2 adressierte Halbwort wird in die niederstwertigen 16 bits des mit R ! adressierten Registers geladen. Die 16 höherwertigen bits des Registers werden mit dem Wert der bit-Position Nr. 15 gefüllt. Programmierhinweis: Die Speicheradresse des 2. Operanden muß auf eine Halbwortgrenze ausgerichtet sein (vgl. Seite 44). Codierungsbeispiele: LH
7,0(2,3) < Reg. 2 ) + < Reg. 3 > + 0 1 1
Reg.
0
0 1
i i
1 1 1 0
1 0 0 0
I
1 1 1
0
T / - " " " ^
1 | 1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
1 0
0
1
1
1
15 14 13 12 11 10
9
1 0
1
0
0
0
8
7
6
5
4
1 1 1 0 3
2
1
0
90
3. Die Programmiersprache ASSEMBLER
LH
3,HW(5) HW + < I n d e x r e g . 5 > 0
1
11
0
1
1
1 |
1 0
0
0
1 I 0 0 0
0 0 0 0
0
Reg.
0
0
3!
30 29 2 8 2 7 26 2 5 24 23 2 2 21 20 19 18 17 16 15 14 13 12
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1 1 0
0
0
0 0 0 0
11 10 9
8
7
6
5
0 4
3
0 2
0
0
1
0
Befehl: IC Typ:
(insert character; Einfügen Zeichen (Byte))
RX
Formate symbolisch: IC IC IC
R„D2(X2,B2) Ri,S2(X2) R „ S2
Format maschinenintern:
1. B y t e
2. B y t e
3. Byte
4. Byte
Wirkungsweise: Das mit + + D 2 adressierte Byte wird in die niederstwertigen 8 bits des mit R t adressierten Registers übertragen. Die restlichen bits des Registers behalten ihre Werte. Codierungsbeispiel: IC
6,B(5)
3.4 Maschinenbefehle
91 B + < Indexreg. 5>
1 1 1 11 0 0 0 1
Reg. 6 (vorher) 0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1 0
0
0
0
0
0
1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
1
1 0
0 0
0
0
0
0
8
7
6
5
4
3
2
1 0
0
I
1 1
1
1
0
0
0
1
Reg. 6 (nachher)
Befehl: LCR Typ:
(load complement; Umladen und Komplementieren)
RR
Format symbolisch: LCR
Rj, R 2
Format maschinenintern: Ri . Byte
1. Byte
Wirkungsweise: Der Inhalt des Registers R 2 wird komplementiert (d. h. positive Zahlen werden negativ und negative Zahlen werden positiv gemacht, vgl. dazu auch Seite 20) und in das Register R! geladen. Codierungsbeispiele: LCR
3,7
Reg. 7 0
0
0
0
31
1 0
komplementiert 31 1
0 1
Reg. 3
1
1
1
92
3. Die Programmiersprache ASSEMBLER
LCR
6,6
Reg. 6 1
1
1
I
0
31
1 0
komplementiert 31 0
' 0
0 0
0
1
1
Reg. 6
Befehl: LNR Typ:
(load negative; Umladen negativ)
RR
Format symbolisch: LNR Rj, R2 Format maschinenintern: 1
1 | 1
1 R. | R2
1. Byte
2. Byte
Wirkungsweise: Der Inhalt des Registers R 2 wird in das Register R[ umgeladen. Ist negativ, so wird dieser Inhalt unverändert übertragen; ist (R 2 > positiv, so wird dieser Inhalt vorher komplementiert. Codierungsbeispiele: LNR
3,3
Der Inhalt des Registers 3 wird negativ gemacht oder bleibt negativ. LNR
7,1
Der Inhalt des Registers 1 wird nötigenfalls durch Komplementieren negativ gemacht und in Register 7 geladen.
3.4 Maschinenbefehle
93
Befehl: LPR Typ:
(load positive; Umladen positiv)
RR
Format symbolisch: LPR R 1 ; R2 Format maschinenintern: 1
1 0 I I.Byte
R,
| R2 l 2. Byte
Wirkungsweise: Der Inhalt des Registers R 2 wird in das Register R x umgeladen. Ist positiv, so wird dieser Inhalt unverändert übertragen; ist negativ, so wird dieser Inhalt vorher komplementiert. Codierungsbeispiel: LPR
15,3
Der Inhalt des Registers 3 wird nötigenfalls durch Komplementieren positiv gemacht und in Register 15 geladen.
Befehl: LM Typ:
(load multiple; Laden mehrfach)
RS
Formate symbolisch: LM
R „ R 3 , D 2 (B 2 )
LM
Rj, R 3 , S 2
Format maschinenintern: | 1. Byte
8
R,
1 I 2. Byte
R,
CO
9
3. Byte
D2
^1
4. Byte
•
3. Die Programmiersprache ASSEMBLER
94
Wirkungsweise: In die aufeinanderfolgenden Register R^ bis R 3 werden die Inhalte entsprechend vieler Speicherworte geladen, deren erstes mit + D 2 adressiert ist. Programmierhinweis: Die Adresse des 2. Operanden muß auf eine Vollwortgrenze ausgerichtet sein (vgl. Seite 44). Codierungsbeispiele: LM
7,10,15(2)
Befehl: STC Typ:
(store character; Speichern Zeichen (Byte))
RX
Formate symbolisch: STC STC STC
R 1( D 2 ( X 2 , B 2 ) Rj, S 2 (X 2 ) R,, S 2
Format maschinenintern: 4
! 2 I. Byte
1 R, 1 X, 2. Byte
B; 3. Byte
•
D2
1 -I
4. Byte
»
3.4 Maschinenbefehle
97
Wirkungsweise: Die niederstwertigen 8 bits des mit R j adressierten Registers werden in das mit nach Register 5. (56) Division des Doppelregisters 4 , 5 durch 8. (57) Vermindern des Quotienten in Register 5 um 75. (58) Sprung in das Unterprogramm MANTISSE zur Konversion des ersten Teils der sedezimalen Mantisse. (59) Übertragen des ersten Teils der umgewandelten Mantisse nach F9. F9
+1
'
0
[ I
+2
X
X
j I
+3
1
1 X
X
|
1
X
I
x ] x I
+4 1
x [ ± I
125
3.4 Maschinenbefehle
(60) Überschreiben des Vorzeichens in F9 durch eine Null. (61) Übertragen einer gepackten Null (mit Vorzeichen) in die letzten 4 Bytes von F9. (62) Übertragen des zweiten Teils der sedezimalen Mantisse (der bereits im Unterprogramm MANTISSE korrigiert und nach FW7 gebracht wurde) zusammen mit sedezimalen Nullen in das GP-Wort GW. (63) Laden des zweiten Teils der Mantisse nach GP-Register 6. (64) Sprung in das Unterprogramm MANTISSE zur Konversion des zweiten Teils der sedezimalen Mantisse. (65) Addieren des zweiten Teils der umgewandelten Mantisse auf den Inhalt von F9. F9 o
;
+1 x
X
i i
X
X
+2 1 1 1
X
+3 1 1 X
1
+4 X
X
DW+
+
!
+5 1 0
0
3 (X)
I
|
+6 1 0
o
X
X
+4 1 X
I
X
I
!
+7 o
o
+5 1 j
X
X
! 1
+6 t J
+8 o
0
I
C
+7 X
x
;
(66) Entpacken des Inhalts von F9 nach F16. (67) Überschreiben des Vorzeichens in F16 mit dem bit-Muster 1111 (sedezimal: F). (68) Prüfen, ob das erste Byte von F16 eine Null enthält. (69) Wenn nein, Sprung nach LPR45. (70) Wenn ja, Inhalt von F16 um eine Stelle nach links versetzen und (71) vermindern des dezimalen Exponenten in FP-Register 5 um 1. (72) Umladen des dezimalen Exponenten mit positivem Vorzeichen nach FP-Register 4. (73) Wiederherstellen der alten Registerinhalte 2 und 3. (74) Wiederherstellen der alten Registerinhalte 5 bis 7. (75) Rücksprung aus dem Unterprogramm. (76) Unterprogramm zur Konversion der sedezimalen Mantisse: Multiplikation des Inhalts von GP-Register 6 mit 108. Grund: Die sedezimale Mantisse der Zahl O.y.. .y • 16° wird in 2 gleichen Teilen zu je 7 Sedezimalziffem konvertiert, wodurch jeweils 8 Dezimalziffern entstehen.
c
126
3. Die Programmiersprache ASSEMBLER
Es wird also eine Dezimalzahl der Form 0 . x x . . . x • 10 1 6 erzeugt, deren 16 Stellen die gesuchte Mantisse bilden. Die Mantisse der Sedezimalzahl O.y.. .y • 16° ist also um den Faktor 10 1 6 zu klein, weswegen jede Teilmantisse mit 10 8 zu multiplizieren ist. (77) Speichern des Inhalts von GP-Register 6 nach GW. (78) Laden des Inhalts von GW in die FP-Register 6 und 7. (79) Herausschieben der Charakteristik durch logische Linksverschiebung der Gleitpunktzahl in FP-Register 6 und 7 um 8-bit-Positionen. (80) Logische Rechtsverschiebung der Mantisse in FP-Register 6 und 7 um 4-bit-Positionen.
\
Reg. 7
Reg. 6 0
X
X
X
X
X
X
16*
X
X
X
X
X
X
X
X
0
16°
(81) Prüfen, ob nach Multiplikation mit 10 8 der Stellenwert der ersten Sedezimalziffer der Mantisse tatsächlich 16 6 ist. (82) Wenn ja, dann Sprung nach ST7. (83) Wenn der Stellenwert aufgrund maschineninterner Abrundungsfehler nur 16 5 ist, dann logische Rechtsverschiebung der Mantisse in FP-Register 6 und 7 um weitere 4-bit-Positionen. Reg. 6 0
0
X
16 s
X
X
X
Reg. 7 X
X
X
X
X
X
X
X
X
X
16°
(84) Speichern des zweiten Teils der Mantisse aus FP-Register 7 in FW7. (85) Konvertieren des Inhalts von FP-Register 6 in eine Dezimalzahl. (86) Rücksprung aus dem Unterprogramm. Betrachtet man die Länge dieser Routinen, so wird sofort deutlich, daß die Anwendung der sedezimalen Gleitpunktarithmetik nur dann gerechtfertigt ist, wenn relativ wenige Eingabedaten einer relativ großen Anzahl von Rechenoperationen unterzogen und dabei wenige Ausgabedaten erzeugt werden. Ferner ist die Gleitpunktarithmetik dann unumgänglich, wenn in einem Datenverarbeitungsproblem Zahlengrößen auftreten, die mit der dezimalen oder dualen Festpunktarithmetik nicht mehr zu bewältigen sind. In allen anderen Fällen wäre die Anwendung der sedezimalen Gleitpunktarithmetik allein wegen des mit der Codetransformation verbundenen Maschinenzeitaufwandes unwirtschaftlich.
3.4 Maschinenbefehle
127
3.4.3.4 Shift-Operationen in Festpunktregistern Befehl: SRA
Typ:
(shift right single algebraical; algebraische Rechtsverschiebung eines Registerinhalts)
RS
Formate symbolisch: SRA SRA
R „ D 2 (B 2 ) R „ D2
Format maschinenintern: •
1 |
T -
A
R,
i
0
CD
8
-
1
1. Byte
2. Byte
3. Byte
D
2
1 1
— •
4. Byte
Wirkungsweise: Der Inhalt der bit-Positionen 0 bis 30 des Registers R j wird um + D 2 Stellen nach rechts verschoben; der zweite Operand ist also keine Arbeitsspeicheradresse, sondern eine Verschiebezahl. Von links werden bits nachgezogen, die den Wert des Vorzeichen-bit haben. Das Vorzeichen-bit in Position 31 bleibt jedoch unverändert. Die rechten bits gehen verloren. Codierungsbeispiel: SRA
3,0(8)
Der Inhalt des Registers 8 sei 2; dann wird der Inhalt des Registers 3 algebraisch 2 Stellen nach rechts verschoben. Reg. 3
110
10
0 10 1 1 0 1
Reg. 3
0 0 1 1 0 10
Befehl: SLA
(shift left single algebraical; algebraische Linksverschiebung eines Registerinhalts)
128
3. Die Programmiersprache ASSEMBLER
Typ:
RS
Formate symbolisch: SLA SLA
R u D 2 {B 2 ) R l f D2
Format maschinenintern : s
; B 1 1 • Byte
R, 1 0 2. Byte
B !I* = 2; dann wird der Inhalt des Doppelregisters 12, 13 um 2 bit-Positionen nach links verschoben. Reg. 12
Reg. 13
Reg. 12
Reg. 13
Befehl: SRL
Typ:
(shift right Single logical; logische Rechtsverschiebung eines Registerinhalts)
RS
Formate symbolisch: SRL SRL
R i , D 2 (B 2 ) R i , D2
3.4 Maschinenbefehle
131
Format maschinenintern: 8
l.! 8 1. Byte
R,
1 ; o 2. Byte
B,
!« 3. Byte
• D, H • 4. Byte
Wirkungsweise: Der Inhalt aller 32 bit-Positionen des Registers R j wird um + D 2 Stellen nach rechts verschoben. Von links werden Nullen nachgezogen; die rechten bits gehen verloren. Codierungsbeispiel: SRL
4,1(7)
Der Inhalt des Registers 7 sei 2; dann wird der Inhalt des Registers 4 um 3 Stellen nach rechts verschoben.
Befehl: SLL
Typ:
(shift left Single logical; logische Linksverschiebung eines Registerinhalts)
RS
Formate symbolisch: SLL SLL
Ri, D 2 (B 2 ) R,, D 2
Format maschinenintern: 1 J 9 1. Byte
1 Ri 1 0 2. Byte
CQ
8
3. Byte
1 • Dj H » 4. Byte
132
3. Die Programmiersprache ASSEMBLER
Wirkungsweise: Der Inhalt aller 32 bit-Positionen des Registers R, wird um + D 2 Stellen nach links verschoben. Von rechts werden Nullen nachgezogen, die linken bits gehen verloren. Codierungsbeispiel: SLL
14,2
Der Inhalt des Registers 14 wird um 2 Stellen nach links verschoben.
3.4.3.5 Dezimalarithmetik Befehle:
Typ:
AP
(add packed; Addieren gepackt)
SP
(subtract packed; Subtrahieren gepackt)
SS (arithmetisch)
Formate symbolisch: AP AP AP
D ^ L L B O . D ^ L J , ß2) Si (LO, S 2 (L 2 ) Su S 2
SP SP SP
D1(L1,B1),D2(L2,B2) S^LO.SjiL,) s1; s2
Formate maschinenintern: (AP) L, 1. Byte
1
i ; L2 -
i
B,
2. Byte
i«-
i
D,
3. Byte
4. Byte
5. Byte
6. Byte
4. Byte
5. Byte
6. Byte
(SP)
L, - 1• | U - 1 I. Byte
2." Byte
B, 3. Byte
D,
3.4 Maschinenbefehle
133
Wirkungsweise: Der Inhalt des durch (B2> + D 2 adressierten Feldes der Länge L 2 wird zum (vom) Inhalt des durch ( B ^ + Dj adressierten Feldes der Länge L j addiert (subtrahiert). Das Resultat steht danach im ersten Feld. Die Verarbeitung verläuft von rechts nach links. Dezimalüberläufe führen zur Programmunterbrechung. Programmierhinweise: Beide Operanden müssen gepackt sein und es muß L! > L 2 sein. Die maximale Länge der Operanden beträgt jeweils 16 Bytes. Codierungsbeispiele: AP
SUMME,ZAHL
Die Länge von SUMME sei 3, die Länge von ZAHL sei 2. SUMME
1 0 ] 4
1
i
;
3 ; c
2
SUMME n 3 | 0
1 j
0
2
T |
0
1
D
*
3
2
1 ! 3 i
+
i
3
•: c
+
ZAHL
SUMME
SP
DIFF,=X'017C'
Die Länge von DI FF sei 2: DIFF 0
1
! 1
0
3
o ;
' " T 0 | F i
2
1
1
i
7
| i
C
1
7
|
D
DIFF 0
|
i
2
!
i
1
5
!
C
134
3. Die Programmiersprache ASSEMBLER
AP < Reg. 8 > o : i i
< Reg. 8 > 2 | 2
0(3,8),3(3,8)
+1
+2
+3 i 2 | 1
i 7 !3 i V
4 !c 1
+1 r 7 ; 3
+2 1 5 |C
ZAP
(zero and add packed; Nullsetzen und Addieren)
• i 1 1 c
0 | 0 \
Befehl:
Typ:
SS (arithmetisch)
Formate symbolisch: ZAP ZAP ZAP
D1(L1,BI),D2(La,B2) S, (Li), S 2 (L 2 ) Su S2
Format maschinenintern: i— 1. Byte
L, - 1 | L2 - I l 2. Byte
B,
!*I
3. Byte
D,
4. Byte
5. Byte
6. Byte
Wirkungsweise: Die Instruktion lädt den mit + D 2 adressierten 2. Operanden der Länge L 2 < 16 rechtsbündig mit führenden Nullen in den mit + D ( adressierten 1. Operanden der Länge Li < 16. Die Verarbeitung verläuft von rechts nach links. Wenn Li < L2 ist, so fuhrt das zu einem Dezimalüberlauf und zur Programmunterbrechung. Programmierhinweis : Der 2. Operand muß dezimal gepackte Ziffern und ein Vorzeichen enthalten.
3.4 Maschinenbefehle
135
Codierungsbeispiele : ZAP
REFE,ZAHL
Die Länge von REFE sei L! = 3, die Länge von ZAHL sei L 2 = 2 ZAHL 1
v\
o I0
1 ; i
0
4
1
3
i >
i
! 1
D
1
2
«
V
>
i l o 1
1
! •
D
ZAP
REFE(2),=X'101 D'
MP
(multiply packed; Multiplizieren dezimal)
REFE
REFE
Befehl: Typ:
SS (arithmetisch)
Formate symbolisch: MP MP MP
D, (L„ B,), D2 (L 2j B 2 ) S1 (L,), S 2 (L 2 ) S„ S 2
Format maschinenintern: L, 1. Byte
1 \ 1,2 - 1 2. Byte
D, 3. Byte
4. Byte
5. Byte
6. Byte
Wirkungsweise: Der mit + D, adressierte 1. Operand (Multiplikand) wird mit dem durch + D 2 adressierten 2. Operanden (Multiplikator) multipliziert. Das Resultat erscheint rechtsbündig im Multiplikandenfeld; der Multiplikand geht also ver-
3. Die Programmiersprache ASSEMBLER
136
loren. Das Vorzeichen des Resultats wird nach den algebraischen Regeln gebildet; jedoch erhalten auch Nullprodukte ein negatives oder positives Vorzeichen. Programmieihinweise: Beide Operanden müssen dezimal gepackt sein. Der 2. Operand muß kürzer sein als der 1. Operand, und zwar darf das Multiplikatorfeld (2. Operand) höchstens 8 Bytes (d.h. 15 Ziffern plus Vorzeichen) lang sein. Das Multiplikandenfeld (1. Operand) kann variabel bis zu 16 Bytes, der Multiplikand selber aber nur bis zu 15 Bytes (29 Ziffern + Vorzeichen) lang sein. Jedoch muß die Bedingung = Länge des Multiplikanden + L 2 eingehalten werden; d . h . L 2 muß im Multiplikandenfeld enthalten sein, und zwar in Form führender Nullen. Das Resultat hat eine maximale Länge von 31 Ziffern plus Vorzeichen, wobei mindestens eine Ziffer eine führende Null ist. Codierungsbeispiele:
PR0D MAND M0R
ZAP MP
PR0D,MAND PR0D,M0R
DS DS DS
CL16 CL15 C
MAND
r —1— 1 l —1— - r ~ -1— —1— 1 1 9 ¡9 9 j 9 9 J 9 9 [ 9 9 ¡9 9 ¡9 9 ¡9 9 ¡9 9 J 9 9 ¡9 9 | 9 9|9 9|9 9 ; c 9 ¡9 J 1 1 1 i i i i
(ZAP) 8 9 10 11 12 13 1 4 1 5 , . 1 « i 1 1 1 0 ¡0 9 ! 9 9 | 9 9j 9 9)9 9 | 9 9] 9 9 •| 9 9 ¡9 9 ¡9 9 ¡9 9|9 9 ¡9 9 i 9 9 j 9 9|C i 1 i i 1 1 1 1
v>
L2 PROD
9 i¡9 9 ',9 9 ! 9 9|9 9 | 9 9 •; 9 9 19 9 |9 9 ¡9 9 ! 9 9 ¡9 9 ! 9 9 ] 9 9 \ 9 1 ! D PROD
137
3.4 Maschinenbefehle
MP
0(4,5),0(2,8)
< leg. 5 > +1 +2 +3 T —1——i— 0 jo o ; o 9 I 99 ] D 1 l 1 —V ' L2 (Reg. 5> +1 +2
< Reg. 8) +1 —I— T 9; 9 9 | D L_ I (MP)
+3
0 | 99 I 8 0 \ 0 1 ! C I
MP
0(5,9) =P'-13'
+1
+3 +4
0 j 00 ¡0 0 i1 0 i; 4 3] D i
PACK ZAP MP
PR0D,ZAHL1+1 (3) M0R.ZAHL2 PR0D,M0R
ZAHL + 1 +2 +3 1 1 F | 0f : i F: i F \ 3 t i (PACK) —1— 0 | 0o; o ' !i 3 | F i i— PR0D
PR0D ZAHL1 ZAHL2 M0R
DS DS DS DS
CL4 CL4 CL2 CL2
M0R
IMP) PROD1 1 - 1 0 \ 00 ] 46:3 3|C I 1
3. Die Programmiersprache ASSEMBLER
138
Befehl: DP
Typ:
(divide packed; Dividieren dezimal)
SS (arithmetisch)
Formate symbolisch: DP DP DP
D1(L1,B1),D2(L2,B2) S1(L1),S2(L2) Si, S 2
Format maschinenintern: L. 1. Byte
i I l2 - i 2. Byte
D2
D, 3. Byte
4. Byte
S.Byte
6. Byte
Wirkungsweise: Der mit ( B ^ + D t adressierte 1. Operand (Dividend) wird durch den mit + D 2 adressierten 2. Operanden (Divisor) dividiert. Das Resultat (Quotient und Rest) wird im Feld des 1. Operanden gespeichert. Der Quotient steht links und der Rest, der die Länge L 2 hat, steht rechts. Quotient und Rest haben je ein Vorzeichen und beide stehen rechtsbündig. Das Vorzeichen des Quotienten wird nach den algebraischen Regeln gebildet. Der Rest hat stets das Vorzeichen des Dividenden. Die Adresse des Restes ergibt sich aus ( B ^ + Dj + (Li - L 2 ). Programmierhinweise: Beide Operanden müssen dezimal gepackt sein. Der zweite Operand muß kürzer sein als der erste und darf höchstens 8 Bytes (15 Ziffern plus Vorzeichen) lang sein. Der Dividend muß mindestens eine führende Null haben. Codierungsbeispiele: ZAP DP
REFE,DIVIDEND REFE,DIVISOR
Die Länge von REFE sei L t = 5, die Länge von DIVIS0R sei L 2 = 2, die Länge von DIVIDEND sei L 2 = 4 (bzw. 5, bzw. 2).
139
3.4 Maschinenbefehle
( 1)
Division von 1,000,000 : 3 0 0
1
!
i 0 0 ¡0 0 ¡0
(2)
Division von 10,000,000 : 3 0 0 DIVIDEND i —1— - 1 — —1— — r ~ 0 ¡ 1 0 ¡ 0 0 ¡ 0 0 ¡0 0 ¡ C 1 1
o ;c
(ZAP) REFE I o ! o
(ZAP) REFE
o ! o
i : o
ole i
o ; o «
oil
0 ¡0
0 I 0
DIVISOR — r 3 ¡0 0 | C
DIVISOR 3 ¡0 0 |c
(DP)
(DP
REFE 0,3 L_
o ! o 0 ¡C i 1
REFE 3 I3 I
1 0
0¡C
3 13 3 1 3 3 •¡ C .._l„.
" V Rest
ilo i
oic I
-
Quotient
(3)
Division von 300 : 3 0 0
Quotient
(4)
Division von 99 : 3 0 0
DIVIDEND —I— I 3 ! 0 0 ¡C
DIVIDEND 10 19 9 i C L_ (ZAP)
(ZAP)
0 ¡0 0 I 0 1
—1— 0 ¡ 0 3 ! 0 I
o; C
—1— —1— —1— 0 |o olo 0 ] 0 0 1 9 9 ! c 1 1 1 1
DIVISOR
DIVISOR
3 ¡0 0 ! C
3 ¡0 I
(DP)
(DP)
o ;o 1
1 o ; o V Quotient
lie 1
0 1 0 o;c '
-
— Rest
—r 0 I 0 o;o 1 — V — Quotient
ole
—r— 0 ¡ 9 9 ¡C
Rest
140
3. Die Programmiersprache ASSEMBLER
3.4.3.6 Duale Festpunktarithmetik Befehle: AR SR Typ:
(add registers; Addieren Register) (subtract registers; Subtrahieren Register)
RR
Formate symbolisch: AR
R[, R 2
SR
R „ R2
Formate maschinenintern: 1
! 1
R,
A
1. Byte
1
|
1 , i
R2
2. Byte
B
R,
I.Byte
; R2 i 2. Byte
Wirkungsweise: Der Inhalt des durch R 2 adressierten Registers wird zum (vom) Inhalt des durch R! adressierten Registers addiert (subtrahiert). Das Resultat steht in Register R,. Codierungsbeispiele: AR
4,5
Der Inhalt des Registers 5 wird zum Inhalt des Registers 4 addiert. Die Summe steht in Register 4. SR
14,3
Der Inhalt des Registers 3 wird vom Inhalt des Registers 14 subtrahiert. Die Differenz steht in Register 14. SR
2,2
Der Inhalt des Registers 2 wird vom Inhalt des Registers 2 subtrahiert, d.h. das Register 2 wird gelöscht.
141
3.4 Maschinenbefehle
Befehle: A S Typ:
(add; Addieren Vollwort) (subtract; Subtrahieren Vollwort)
RX
Formate symbolisch: S S S
Ri, D2 (X2, B 2 ) R., S 2 (X 2 ) Ri,S2
A A A
Ri., D2 (X 2) B 2 ) Ri . S 2 ( X 2 ) Ri.,S 2
Formate maschinenintern: 1 5
! i
A
R,
1. B y t e
|
X;
Bj
2. B y t e
I
...
P«
•
3. Byte
—| D,
i
1
1 5
I i
R,
B
1. B y t e
•
4. Byte
;
X,
2. B y t e
B2
3. Byte
D2
-i i
•
4. Byte
Wirkungsweise: Der Inhalt des mit + + D2 adressierten Vollwortes wird zum (vom) Inhalt des mit R t adressierten Registers addiert (subtrahiert). Das Resultat steht in Register R t . Programmierhinweis: Die Adresse des 2. Operanden muß auf eine Vollwortgrenze ausgerichtet sein (vgl. Seite 44). Codierungsbeispiele: A
5,200(0,12)
Der Inhalt des mit (Basisreg. 12> + 200 adressierten Vollwortes wird zum Inhalt des Registers 5 addiert. Die Summe steht in Register 5. S
3,0(,9)
Der Inhalt des mit < Basisreg. 9 > + 0 adressierten Vollwortes wird vom Inhalt des Registers 8 subtrahiert. Die Differenz steht in Register 8.
3. Die Programmiersprache ASSEMBLER
142
S
5,14(3,8)
Der Inhalt des mit (Indexreg. 3) + (Basisreg. 8> + 14 adressierten Vollwortes wird vom Inhalt des Registers 5 subtrahiert. Die Differenz steht im Register 5. A
1O,W0RT
Der Inhalt des mit WORT adressierten Vollwortes wird zum Inhalt des Registers 10 addiert.
Befehle: AH SH Typ:
(add halfword; Addieren Halbwort) (subtract halfword; Subtrahieren Halbwort)
RX
Formate symbolisch:
Ri>
AH AH AH
Ri , D 2 ( X 2 , Ri , S 2 ( X 2 ) Ri , S 2
SH SH SH
D 2 (X 2 , B 2 )
Ri. S2 (x2) Ri,S2
B2)
Formate maschinenintern: 4
1 1
1 A
Ri
I.Byte
4
!
1
t X2
B;
2. B y t e
B
1. B y t e
R,
i 1 2. B y t e
'fi
3. Byte
Xj
B2
1 !-« 1 3. B y t e
1 •
D2
*
4. Byte
D,
^
•
4. Byte
Wirkungsweise: Der Inhalt des mit (X 2 > + (B 2 ) + D 2 adressierten Halbwortes wird zum (vom) Inhalt des mit R! adressierten Registers addiert (subtrahiert). Das Resultat steht in Register R,. Der Halbwortoperand wird vor seiner Verarbeitung zunächst auf Vollwortlänge erweitert, d . h . mit dem Wert der bit-Position 15 aufgefüllt. Programmierhinweis: Die Adresse des 2. Operanden muß auf eine Halbwortgrenze ausgerichtet sein (vgl. Seite 44).
3.4 Maschinenbefehle
143
Codierungsbeispiele : AH
7,1-1(5)
virtuell Reg. 7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0000
00000000
0010
0 0 0 0
1 0 1 0
0 0 1 1
(AH) Reg. 7
0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SH
1 1 1 0
8,HALFW0RD+2
Der Inhalt des mit HALFW0RD+2 adressierten Halbwortes wird vom Inhalt des Registers 8 subtrahiert. Die Differenz steht in Register 8.
Befehl: MR Typ:
(multiply registers; Multiplizieren Register mit Register)
RR
Format symbolisch: MR R1; R2 Format maschinenintern:
1
| l.Byte
C
1
R,
1| 2. B y t e
R2
144
3. Die Programmiersprache ASSEMBLER
Wirkungsweise: Der Inhalt des Registers R j + 1 (Multiplikand) wird mit dem Inhalt des durch R 2 adressierten Registers (Multiplikator) multipliziert. Der Inhalt des mit Ri adressierten Registers wird bei der Multiplikation ignoriert und durch das Produkt überschrieben, denn dieses steht anschließend rechtsbündig im Registerpaar R,, R, + 1. Programmierhinweise: R! muß eine gradzahlige Registernummer sein. Der Multiplikand ist in das ungradzahlige Register R! + 1 zu laden. Im Multiplikationsbefehl ist jedoch R j anzugeben.
Codierungsbeispiel : L L MR
5.MKAND 1O.MKAT0R 4,10
Reg. 5
0
0 0 0 0 0 0 0 0 0 0 0
0
0
0
0
0
0
0
0
0
1
0
0
Multiplikand
Reg. 10
1
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Multiplikator
(MR) Reg. S
Reg. 4
Produkt
Befehl: M Typ:
RX
(multiply; Multiplizieren Register mit Vollwort)
3.4 Maschinenbefehle
145
Formate symbolisch: M M M
Ri, D 2 (X 2 , B 2 ) Ri, S 2 (X 2 ) Ri, S 2
Format maschinenintern: S
;
C
Ri
1. B y t e
i ,
1 X2
B;
2. B y t e
• 3. Byte
D2
-j i 4. Byte
*
Wirkungsweise: Der Inhalt des Registers R j + 1 (Multiplikand) wird mit dem Inhalt des durch + (B2> + D 2 adressierten Vollwortes (Multiplikator) multipliziert. Der Inhalt von R t wird bei der Multiplikation ignoriert und durch das Produkt überschrieben, denn dieses steht anschließend rechtsbündig im Registerpaar R 1 ; R , + 1. Programmierhinweise: R j muß eine gradzahlige Registernummer sein. Die Adresse des 2. Operanden muß auf eine Vollwortgrenze ausgerichtet sein (vgl. S. 44). Der Multiplikand ist in das ungradzahlige Register R x + 1 zu laden; im Multiplikationsbefehl ist jedoch R, anzugeben. Codierungsbeispiele: L M
7,= F'10' 6,=F'5'
Laden des Multiplikanden 10 nach Register 7 und multiplizieren des Registerpaares 6, 7 mit 5. L M
9.MKAND 8,M KAT0R
Laden des Multiplikanden nach Register 9 und multiplizieren des Registerpaares 8, 9 mit dem Multiplikator aus dem durch MKAT0R adressierten Vollwort.
Befehl: MH
(multiply halfword; Multiplizieren Register mit Halbwort)
146
3. Die Programmiersprache ASSEMBLER
Typ:
RX
Formate symbolisch: MH MH MH
R „ D 2 ( X 2 , Ba) R 1 ; S 2 (X 2 ) R u S2
Format maschinenintern: 11
1 4
! 1
C
RI
1. Byte
1 1
1
X2
2. Byte
B2
1 -
3. Byte
D2
4
•
4. Byte
Wirkungsweise: Der Inhalt des durch R j adressierten Registers (Multiplikand) wird mit dem Inhalt des durch (X2> + + D2 adressierten Halbwortes (Multiplikator) multipliziert. Das Produkt steht in R,. Programmierhinweise: Die Adresse des 2. Operanden muß auf eine Halbwortgrenze ausgerichtet sein (vgl. Seite 44). Das Produkt hat maximal 47 bits, von denen die höherwertigen 15 Stellen verloren gehen. Sinnvollerweise sollten daher die Faktoren so bemessen sein, daß das Produkt in das Register R j hineinpaßt. Codierungsbeispiel: LH MH
4,=H'112' 4,MKAT0R(3)
Das Register 4 wird mit dem Halbwortmultiplikanden H"I12' geladen und mit dem durch MKAT0R + < Indexreg. 3) adressierten Halbwortmultiplikator multipliziert. Das Produkt steht in Register 4.
Befehl: DR Typ:
(divide registers; Dividieren Register durch Register)
RR
Format symbolisch: DR Ri, R 2
147
3.4 Maschinenbefehle
Format maschinenintern: R, I 2. Byte
1. Byte
Wirkungsweise: Der Inhalt des mit R^ adressierten Registerpaares R 1 ; R^ + 1 wird durch den Inhalt des mit R 2 adressierten Registers dividiert. Der Quotient steht danach im Register R j + 1 und der Rest im Register R^ Der Dividend besteht aus maximal 63 Ziffernbits und einem Vorzeichenbit. Der Divisor in R 2 besteht aus maximal 31 Ziffernbits und einem Vorzeichenbit. Quotient und Rest bestehen aus je maximal 31 Ziffernbits und je einem Vorzeichenbit. Überschreitet der Quotient diese Stellenzahl, so tritt eine Programmunterbrechung mit „Divisionsfehler" auf. Das Vorzeichen wird nach den algebraischen Regeln gebildet und ist bei Quotient und Rest gleich.
Programmierhinweise: R! muß eine gradzahlige Registernummer sein. Der Dividend muß vor der Division rechtsbündig in das Registerpaar Rj, R[ + 1 gebracht werden und ein Vorzeichenbit in R t haben. Codierungsbeispiel: L
31
Rest = +1
4.DIVIDEND
0 31
Quotient =+3
0
148
3. Die Programmiersprache ASSEMBLER
Befehl: (divide; Dividieren Register durch Vollwort)
D
Typ:
RX
Formate symbolisch: D D D
R „ D 2 (X 2 , E , ) R „ S 2 (X 2 ) R[, S 2
Format maschinenintern: S
;
D
1. Byte
Ri
!i
2. Byte
1 B2
: • « — - D; 3. Byte
i -I
•
4. Byte
Wirkungsweise: Der Inhalt des mit R, adressierten Registerpaares R 1 ; R, + 1 wird durch den Inhalt des mit + ENDR0UTINE ENDE *
PR0G73
LFDNR EINS F HEADDER
CL0SE TERM
KARTE,LISTE
END
VP
TITLE CSECT PRINT ENTRY ENTRY ENTRY ENTRY DC DC DC DC DS DC DS DC DS DC
1
UEBUNG7.SEGMENT3 '
0N.N0DATA.N0GEN LFDNR EINS F HEADDER X'OOOC' X'lC' X'FF* C 1 NAME' CL9 C 1 VORNAME 1 CL11 C'iRT' CL17 CSTRASSE'
END
PR0G74
DRUCKE
TITLE CSECT PRINT EXTRN ENTRY BALR USING PUT MVC BR END
'UEBUNG7,UNTERPR0GRAMM' 0N,N0DATA,N0GEN LISTE DRUCKE 5,0 »,5 LISTE 1(132,8),0(8) 6
4. Übungsprogramme
253
Übung 8a: Lochkarten mit statistischen Erhebungsdaten sollen in Blöcken zu je 10 auf ein Magnetband gebracht werden. Kartenformat: 5
6
7
xxxxx lfd. Nr.
8 9
SE AR AN BE 0H
- 20 21 XX .XX.XX Geburtsdatum
XXX Körpergröße
23
24
25
26
XXX Körpergewicht
Berufe:
Schulbildung:
Einkommensgruppen:
SE AR AN BE 0H
V — Volksschule M — Mittelschule 0 — Oberschule
0 1 2 3 4 5 6 7 8 9
— selbständig — Arbeiter —• Angestellter — Beamter — ohne Beruf
Geschlecht: M — männlich W — weiblich Familienstand: L V G W
— ledig - verheiratet — geschieden — verwitwet
Weiterbildung: K L F U S
— keine — Lehre — Fachschule — Universitätsstudium — sonstige (Sekretärinnenschule, Dolmetscherschule etc.)
-
0 bis 9999 10000 bis 14999 15000 bis 19999 20000 bis 24999 25000 bis 29999 30000 bis 34999 35000 bis 39999 40000 bis 44999 45000 bis 49999 50000 bis u. m.
Blockformat: 1 - 26 1 - 26 1 - 26 1 - 26 1 - 26 1 - 26 1 - 26 1 - 26 1 - 26 1 - 26
254
4. Übungsprogramme
PR0G8A *
TITLE START PRINT
1 UEBUNG8A 1 216 ON, NODATA,NOGEN
* DEFINITIONEN DES IOCS *
KARTE
DTFSR
x
BAND
DTFSR
X
BLKSIZE=26, DEVADDR=SYSRDR, DEVICE=READER, E0FADDR=ENDE, IOAREA1-EBER, RECF0RM=FIXUNB, TYPEFLE» INPUT BLKSIZE-260, DEVADDR=SYS010, DEVICE=TAPE, FILABL=STD , LABNAME=LAB, a 1 I^AREAI-ABER, RECFORM=FIXBLK, RECSIZE=26, TYPEFLE=OUTPUT W0RKA=YES
Spalte 7a * * * « *
* *
x X X « X X X
DTFEN
II
« VORPROGRAMM * VP
BALR USING OPEN
*
9,0 «,9 KARTE,BAND
« HAUPTPR0GRAMM « LIES
ft ENDE
tt
GET MVC PUT B
KARTE WORKAREA,EBER BAND, WORKAREA LIES
CLOSE TERM
KARTE,BAND
* KONSTANTEN UND BEREICHE *
EBER ABER WORKAREA LAB x
21
DS DS DS DC
CL26 10CL26 CL26 44X 1 FF '
END
VP
31
Das Feld LAB enthält Informationen für den Etikettvergleich. Da in diesem Programm keine Etikettprüfung vorgesehen ist, wird das Feld LAB mit binären Einsen gefüllt.
4. Übungsprogramme
255
Übung 8b: Die in Übung 8a aufgebaute Banddatei soll statistisch ausgewertet werden; Und zwar soll eine Kombinationstabelle aufgestellt werden, die die Aufgliederung der Merkmalsträger nach Alter, Geschlecht und Familienstand ausweist. Kartenformat/Blockformat: wie Übung 8a Listenformat: siehe nächste Seite.
¡Ill III I I I 111 Siili § iy ill! *
>5 *
I .lili 1 I I 111 I ¡III i i i 111 im j ¡Bili Î i i Iii g
a
u.
u
eo
§ III
li Is II li II I. II l II L II 8. Ht II i. II l II I, H I, II B, II 1= II l II I. o>
t-
4. Übungsprogramme
4. Übungsprogramme
257
258
4. Übungsprogramme
4. Übungsprogramme
260
4. Übungsprogramme
Vorschub um eine Leerzeile
BAL 11, PUT (Drucken der Summenzeile)
Schließen der Dateien
E0J
ZAEHLE Adreßmodifikation in Reg. 8: (Reg. 5>=rel. Adr. d. Altersklasse
Erhöhen d. Besetzungszahl in der betr. Altersklasse und Spalte
PUT Drucken
BR 11 Rücksprung aus der ünterroutine Löschen des Druckbereichs
BR 11 Rücksprung aus der Unterroutine
4. Übungsprogramme
PR0G8B >
TITLE 'UEBUNG8B' START 216 PRINT 0N,N0DATA,N0GEN
«« DEFINITIONEN DES I0CS LISTE
DTFSR BLKSIZE-132, C0NTR0L-YES, DEVADDR=SYSLST, DEVICE=PRINTER, I(JAREA1 = DRBER , RECF0RM=FIXUNB, TYPEFLE-0UTPUT
BAND
DTFSR BLKSIZE=260, DEVICE=TAPE, DEVADDR-SYSOIO, FILABL«STD, LABNAME=LAB, »< E0FADDR=ENDE, I0AREA1-EBER1, If)AREA2 = EBER2 , READ-F0RHARD, RECF0RM-FIXBLK, RECSIZE=26, TYPEFLE=INPUT, W0RKA-YES DTFEN
* V0RPR0GRAMM *
VP
NEU
BALR USING 0PEN L LA MVC LA BCT
*
9,0 ».9 LISTE,BAND 7,=F,285' 8,SUMMEN 0 ( 3 , 8 ) .«X'OOOOOC1 8.3(8) 7 .NEU
« HAUPTPR0GRAMM LIES
JH18 PACKM0N
WIEALT AP5 21
261
GET MVC PACK CP BH AP B AP PACK CP BNL AP SP SR ZAP AP CP
Vgl. Seite 254 .
BAND.HA ALTER ,«X 1 01972C' JAHR ,WA+14(2) JAHR , » P ' 7 2 ' JH18 JAHR , « P 1 1 9 0 0 1 PACKM0N JAHR , « P 1 1 8 0 0 1 M0NAT,WA+11(2) M0NAT , = P' 7 ' WIEALT JAHR. = P T ALTER,JAHR 5,5 C0MP,»P'10 1 CPMP,»P 1 5 1 ALTER,C0MP
Spalte 7a
262
4. Übungsprogramme BNH CP BNL LA B
LA C0MP,=P 1 95' LA 5,3(5) AP5
LA LA SR LR CLI BE CLI BNE L B CLI BNE L B L CLI BE L LA BALR LA BALR LA BALR LA LA BALR B
2,ZAEHLE 3,TAB 6,6 7,6 WA+16,C 1 L 1 GESCHL WA+16,C'V' G 7,=F 1 54' GESCHL WA+16,C'G' W 7 ,=F 1 108 1 GESCHL 7,=F'162' WA+5,C'M' G0 6 , = F'270' 8,756(3) 11,2 8,540(3,7) 11,2 8,216(3,6) 11,2 8,0(3,6) 8,0(7,8) 11,2 LIES
ZAEHLE »
AR AP BR
8,5 0(3,8) , = X'1C' 11
ENDE
CNTRL MVC BAL CNTRL MVC BAL MVC BAL
LISTE, SK,1 DRBER+20(52) , 11,PUT LISTE,SP,1 0RBER+20(78) , 11,PUT DRBER+11(105) 11,PUT
L LA LA L LR LA LA MVC LA AP MVC ED LA LA
2 , = F118' 8,TAB 4 .KLASSK0N 5 , = F1151 3,8 6,SUMMEN 7,DRBER+1 0(7,7) .0(4) 4,7(4) 0(3.6). 0(3,3) 9(6,7),»X'402120202020' 9(6,7),0(3) 3,54(3) 6,3(6)
LA
W GESCHL Gf)
AP2
263
4. Übungsprogramme LA BCT BAL LA BCT
7.7(7) 5.AP2 11,PUT 8,3(8) 2.L
L LA LA MVC MVC ED LA LA BCT CNTRL BAL CL0SE TERM
5 , = F'15 ' 6,SUMMEN 7.DRBER+1 0(6,7), = C1 SUMMEN' 9(6,7),=X1402120202020' 9(6,7) ,0(6) 6,3(6) 7.7(7) 5,MVC LISTE,SP,1 11,PUT LISTE,BAND
PUT MVC BR
LISTE D R B E R »DRBER-1 11
> * K O N S T A N T E N UND
DRBER EBER1 EBER2 WA ALTER JAHR M0NAT AKLASSE C0MP KZEILE1
KZEILE2
SUMMEN TAB LAB
21
BEREICHE
LT0RG DC DS DS DS DS DS DS DS DS
X' 40 1 CL132 10CL26 10CL26 CL26 CL3 CL3 CL2 CL18
DS DC
CL2 C'KOMBINATIONSTABELLE
DC DS DC DS DC DC DC DC DC DC DC DC DC DS DS DC
C'MAENNLICH' CL25 C1 WEIBLICH1 CL27 CINSGESAMT' WITW. INSG. ' C'LEDIG VERH. GESCH . WITW. INSG. ' C 1 LEDIG VERH. G E S C H . C'LEDIG VERH. GESCH . WITW. INSG. ' C 1 BIS 1516 - 2021 - 2526 - 30' 1 C 3 1 - 3536 - 4041 - 4546 - 50' C 1 5 1 - 5556 - 6061 - 6566 - 70' C 1 7 1 - 7576 - 8081 - 8586 - 90' C'91 - 9596 U . M . ' CL45 18CL45 44X'FF' a i
END
VP
Vgl. Seite 254.
:
ALTER,GESCHLECHT,FAMILIENSTAND
264
4. Übungsprogramme
Übung 9: Umgang mit der Gleitpunktarithmetik: Je zwei Zahlen werden von einer Lochkarte eingelesen, in die sedezimale Gleitpunktdarstellung gebracht und nach einer der 4 Grundrechnungsarten in einem Gleitpunktregister verarbeitet. Die Resultate sowie die Ausgangszahlen werden in die normalisierte dezimale Gleitpunktdarstellung umgewandelt und so ausgegeben. Ziel der Übung ist u. a. die Anwendung der Unterprogramme zur Umwandlung von Dezimalzahlen in die und aus der sedezimalen Gleitpunktdarstellung (S. 117 ff.). Kartenformat: 1
M D
2
+
3
24
1 1
xx.x . . . . xE ± yy
25
26
x.xx . . . . xE ± yy
Die Zahlen sind linksbündig, beginnend mit Spalte 3 bzw. Spalte 26 abzulochen. Die Mantissen können an beliebigen Stellen einen Dezimalpunkt haben. Jede Mantisse wird durch ein E beendet. Negative Vorzeichen bei Mantissen und Exponenten müssen, positive können angegeben werden. Werden positive Vorzeichen fortgelassen, dann müssen die betreffenden Stellen „blank" gelassen werden. Die Exponenten haben 2 Stellen. Wird nur eine Stelle benutzt, dann ist links ein blank oder eine führende Null erforderlich. Ausgabeformat: DRBER + 1o
+34
+
+38
+61
+65
(±0.xx . . . . E+yy) LJ * LJ (±0.xx . . . . E±yy) LJ = LJ ±0.xx . . .E±yy
/
4. Übungsprogramme
265 WEITER 11
Einlesen einer Datenkarte Laden d. Adresse der Mantisse der 2. Zahl nach Reg. 2
Laden d. Adresse des Eingabebereichs d. 2. Zahl nach Reg. 8
Vorzeichenindikatoi VZ 2 d. 2. Zahl vorab auf „+" setzen
Übertragen d. Mantisse der 2. Zahl nach F 16
Übertragen gezonter Nullen nach MANT 1
Übertragen d. Vorzeichens d. 2. Zahl nach VZ
BAL 11, N0RMAL (Normalisieren)
Speichern d. umgeformten 2. Zahl aus GP-Reg. 0 in 0 P 2
Laden d. Adresse des Eingabebereichs d. 1. Zahl nach Reg. 8
WEITER 2 Übertragen gezonter Nullen nach MANT2
Vorzeichenindikator VZ 1 d. 1. Zahl vorab auf „+" setzen
BAL 11, N0RMAL (Normalisieren)
r
Übertragen d. normalisierten Exponenten aus EXP nach EXP 2
\ / /
BAL 11 CNVTDEGP (Umformen in GP-Code)
Laden d. Adresse der Mantisse d. 1. Zahl nach Reg. 2 Vorzeichenindikator VZ 2 d. 2. Zahl auf „ - " setzen
\
Vorzeichenindikator VZ 1 der 1. Zahl auf „ - " setzen
Übertragen d. normalisierten Exponenten aus EXP nach EXP 1
Übertragen d. Mantisse der 1. Zahl nach F 16
Übertragen d. Vorzeichens der 1. Zahl nach VZ BAL 11, CNVTDEGP (Umformen in/ GP-Code),
4. Übungsprogiamme
266
1. Ziffer = 0?
CLI 3
4. Übungsprogramme
267
4. Übungsprogramme
268 EDIT Ubertragen einer Zeichenkette „( 0 . " in den Druckbereich
Übertragen d. OPERATORS und a. Zeichenkette „) (0." i. d. Druckbereich
Übertragen d. Zeichenkette „) = " in den Druckbereich
Übertragen d. Vorzeichens der 1. Zahl in den Druckbereich
Übertragen d. Vorzeichens der 2. Zahl in den Druckbereich
Laden des Resultats aus GP-Reg. 0 nach GP-Reg. 6
Übertragen d. Mantisse der 1. Zahl in den Druckbereich
Übertragen d. Mantisse der 2. Zahl in den Druckbereich
BAL 11 CNVTGPDE / CI ( (Umwandeln in \ Dez.-zahl)
Übertragen eines „ E " in den Druckbereich
Übertragen eines „ E " in den Druckbereich
Umwandeln des Exponenten d. Resultats aus Reg. 4 in eine Dezimalzahl
Überschreiben d. Vorzeichens d. Exponenten mit 1111
Übertragen eines „+" in den Druckbereich NEG2 Übertragen eines „ - " in den Druckbereich WEITER 3 Übertragen d. Exponenten der 1. Zahl in den Druckbereich Überschreiben d. Vorzeichens d. Exponenten mit 1111
Übertragen eines „+" in den Druckbereich
Übertragen d. Vorzeichens d. Resultats in den Druckbereich
NEG 3 Übertragen eines „—" in den Druckbereich
Übertragen der Zeichen „0." in den Druckbereich
WEITER 4 Übertragen d. Exponenten der 2. Zahl in den Druckbereich Überschreiben d. Vorzeichens d. Exponenten mit 1111
Übertragen d. Mantisse des Resultats in den Druckbereich
4. Übungsprogramme
269
Übertragen eines „ E " in den Druckbereich DRUCKEN Übertragen d. Vorzeichens d. Exponenten in den Druckber.
Drucken
Entpacken des Exponenten des Resultats in den Druckbereich
Löschen des Druckbereichs
BAL 11, DRUCKEN
BR 11 ' (Riicksprung aus der Unterroutine) 1
ENDE Schließen der Dateien
E0J
CNVTDEGP
Vgl. S. 119 ff.
/ BR 11 / (Riicksprung \ aus der \ Unter\routine)
CNVTGPDE vgl. S. 120 ff.
BR 11 (Riicksprung aus der Unterroutine)
4. Übungsprogramme
270
PR0G9
TITLE START PRINT
*UEBUNG9 ' 216 N0GEN
« DEFINITIONEN DES KARTE
LISTE
DTFSR
DTFSR
Spalte 7J *
IOCS
BLKSIZE»80, DEVADDR-SYSRDR, DEVICE.READER, EOFADDR= ENDE, I0AREA1-EBER, RECFORM»FIXUNB, TYPEFLE-INPUT
« » * « *
BLKSIZE*132, DEVADDR-SYSLST, DEVICE«PRINTER, I0AREA1-DRBER, RECF0RM-FIXUNB, TYPEFLE-OUTPUT
DTFEN * VORPROGRAMM • VP BALR USING L SPM OPEN
• • •
22
HAUPTPROGRAMM
LIES
WEITER2
WEITER1
22
9,0 * »9 8,»F'234881024' 8 KARTE,LISTE
GET LA LA LA CLI BNE MV I MVC BAL MVC MVC MVC BAL STD LA LA MV I CLI BNE MV I MVC BAL MVC
KARTE 2.MANT2 8 .E8ER+25 VZ2 ,C 1 + 1 EBER+24 ,C 1 - ' WEITER2 VZ2.C'-' MANT2 ,«16X'FO 1 11,NORMAL EXP2.EXP F16.MANT2 VZ.VZ2 U.CNVTDEGP 0.0P2 2,MANTI 8.EBER+2 VZ1,C'+' EBER+1 ,C'-' WEITER1 VZl.C'-' MANTI,-16X'F0' 11,NORMAL EXPl.EXP
In Reg. 8 wird eine Programm-Maske aufgebaut, die die Programmunterbrechung bei O-Mantissen unterdrückt. Mit SPM 8 wird diese Programm-Maske gesetzt.
4 . Übungsprogramme
«
ft ADD #
SUB i MULT
tt OIV
tf N0RMAL
CL11
LAI CLI2 CL 13
LA2 LA3
ft SR4
271
MVC MVC BAL
F16.MANT1 VZ.VZl ll.CNVTDEGP
CLI BE CLI BE CLI BE CLI BE MVC BAL B
EBER,C'A' ADD EBER.C'S' SUB EBER,C'M' MULT EBER,C'D' DIV DRBER+10(20) ,-C'UNGUELTIGE 1 1 .DRUCKEN LIES
AD MV I B
0.ÍP2 0PERATJR,C1 EDIT
SD MV I B
O.0P2 0PERAT0R ,C1 - 1 EDIT
MD MV I B
O.0P2 Í P E R A T 0 R ,C EDIT
DD MV I B
O.0P2 0PERAT0R , C ' / ' EDIT
LR SR CLI BNE A CLI BE CLI BE CLI BNE S LA B CLI BE LR CLI BE CLI BE MVC LA LA LA CLI BNE B
6,8 5,5 0(6),C'0' CLI3 5,-F'r 0(6),C1E' SR4 0(6),C- ' LAI 0(6) ,C'0' CLI2 5 ' 1' 6,1(6) CL 11 0(6),C'.' LAI 4.5 0(6) , C ' . ' PUNKT 0(6),C ' LA2 0(1.2), 0(6) 2,1(2) 5.1(5) 6.1(6) 0(6),C1E' CLI3 PACK
SR
4,4
'
0PERATIJN'
272
4. Übungsprogramme
PACK ZAP CVB CLI BE AR E X I T N 0 R M CVD UNPK BR SR NFG1 P PUNKT LR B MV I NULL * B PACK
EDIT
NEG2 WEITER3
NEG3 WEITER4
MVC MVC HVC MV I CLI BH MV I B MV I MVC MVZ MVC MVC MVC MV I CLI BH MV I B MV I MVC MVZ MVC LDR BAL CVD MVN MVC MVC MVC MV I MVC UNPK BAL B
• K(INSTANTEN UND EBER DRBER MANT2 MANTI VZ2 EXP2 EXP1
DS DS DS DS DS DS DS DS
EXPP,2(2,6) DW0RT,EXPP 1.DW0RT 1(6), C'- 1 NEG1 4,1 4.DW0RT EXP,DW0RT+6(2) 11 4,1 EXITN0RM 4,5 LA3 0(2),C'O' LA2 D R B E R + 1 0 ( 4 ) ,»C'( 0.' D R B E R + 1 1 ( 1 ) ,VZ1 D R B E R + 14(16) .MANTI D R B E R + 3 0 ,C1 E 1 E X P 1 + 1 ,X'C 9 1 NEG2 D R B E R + 3 1 , C ' +' UEITER3 DRBER+31. C'-' DRBER+32(2),EXP1 D R B E R + 3 3 ( 1 ) ,»X'FF' DRBER+34(8).JPERATJR-2 D R B E R + 3 9 ( 1 ) ,VZ2 0RBER+42(16).MANT2 D R B E R + 5 8 ,C'E' EXP2 + 1 ,X'C9' NEG3 DRBER+59,C'•1 WEITER4 DRBER+59, C'-' DRBER+60(2),EXP2 DRBER+61(1),-X'FF' D R B E R + 6 2 ( 7 ) ,»C ' ) - ' 6,0 ll.CNVTGPDE 4 ,DW D W + 7 ( 1 ) ,»X'FF' D R B E R + 6 5 Ì 1 ) ,VZ DRBER+66(2) ,-C'O. ' D R B E R + 6 8 ( 1 6 ) ,F16 D R B E R + 8 4 ,C'E1 D R B E R + 8 5 ( 1 ) ,VZE DRBER+86(2),DW+6(2) 11,DRUCKEN LIES BEREICHE CL80 X 1 40' CL132 CL16 CL16 CLI CL2 CL2
4. Übungsprogramme
EXP EXPP fP2 0PERAT0R DW0RT DRUCKEN
ENDE
OS DS OS OC DS DC DS
CL2 CL2 0 C• ) ' CL1 C' ( 0 . ' D
PUT MVC BR
LISTE DRBER » D R B E R - l
CLiSE TERM
11 KARTE,LISTE
• U N T E R P R f G R A M M E ZUR UMWANDLUNG V&N D E Z I M A L • UND ZUROCK • PTABLE DC D'lE-751 V1E-741 OC D'1E-731 DC
K0N471 GU DW FW FW7 F16 F9 VZ VZE RETT27
DC OC DC ns DS DS DS ne os DC ns os DS DS
0'1E74 1 D'1E75' X'4710000000000000' n
0 F F 3X'00 1 CL16 X ' FO ' CL9 CL1 CL1 6F
*
CNVTDEGP
STM
2.7.RETT27
CNVTGPDE
STM
2.7.RETT27
END
VP
«
NACH
SEDEZI"AL(GP)
274
4. Übungsprogtamme
Die Übungsbeispiele 1 bis 9 benutzen ausschließlich Karten- und Bandduteien. Eine Vorführung der Benutzung von Plattendateien hätte wegen des notwendigen Umfangs den Rahmen dieses Lehrbuchs gesprengt. Eine ausführliche Darstellung dieser Programmiertechnik findet sich jedoch in: Niemeyer, G.: „Ein integriertes Datenverarbeitungs- und Informationssystem". Berlin 1972 [12]. Zur Durchführung einer selbständigen Programmierübung wird folgende Aufgabe vorgeschlagen:
Übung 10a: Eine Buchhaltung ist auf einer Magnetplatte einzurichten. Übung 10b: Ein Buchungsprogramm für alle möglichen Geschäftsvorfälle ist zu schreiben. Übung 10c: Ein Programm für den Periodenabschluß (Bilanz und G+V-Rechnung) ist zu schreiben. Übung lOd: Ein Programm für das Ausdrucken der Konten ist zu schreiben.
5. Anhang: Programmierhilfen 5.1 Lochkartenformat im Assembler
Reicht das Operandenfeld nicht aus, so können mehrere Fortsetzungskarten gelocht werden. Hat eine Karte eine Fortsetzungskarte, so ist dies durch ein beliebiges Zeichen in Spalte 72 der vorangehenden Karte anzuzeigen. Die Operanden werden ab Spalte 16 der Fortsetzungskarte gelocht.
276
5. Anhang: Programmierhilfen
5.2 Tabelle der Maschineninstruktionen
Op.Code symb.
Instruktion
Typ
Operandenformat explizite
Seite
Übertragungsoperationen im Arbeitsspeicher Übertragen Zeichen
MVC
SSi
Di (Li, B i ) , D 2 ( B 2 )
79
Übertragen Direktzeichen
MVI
SI
DI(B,), I2
81
Übertragen rechte Halbbytes (Ziffern)
MVN
SSi
D ^ L , , Bi), D 2 ( B 2 )
81
Übertragen Zeichen um 1 Halbbyte nach links versetzt
MV0
ssa
DI(Li.BI), D2(L2, B2)
,83
Übertragen linke Halbbytes (Zonen)
MVZ
SSi
Dt ( L i . B i ) , D 2 ( B 2 )
82
Laden von Registern, Speichern von Registerinhalten Laden FP-Wort
L
RX
R,, D2(X2, B2)
88
Laden Adresse
LA
RX
RI, D 2 ( X 2 , B 2 )
85
Umladen FP-Register komplementiert
LCR
RR
RI, R2
91
Umladen GP-Register lang, mit umgekehrten Vorzeichen
LCDR
RR
Ri, R2
Umladen GP-Register kurz, mit umgekehrten Vorzeichen
LCER
RR
Ri, R2
Laden GP-Doppelwort
LD
RX
R I , D 2 ( X 2 , B2)
Umladen GP-Register lang Laden GP-Wort
LDR LE
RR RX
RI, R2
99
R i , D2 ( X 2 , B 2 )
99
Umladen GP-Register kurz Laden Halbwort
LER LH
RR RX
RI, R2
98
Laden mehrfach FP-Worte
LM
RS
R l , D2 (X2, B 2 ) R i , R 3 , D 2 (B 2 )
89 93
Umladen FP-Register negativ
LNR
RR
RI, R2
92
Umladen GP-Register lang, negativ
LNDR
RR
Rl, R2
-
Umladen GP-Register kurz, negativ
LNER
RR
Rl, R2
-
Umladen FP-Register positiv
LPR
RR
Ri, R2
Umladen GP-Register laAg, positiv
LPDR
RR
Ri, R2
100
93 -
277
5.2 Tabelle der Maschinenbefehle
Op.Code symb.
Typ
Operandenformat explizite
Umladen GP-Register kurz, positiv
LPER
RR
Ri, R2
Umladen FP-Register
LR
RR
R i . R2
Umladen FP-Register mit Test
LTR
RR
Ri, R2
-
Umladen GP-Register lang mit Test
LTDR
RR
RJ, R 2
-
Umladen GP-Register kurz mit Test
LTER
RR
RI, R 2
-
Einfügen Zeichen (Byte)
IC
RX
RI, D 2 ( X 2 > B 2 )
90
Speichern FP-Register in Wort
ST
RX
R], D 2 ( X 2 , B 2 )
94
Speichern FP-Register in Byte
STC
RX
RI, D 2 (X 2 , B 2 )
96
Speichern GP-Register in Doppelwort
STD
RX
R „ D 2 ( X 2 , B2)
103
Speichern GP-Register in Wort
STE
RX
R , , D 2 (X 2 , B 2 )
101
Speichern FP-Register in Halbwort
STH
RX
R , , D 2 (X 2 , B 2 )
95
Speichern FP-Register mehrfach in Worte
STM
RS
RI, R 3 , D 2 ( B 2 )
97
Instruktion
Seite
—
87
Codetransformationen Umwandeln dezimal gepackt in dual
CVB
Umwandeln dual in dezimal gepackt Aufbereiten zum Drucken
RX
RI, D 2 ( X 2 , B 2 )
115
CVD
RX
R], D 2 ( X 2 , B 2 )
116
ED
SSi
DI ( L j , Bi), D 2 ( B 2 )
108
Aufbereiten zum Drucken und Markieren
EDMK
SS]
D i d i . B , ) . D2(B2)
_
Packen
PACK
SS a
D , ( L i , B I ) , D2(L2, B2)
103
Übersetzen mit Hilfe von Code-Tabellen
TR
SSi
DI (Li, Bi), D 2 ( B 2 )
_
Übersetzen und Prüfen mit Hilfe von CodeTabellen
TRT
SS]
DI (Li, BI), D 2 ( B 2 )
Entpacken
UNPK
ssa
Dj (Lj, Bj), D 2 ( L 2 , B 2 )
106
shift-Operationen in Festpunktregistern Links-shift arithmetisch (ohne bit-Position 31)
SLA
RS
RI, D 2 ( B 2 )
127
278
5. Anhang: Programmierhilfen Op.Code symb.
Typ
Operandenformat explizite
Seite
Links-shift im Doppelregister arithmetisch (ohne bit-Position 31 in Ri)
SLDA
RS
Ri, D 2 (B2)
129
Links-shift im Doppelregister logisch (mit bitPosition 31 in RO
SLDL
RS
RI, D 2 (B2)
Links-shift logisch (mit bit-Position 31)
SLL
RS
R I , D 2 (B 2 )
131
Rechts-shift arithmetisch (ohne bit-Position 31)
S RA
RS
RI, D 2 (B 2 )
127
Rechts-shift im Doppelregister arithmetisch (ohne bit-Position 31 in Ri)
SRDA
RS
RI, D 2 (B 2 )
128
Links-shift im Doppelregister logisch (mit bitPosition 31 in Ri)
SRDL
RS
RI, D 2 (B 2 )
Rechts-shift logisch (mit bit-Position 31)
SRL
RS
Ri, D 2 (B 2 )
Instruktion
130
Dezimalarithmetik Addieren gepackt
AP
Dividieren gepackt
DP
ss a ss a
Multiplizieren gepackt
MP
Subtrahieren gepackt Übertragen gepackt, rechtbündig mit führenden Nullen
Addieren FP-Wort
A
RX
RI, D 2 (X 2 , B 2 )
141
Addieren FP-Halbwort
AH
RX
R I , D 2 ( X 2 , B2)
142
Addieren FP-Wort logisch
AL
RX
RI, D 2 (X 2 , B 2 )
-
Addieren FP-Register logisch Addieren FP-Register
ALR AR
RR RR
RJ, R 2 RI, R 2
140
Dividieren durch FP-Wort
D
RX
RI, D 2 (X 2 , B 2 )
148
Dividieren durch FP-Register
DR
RR
RI, R2
146
Multiplizieren mit FP-Wort
M
RX
Ri, D 2 (X 2 , B 2 )
144
DI (LL Bi), D 2 (L 2 , B 2 )
132 138
SS a
DI (Li, Bi), D 2 (L 2 , B 2 ) DI (Li, Bi), D 2 (L 2 , B 2 )
135
SP
ss a
D i a i . B i ) , D 2 (L 2 , B 2 )
132
ZAP
ss a
DI (Li, Bi), D 2 ( L 2 , B 2 )
134
Festpunktarithmetik
5.2 Tabelle der Maschinenbefehle
Instruktion Multiplizieren mit FP-Halbwort
279
Op.Code symb.
Typ
Operandenformat explizite
Seite
MH
RX
Ri, D 2 (X 2 , B 2 )
145
Multiplizieren mit FP-Register
MR
RR
R >R2
143
Subtrahieren FP-Wort
S
RX
R , D 2 ( X 2 , B2)
141
Subtrahieren FP-Halbwort
SH
RX
R , D 2 (X 2 , B 2 )
142
Subtrahieren FP-Wort logisch
SL
RX
R , D 2 ( X 2 , B2)
—
Subtrahieren FP-Register logisch
SLR
RR
Subtrahieren FP-Register
SR
RR
R ,R 2 R ,R 2
_ 140
Gleitpunktarithmetik Addieren GP-Doppelwort
AD
RX
R , D 2 ( X 2 > B2)
151
Addieren GP-Register lang
ADR
RR
149
Addieren GP-Wort
AE
RX
R .R 2 R , D 2 (X 2 , B 2 )
151
Addieren GP-Register kurz AER
RR
R ,R 2
149
Addieren GP-Wort unnormalisiert
AU
RX
R , D 2 (X 2 , B 2 )
_
Addieren GP-Register kurz, unnormalisiert
AUR
RR
R ,R 2
_
Addieren GP-Doppelwort unnormalisiert
AW
RX
R , D 2 (X 2 , B 2 )
_
Addieren GP-Register lang, unnormalisiert
AWR
RR
R . R2
_
Dividieren durch GP-Doppelwort
DD
RX
R , D 2 (X 2 , B 2 )
157 156
Dividieren durch GP-Register lang
DDR
RR
R
Dividieren durch GP-Wort
DE
RX
R , D 2 (X 2 , B 2 )
157
Dividieren durch GP-Register kurz
DER
RR
156
Halbieren GP-Register lang HDR
RR
R .R 2 R ,R 2
Halbieren GP-Register kurz
HER
RR
R ,R 2
Multiplizieren mit GP-Doppelwort
MD
RX
R , D 2 (X 2 , B 2 )
155
Multiplizieren mit GP-Register lang
MDR
RR
R . R2
154
Multiplizieren mit GP-Wort
ME
RX
R , D 2 (X 2 , B 2 )
155
R2
-
5. Anhang: Programmierhilfen
280 Op.Code symb.
Typ
Operandenformat explizite
Seite
Multiplizieren mit GP-Register kurz
MER
RR
Ri, R 2
154
Subtrahieren GP-Doppelwort
SD
RX
R 1 ; D 2 (X 2 , B 2 )
153
Subtrahieren GP-Register lang
SDR
RR
RI,R2
152
Subtrahieren GP-Wort
SE
RX
R 1 ; D 2 ( X 2 , B2)
153
Subtrahieren GP-Register kurz
SER
RR
RI. R2
152
Subtrahieren GP-Wort unnormalisiert
SU
RX
RI, D 2 (X 2 , B 2 )
—
Subtrahieren GP-Register kurz, unnormalisiert
SUR
RR
RI, R 2
Subtrahieren GP-Doppelwort unnormalisiert
SW
RX
R ! , D 2 (X 2 , B 2 )
Subtrahieren GP-Register lang, unnormalisiert
SWR
RR
RI. R 2
Instruktion
_
Vergleichsoperationen Vergleichen FP-Register mit FP-Wort
C
RX
R 1 ( D 2 (X 2 , B 2 )
163
Vergleichen GP-Register mit GP-Doppelwort
CD
RX
Ri, D 2 (X2> B 2 )
166
Vergleichen GP-Register lang
CDR
RR
R
166
Vergleicheil GP-Register mit GP-Wort
CE
RX
Ri, D 2 ( X 2 > B 2 )
166
Vergleichen GP-Register kurz
£ER
RR
RI, R 2
166
Vergleichen FP-Register mit FP-Halbwort
CH
RX
RI, D 2 (X 2 , B 2 )
164
Vergleichen Zeichen logisch
CLC
SS!
D!(LI, BI), D 2 (B 2 )
158
Vergleichen logisch Direktzeichen
CLI
SI
Di(BI), I 2
160
Vergleichen gepackte Dezimalzahlen
CP
ssa
Di (Li, Bi), D 2 ( L 2 , B 2 )
161
l>
R
2
Vergleichen FP-Register
CR
RR
RI, R 2
162
Testen Byte mit Maske
TM
SI
DI (Bi), I 2
167
Verzweigungsoperationen Verzweigen nach Laden der Rücksprungadresse
BAL
RX
R 1 , D 2 ( X 2 , B2)
173
5.2 Tabelle der Maschinenbefehle
281
Op.Code symb.
Typ
Operandenformat explizite
Seite
Verzweigen zu Registeradresse nach Laden der Rücksprungadresse
BALR
RR
R l . R2
174
Verzweigen bedingt
BC
RX
MI, D 2 ( X 2 , B 2 )
169
Verzweigen bedingt zu Registeradresse
BCR
RR
MI, R 2
170
Vermindern Inhalt Register und Verzweigen bei 0
BCT
RX
Ri, D 2 ( X 2 , B 2 )
175
Vermindern Register und Verzweigen bei 0 (Adresse in R 2 )
BCTR
RR
Ri» R2
176
Verzweigen wenn ( R ^ nach Erhöhung größer bzw.
BXH
Instruktion
RS
Rl, D 2 (B 2 )
178
Verzweigen wenn ( R [ ) nach Erhöhung kleiner/ gleich bzw. BXLE
RS
RI, D 2 (B 2 )
178
Modifizieren und Ausfuhren des adressierten Befehls EX
RX
RI, D 2 ( X 2 ) B 2 )
179
Erweiterter mnemotechnischer Befehlscode für BC unbedingte Verzweigungen Sprung
B
RX
RI, D 2 ( X 2 , B 2 )
170
Sprung (Adresse in R 2 )
BR
RR
RI, R 2
171
Keine Operation
N0P
RX
RI, D 2 (X 2 , B 2 )
170
Keine Operation (Adresse in R 2 )
N0PR
RR
RI, R 2
-
Verzweigung nach Vergleichsoperationen Verzweigen bei gleich
BE
RX
RI, D 2 ( X 2 , B 2 )
170
Verzweigen bei größer
BH
RX
RI, D 2 ( X 2 , B 2 )
170
Verzweigen bei kleiner
BL
RX
RI, D 2 ( X 2 , B 2 )
170
Verzweigen bei ungleich
BNE
RX
RI, D 2 (X 2 , B 2 )
170
Verzweigen bei kleiner/ gleich
BNH
RX
RI, D 2 (X 2 , B 2 )
170
Verzweigen bei größer/ gleich
BNL
RX
RI, D 2 ( X 2 , B 2 )
170
Verzweigung nach arithmetischen Operationen Verzweigen bei negativ
BM
RX
RI, D 2 (X 2 , B 2 )
-
282
5. Anhang: Programmierhilfen Op.Code symb.
Typ
Operandenformat explizite
Seite
Verzweigen bei nicht negativ
BNM
RX
Ri, D 2 ( X 2 , B 2 )
_
Verzweigen bei nicht positiv
BNP
RX
RI» D 2 ( X 2 ) B 2 )
—
Verzweigen bei ungleich Null
BNZ
RX
RI, D 2 ( X 2 , B 2 )
_
Verzweigen bei Überlauf
B0
RX
Verzweigen bei positiv
BP
RX
Ri> D 2 (X 2 , B 2 ) RI, D 2 ( X 2 , B 2 )
Verzweigen bei gleich Null
BZ
RX
RI, D 2 (X 2 , B 2 )
Instruktion
-
-
Verzweigung nach TM (Testen Maske) Verzweigen bei Einsen und Nullen
BM
RX
RI> D 2 (X 2 , B 2 )
170
Verzweigen bei Einsen
B0
RX
RI, D 2 ( X 2 ) B 2 )
170
Verzweigen bei Nullen
BZ
RX
RI, D 2 ( X 2 , B 2 )
170
5.3 Tabelle der 2er-Potenzen
n
2"
n
2n
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 2 4 8 16 32 64 128 256 512 1 024 2 048 4 096 8 192 16 384 32 768 65 536 131 072 262 144 524 288 1 048 576
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
2 097 152 4 194 304 8 388 608 16 777 216 33 554 432 67 108 864 134 217 728 268 435 456 536 870 912 1 073 741 824 2 147 483 648 4 294 967 296 8 589 934 592 17 179 869 184 34 359 738 368 68 719 476 736 137 438 953 472 274 877 906 944 549 755 813 888 1 099 511 627 776 2 199 023 255 552
5.5 Tabelle der möglichen bit-Muster im Byte (sedezimal)
283
5.4 Umrechnungstabelle sedezimal - dezimal
Z4 0 1 2 3 4 5 6 7 8 9 A B C D E F Zj i -
Z4 16 4
Z3
0 536 072 608 144 680 216 752 288 824 360 896 432 968 504 040
0 1 2 3 4 5 6 7 8 9 A B C D E F
65 131 196 262 327 393 458 524 589 655 720 786 851 917 983
Z3163
Z2
Z2162
0 096 192 288 384 480 576 672 768 864 960 056 152 248 344 440
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 256 512 768 024 280 536 792 048 304 560 816 072 328 584 840
4 8 12 16 20 24 28 32 36 40 45 49 53 57 61
1 1 1 1 2 2 2 2 3 3 3 3
Zl 0 1 2 3 4 5 6 7 8 9 A B C D E F
Zi-16 1 0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240
zo
zo-16 0
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Sedezimalziffer zj • 161 - Dezimalwert Sedezimalstelle mit dem Stellenwert 16'
5.5 Tabelle der möglichen Bit-Muster im Byte (sedezimal)
Halbbytes (sedezimal) 00 Ol 02 03 04 05 06 07 08 09 OA OB OC OD OE OF
Dezimalwert 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Maschineninstruktionen (symb. Op.Code)
Druckzeichen, Maskenzeichen
Seite
_ _ _ —
SPM BALR BCTR BCR SSK ISK SVC
_
174 176 170
_ _ _ _ _ _ _ -
284
Halbbytes (sedezimal) 10 11 12 13 14 15 16 17 18 19 1A 1B IC 1D IE 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41
5. Anhang: Programmierhilfen
Dezimalwert
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
Maschineninstruktionen (symb. Op.Code) LPR LNR LTR LCR NR CLR 0R XR LR CR AR SR MR DR ALR SLR LPDR LNDR LTDR LCDR HDR
Druckzeichen, Maskenzeichen
Seite
93 92 -
91
Zifferzeichen Startzeichen für Nullen Endezeichen für Nullen
-
87 162 140 140 143 146
_ _ _ _ -
_ -
_ —
LDR CDR ADR SDR MDR DDR AWR SWR LPER LNER LTER LCER HER
LER CER AER SER MER DER AUR SUR STH LA
99 166 149 152 154 156 —
_ —
_ _ 98 166 149 152 154 156
_ _
Leerzeichen (blank)
95 85
285
5.5 Tabelle der möglichen bit-Muster im Byte (sedezimal) Halbbytes (sedezimal) 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74
Dezimalwert 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
Maschineninstruktionen (symb. Op.Code)
Druckzeichen, Maskenzeichen
STC IC EX BAL BCT BC LH CH AH SH MH
7
100 166 151 153 155 157
_
101 -
-
286
5. Anhang: Pogrammierhilfen
Halbbytes (sedezimal)
Dezimalwert
75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F AO Al A2 A3 A4 A5 A6 A7
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
Maschineninstruktionen (symb. Op.Code)
Druckzeichen, Maskenzeichen
Seite
_ -
LE CE AE SE ME DE AU SU SSM
#
@ •
= "
99 166 151 153 155 157 -
LPSW
-
WRD RDD BXH BXLE SRL SLL SRA SLA SRDL SLDL SRDA SLDA STM TM MVI TS NI CLI 01 XI LM
-
178 178 130 131 127 127 128 129 97 167 81 160 -
93 -
SI0 TI0 HI0 TCH
—
5.5 Tabelle der möglichen bit-Muster im Byte (sedezimal)
Halbbytes (sedezimal)
Dezimalwert
A8 A9 AA AB AC AD AE AF BO B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF CO C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF DO Dl D2 D3 D4 D5 D6 D7 D8 D9 DA
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
MaschinenInstruktionen (symb. Op.Code)
_ . , Druckzeichen, Maskenzeichen
287
Seite -
—
—
— —
A B C D E F G H I
MVN MVC MVZ NC CLC (SC XC
J K L M N 0 p Q R
— —
— —
81 79 82 —
158 — — —
5. Anhang: Programmierhilfen
288
Halbbytes (sedezimal)
Dezimalwert
DB DC DD DE DF EO El E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF FO Fl F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
Maschineninstruktionen (symb. Op.Code)
Druckzeichen, Maskenzeichen
TR TRT ED EDMK
Seite
-
108 -
S T U V W X Y Z
-
-
-
-
MV0 PACK UN PK
ZAP CP AP SP MP DP
0 1 2 3 4 5 6 7 8 9
83 103 106 -
134 161 132 132 135 138 —
5.7 Fehleranzeigen des Übersetzerprogramms (Übersetzungsphase)
289
5.6 Tabelle der maschineninternen Instruktionsformate
1. Byte
2. Byte
Op.-Code
Ri | R2 1
Op.-Code
Ri !
Op.-Code
Ri ! R3
I
Op.-Code
3. Byte
b2
5. Byte
6. Byte
D,
Li 1 ] L2 - 1 B.
L, - 1
4. Byte
I
B, !-.
Op.-Code
Op.-Code
3. Halbwort
2. Halbwort
1. Halbwort
Ì*~
B, '«
D. "f" B,
D. V
D,
»
k-
D,
B2
5.7 Fehleranzeigen des Übersetzerprogramms (Übersetzungsphase)23 A D E
M O S T U Y 23
Unzulässiger Wert einer symbolischen Adresse Formfehler (falscher Längenschlüssel, Operandenausrichtung fehlt, unzulässige Zeichen in Konstantendefinition, unzulässiger Konstantentyp etc.) Syntaxfehler (Ablochformat verletzt, unzulässige Zeichen, falsche Namensbildung, Literal als 1. Operand, Fehler bei der Bildung komplexer Ausdrücke etc.) Mehrfachdefinition von Symbolen Unzulässiger symbolischer Operationscode Unzulässiges Symbol im Namensfeld Fehler bei der Makroumwandlung Symbol nicht definiert Kein Basisregister verfügbar Es werden nur die am häufigsten vorkommenden Anzeigen behandelt. Die Anzeigen erscheinen im Übersetzungsprotokoll in der Spalte „flags"; nähere Einzelheiten vgl. die einschlägigen Handbücher der Hersteller.
290
5. Anhang: Programmierhilfen
5.8 Fehleranzeigen des Betriebssystems (Ablaufphase)24 P088 Nichtdecodierbarer Operationscode (meistens, wenn in Daten- oder Konstantenfelder verzweigt wird) P092 Adressierungsfehler (Ausrichtung verletzt, Adresse zu groß) P096 Unzulässiger Datencode PI00 Exponent zu groß (bei Gleitpunktarithmetik) PI 04 Division durch Null PI08 Mantisse gleich Null (bei Gleitpunktarithmetik) PI 12 Exponent zu klein (bei Gleitpunktarithmetik) PI 16 Dezimalüberlauf (bei Dezimalarithmetik) PI20 Registerüberlauf (bei dualer FP-Arithmetik)
24
Es werden nur die am häufigsten vorkommenden Anzeigen behandelt. Die Anzeigen erscheinen auf dem Konsolschreiberprotokoll und als „type of termination" im Kernspeicherauszug (dump); nähere Einzelheiten vgl. die einschlägigen Handbücher der Hersteller.
Literaturverzeichnis
291
Literaturverzeichnis [ 1 ] Alletsee, R. und G. Umhauer: Assembler I, II und III. Berlin - Heidelberg - N e w York 1974. [2] Assabgui, M.: Le langage d'assemblage. Paris 1972. [3] Barron, D. W.: Assembler und Lader. München 1970. [4] Chapin, N.: 360/370 Programming in Assembly Language. 2. Aufl., New York (N. Y.) e. a. 1973. [5] Dworatschek, S.: Einfuhrung in die Datenverarbeitung. 5. Aufl., Berlin 1973. [6] Fersehkurs im Medienverbund: Einfuhrung in die Elektronische Datenverarbeitung, Band I, II, III. [7] Fischbach, F. und J. Breidenbach: Allgemeine Einführung in die Assembler-Sprache. Mainz 1967. [8] Flores, I.: Assemblers and BAL. Englewood Cliffs (N. J.) 1971. [9] Germain, C. B.: Das Programmier-Handbuch der IBM/360. 4. Aufl., München 1972. [10] Huber, W.: Assembler. München 1973. [11] IBM-Handbuch der EDV-Organisation. [12] IBM Schule für Datenverarbeitung: Programmieren in der IBM/360 Assembler-Sprache. ASS-PU, Text 1 - 4 , 2. Aufl., Sindelfingen 1970. [13] IBM System/360: Die Assemblersprache. [14] IBM System/360: Die Basic Assembler Sprache. [15] IBM System/360: Datenorganisation auf Speichereinheiten mit direktem Zugriff. DASD-Handbuch. [16] IBM System/360: Maschinenlogik und Aufbau der Instruktionen. 1966. [17] IBM System/360: Principles of Operation. [18] IDV-Lernprogramm: Elektronische Datenverarbeitung, I, II. Berlin 1971. [19] Kuo, S. S.: Assembler Language for FORTRAN, COBOL, and PL/I Programmers. Reading (Mass.) e. a. 1974. [20] Lohr, K. P.: Assembler-Programmierung. Berlin 1972. [21 ] Mrachacz, H.-P.: Einführung in das praktische Programmieren. München 1972. [22] Mrachacz, H.-P. und G. Paetz: Taschenbuch für Programmierer. München 1971. [23] Niemeyer, G.: Ein integriertes Datenverarbeitungs- und Informationssystem. Berlin 1972. [24] Opler, A. (Hrsg.): Das IBM-System/360 und seine Programmiertechniken. 2. Aufl., München - Wien 1972. [25] Payne, W. H.: Machine, Assembly and Systems Programming for the IBM/360. New York (N. Y.) 1969. [26] Saxon, J. A., H. S. Englander and W. R. Englander: System 360 Programming. Englewood Cliffs (N. J.) 1968. [27] Schiro, H. und R. Herzog: Wie sag ich's dem Computer?, 2. Aufl. München 1971. [28] Schwarzhuber, M.: MakroSprache. Berlin - München 1971. [29] Siemens Schriftenreihe "data praxis": Methoden zur Adressierung von Speichern mit direktem Zugriff. [30] Siemens Schriftenreihe "data praxis": Technik der Speicherung und Wiedergewinnung von Daten mit direktem Zugriff. [31] Siemens System 4004 BS 1000: Assembler, Beschreibung. [32] Siemens System 4004 BS 1000: Dienstprogramme. [33] Siemens System 4004 BS 1000: Ein-/Ausgabesystem. [34] Siemens System 4004 BS 1000: Organisationsprogramm. [35] Siemens System 4004: Systemkonventionen. [36] Siemens System 4004 Zentraleinheiten 4004/127, 135-2, 45-3. Beschreibung und Befehlsliste. [37] Stabley, D. H.: System 360 Assembler Sprache. Stuttgart 1969. [38] Struble, G.: Assembler Language Programming. Reading (Mass.), 1969.
292
Literaturverzeichnis
[39] Tuggle, S.: Assembler Language Programming: System/360 & 370. Chicago (III.) e. a. 1975. [40] Univac Serie 9000: Programmierungs-Standard, Bibliothek Teil 1 und 2. [41]Univac Serie 9000: Technische Beschreibung 9200, 9300. [42] Wolters, M. F. (Hrsg.): Der Schlüssel zum Computer. Reinbek b. Hamburg, 1974.
Stichwortverzeichnis
293
Stichwortverzeichnis A Addieren (Wort) 141 AD Addieren normalisiert lang 151, 152 ADR Addieren normalisiert lang (Register) 1 4 9 - 1 5 1 Adresse siehe Arbeitsspeicheradressierung Adreßkonstante 6 4 - 6 6 AE Addieren normalisiert kurz 151, 152 AER Addieren normalisiert kurz (Register) 149, 150 AH Addieren Halbwort 142, 143 AP Addieren dezimal 1 3 2 - 1 3 4 AR Addieren (Register) 140 Arbeitsspeicher 9 Organisation des — 9 Arbeitsspeicheradressierung 38 ff. absolute - 39, 40, 65, 185 ff. einfache - 38 ff. explizite - 68 ff. implizierte - 69 ff. indizierte — 42 ff. relative - 39, 40, 52, 53, 65 relative symbolische - 52, 7 7 - 7 9 symbolische - 40, 54, 66 ff. Assembler, siehe Umwandlungsprogramm ASSEMBLER 46 ff. Elemente des — 47 Assembleranweisungen 47, 180 ff. Aufbereiten zum Drucken 108 ff. Aufbereitungsmaske 109 Ausdrücke 48 ff. Ausführungsphase 180, 188 B Verzweigen unbedingt 170 BAL Springen und Speichern Rücksprungadresse 173 BALR Springen (zu Registeradresse) und Speichern Rücksprungadresse 174 Basisadresse 39 absolute - 52, 185 ff. relative - 52, 53, 185 ff. Basisregister 31, 38 ff, 185 ff. BC Springen bedingt 169, 170 - erweiterter Bedingungscode 170 BCR Springen (zu Registeradresse) bedingt 170, 171 BCT Springen nach Zählen 175, 176 BCTR Springen (zu Registeradresse) nach Zahlen 176, 177 Befehle siehe Maschinenbefehle BE Verzweigen bei gleich 170 Befehlszählregister 33, 39 BH Verzweigen bei größer 170
Binärkonstante 59, 60 Bindephase 190 ff. bit 9 - Positionen 9 ff. - Muster 9 ff. BL Verzweigen bei kleiner 170 BM Verzweigen bei gemischtem bit-Muster 170 BNE Verzweigen bei ungleich 170 BNH Verzweigen bei nicht größer 170 BNL Verzweigen bei nicht kleiner 170 B0 Verzweigen bei Einsen-bit-Muster 170 BP Sprung bei positiv 170 Buchstabendarstellung 13, 15 BXH Springen, wenn Index größer 178, 179 BXLE Springen, wenn Index kleiner oder gleich 178, 179 Byte 9 BZ Sprung bei Nullen-bit-Muster 170 C Vergleichen algebraisch (FP-Wort) 163, 164 CD Vergleichen lang 167 CDR Vergleichen lang (Register) 166 CE Vergleichen kurz 167 CER Vergleichen kurz (Register) 166 CH Vergleichen Halb wort 165 CLC Vergleichen logisch 1 5 8 - 1 6 0 CLI Vergleichen logisch direkt 160 CL0SE Schließen einer oder mehrerer Dateien 208, 209 CNTRL Steuerung eines peripheren Geräts 213, 214 CNVTDEGP Umwandlung dezimal nach sedezimal Gleitpunkt 117 ff. CNVTGPDE Umwandlung sedezimal Gleitpunkt nach dezimal 117 ff. Codeumwandlung 16 ff., 103 ff. - EBCDI nach dezimal gepackt 103-106 - dezimal gepackt nach EBCDI 106-115 - dezimal gepackt nach dual 115, 116 - dual nach dezimal gepackt 116, 117 - dezimal nach sedezimaler Gleitpunktzahl 117, 119 ff. - sedezimal GP nach dezimal 117, 120 ff. CP Vergleichen dezimal 161, 162 CR Vergleichen algebraisch (Register) 162, 163 CSECT Definieren eines Programmabschnitts 189 ff. CVB Umwandeln in Dualzahl 115, 116 CVD Umwandeln in Dezimalzahl 116, 117
294 D Dividieren (Wort) 148, 149 Dateierklärungen 203 ff. DC Definieren Konstante 182, 183 DD Dividieren lang 157, 158 DDR Dividieren lang (Register) 156, 157 DE Dividieren kurz 157, 158 DER Dividieren kurz (Register) 156, 157 Dezimalbefehle (arithmetische) 132 ff. Dezimalkonstante 6 2 - 6 4 Dezimal gepackte Zahlendarstellung 16 ff. Direktoperanden 33 Direktwerte 49 ff. binäre - 51 dezimale - 50 sedezimale — 51 Zeichen - 51, 52 Distanzadresse 31, 32, 35, 38 ff., 185 ff. Doppelwort 10 Doppelwortgrenze 44 Ausrichtung auf - 44, 184 DP Dividieren sedezimal 138, 139 DR Dividieren (Register) 146, 147 DROP Sperren von Basisregistern, die vorher durch USING zugewiesen wurden 188 DS Definieren Speicherplatz 1 8 3 - 1 8 5 DTFDA Dateierklärung für Gerät mit direktem Zugriff 204 ff. DTFEN Ende der Dateierklärungen 204 ff. DTFSR Dateierklärung für Gerät mit seriellem Zugriff 204 ff. Dualer Stellenwert 14, 18, 19, 23 Duale Zahlendarstellung 17 ff., - im Halbwort 1 9 - 2 3 - im Festpunktregister 1 9 - 2 3 - im Wort 1 9 - 2 3 Duplizierfaktor 56 EBCDI-Code 11 ff. Buchstabendarstellung im - 12, 13, 15 Sonderzeichendarstellung im — 13, 16 Vorzeichendarstellung im - 12, 15 Zahlendarstellung im - 12, 15 Zifferndarstellung im - 11, 15 ED Aufbereiten 1 0 8 - 1 1 5 Einfügungszeichen in Druckmaske 109 Endezeichen in Druckmaske 109 END Beenden der Umwandlung 191 ff. Entpacken 17, 1 0 6 - 1 0 8 ENTRY Definieren symbolische Adresse als Einsprungstelle 191 ff. E0J Programmende (identisch mit TERM) 215 EQU Wertzuweisung zu einem Symbol 4 9 - 5 1 , 181, 182 Erweiterter Bedingungscode bei Verzweigungsbefehlen 170
Stichwortverzeichnis EX Ausführen 179, 180 EXTRN Erklären externer Symbole 66, 190 ff. Festpunktkonstante 60, 61 Festpunktregister 10, 19 GET Lesen seriell 209, 210 Gleitpunktbefehle (arithmetische) 1 4 9 - 1 5 8 Gleitpunktkonstante 62 Gleitpunktregister 10, 29, 30 Gleitpunktzahl 29, 30 Halbbyte 13, 18 Halbwort 10, 18, 1 9 - 2 1 Halbwortgrenze 45 Ausrichtung auf - 44 ff., 60, 184 IC Laden Zeichen 90, 91 Indexregister 32, 42, 4 3 Instruktionen 47 Instruktionstypen 32 ff. Formate der - 32 ff., 289 Kilobyte 9 Komplementierung 20, 9 1 - 9 3 Konstantentyp 56 ff., 182, 184 L Laden (FP-Wort) 88, 89 LA Laden Adresse 8 5 - 8 7 Ladeadresse 39, 65, 185 ff. Ladebefehle 85 ff. Längenattribut 54 Längenschlüssel 56 expliziter — 56 impliziter - 57 LCR Laden Komplement 91, 92 LD Laden lang 100, 101 LDR Laden lang (Register) 99 LE Laden kurz 99, 100 LER Laden kurz (Register) 98 LH Laden Halbwort 89, 90 Literal 54 ff. - mit Adreßkonstante 64 ff. - mit Binärkonstante 59, 60 - mit Dezimalkonstante 6 2 - 6 4 - mit Festpunktkonstante 6 0 - 6 2 - mit Gleitpunktkonstante 62 - mit Sedezimalkonstante 58, 59 - mit Zeichenkonstante 57, 58 Literalbereich 196 LM Laden mehrfach 93, 94 LNR Laden negativ 92 LPR Laden positiv 93 LR Umladen Registerwert 87, 88 LT0RG Eröffnen eines Literalbereichs 196
Stichwortverzeichnis M Multiplizieren Register mit Vollwort 144, 145 Makro 47, 198 ff. - Aufruf 47, 198, 202 - Bibliothek 198, 201, 202 - Definition 199 ff. Mischform - 200 Schlüsselwort - 200 Stellungs - 199, 200 System - 203 ff. - Umwandler 198, 201 Makros 47, 198 ff. - zur Dateidefinierung 203 ff. - zum Öffnen und Schließen von Dateien 208, 209 - zum Schreiben und Lesen 209-213 - zur Steuerung peripherer Geräte 213-215 Maschinenbefehle 47, 66 ff. Beschreibung der - 7 9 ff. Syntax der - 6 7 - 7 7 Maschineninstruktionen 31 ff. MD Multiplizieren mit GP-Doppelwort 155, 156 MDR Multiplizieren GP-Register lang 154, 155 ME Multiplizieren mit GP-Wort 155, 156 MER Multiplizieren GP-Register kurz 154, 155 MH Multiplizieren Register mit Halb wort 145, 146 M P Multiplizieren gepackt 135-137 MR Multiplizieren Register 143, 144 MVC Übertragen Zeichen 79, 80 MVI Übertragen Direktzeichen 81 MVN Übertragen rechte Halbbytes (Ziffern) 81, 82 MVA Übertragen Zeichen versetzt 8 3 - 8 5 MVZ Übertragen linke Halbbytes (Zonen) 82, 83 Nullenunterdrückung 108 ff. Objektprogramm 31, 46 0PEN Eröffnen von Dateien 208 Operanden 31, 66 ff. - Adressierung 34 ff., 38 ff. Ausrichtung der - 44, 45 Länge der - 44 Operationscode 66 ff. 0RG Setzen des Zuordnungszählers 195 PACK Packen von gezonten Dezimalzahlen 16, 17, 103-106 P RI NT Modifikation des Protokollumfangs 197, 198
295 Programmsegment 189 ff. Programm-Modul 189 ff. PRT0V Vorschub bei Formularende 207, 214, 215 PUT Schreiben seriell 210, 211 Quellenprogramm 46 ff. READ Lesen gestreut 211, 212 Register 10 Laden - 85 ff. - Operanden 3 3 ff. - inhalten, Speichern von 94 ff. Relative Adressierung 39 ff., 77—79 - bei RX- und RS-Instruktionen 77 - bei Sl-Instruktionen 78 - bei SS-Instruktionen 78, 79 RR-Instruktionen, echt 34 - symbolisch 67, 68 RS-Instruktionen, echt 35, 36 - symbolisch 71, 72 Rücksprungadresse 171 ff. RX-Instruktionen, echt 34, 35 - symbolisch 68, 69 - als Sprungbefehle 70, 71 S Subtrahieren (Wort) 141 Schutzsternschreibung 112, 113 SD Subtrahieren normal lang 153 SDR Subtrahieren normal lang (Register) 152, 153 SE Subtrahieren normal kurz 153 Sedezimale Schreibweise 13 ff. Buchstabendarstellung in - 15 Sonderzeichendarstellung in - 16 Zahlendarstellung in - 15 Zifferndarstellung in - 15 Sedezimalbrüche 26, 27 Sedezimalkonstante 58, 59 Sedezimalsystem 14 Sedezimalzahl 23 ff. Segment 189 ff. SER Subtrahieren normal kurz (Register) 152, 153 SH Subtrahieren Halbwort 142, 143 Shift-Befehle 127-132 Sl-Instruktionen, echt 36, 37 - symbolisch 72, 73 SLA Verschieben links 128 SLDA Verschieben links doppelt 129, 130 SLL Verschieben links logisch 131, 132 SP Subtrahieren dezimal 132, 133 Sonderzeichendarstellung 13, 16 Speicherbefehle 94 ff., 101-103 Speicheroperanden 31 Sprungbefehle 70, 71, 169-180
296 SR Subtrahieren (Register) 140 SRA Verschieben rechts 127 SRDA Verschieben rechts doppelt 128,129 SRL Verschieben rechts logisch 130, 131 SS-Instruktionen, echt 37, 38 - symbolisch 7 3 - 7 7 ST Speichern (FP-Wort) 94, 95 START 189 Startzeichen in Druckmaske 108 STC Speichern Zeichen 96, 97 STD Speichern lang 102, 103 STE Speichern kurz 101, 102 Stellenwert 12 ff. dezimaler - 21, 22 dualer - 14, 23 sedezimaler — 23 STH Speichern Halbwort 95, 96 STM Speichern mehrfach 97, 98 Symbole 48, 49 Symbolische Maschineninstruktionen 66 ff. Syntax der - 6 7 - 7 7 Symboltabelle 49 System-Makros 203 ff. TERM Beenden des Programms 215 Tetrade 13 TITLE Drucken Kopfzeile 197 TM Testen mit Maske 1 6 7 - 1 6 9 Übertragungsbefehle 7 9 - 8 5 Übungsaufgaben 216 ff. Umwandlung 41, 43, 5 2 - 5 6 Umwandlungsprogramm 46 UNPK Entpacken 1 0 6 - 1 0 8 USING Deklarieren Basisregister 41, 185-187 Unterprogrammsprung 171 ff.
Stichwortverzeichnis Vergleichsbefehle 1 5 8 - 1 6 9 Verzweigungsbefehle 1 6 9 - 1 8 0 Vollwort 10 Vollwortgrenze 45 Ausrichtung auf - 45, 6 0 - 6 2 , 184 Vorzeichendarstellung 12, 15, 20, 29, 30 WAITF Warten, bis eine E/A-Operation eines Großspeichers beendet ist 212, 213 Wertzuweisung siehe EQU WRITE Schreiben gestreut 212 Wort 18, 19, 20 Zahlendarstellung 12, 15, 16 ff. dezimal gepackte - 16, 17 dezimal gezonte — 12, 15 - dual 1 7 - 2 1 - im Festpunktregister 1 9 - 2 1 - im Gleitpunktregister 29, 30 - im Halbwort 1 9 - 2 1 - im Wort 1 9 - 2 1 polynomiale - 2 1 - 2 9 sedezimale - 2 3 - 3 0 Zahlensysteme 21 ff. Umrechnung von — 23 ff. ZAP Löschen und Addieren dezimal 134, 135 Zeichendirekt wert 51, 52 Zeichenkettenverarbeitung 11 Zeichenkonstante 57, 58 Zifferndarstellung 11, 15 Ziffernteil 103 Ziffernzeichen in Druckmaske 108 Zonenteil 103 Zuordnungszähler 5 2 ff. Stand des - 52 ff. Steuerung des - 195, 196 Zweierkomplement 20