Assembler mit Aufgaben - info-bei

Befehle einer Beispiel-Registermaschine
nach dem Muster der 8086-Rechner
Arithmetische Befehle
als 6-Bit Maschinenbefehl
Der Wert aus Speicherzelle xx (2.Operator)
add xx wird zum Wert im Akku (1.Operator) addiert 110111
und das Ergebnis im Akku abgelegt
Der Wert aus Speicherzelle xx wird vom
sub xx Wert im Akku subtrahiert und das Ergebnis
im Akku abgelegt
Der Wert aus Speicherzelle xx wird zum
mul xx Wert im Akku multipliziert und das Ergebnis
im Akku abgelegt
Der Wert im Akku wird durch den Wert aus
div xx Speicherzelle xx dividiert und das Ergebnis
im Akku abgelegt
inc Akku-Inkrement
dec Akku-Dekrement
Der zweite Operator stammt nicht aus einer
addi x, subi y,
Speicherzelle, sondern wird als Zahl
muli z, divi a
ausgedrückt.
Transportbefehle
loadi x Die ganze Zahl x wird in den Akku geladen
load xx
Der Wert aus Speicherzelle xx wird in den
Akku geladen
store xx
Der Wert aus dem Akku wird in
Speicherzelle xx geschrieben
010101
111000
Sprungbefehle
unbedingter Sprung
jump xx
In den Programmzähler wird xx als
Speicheradresse des nächsten Befehls gesetzt
bedingter Sprung
jumpz xx
Springe zu Speicheradresse xx wenn das
Zero-Flag gesetzt ist
jumpn xx
Springe zu Speicheradresse xx wenn das negFlag gesetzt ist
jumpp xx
Springe zu Speicheradresse xx wenn kein
Flag gesetzt ist (positiv)
Endbefehl
end Beendet die Programmbearbeitung
111111
Assembler-Programmierung
Der Zustände einer Registermaschine
Befehlsregister
BZ
AC
Flag
Zelle 10
Zelle 11
Zelle 12
Zelle 13
Nicht intitalisiert
x
x
x
x
x
x
x
loadi 4
0
4
x
x
x
x
x
store 10
1
4
0
4
x
x
x
loadi 5
2
5
0
4
x
x
x
store 11
3
5
0
4
5
x
x
load 10
4
4
0
4
5
x
x
sub 11
5
1
n
4
5
x
x
store 12
6
1
n
4
5
-1
x
end
7
1
n
4
5
-1
x
Aufgaben
Löse das logische Problem und schreibe das entsprechende Assembler-Programm
1) Gegeben sind folgende Terme: x-y; x+y+z; x-y+z: Die Variablenwerte werden zu Beginn
geeigneten Speicherzellen zugewiesen. Anschließend werden die Terme berechnet, aber
nicht gespeichert.
2) Gegeben ist der Term v*x+y: z. Der Doppelpunkt bedeutet eine Zuweisung.
3) Welches Problem ist bei der Variante y+x*v : z zu lösen? Inwiefern hilf dabei die
Baumstruktur?
4) Es soll der Mittelwert zweier Zahlen gebildet werden – was geschieht, wenn das Ergebnis
keine ganze Zahl ist (Zellen speichern nur ganze Zahlen!).
5) Führe eine Modulo-Rechnung durch.
6) Zeige an den Registerzuständen, dass a=4; b=5; a=b; b=a keinen Wertetausch durchführt.
Schreibe das Assembler-Programm zur Lösung des Ringtausches.
7) Entwirf einen Ablauf, der die Werte in den Zellen 10 – 11 sortiert.
8) Überlege, welches allgemeine Problem zu lösen wäre, wenn man die Werte in den Zellen
10-12 (oder mehr) sortieren wollte.
9) Kläre durch Testen, was das Programm im folgenden Listing tut.
8 load 10
14 load 11
9 sub 11
15 store 10
10 jmpn 18
16 load 13
11 jmpz 18
17 store 11
12 load 10
18 end
13 store 13
10) Schreibe das Programm zu folgender Aufgabenstellung:
Zelle 11 > Zelle 12 → Zelle 13 : 0 sonst Zelle 13: 1
11) Wie müsste die dreifache Verzweigung umgesetzt werden?
12) Schreibe eine Wiederholung mit Anfangsbedingung / mit Endbedingung / mit Zähler