Maschinensprache auf dem Commodore 64

Aus C64-Wiki
Zur Navigation springenZur Suche springen


Maschinensprache auf dem Commodore 64
Cover/Buchdeckel
Sprache deutsch
Autor(en) Heinz Sterner, T. Tutughamiarsa
Verlag IWT-Verlag (1984)
Jahr 1984
ISBN ISBN 3-88322-047-7
Neupreis 56 DM
Datenträger keiner
Seitenzahl 242
letzte Auflage 1. Auflage 1985
Genre Einsteiger
Information




Buchrückseite[Bearbeiten | Quelltext bearbeiten]

Das vorliegende Buch ist in seiner Konzeption an den Bedürfnissen des „Einsteigers“ orientiert: offensichtlich ist es wenig sinnvoll, den Befehlssatz des 6510-Prozessors ohne Anwendungsbeispiele zunächst nur „auf dem Trockenen“ zu besprechen. Deshalb wird ein Befehl dann eingeführt und erklärt, wenn er für eine Problemlösung erforderlich ist. Die Erarbeitung des Befehlssatzes erfolgt also aus den jeweiligen praktischen Anforderungen heraus.

Den zentralen Teil des Buches bildet ein Paket von 16-Bit-Routinen, die z. B. für die Grafik-Programmierung genutzt werden können.

Weiterhin werden einige häufig verwendete interne ROM-Routinen des COMMODORE 64 beschrieben, die der Benutzer auch in seine eigenen Programme einbauen kann.

Den Abschluß des Buches bildet eine Übersicht über die Adressierungsarten des 6510.

Inhaltsverzeichnis[Bearbeiten | Quelltext bearbeiten]

Vorwort ...................................................................... 5

Einleitung .................................................................. 11

1.  Schematische Darstellung des Mikroprozessors 6510 ....................... 13
    1.1 Akkumulator ......................................................... 16
    1.2 Index-Register X und Y .............................................. 16
    1.3 Programmzadhler ..................................................... 16
    1.4 Stapelzeiger ........................................................ 16
    1.5 Prozessor-Status-Register ........................................... 17

2.  Algorithmen ............................................................. 19
    2.1 Hauptaufgaben einer Programmiersprache .............................. 22
    2.2 Grundlegende Elemente zur Darstellung von Flußdiagrammen ............ 22

3.  Zahlensysteme ........................................................... 27
    3.1 Das Binär-System .................................................... 29
        3.1.1 Die Addition mit Binärzahlen .................................. 30
        3.1.2 Zahlen mit Vorzeichen ......................................... 30
              3.1.2.1 Das Einerkomplement ................................... 31
              3.1.2.2 Das Zweierkomplement .................................. 31
        3.1.3 Übertrag und Überlauf ......................................... 32
        3.1.4 High- und Low-Byte ............................................ 35
    3.2 Das Hexadezimal-System .............................................. 35

4.  Wie schreibt man ein Programm in Assembler? ............................. 39
    4.1 Addition zweier Zahlen .............................................. 41
    4.2 Addition mehrerer Zahlen ............................................ 46
    4.3 16-Bit-Addition ..................................................... 52

5.  Unterprogramme .......................................................... 59
    5.1 Parameterübergabe ................................................... 64
        5.1.1 Parameterübergabe durch Register .............................. 65
        5.1.2 Parameterübergabe durch den Stack ............................. 66
        5.1.3 Parameterübergabe durch vereinbarte Speicher .................. 70
        5.1.4 Direkte Parameterübergabe ..................................... 73

6.  16-Bit-Simulationen ..................................................... 75
    6.1 Häufig verwendete 16-Bit-Routinen ................................... 80
    6.2 Der 16-Bit-Interpreter ............................................. 101

7.  Grafik-Anwendungen der Assembler-Routinen .............................. 107
    7.1 16-Bit-Routinen zur hochauflösenden Grafik ......................... 109
        7.1.1 Grafik einschalten ........................................... 109
        7.1.2 Grafik ausschalten ........................................... 110
        7.1.3 Grafikspeicher löschen ....................................... 110
        7.1.4 Hintergrundfarbe setzen ...................................... 112
        7.1.5 Adressberechnung für Grafikspeicher .......................... 112
        7.1.6 Grafikpunkt setzen/löschen ................................... 117
        7.1.7 Zeichnen und Löschen von Geraden ............................. 120
    7.2 16-Bit-Routinen zur Sprite-Programmierung .......................... 126
        7.2.1 Erstellen von Sprites ........................................ 129
        7.2.2 Sprite-Positionierung ........................................ 133
    7.3 Weitere Routinen zur Sprite-Programmierung ......................... 134
        7.3.1 Ein- und Ausschalten von Sprites ............................. 134
        7.3.2 Bestimmung der Sprite-Farbe .................................. 136
        7.3.3 Bestimmung der Anfangsadresse von Sprites .................... 137
    7.4 Anwendungsbeispiele zur Benutzung der Sprite- und Grafik-Routinen .. 138
        7.4.1 Beispiel zur Benutzung der Sprite-Routinen ................... 139
        7.4.2 Beispiel zur Benutzung der Grafik-Routinen ................... 140

8.  Verwendung von ROM-Routinen ............................................ 141
    8.1 Parameterübergabe von BASIC-Programmen aus ......................... 143
    8.2 Weitere Beispiele mit ROM-Routinen ................................. 147

9.  Kurze Darstellung der in den Programmen nicht verwendeten Befehle ...... 153
    9.1 Dezimal-Arithmetik ................................................. 156
    9.2 Programmunterbrechungen (Interrupts) ............................... 156

10. Adressierungsarten ..................................................... 159
    10.1 Nicht indizierte Adressierungsarten ............................... 161
         10.1.1 Implizite Adressierung ..................................... 161
         10.1.2 Unmittelbare Adressierung .................................. 161
         10.1.3 Absolute Adressierung ...................................... 162
         10.1.4 Zero Page Adressierung ..................................... 162
         10.1.5 Relative Adressierung ...................................... 163
    10.2 Indizierte Adressierungsarten ..................................... 163
         10.2.1 Absolut indizierte Adressierung ............................ 164
         10.2.2 Zero Page Adressierung ..................................... 164
         10.2.3 Indirekte Adressierung ..................................... 164
         10.2.4 Indiziert-indirekte Adressierung ........................... 165
         10.2.5 Indirekt-indizierte Adressierung ........................... 165
         10.2.6 Indirekt absolute Adressierung ............................. 166

Anhang ..................................................................... 167
     Alphabetische Kurzübersicht der 6510-Befehle .......................... 169
     Alphabetische Übersicht der 6510-Befehle und Adressierungsarten ....... 172
     6510-Befehlsliste in hexadezimaler Reihenfolge ........................ 201
     Klassifikation der 6510-Befehle ....................................... 205
     Hexadezimalcode-Eingabe/Disassembler .................................. 206
     BASIC-Ladeprogramm-Generator .......................................... 214
     Listing der 16-Bit-Routinen ........................................... 216
     BASIC-Ladeprogramm für die 16-Bit-Routinen ............................ 234

Literaturverzeichnis ....................................................... 239

Register ................................................................... 240

Leseprobe[Bearbeiten | Quelltext bearbeiten]

Seiten 61-62

5. Unterprogramme

Die bisherigen Programme besaßen alle wesentliche Einschränkungen, die ihre Anwendbarkeit auf einen jeweils nur ganz bestimmten Bereich ermöglichten. Um nun allgemeiner verwendbare Programme entwickeln zu können, werden wir im folgenden Programmiertechniken kennenlernen, die bei der Entwicklung von modular aufgebauten Programmen eine große Rolle spielen.

Wird in einem Programm eine bestimmte Folge von Befehlen mehrmals benötigt, so ist es offensichtlich nicht sinnvoll, diese identischen Befehlsfolgen immer wieder neu in das Programm einzufügen, da dies zu einem unnötigen Verbrauch von Speicherplatz im Arbeitsspeicher des Computers führt. Außerdem entsteht auf diese Weise unnötiger Schreibaufwand. Noch wichtiger aber ist die Tatsache, daß die Programme erheblich übersichtlicher werden, wenn eine solche sich wiederholende Anweisungsfolge nur einmal im Arbeitsspeicher steht und dann von jeder gewünschten Stelle des aufrufenden Programms aufgerufen werden kann: dieser sich wiederholende Programmteil wird allgemein als Unterprogramm (subroutine) bezeichnet.

Woran erkennt der Prozessor aber, wann ein Unterprogramm abgearbeitet werden soll und an welcher Stelle sich Anfang und Ende des Unterprogramms im Arbeitsspeicher befinden?

Die Ausführung eines Unterprogramms wird durch einen speziellen Befehl eingeleitet, der die Anfangsadresse des betreffenden Unterprogramms enthält: JSR dieser Befehl heißt in unserem Fall JSR (Jump to SubRoutine), also Sprung zum Unterprogramm. Wenn ein solcher Befehl im Programm ausgeführt wird, laufen in der Befehlsabarbeitung eine ganze Reihe von Aktionen ab:

Zuerst muß der Prozessor dafür sorgen, daß er weiß, an welcher Stelle im aufrufenden Programm die Programmabarbeitung nach der Ausführung des Unterprogramms fortgesetzt werden muß, d.h. diese Adresse muß zunächst einmal notiert werden. Dies geschieht ohne Zutun des Programmierers im Stack (Stapel-Speicher, vgl. Beschreibung des Prozessoraufbaus). Diese wichtige Datenstruktur wird gleich ausführlicher beschrieben.

Dann wird die Anfangsadresse des Unterprogramms, die ja im JSR-Befehl angegeben ist, in den Programmzähler geladen, womit eine Verzweigung zu der angegebenen Unterprogramm-Adresse bewirkt wird.

Im Unterprogramm selbst wird das Ende des Unterprogramms durch den Befehl RTS (ReTurn from Subroutine) markiert, RTS d.h. Rücksprung vom Unterprogramm. Dieser Befehl lädt den Programmzähler (PC) mit der Adresse im Stack, die durch den Aufruf dieses Unterprogramms gespeichert worden ist (s. JSR).

Auf diese Weise kann also ein Unterprogramm aus der Sicht des Programmierers wie ein einziger Befehl betrachtet werden, wodurch die Übersichtlichkeit des gesamten Programms deutlich erhöht wird.

Die folgende Abbildung soll die Vorteile der Unterprogramm-Technik noch einmal grafisch illustrieren:

maschinenspracheaufdemc64 bild.png

Meinung[Bearbeiten | Quelltext bearbeiten]

User: "Deine Meinung zu diesem Buch"

Weblinks[Bearbeiten | Quelltext bearbeiten]