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
© Copyright 2024 ExpyDoc