Knappen skifter navn og viser præcis, hvilken fase maskinen er i (f.eks. 1. FETCH, 2. DECODE
osv.). Hver cyklus består af:
1. FETCH: Værdien i Program Counter (PC) kopieres over i MAR (Memory
Address Register), som fungerer som et husnummer. RAM-pladsen aflæses, og selve instruktionen suges ind i
IR (Instruction Register). (Bemærk: IR og MAR bytter ikke plads – MAR holder adressen,
mens IR holder ordren).
2. DECODE: Kontrolenheden afkoder, hvad ordren betyder (f.eks. LDA, ADD, HLT).
3. INC PC: Tæller Program Counter op (enten +1 eller +2, alt efter om instruktionen bruger
en adresse).
4. EXECUTE: Udfører selve handlingen (henter data, lader ALU'en regne, eller gemmer i RAM).
2. Sådan ændrer du RAM'en (Programmering):
Brug Address-kontakterne (A3-A0) til at vælge den RAM-plads (0 til 15), du vil ændre.
Kontakten op er 1, ned er 0.
Brug Data-kontakterne (D3-D0) til at vælge det binære tal eller OpCode-tallet, der skal
gemmes.
Tryk på WRITE-knappen for at skrive det ind i RAM.
Tryk altid på RESET CPU, når du har ændret i programmet, før du starter det med den gule
knap!
Om Simulatoren & Altair 8800 (1975)
Denne simulator er bygget op omkring den klassiske Von Neumann-arkitektur, hvor kode og data
deles side om side i den samme RAM-hukommelse, præcis som i rigtige computere.
Hvordan forholder vores 4-bit simulator sig til en rigtig computer som Altair 8800?
Fælles arkitektur: Vores simulator fungerer på samme grundlæggende måde som Altair 8800
(fra 1975, som gav startskuddet til Microsoft). Begge følger den samme faste hjerterytme:
Fetch-Decode-Execute-cyklussen.
Logisk flow: Princippet med at hente værdier ind i arbejdsregistre, lade ALU'en foretage
beregninger, og bruge betingede hop til at styre programmer, er identisk med måden, man programmerede datidens
Intel 8080-processorer på.
Forskellen er skalaen (4-bit vs. 8-bit):
Vores simulator er en 4-bit maskine (tal fra 0-15) med 16 RAM-pladser. Derfor kan en
hukommelsesadresse være der på én enkelt linje.
Altair 8800 var en 8-bit maskine med tusindvis af RAM-pladser, hvilket betød, at dens
større adresser krævede flere linjer i hukommelsen (Little Endian). Måden processoren læste og eksekverede
dem på var dog fuldstændig den samme!
PROGRAMMERING
Show Data
D3
D2
D1
D0
Data
D3
D2
D1
D0
Address
A3
A2
A1
A0
CPU (ALU & REG)
PROGRAM COUNTER
0000
ADDR BUS (MAR)
0000
REGISTER A
0000
REGISTER B
0000
↓
↓
↓
ALU
REGISTER C (ALU OUT)
0000
INSTRUCTION (IR)
0000
SYSTEM IDLE
RAM (16 x 4-bit)
INSTRUKTIONSMANUAL
OpCode
Kode
Plads
Beskrivelse
0001 (1)
LDA
2
Kopier data fra næste adresse [addr] over i Reg A.
0010 (2)
LDB
2
Kopier data fra næste adresse [addr] over i Reg B.
0011 (3)
ADD
1
Læg Reg A og Reg B sammen. Gem i Reg C.
0100 (4)
STA
2
Kopier indholdet af Reg C til næste adresse [addr] i RAM.
0101 (5)
JMP
2
Hop! Sæt Program Counter direkte til næste adresse [addr].
0110 (6)
JZ
2
Jump if Zero: Hop til [addr], KUN hvis Reg A er 0000.
0111 (7)
SUB
1
Minus! Træk Reg B fra Reg A. Gem i Reg C.
1000 (8)
JNZ
2
Jump if Not Zero: Hop til [addr], KUN hvis Reg A IKKE er 0000.