Ten slotte zijn hier nog enkele voorbeelden waarmee het instructie geheugen geïnitialiseerd kan worden. Let er op dat je de generic map zo aanpast dat de simulator een geldig pad heeft naar deze files op jouw computer/laptop.
Het is een goed idee om, net zoals bij de ALU, eerst enkele specifieke instructies te testen. Bijvoorbeeld:
D=A
D
Een simpel programmaatje kan zijn:
A = 314
(0x013A)D = A
(0xEC10)A = 6
(0x0006)D = D+A
(0xE090) 111 0 000010 010 000A = 4
(0x0004)
Mem[A] = D
(0xE308) 111 0 001100 001 000A = 0
(0x0000)
0; JMP
(0xEA87) 111 0 101010 000 111Het resultaat van het “simpel programmaatje” moet er ongeveer als volgt uitzien.
Als een degelijk klein programma werkt, kan je proberen om een iets complexer stukje software te runnen.
Er bestaan websites, zoals deze die hulp kunnen bieden bij het assembleren.
Het programma hieronder produceert de getallen van de Fibonacci reeks, kleiner dan 10'000. De firmware kan je hier downloaden.
// set the maximum value to which the sequence has to go
@10000
D=A
@4
M=D
// initialize the registers
@1
M=0
@2
M=1
// start loop phase 1
@1
D=M
@2
D=D+M
@3
M=D
// check if 1000 is reached
@4
D=D-M
@41
D=D, jgt
// start loop phase 2
@2
D=M
@3
D=D+M
@1
M=D
// check if 1000 is reached
@4
D=D-M
@41
D=D, jgt
// start loop phase 3
@3
D=M
@1
D=D+M
@2
M=D
// check if 1000 is reached
@4
D=D-M
@41
D=D, jgt
// jump back to loop phase 1
@8
0;JMP
// infinite loop to catch end (INFINITE_LOOP)
@41
0;JMP
0010011100010000 - @10000 // set the maximum value to which the sequence has to go
1110110000010000 - D=A
0000000000000100 - @4
1110001100001000 - M=D
0000000000000001 - @1 // init
1110101010001000 - M=0
0000000000000010 - @2
1110111111001000 - M=1
0000000000000001 - @1 // start loop phase 1 (START_L)
1111110000010000 - D=M
0000000000000010 - @2
1111000010010000 - D=D+M
0000000000000011 - @3
1110001100001000 - M=D
0000000000000100 - @4 // check if 1000 is reached
1111010011010000 - D=D-M
0000000000101001 - @41
1110001100010001 - D=D, jgt
0000000000000010 - @2 // start loop phase 2
1111110000010000 - D=M
0000000000000011 - @3
1111000010010000 - D=D+M
0000000000000001 - @1
1110001100001000 - M=D
0000000000000100 - @4 // check if 1000 is reached
1111010011010000 - D=D-M
0000000000101001 - @41
1110001100010001 - D=D, jgt
0000000000000011 - @3 // start loop phase 3
1111110000010000 - D=M
0000000000000001 - @1
1111000010010000 - D=D+M
0000000000000010 - @2
1110001100001000 - M=D
0000000000000100 - @4 // check if 1000 is reached
1111010011010000 - D=D-M
0000000000101001 - @41
1110001100010001 - D=D, jgt
0000000000001000 - @8
1110000000000111 - 0;JMP
0000000000101001 - @41 // infinite loop to catch end (INFINITE_LOOP)
1110000000000111 - 0;JMP
Het resultaat van het “Fibonacci programma” moet er ongeveer als volgt uitzien.