Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Maschinensprache (registermaschine) (http://www.informatikerboard.de/board/thread.php?threadid=2199)


Geschrieben von wemo10 am 26.03.2015 um 13:42:

  Maschinensprache (registermaschine)

Meine Frage:
Hey ich hab bald eine Klausur und unterem ist eines der Teilgebiete Maschinensprache. ich verstehe allerdings nur Bahnhof und weiß beim besten willen nicht wie ich diese art von aufgaben angehen geschweige denn lösen soll.
Hilfe!

Meine Ideen:
Ich hab leider so gar keine und ich werde so langsam panisch....



Geschrieben von Gramo am 26.03.2015 um 15:11:

 

Bei diesem Maschinenmodell existieren insgesamt 4 Register: Program Counter (Befehlszähler) PC, Akkumulator ACC, sowie die beiden Indexregister IN1 und IN2. Der Befehlszähler PC zeigt auf die Speicheradresse des derzeitigen bzw. nächsten auszuführenden Befehls. Weiterhin können Speicherstellen S0..Sn angesprochen werden.

Du musst den Programmablauf Schritt für Schritt durchgehen.

code:
1:
LOAD 0
Lädt den Akkumulator ACC mit dem Inhalt der Speicherstelle 0

code:
1:
MOVE ACC, IN1
Dem Indexregister IN1 wird der Wert des Akkumulators ACC zugewiesen.

code:
1:
LOAD 0
Lädt ACC erneut.

code:
1:
SUBI 1
Subrahiert 1 von Inhalt des Akkumulators.



Versuch jetzt mal die restlichen Befehle zu deuten.



Geschrieben von eulerscheZahl am 26.03.2015 um 16:07:

 

Ui, ein neuer Mitstreiter smile
Ist zwar kaum zu erkennen wegen des Bleistifts, aber wemo hat glaube ich schon ungefähr verstanden, wie man vorgehen muss.

Ich habe mal einen Simulator zusammengetippt, das ist der Programmablauf:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
pc=1 (MOVE), acc=4, in1=0, in2=0, mem=(0=4)
pc=2 (LOAD), acc=4, in1=4, in2=0, mem=(0=4)
pc=3 (SUBI), acc=4, in1=4, in2=0, mem=(0=4)
pc=4 (STORE), acc=3, in1=4, in2=0, mem=(0=4)
pc=5 (MOVE), acc=3, in1=4, in2=0, mem=(0=3)
pc=6 (SUBI), acc=4, in1=4, in2=0, mem=(0=3)
pc=7 (JUMP), acc=2, in1=4, in2=0, mem=(0=3)
pc=1 (MOVE), acc=2, in1=4, in2=0, mem=(0=3)
pc=2 (LOAD), acc=2, in1=2, in2=0, mem=(0=3)
pc=3 (SUBI), acc=3, in1=2, in2=0, mem=(0=3)
pc=4 (STORE), acc=2, in1=2, in2=0, mem=(0=3)
pc=5 (MOVE), acc=2, in1=2, in2=0, mem=(0=2)
pc=6 (SUBI), acc=2, in1=2, in2=0, mem=(0=2)
pc=7 (JUMP), acc=0, in1=2, in2=0, mem=(0=2)
pc=8 (ENDE), acc=0, in1=2, in2=0, mem=(0=2)


Mit sowas lernt man nach meiner Erfahrung am besten umzugehen, wenn man sich einfach ein kleines Programm schreibt um damit etwas zu berechnen, z.B. die Summe aller Zahlen von 1 bis 10.

Im Anhang ist mein Simulator, falls du damit rumspielen willst.



Geschrieben von wemo10 am 27.03.2015 um 10:40:

 

okay also dann

speichert store 0 den wert von subi und
move weist dem IN1 wieder den Wert des Akkumulators zu (den gleichen wie vorher?)
subi 2 zieht diesem wert dann wieder zwei ab und
jump> -6 springt sechs stellen hoch also zu move acc, IN1

und dann?!



Geschrieben von eulerscheZahl am 27.03.2015 um 10:56:

 

Das Ganze wiederholt sich, bis im Akkumulator keine positive Zahl mehr steht.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH