Peeko-Computer ============== Peeko-Computer -------------- Für den ACORN-British Broadcasting Corporation Microcomputer Modell B Autor: Tim Dobson (nach einem Originalprogramm von Paul Beverley) Inhalt ------ PEEKO Fünf Demonstrationsprogramme: COUNT COPY ADD FACTOR PRIMES Ladeanleitung ------------- Um das Programm zu laden und ablaufen zu lassen, legen Sie die Kassette in den Kassetten-Rekorder, tippen CHAIN "PEEKO" ein und drücken die RETURN-Taste; daraufhin erscheint die 'Searching'Anzeige am Bildschirm. Drücken Sie nun die PLAY-Taste Ihres KassettenRekorders und warten Sie, bis das Programm geladen ist. Die Titelseite benötigt weniger als eine Minute dazu, das Hauptprogramm weitere drei Minuten. Das Programm beginnt, sobald der Ladevorgang abgeschlossen ist. Entnehmen Sie bitte die genauen Anleitungen für den Peeko-Computer und die fünf Demonstrationsprogramme der beigelegten Bedienungsanleitung! 1. Einführung ------------- Dieses BASIC-Simulationsprogramm wurde geschaffen, um dem Anfänger eine Vorstellung zu vermitteln, wie ein Mikroprozessor im Sinne von Datenverarbeitung und -bewegung arbeitet. Insbesondere wird demonstriert, daß jedes gegebene Byte von Daten im Gehirn eines Prozessors sein könnte: 1. ein codierter Befehl 2. ein Teil der Adresse eines anderen Speicherteiles 3. Daten, die im Rahmen des Programmes angewandt werden. Der simulierte Prozessor verfügt über einen 80 Byte-Speicher, wobei jedes einzelne Byte eine Dezimalstelle enthalten kann. Der Inhalt des Speichers ist immer sichtbar, ebenso der Inhalt des Akkumulators und der 'carry flag'. Der Befehlsvorrat ist auf zehn begrenzt, wobei sich der Großteil auf die 6502 Befehle bezieht. Sollte es erforderlich sein, könnten die zehn Befehle, die zum Ablauf jedes beliebigen Programmes angewandt werden, gegen AlternativBefehle ausgetauscht werden. Das Ausbessern der in den Programmen enthaltenen Fehler wird stark erleichtert, da die Möglichkeit besteht, die Programme Schritt für Schritt ablaufen zu lassen, wobei vom Positionsanzeiger der als nächstes auszuführende Befehl angezeigt wird. [] Wenn Sie den Peeko-Computer und alle seine Möglichkeiten einmal verstanden haben, bedarf es nur noch eines kleinen Schrittes, um Maschinen-Code Programme im 6502 Code zu schreiben, die eine neue Reihe von schnellablaufenden Möglichkeiten für den ACORN-British Broadcasting Corporation Microcomputer eröffnen. 2. Der Peeko-Computer Monitor ----------------------------- Wenn Sie das Programm Peeko-Computer ablaufen lassen, wird der sogenannte ‘Monitor aktiviert. Die Monitor-Befehle sind einzelne Tastenanschläge: 0-9 Das Drücken einer Zifferntaste modifiziert den Inhalt der durch den Positionsanzeiger angezeigten Speicherstelle. Der Positionsanzeiger geht danach auf die nächste Speicherstelle über. Zum besseren Verständnis wird der Abkürzungscode des durchzuführenden Befehles angezeigt. G (GO) Veranlaßt den Peeko-Computer das in seinem Speicher befindliche Programm auszuführen, bei der Speicherstelle Null beginnend. Das Programm läuft solange weiter, bis es auf einen BRK-Befehl trifft oder vom Benützer E (ESCAPE) eingetippt wird. Wie jeder Befehl durchgeführt wird, wird dessen Kurzform gleichzeitig angezeigt. F (FAST) Ähnlich wie G, doch das Programm läuft schneller. E (ESCAPE) Im RUN-Modus stoppt E die Ausführung des Programmes und bewirkt die Rückkehr zum FERTIG-Modus. LEERTASTE Ermöglicht die stufenweise Ausführung des Programmes. Durch wiederholtes Drücken der Leertaste werden aufeinanderfolgende Befehle durchgeführt und deren Kurzform angezeigt. Der Positionsanzeiger kann mit Hilfe der Positionsanzeiger-Tasten des ACORN-British Broadcasting Corporation Microcomputers dirigiert werden. O (ORIGIN) Bringt den Positionsanzeiger zur Speicherstelle Null zurück. S (SPEICHERE) Ermöglicht das Speichern der Programme in den Speicher des ACORN-British Broadcasting Corporation Microcomputers und auf Kassette. Das S wird von einer einstelligen Zahl zwischen 0 und 9 gefolgt. O bedeutet Kassette und 1 - 9 kennzeichnet den Speicherbereich, auf den das Programm versetzt wird. Beim Speichern auf Kassette stellt der Peeko-Monitor die Frage nach dem Dateinamen und gibt weitere Anweisungen. L (LADE) Gefolgt von einer einstelligen Zahl, bewirkt das Laden des jeweiligen Programmes vom Speicher des ACORNBritish Broadcasting Corporation Microcomputers oder von der Kassette in den Peeko-Computer. B (BEFEHL) Ermöglicht die Änderung des Befehlsvorrats für den Peeko-Computer. Zusätzlich zu den zehn Standardbefehlen existieren zehn Alternativ-Befehle, die jederzeit beliebige Standardbefehle ersetzen können. In diesem Modus wird durch die Eingabe S der Standardbefehlsvorrat wieder aktiviert. D (DRUCKE) Überträgt das Programm im Peeko-Computer auf den Drucker. Es wird in doppelter Buchstabenbreite auf einem ACORN GP80 ausgedruckt. N (NÄCHSTER BEFEHL) Bewirkt den stufenweisen Programmablauf, Befehl für Befehl, wobei jeweils die entsprechende Kurzform angezeigt wird. 3. Einführung in die Arbeitsweise eines Mikroprozessors ------------------------------------------------------- 3.1. Wie arbeitet ein Mikroprozessor? ------------------------------------- 1. Ein Mikroprozessor arbeitet mit einer Reihe von Speicherstellen, von denen jede ein ‘Byte enthält. Im Peeko-Computer ist jedes Byte eine Dezimalstelle. 2. Jede Speicherstelle wird durch eine klar spezifizierte ‘Adresse' beschrieben, die auf dem Peeko-Computer aus zwei Dezimalstellen besteht. Wenn Sie den Peeko-Computer geladen haben, werden Sie feststellen, daß, von links nach rechts und Reihe für Reihe gelesen, die Adressen 00, 01, 02, ... 78, 79 sind. 3. Das Byte in jeder Speicherstelle kann darstellen: a. Einen Befehl – für den Peeko-Computer gibt es zehn verschiedene Befehle, von 0 - 9. b. Einen Teil einer Adresse - es sind zwei Bytes notwendig um eine Adresse zu spezifizieren. c. Daten, die vom Prozessor während des Programmablaufes angewandt und/oder modifiziert werden. 4. Der Prozessor selbst enthält Register, die ihn bei der Durchführung von Kalkulationen während der Operation eines Programmes unterstützen. Der Peeko-Computer verfügt nur über ein Register - den Akkumulator (ACC auf dem Bildschirm). Hier können Bytes deponiert und gespeichert werden, und später für beliebige, im Programm auftretende Kalkulationen verwendet werden. 5. Während jeder Phase einer Programmausführung behält der Mikroprozessor Informationen bezüglich des Ergebnisses der zuletzt durchgeführten Kalkulation zurück. Im einzelnen zeichnet er folgendes auf: - Ob das errechnete Resultat Null war. - Ob das Resultat größer war als der maximale Wert, den der Akkumulator zu behalten imstande ist. Der Mikroprozessor hält diese Informationen in speziellen Speicherplätzen, die im Englischen 'flags' genannt werden. Eine solche 'flag' besteht aus einer binären Einerstelle – einem ‘bit, welches entweder eine 1 oder 0 beinhalten kann. Wenn also die zuletzt durchgeführte Kalkulation Null ergab, wird das relevante Bit, die 'zero-flag’, eine 1 enthalten. Wenn hingegen das Resultat nicht Null war, wird es eine 0 enthalten. In genau der gleichen Art und Weise wird, wenn die letzte Kalkulation eine Zahl ergab, die zu groß für den Akkumulator war (bei Peeko-Computer jede Zahl, die den Wert 9 übersteigt), dasjenige Bit, das dieses Faktum aufzeichnet, die 'carry flag', eine 1 enthalten. 3.2 Befehle ----------- Jeder Befehl wird durch eine drei-Buchstaben-Abkürzung dargestellt; z. B. steht LDA für den Befehl 'Load accumulator (Lade Akkumulator). Den einzelnen Befehlen müssen verschiedene Informationen folgen: 1. Bei manchen sind zwei Bytes erforderlich, um die Adresse der Speicherstelle, auf die sich der Befehl bezieht, zu spezifizieren. Zum Beispiel wird der eben erwähnte Befehl 'Load accumulator' von jener Adresse gefolgt, deren Inhalt geladen werden soll. Ebenso verhält es sich mit dem Befehl 'store accumulator' (STA) (speichere Akkumulator), der von der Adresse, auf die das Byte im Akkumulator gespeichert werden soll, gefolgt wird: [] Es ist sehr wichtig, daß beim Peeko-Computer das niederwertige Byte zuerst spezifiziert wird (siehe oben), obwohl der Befehlssyntax die Bytes in der üblichen Reihenfolge anzeigt. Das ist bei vielen Mikroprozessoren, einschließlich dem 6502, der Fall. 2. Manche Befehle werden von einem Byte gefolgt, der die im Befehl verwendeten Daten darstellt. Z.B. wird der Befehl 'Load accumulator immediate' (LDA #) von den zu ladenden Daten gefolgt: [] 3. Manche Befehle benötigen keinerlei Daten, wie zum Beispiel der Befehl 'clear carry' (CLC). Beim Addieren von zwei Zahlen wird es anfangs nie einen ‘carry' geben, da keine Addition zu einem früheren Zeitpunkt durchgeführt wurde. Folglich wird der Befehl “clear carry' jeder Addition vorausgeschickt und somit die 'carry flag auf Null gesetzt. (Siehe den Befehl “add with carry' (ADC), der bei zwei- und mehrstelligen Zahlen angewandt wird.) [] 3.3 Der Befehlsvorrat --------------------- Der Peeko-Computer Standardbefehlsvorrat lautet: Code Kurzform Erläuterung 0 BRK Programmstop (Maschinen-Code Programm) (Break from program to monitor) 1 LDA xx Lade Akkumulator mit dem Inhalt der Speicherstelle xx (Load accumulator from location xx) 2 STA xx Speichere Akkumulator auf die Speicherstelle xx (Store accumulator to location xx) 3 CLC Setze 'carry' auf Null (Clear carry to zero) 4 ADC xx Addiere den Inhalt der Speicherstelle xx zum Akkumulator mit carry' (Add the contents of location xx to the accumulator with carry) 5 DEC xx Vermindere den Inhalt der Speicherstelle xx um eins (Decrement the contents of location xx) 6 INC xx Erhöhe den Inhalt der Speicherstelle xx um eins (Increment the contents of location xx) 7 LDA # x Lade Akkumulator mit dem Wert x (Load accumulator immediately with x) 8 JMP xx Springe auf xx (Jump to xx) 9 JNE xx Springe auf xx falls voriges Resultat nicht gleich Null ist: die 'zero flag' ist auf Null gesetzt (Jump to xx if previous result not equal to zero: zero flag clear) 3.4 Programme ------------- Ein Programm besteht aus einer Serie von Befehlen, die der Prozessor ausführt, Befehl für Befehl, bei der niederwertigen Adresse beginnend, bis er auf einen BRK-Befehl stößt. Die ‘Jump’-Befehle wurden geschaffen, um den Prozessor zu veranlassen, seinen normalen Ablauf der Ausführung zu unterbrechen, und sich seinen nächsten Befehl von einer anderen spezifizierten Adresse zu holen. 4. Programmieren des Peeko-Computers ------------------------------------ Das folgende Kapitel erläutert die Anwendung der Befehle für den PeekoComputer. Ein Großteil der Befehle wird durch ein Demonstrationsprogramm eingeführt. Jedes Programm wird als Serie von Befehlen in deren Kurzform aufgelistet. In den meisten Fällen zeigt eine Bildschirmkopie das aufgelistete Programm im obersten Bildschirmbereich, und die Daten, oder den Benützer‘INPUT', im unteren Bereich. Beispiel 1: Addition zweier einstelliger Zahlen ----------------------------------------------- [] Speicherstelle Kurzbefehl Code 00 CLC 3 01 LDA 70 1 0 7 04 ADC 71 4 1 7 07 STA 72 2 2 7 07 BRK 0 Tippen Sie zuerst das Programm ein, mit dem ‘Clear carry' Code (CLC) an der Speicherstelle 00 beginnend. Beachten Sie den Aufbau der einzelnen Befehle in der Mitte des oberen Bildschirmbereiches des Peeko-Computers. Geben Sie als nächstes die zwei zu addierenden Zahlen an den Speicherstellen 70 und 71 ein. Dirigieren Sie den Positionsanzeiger mit Hilfe der Positionsanzeigertasten an diese Stellen. Drücken Sie für den Programmablauf die Leertaste, um in den Ein-StufenModus zu gelangen. Das zweite Drücken der Leertaste bewirkt die Ausführung des ersten Befehls, CLC, der die 'carry flag auf Null setzt. Der nächste Befehl, LDA 70, lädt den Inhalt der Speicherstelle 70 in den Akkumulator. Der Befehl ADC addiert den Inhalt von 71 zum Akkumulator mit der Null, die in der ‘carry flag' ist, und versetzt das Ergebnis in den Akkumulator. Sodann wird STA das Resultat auf die Speicherstelle 72 speichern. BRK bewirkt schließlich den Programmstop. Falls die ausgewählten Zahlen aufaddiert 10 oder mehr ergeben, wird man merken, daß 72 nur die Einerstelle der Summe enthält, und daß die 'carry flag' auf 1 gesetzt wird. Beim nächsten Beispiel werden mit Hilfe der 'carry flag' zwei zweistellige Zahlen addiert. Durch Eintippen von G oder F kann das Programm ohne Ein-Stufen Ablauf betrieben werden. Beispiel 2: Addition zweier zweistelliger Zahlen ------------------------------------------------ Hier werden die Zahlen in 70,71 und 72,73 addiert und die Summe auf 74,75,76 übertragen. Speicheradresse Kurzbefehl Code 00 CLC 3 01 LDA 71 1 1 7 04 ADC 73 4 3 7 07 STA 76 2 6 7 10 LDA 70 1 0 7 13 ADC 72 4 2 7 16 STA 75 2 5 7 19 LDA #0 7 0 21 ADC 20 4 0 2 24 STA 74 2 4 7 27 DRK 0 [] In diesem Programm wird ein neuer Befehl angewandt: LDA #, durch den der Akkumulator umgehend mit dem nächsten Byte im Programm geladen wird. Die Befehle auf den Speicheradressen 19,21 und 24 haben die Aufgabe, die Hunderterstelle der Summe auf 0 oder 1 zu setzen, abhängig vom Stand der ‘carry flag' nach der Addition der Zehnerstellen. Der Befehl ‘Load accumulator immediate' (LDA #) auf Speicherstelle 19 lädt einen Wert von 0, der, addiert mit der durch den bereits ausgeführten Befehl'Add with carry' (ADC) auf eins gesetzten 'carry flag’, das richtige Ergebnis liefert. Aufgabe 1 --------- Erstellen Sie unter Anwendung von LDA, STA, ADC und CLC ein Programm, das die auf den Speicheradressen 70,71 und 72 befindlichen Zahlen addiert und die zweistellige Summe auf 73 und 74 speichert. Beispiel 3: Subtraktionsprogramm -------------------------------- Durch das folgende Programm wird von der Speicherstelle 70, jedesmal wenn es eine kontinuierliche Schleife durchläuft, 1 abgezogen. (Beachten Sie: 0-1 = 9): Speicherstelle Kurzbefehl Code 00 DEC 70 5 0 7 03 JMP 00 8 0 0 Dieses Programm stellt zwei neue Befehle vor. DEC subtrahiert 1 von der spezifizierten Speicherstelle, in unserem Fall 70, und JMP veranlaßt das Programm, auf die durch die nächsten zwei Bytes spezifizierte Speicherstelle zu springen (wie GOTO in der BASIC-Sprache). Da dieses Programm eine kontinuierliche Schleife darstellt, muss E eingetippt werden, um aus dem RUN-Modus auszusteigen. Das Eintippen von F oder G, anstatt des Drückens der Leertaste, bewirkt, daß das Programm weiterläuft, ohne nach jedem Befehl zu stoppen. Beispiel 4: Subtraktion (bei 99 beginnend) ------------------------------------------ Dieses Programm steht als Datei COUNT auf der Kassette zur Verfügung. Es subtrahiert die zwei Zahlen auf 70 und 71 bis zehn. [] Speicherstelle Kurzbefehl Code 00 DEC 71 5 1 7 03 JNE 00 9 0 0 06 DEC 70 5 0 7 09 JNE 00 9 0 0 12 BRK 0 70 9 71 9 Beim schrittweisen Ablaufenlassen dieses Programmes wird Ihnen auffallen, daß die 'zero flag' von 0 auf 1 wechselt, wenn die Speicherstelle 71 Null wird. Die 'zero flag' wird immer dann auf eins gesetzt, wenn eine arithmetische Anweisung ein Null-Resultat ergibt, andernfalls wird sie auf Null gesetzt. Die JNE-Anweisung ist ähnlich dem JMP mit der Ausnahme, daß der Sprung nur dann ausgeführt wird, wenn das vorangehende Resultat ungleich 0 war. Dieser Befehl veranlaßt das Programm auf 0 herunterzuzählen. Die INC-Anweisung hat eine ähnliche Wirkung wie DEC mit der Ausnahme, daß es 1 zur nächsten Adresse hinzuzählt. Ebenso wird sie die 'zero flag' auf eins setzen, wenn das Resultat 0 ist. Wenn man im vorangehenden Programm DEC (Befehl 5) durch INC (Befehl 6) ersetzt und 70 und 71 auf Null setzt, wird das Programm bis (1)00 zählen. Aufgabe 2 --------- Schreiben Sie ein Programm, das von 99 auf 0 herunterzählt und wieder hinauf bis (1)00 in einer fortlaufenden Schleife. Alternativ-Befehle ------------------ Der Standard-Befehlsvorrat besteht aus den bisher diskutierten Befehlen. Es existieren jedoch weitere zehn alternative Anweisungen, welche jeden einzelnen der Standardbefehle ersetzen können. Wenn Sie den Befehl 'B' eintippen, erscheint ein Menu, das Ihnen die Auswahl der Nummer jenes Befehles, den Sie ersetzen wollen, sowie die Nummer des dafür einzusetzenden alternativen Befehles ermöglicht. Diese Möglichkeit, den Standard-Befehlsvorrat zu ändern, macht den PeekoComputer sehr anpassungsfähig und schafft die Voraussetzung zur Programmerstellung für viele Aufgaben trotz seiner begrenzten Programmgröße. Der Großteil dieses Alternativ-Befehlsvorrats kann sehr einfach erklärt werden, da er in der Funktionsweise dem Standard-Befehlsvorrat sehr ähnlich ist. Alternativer Befehlsvorrat: Kurzform Beschreibung SEC Setze 'carry flag auf eins (Set carry to 1) SBC xx Subtrahiere den Inhalt von xx vom Akkumulator mit 'carry' (Subtract contents of xx from the accumulator with carry) CMP # x Vergleiche den Akkumulator mit dem Wert x. Falls sie gleich sind, setze die 'zero flag' auf eins, setze andernfalls die 'zero flag' auf Null (Compare the accumulator immediately with x. If they are equal set zero flag, otherwise clear zero flag) JCC xx Springe auf xx falls 'carry flag' auf Null gesetzt (Jump to xx if carry is clear) JCS xx Springe auf xx falls 'carry flag' auf eins gesetzt (Jump to xx if carry is set) JEQ xx Springe auf xx falls 'zero flag' gesetzt (Jump to xx if zero flag is set) DEC A Subtrahiere 1 vom Akkumulator (Subtract one from the accumulator) INC A Addiere 1 zum Akkumulator (Add one to the accumulator) LDA (xx) Lädt den Akkumulator mit dem Inhalt der durch xx und xx+1 identifizierten Speicherstelle STA (xx) Arbeitet in ähnlicher Weise wie LDA (xx), es wird dabei der Inhalt des Akkumulators auf die durch xx und xx+1 identifizierte Speicherstelle gespeichert Die zwei letzten zusätzlichen Befehle stellen ein indirektes Laden und Speichern dar. Sie sind komplizierter als die anderen Befehle und werden im Beispiel 6 noch ausführlicher behandelt. In den nächsten fünf Programmen wurden einige dieser alternativen Befehle eingebaut. Bevor sie eingegeben werden, sollten die Standard-Befehle gegen die erforderlichen Befehle, die bei jedem Beispiel angeführt sind, ausgetauscht werden. Beispiel 5: Subtraktion zweier zweistelliger Zahlen --------------------------------------------------- Im Befehlsvorrat auszutauschen: 3 SEC 4 SBC [] Speicherstelle Kurzbefehl Code 00 SEC 3 01 LDA 71 1 1 7 04 SBC 73 4 3 7 07 STA 75 2 5 7 10 LDA 70 1 0 7 13 SBC 72 4 2 7 16 STA 74 2 4 7 19 BRK 0 Hier wird (70,71) – (72,73) berechnet und das Ergebnis auf 74,75 gesetzt. Die ‘carry flag' wurde auf eins gesetzt. Falls sie weiterhin auf eins gesetzt bleibt, deutet dies auf ein positives Resultat hin. Falls aber die 'carry flag' am Ende der Berechnung 0 enthält, war 72,73 grösser als 70,71, und folglich kommt es zu einem negativen Ergebnis. Aufgabe 3 --------- Erstellen Sie ein Programm, das zwei einstellige Zahlen durch ununterbrochene Addition multipliziert. Beispiel 6: Indirektes Adressieren ---------------------------------- Im Befehlsvorrat auszutauschen: 1 LDA ( 2 STA ( Bei diesem Programm wird indirektes Adressieren angewandt. Angenommen die Speicherstellen 70 und 71 waren: [] und Speicherstelle 50 war: [] so würde LDA (70) den Akkumulator von der Speicherstelle 50 (da 70,71 50 enthält) laden und daher mit 8 geladen werden. Speicherstelle Kurzbefehl Code 00 LDA ( 70 ) 1 0 7 03 STA ( 72 ) 2 2 7 06 BRK 0 70 0 71 6 72 0 73 5 Wenn Sie dieses kurze Programm ablaufen lassen, werden Sie sehen, wie indirektes Adressieren angewandt werden kann, um den Inhalt einer Adresse auf eine andere zu übertragen, bei unserem Beispiel von 60 auf 50. Beispiel 7: Kopieren eines zehnstelligen Datenblocks ---------------------------------------------------- Das Programm zu diesem Beispiel steht als Datei COPY auf der Kassette zur Verfügung und kann durch den Befehl 'LO' in den Peeko-Computer geladen werden. Im Befehlsvorrat auszutauschen: 1 LDA ( 2 STA ( [] Speicherstelle Kurzbefehl Code 00 LDA ( 70 ) 1 0 7 03 STA ( 72 ) 2 2 7 06 INC 70 6 0 7 09 INC 72 6 2 7 12 JNE 00 9 0 0 15 BRK 0 70 0 71 5 72 0 73 6 Dieses Beispiel zeigt, wie einfach durch indirektes Adressieren der Zugang zu einem Block von Daten wird. Das Programm kopiert eine Datenzeile, bei der durch 70,71 identifizierten Speicherstelle beginnend, auf die durch 72,73 identifizierte Speicherstelle. Die Speicherstellen 50 bis 59 sollten jene Daten enthalten, die auf 60 bis 69 zu kopieren sind. Beispiel 8: Addition zweier Datenzeilen --------------------------------------- Dieses Programm steht als Datei ADD auf der Kassette zur Verfügung. Im Befehlsvorrat auszutauschen: 1 LDA ( 2 STA ( 7 STA Das Programm wird zwei im Speicher befindliche Datenzeilen addieren und die Summe speichern. [] Speicherstelle Kurzbefehl Code 00 CLC 3 01 LDA ( 78 ) 1 8 7 04 STA 73 7 3 7 07 LDA ( 76 ) 1 6 7 10 ADC 73 4 3 7 13 STA ( 74 ) 2 4 7 16 DEC 78 5 8 7 19 DEC 76 5 6 7 22 DEC 74 5 4 7 25 JNE 01 9 1 0 28 BRK 0 74 9 75 6 76 9 77 5 78 9 79 4 Auch bei diesem Programm kommt indirektes Adressieren in erhöhtem Ausmaß zur Anwendung. Beispiel 9: Finden eines Divisionsfaktors ----------------------------------------- Dieses Programm steht als Datei FACTOR auf der Kassette zur Verfügung. Im Befehlsvorrat auszutauschen: 3 SEC 4 SBC 8 JCC Dieses Programm findet den größten Divisionsfaktor (kleiner als 10) einer auf 78,79 befindlichen zweistelligen Zahl. [] Speicherstelle Kurzbefehl Code 00 LDA 78 1 8 7 03 STA 28 2 8 2 06 LDA 79 1 9 7 09 STA 20 2 0 2 12 DEC 77 5 7 7 15 SEC 3 16 JCC 00 8 0 0 19 LDA #0 7 0 21 SBC 77 4 7 7 24 STA 20 2 0 2 27 LDA #0 7 0 29 SBC 76 4 6 7 32 STA 28 2 8 2 35 JNE 16 9 6 1 38 LDA 20 1 0 2 41 JNE 16 9 6 1 44 BRK 0 76 0 77 0 Die zu dividierende Zahl sollte auf 78,79 eingetragen werden. Aufgabe 4 --------- Programmieren Sie den Peeko-Computer so, daß eine zweistellige Zahl durch eine einstellige dividiert werden kann. Dazu werden sicherlich die Befehle SBC und SEC, wie vielleicht einige andere Befehle, erforderlich sein. Orientieren Sie sich am Programm FACTOR (Beispiel 9). Beispiel 10 - Erzeugen von Primzahlen ------------------------------------- Dieses Programm steht als Datei PRIMES auf der Kassette zur Verfügung. Im Befehlsvorrat auszutauschen: 3 SEC 4 SBC 5 JCS 8 JEQ [] Speicherstelle Kurzbefehl CODE 00 LDA #0 7 0 02 STA 74 2 4 7 05 INC 79 6 9 7 08 JNE 14 9 4 1 11 INC 78 6 8 7 14 LDA #2 7 2 16 STA 75 2 5 7 19 LDA 79 1 9 7 22 STA 77 2 7 7 25 LDA 78 1 8 7 28 STA 76 2 6 7 31 SEC 3 32 LDA 77 1 7 7 35 SBC 75 4 5 7 38 STA 77 2 7 7 41 LDA 76 1 6 7 44 SBC 74 4 4 7 47 STA 76 2 6 7 50 JNE 59 9 9 5 53 LDA 77 1 7 7 56 JEQ 05 8 5 0 59 JCS 32 5 2 3 62 INC 75 6 5 7 65 JNE 19 9 9 1 68 BRK 0 78 0 79 9 5. Lösung der Aufgaben ---------------------- Aufgabe 1 Speicherstelle Kurzbefehl Code 00 CLC 3 01 LDA 70 1 0 7 04 ADC 71 4 1 7 07 STA 74 2 4 7 10 LDA #0 7 0 12 ADC 11 4 1 1 15 STA 73 2 3 7 18 LDA 74 1 4 7 21 ADC 72 4 2 7 24 STA 74 2 4 7 27 LDA 73 1 3 7 30 ADC 11 4 1 1 33 STA 73 2 3 7 36 BRK 0 Aufgabe 2 Speicherstelle Kurzbefehl Code 00 DEC 71 5 1 7 03 JNE 00 9 0 0 06 DEC 70 5 0 7 09 JNE 00 9 0 0 12 INC 71 6 1 7 15 JNE 12 9 2 1 18 INC 70 6 0 7 21 JNE 12 9 2 1 24 JMP 00 8 0 0 Dieses Programm zählt die Speicherstellen 70 und 71 von unten nach oben und von oben nach unten durch. Sie werden sicherlich feststellen, daß es beim Herunterzählen nicht bei 00 stoppt, sondern beim Abzählen von 10 (d.h. 12 11 10 00 01 02 ...). Sie werden diesen Fehler später beheben können, wenn Sie über die 'carry flag' und die damit zusammenhängenden 'bedingten Sprünge' Bescheid wissen. Aufgabe 3 Speicherstelle Kurzbefehl Code 00 LDA 71 1 1 7 03 STA 74 2 4 7 06 CLC 3 07 LDA 70 1 0 7 10 ADC 73 4 3 7 13 STA 73 2 3 7 16 LDA #0 7 0 18 ADC 72 4 2 7 21 STA 72 2 2 7 24 DEC 74 5 4 7 27 JNE 06 9 6 0 30 BRK 0 Hier wird der Inhalt von 70 und 71 multipliziert und das Ergebnis auf 72 und 73 übertragen. Aufgabe 4 Im Befehlsvorrat auszutauschen: 3 SEC 4 SBC 9 JCS Speicherstelle Kurzbefehl Code 00 LDA 74 1 4 7 03 STA 78 2 8 7 06 LDA 75 1 5 7 09 STA 79 2 9 7 12 INC 77 6 7 7 15 LDA 79 1 9 7 18 SEC 3 19 SEC 76 4 6 7 22 STA 79 2 9 7 25 LDA 78 1 8 7 28 SBC 70 4 0 7 31 STA 78 2 8 7 34 JCS 12 9 2 1 37 DEC 77 5 7 7 Hier wird der Inhalt von 74 und 75 durch den Inhalt von 76 dividiert, und das Ergebnis auf 77 übertragen. 78 und 79 werden in der Berechnung angewandt. Peeko-Monitor Befehle --------------------- 0-9 Eingabe des Bytes in den Speicher Leertaste Stufenweise Durchführung des Programmes E Unterbrechung des Programmablaufes F Beschleunigte Programmausführung G Go - Programmausführung B Befehlsvorrat Laden des Programmes vom Speicher N Nächster Befehl O Ausgangspunkt - Positionsanzeiger auf 00 zurück D Ausdrucken des Bildschirmtextes S Speichern des Programmes in den Speicher Befehlsvorrat ------------- 00 BRK Programmstop 01 LDA xx Lade Akkumulator 02 STA xx Speichere Akkumulator 03 CLC Setze ‘carry flag auf Null 04 ADC xx Addiere mit 'carry' 05 DEC xx Vermindere Speicherstelle um eins 06 INC xx Erhöhe Speicherstelle um eins 07 LDA # x Lade Akkumulator mit dem Wert x 08 JMP xx Springe 09 JNE xx Springe falls nicht gleichwertig 10 SEC Setze 'carry flag 11 SBC xx Subtrahiere mit 'carry' 12 CMP # x Vergleiche mit dem Wert x 13 JCC xx Springe falls 'carry flag' auf Null gesetzt 14 JCS xx Springe falls 'carry flag' auf eins gesetzt 15 JEQ xx Springe falls gleichwertig 16 DEC A Vermindere Akkumulator um eins 17 INC A Erhöhe Akkumulator um eins 18 LDA (xx) Lade Akkumulator indirekt 19 STA (xx) Speichere Akkumulator indirekt Acornsoft Limited, 4a Market Hill, Cambridge CB2 3NJ, England Telephone (0223) 316039 GBE02/B