Wert wird an eine Stelle im RAM eingetragen. A laden wir den Wert ein B laden wir die Ursprungsadresse +1 Jump to Write Address (PC) Wert aus A eintragen (OUTPUT) Jump back Ursprungsadresse + 1 (PC) unload a + b Um zu schreiben brauchen wir: - WE (Flag?) - Adresse - Lesen oder Schreiben (Flag?) Adresse scheint man über den PC zu steuern # Fehlersuche Programm: `04 02 0f 12` Verhalten: - 02 wird in `REG A` geladen - in `ADDR 3` wird `02` eingeladen - Verhalten entspricht den Vorstellungen (Code `4410`) # Test `5C10` - Programm: `04 02 0f 06` - 02 wird in `REG A` geladen - in `ADDR 3` wird `02` eingeladen - Springt anschließend zu `ADDR 06` Es sollte zu erst der Sprung stattfinden und anschließend geschrieben werden. Sowie zurückgesprungen werden zur ursprünglichen Adresse Idee: vorher den Jump erzwingen und anschließend schreiben Idee: Jump back flag, welches den Wert aus REG B in den PC nach der Operation lädt `5c50` `WE_PC = 1` geändert **Mit `WE_PC = 1` wird zu erst gesprungen und anschließend geschrieben, leider an die falsche Adresse.** load B jump addr write MEM, A jump back ROM ADDR 12 1. MOV B,PTR 2. JMP \ 3. MEMW 4. JMPB REG A: Wert, den wir am Ziel eintragen wollen REG B: Ursprüngliche Adresse 12 ff 0c Die letzte Adresse wird ebenfalls als CMD interpretiert, eine spätere Modifikation könnte daher von Interesse sein. 20 Ergebnis A 22 Speicher A z: Init: Set B = 1 and A = EXIB if equal --> a:, else b: b: Write Counter to VAR D (REG A, current Counter) REG B, SUM A = SUM Overload local Set REG B with new SUM Overload result in a: to new SUM Set REG A to VAR D SET B to 1 SUB Jump to z: a: set A to result print halt zwischenregister mit Instructions alle 2 Takte hinzugefügt, WMEM - springt - aber schreibt nicht mehr # Instructions - NOP (> PC + 1 > MBR) - MBR - (MBR (> PC)) - PC + 1 - PC + 1 (> MBR) -