Verzweigungen
Verzweigungen können mit den Branch-Instruktionen BRA, BRZ und BRP realisiert werden.
BRAsetzt den Programmzähler in jedem Fall auf die angegebene Adresse.BRZsetzt den Programmzähler auf die angegebene Adresse, wenn der Akkumulator gleich Null ist.BRPsetzt den Programmzähler auf die angegebene Adresse, wenn der Akkumulator nicht negativ ist.
Das folgende Programm gibt N aus, falls der Benutzer 0 eingibt. Ansonsten gibt es J aus.
INP
BRZ false
LDA j
BRA output
false LDA n
output OTC
n DAT 78
j DAT 74Der Befehl OTC interpretiert die Zahl im Akkumulator als ASCII-Code und gibt das entsprechende Zeichen aus.
Aufgabe: Verzweigung 1
- Führe das oben stehende Beispiel aus.
- Wieso ist die Instruktion
BRA outputnötig? - Zeichne ein Flussdiagramm des Programms.
Aufgabe: Verzweigung 2
Schreibe ein Programm, welches zwei Zahlen einliest und die grössere davon ausgibt.
Schleifen
Schleifen können ebenfalls mit den Branch-Instruktionen realisiert werden. Zusätzlich wird eine Variable benötigt, welche bei jedem Schleifendurchlauf heruntergezählt wird.
Das folgende Programm gibt die Zahlen von 10 bis 1 aus:
loop LDA i
OUT
SUB one
STA i
BRZ finish
BRA loop
finish HLT
one DAT 1
i DAT 10Aufgabe: Schleife 1
- Führe das oben stehende Beispiel aus.
- Zeichne ein Flussdiagramm des Programms.
Aufgabe: Schleife 2
Schreibe ein Assemblerprogramm, welches die Zahlen von 1 bis 100 in aufsteigender Reihenfolge ausgibt.
Multiplikation
Prozessoren unterstützen nicht alle (mathematischen) Operationen hardwaremässig. Frühe Prozessoren und auch der LMC können nicht multiplizieren. Deshalb muss die Multiplikation programmiert werden. Ein einfacher Multiplikationsalgorithmus lautet:
- Speichere die beiden Faktoren als
aundb. - Speichere 0 als
prod. - Addiere
azuprod. - Subtrahiere 1 von
b. - Wiederhole Schritte 3 bis 4, bis
bgleich 0 ist. - Gibt
prodals Resultat aus.
Aufgabe: Multiplikation
Schreibe ein Assemblerprogramm, welches diesen Multiplikationsalgorithmus umsetzt. Es soll zwei Zahlen einlesen und deren Produkt ausgeben.
Weitere Programmierideen
Aufgabe: Division
Schreibe ein Assemblerprogramm, welches zwei Zahlen dividiert.
Aufgabe: Fibonaccizahlen
Schreibe ein Assemblerprogramm, welches die Fibonacci-Folge ausgibt.
Aufgabe: ggT
Schreibe ein Assemblerprogramm, welches den grössten gemeinsamen Teiler zweier eingegebener Zahlen ausgibt.
Aufgabe: Primzahlen
Schreibe ein Assemblerprogramm, welches die Primzahlen ausgibt.
Aufgabe: Codierung
Schreibe ein Assemblerprogramm, welches die eingegebene Zahl als Binärzahl bzw. als Hexadezimalzahl ausgibt. Dabei muss jede Ziffer einzeln ausgegeben werden.