Die primitive von-Neumann-Maschine Prima Die Prima besitzt einen Speicher, zwei Register, eine Überlaufmarke und einen Schalter: Befehlszähler PC: Dieses 8-Bit-Register enthält jeweils die Hauptspeicher- Adresse des nächsten zu lesenden Befehlsteils. Der PC wird von Befehl zu Befehl automatisch inkrementiert, so dass Befehle, die im Speicher in aufsteigender Adressfolge abgelegt sind, als Sequenz imperativ abgearbeitet werden. Nur mit den Sprungbefehlen kann der PC explizit gesetzt werden. Akkumulator AKKU: Dieses 9-Bit-Register dient bei allen Operationen als Hilfsspeicher. Es kann einen der Operanden liefern oder das Ergebnis aufnehmen oder beides zugleich (s. Befehlsliste). Speicher S: Der Speicher hat 256 Wörter zu je 8 Bit mit den Adressen 0..255. Überlaufmarke OV: Dieses 1-Bit-Register markiert, ob in einer arithmeti- schen Operation ein Überlauf vorkam. Schalter SW: Ein Schalter, der manuell ein- und ausgeschaltet werden kann. Mit dem Befehl BSW kann ein Programm die Stellung von SW erfragen. Bezeichnungen AKKU Inhalt des Akkumulators bzw. des Befehls- PC registers als Ganzzahl interpretiert S[A] Inhalt des Speichers unter der Adresse A als Ganzzahl interpretiert OV Überlaufmarke W[i] 0 < W < 256; 0 < i < 8 : i-tes Bit der Binärdarstellung von W (i = 7 ist die höchstwertigste Stelle) Beispiel: S[3][0] ist die niederwertigste Stelle der Binärdarstellung des unter der Adresse 3 gespeicherten Wortes. Befehle Alle Befehle bestehen aus zwei aufeinanderfolgenden Speicherwörtern. Das erste wird als Befehlscode (OPCODE), das zweite als Speicheradresse (ADR) interpretiert. Bei einigen Befehlen ist der Teil ADR ohne Bedeutung. OV kann vor der Ausführung einer Operation gelöscht werden durch Anfügung eines * an die mnemotechnische Bezeichnung des Befehls, z.B. ADD* 27. OPCODE ADR WIRKUNG mnemot. formal ADD A AKKU + S[A] --> AKKU SUB A AKKU - S[A] --> AKKU AD1 A AKKU + 1 --> AKKU SB1 A AKKU - 1 --> AKKU OR A AKKU[i] U S[A][i] ---> AKKU[i] (0 < i < 8) AND A AKKU[i] ï S[A][i] ---> AKKU[i] (0 < i < 8) XOR A AKKU[i] + S[A][i] ---> AKKU[i] (0 < i < 8) NOP A AKKU --> AKKU (ohne Wirkung) LD A S[A] --> AKKU LDI A S[A] + 1 --> AKKU LD0 A 0 --> AKKU LD1 A 1 --> AKKU ST A AKKU --> S[A] SLR A AKKU[i] --> AKKU[i-1] (0 AKKU[8] SLL A AKKU[i] --> AKKU[i+1] (0 AKKU[0] BU A A --> PC BZ A wenn AKKU = 0 , dann A --> PC BCY A wenn AKKU[8] = 1 , dann A --> PC BEV A wenn AKKU[0] = 0 , dann A --> PC BLS A wenn AKKU[7] = 1 , dann A --> PC BOV A wenn OV = 1 , dann A --> PC BSW A wenn SW = 1 , dann A --> PC