Fehlersuche – der Akku lügt

LeitfrageWie findet man einen Fehler in einem Maschinenprogramm?
langsam schnell
0 Takte · 0 Befehle

Speicher RAM

1000 Zellen · 000–999
pc ab 000 09.101 NULL 101
001 01.101 TAKE 101
002 06.100 TST 100
003 05.005 JMP 005
004 10.000 HLT 000
005 02.100 ADD 100
006 04.101 SAVE 101
007 08.100 DEC 100
008 05.001 JMP 001
009 00.000
010 00.000
011 00.000
012 00.000
013 00.000
014 00.000
015 00.000
016 00.000
017 00.000
018 00.000
019 00.000
020 00.000
Zelle anklicken, Wert eingeben, mit Enter schreiben.
Adressbus ab
000

Welche Zelle?

Datenbus db
00000

Welcher Wert?

Rechenwerk ALU

Akkumulator acc
00000
=0?

Steuerwerk CU

als Nächstes: pc→ab
Befehlsregister ins
Opcode00 . Adresse000
kein Befehl
Programmzähler pc
000
Mikroprogrammzähler mc
000 FETCH · Schritt 0
Protokoll – was ist gerade passiert? (0)
  1. Noch nichts passiert.
Befehlsübersicht – alle Makrobefehle mit ihren Mikrobefehlen
OpcodeBefehlBedeutungMikroprogramm
01TAKE xxxKopiert den Inhalt der Zelle in den Akkumulator. ins→abram→dbdb→accpc++mc:=0
02ADD xxxAddiert den Inhalt der Zelle zum Akkumulator. ins→abram→dbpluspc++mc:=0
03SUB xxxSubtrahiert den Inhalt der Zelle vom Akkumulator (Ergebnis mindestens 0). ins→abram→dbminuspc++mc:=0
04SAVE xxxSpeichert den Akkumulator in der Zelle. ins→abacc→dbdb→rampc++mc:=0
05JMP xxxSpringt zur angegebenen Adresse: Der nächste Befehl wird von dort geholt. ins→pcmc:=0
06TST xxxIst die Zelle 0, wird der nächste Befehl übersprungen.
⚠ Überschreibt den Akkumulator mit dem Zellinhalt!
ins→abram→dbdb→acc=0:pc++pc++mc:=0
07INC xxxErhöht den Inhalt der Zelle um 1.
⚠ Überschreibt den Akkumulator!
ins→abram→dbdb→accacc++acc→dbdb→rampc++mc:=0
08DEC xxxVerringert den Inhalt der Zelle um 1 (mindestens 0).
⚠ Überschreibt den Akkumulator!
ins→abram→dbdb→accacc--acc→dbdb→rampc++mc:=0
09NULL xxxSetzt die Zelle auf 0.
⚠ Setzt auch den Akkumulator auf 0!
ins→abacc:=0acc→dbdb→rampc++mc:=0
10HLT xxxHält das Programm an. stoppmc:=0