Skip to content

Assembler

Rechnerarchitektur

Verzweigungen

Verzweigungen können mit den Branch-Instruktionen BRA, BRZ und BRP realisiert werden.

  • BRA setzt den Programmzähler in jedem Fall auf die angegebene Adresse.
  • BRZ setzt den Programmzähler auf die angegebene Adresse, wenn der Akkumulator gleich Null ist.
  • BRP setzt 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.

asm
        INP
        BRZ false
        LDA j
        BRA output
false   LDA n
output  OTC
n       DAT 78
j       DAT 74

Der 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 output nö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:

asm
loop    LDA i
        OUT
        SUB one
        STA i
        BRZ finish
        BRA loop
finish  HLT
one     DAT 1
i       DAT 10

Aufgabe: 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:

  1. Speichere die beiden Faktoren als a und b.
  2. Speichere 0 als prod.
  3. Addiere a zu prod.
  4. Subtrahiere 1 von b.
  5. Wiederhole Schritte 3 bis 4, bis b gleich 0 ist.
  6. Gibt prod als 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.

Gymnasium Kirchenfeld, fts, lem & ros