Program Examples
Hello World - Sum 2 numbers
0 | | I: rA <-- #2 | | ;Load register rA from Int unit with 2 |
2 | | I: rB <-- #3 | | ;Load register rB from Int unit with 3 |
4 | | I: AplsB --> M[]300 | | ;Store( rA + rB ) in address 300 |
6 | | ENDPRG | | ;End of program. This is not instruction, it is assembler directive. |
Hello World - Sum 2 floating numbers
0 | | A: rBs1 <-- #1000 | | ;Load register rBs1 from Adress unit with 1000 |
2 | | D: rA <-- M[rBs1,]0 | | ;Load register rA from Int unit from address pointed from register rBs1 |
4 | | I: rB <-- M[rBs1,]2 | | ;Load register rB from Int unit from address pointed from register rBs1 with offset 2 |
6 | | I: AplsB --> M[rBs1]4 | | ;Store( rA + rB ) in address pointed from register rBs1 with offset 4 |
8 | | ENDPRG | | ;End of program. This is not instruction, it is assembler directive. |
| | . . . | | |
1000 | | 2.0 | | |
1001 | | 0.4 | | |
1002 | | 5.0 | | |
1003 | | 0.7 | | |
Stack example
0 | | I: rA <-- #7 | | ; Load register rA with 7 |
2 | | I: rB <-- #-10 | | ; Load register rA with -10 |
4 | | I: push rA | | ; Push register rA in stack |
6 | | I: push rB | | ; Push register rB in stack. |
8 | | I: pop rA | | ; Pop register rA from stack. Now it is -10 |
10 | | I: pop rB | | ; Pop register rB from stack. Now it is 7 |
12 | | ENDPRG | | ; |
Result is: values in rA and rB in Integer unit are exchanged.
If example
0 | | I: rA <-- #2 | | ; Load rA with 2 |
2 | | I: rB <-- #3 | | ; Load rB with 3 |
4 | | I: if ( A < B ) jump #10 | | ; If rA < rB then jump to address 10 |
6 | | I: AplsB --> M300 | | ; Calc sum rA + rB and store in address 300 |
8 | | A: rIP --> #12 | | ; Jump to END program |
10 | | I: AmnsB --> M300 | | ; Calc subtraction rA - rB and store result in address 300 |
12 | | ENDPRG | | ; |
Result is -1 in memory address 300.
Hello World - For loop Example
0 | | I: rA <-- #1 | | ; Load rA with 1 |
2 | | I: rB <-- #5 | | ; Load rB with 5 |
4 | | A: rMaxX <-- #5 | | ; Load rMaxX with 5 |
6 | | A: IfMaxX rX1 >= rMaxX ; #16 | | ; If rX1 > rMaxX jump over the body cycle mem adr 16. Cheking FOR loop condition |
8 | | I: AmulB --> M120 | | ; Calc rA * rB store result in memory address 120 |
10 | | I: rA <-- M120 | | ; Load rA from memory address 120 |
12 | | A: IncX rX1 #1 | | ; Increment rX1 with 1 |
14 | | A: rIP <-- #6 | | ; Jump to memory address 6. End loop body. |
16 | | ENDPRG | | ; program end |
Hello World - Register to Register Example
0 | | I: rA <-- #1 | | ; Load I rA with 1 |
2 | | I: rB <-- #2 | | ; Load I rB with 2 |
4 | | D: rA <-- #3.4 | | ; Load D rA with 3.4 |
7 | | D: rA <-- #5.6 | | ; Load D rB with 5.6 |
10 | | I: rA --> D: rA | | ; Set D rA whth value from I rA, 1 |
12 | | D: rB --> I: rB | | ; Set I rB with value from D rB. Int part only 5 |
14 | | ENDPRG | | ; |
Hello World - Boolean operations Example
0 | | I: rA <-- #1 | | ; Load rA with 1 |
2 | | I: rB <-- #2 | | ; Load rB with 2 |
4 | | I: AandB --> M200 | | ; Calc rA & & rB and store in memory address 200 |
6 | | I: AorB --> M201 | | ; Calc rA | rB and store in memory address 201 |
8 | | I: AxorB --> M202 | | ; Calc rA ^ rB and store in memory address 202 |
10 | | ENDPRG | | ; |
Hello World - Shift operations Example
0 | | I: rA <-- #1000 | | ; Load rA with 1000 |
2 | | I: rB <-- #2 | | ; Load rB with 2 |
4 | | I: AshlB --> M200 | | ; Shift rA 2 times in left, store result in memory address 200 |
6 | | I: AshrB --> M201 | | ; Shift rA 2 times in right, store result in memory address 201 |
8 | | I: AshrrB --> M202 | | ; Shift rA 2 times - unsigned right shift, store result in memory address 202 |
10 | | ENDPRG | | ; |
Bubble sort
This simple program demonstrates bubble sort algorithm, using SortAB instruction. Program can be optimized, but it is only for demo use.
0 | | A: rBs1 <-- #1000 | | ; Load rBs1 with 1000. Here is the beginnig of array to be sorted. |
2 | | A: rX1 <-- # | | ; Load rX1 with 0. clear |
4 | | A: rMaxX <-- M950 | | ; Set rMaxX with value in address 950. Array size. |
6 | | A: IfMaxX rX1 >= rMaxX ; #22 | | ; Start loop, loop condition check. If rX1 > rMaxX, then skip body loop. |
8 | | I: rA <-- M[rBs1, rX1]0 | | ; Load rA with element from the array. Element adr is rBs1 + rX1 |
10 | | I: rB <-- M[rBs1, rX1]1 | | ; Load rB with next element from array. Element adr is rBs1 + rX1 + 1 |
12 | | I: SortAB < & IfNoExch #18 | | ; Sort A,B. If there is no exchange, jump to 18 - Skip store of elements. |
14 | | I: rA --> M[rBs1, rX1]0 | | ; Store rA in array in position rBs1 + rX1 |
16 | | I: rB --> M[rBs1, rX1]1 | | ; Store rB in array in position rBs1 + rX1 + 1 |
18 | | A: IncX rX1 #1 | | ; Increment rX1, wich point element in the array to be sorted. |
20 | | A: rIP <-- #6 | | ; Set rIP to 6. Unconditional JUMP. Jump to begenning of the loop. |
22 | | A: rX1 <-- #0 | | ; Clear rX1, wich point element in the array. |
24 | | I: rA <-- M950 | | ; Load rA with array size from adr 950. |
26 | | I: rB <-- #1 | | ; Set rB to 1 |
28 | | I: AmnsB --> M950 | | ; Decrease array size with 1 and store result in adr 950. |
30 | | I: rA <-- M950 | | ; Load Array size. The rest part from it, unsorted. |
32 | | I: rB <-- #0 | | ; Set rB = 0 |
34 | | I: if ( A > B ) jump #4 | | ; If rest array size is > 0 jump to adr 4 - repeat sort with rest array part. |
36 | | ENDPRG | | ; End of program directive. |
. . . | | . . . | | ; |
950 | | 19 | | ; Contain array size. Decreased on every loop. ; 20 elements |
. . . | | . . . | | ; |
1000 | | 57 | | ; Begin of array which will be sorted. element#0 |
1001 | | 100 | | ; |
1002 | | 33 | | ; |
1003 | | 21 | | ; |
1004 | | 17 | | ; |
1005 | | 1 | | ; |
1006 | | 6 | | ; |
1007 | | 18 | | ; |
1008 | | 81 | | ; |
1009 | | 28 | | ; |
1010 | | 83 | | ; |
1011 | | 38 | | ; |
1012 | | 85 | | ; |
1013 | | 68 | | ; |
1014 | | 87 | | ; |
1015 | | 88 | | ; |
1016 | | 89 | | ; |
1017 | | 12 | | ; |
1018 | | 23 | | ; |
1019 | | 77 | | ; End of array. Element #20. |
. . . | | . . . | | ; |