Einführung in das Programmieren in Assembler: Systeme IBM 360, IBM 370, Siemens 4004, UNIVAC 9000 [2., verb. Aufl. Reprint 2019] 9783111587486, 9783110070927


206 60 16MB

German Pages 295 [296] Year 1977

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Vorwort
Inhalt
1. Die Darstellung von Daten in Byte-Maschinen
2. Maschineninstruktionen und Operandenadressierung
3. Die Programmiersprache Assembler
4. Übungsprogramme
5. Anhang: Programmierhilfen
Literaturverzeichnis
Stichwortverzeichnis
Recommend Papers

Einführung in das Programmieren in Assembler: Systeme IBM 360, IBM 370, Siemens 4004, UNIVAC 9000 [2., verb. Aufl. Reprint 2019]
 9783111587486, 9783110070927

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

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

...





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