This program demonstrates use of the stack and tests the JALR operation.
| R1 | first argument |
|---|---|
| R2 | second argument |
| R3 | return value |
| R6 | stack pointer |
| R7 | return address |
| LI | R6 30 | ; R6 is the stack | |
|---|---|---|---|
| LI | R1 10 | ; first argument | |
| LI | R2 5 | ; second argument | |
| LI | R3 8 | ; address of function (L) | |
| JALR | R7 R3 | ; call function | |
| SWI | R3 31 | ; save return value | |
| HALT | |||
| NOP | |||
| L: | ADD | R6 R6 R0 | ; push R6 (stack pointer) |
| ADDI | R6 R6 -1 | ||
| ADD | R6 R7 R0 | ; push R7 (return address) | |
| ADDI | R6 R6 -1 | | |
| ADD | R3 R1 R2 | ; body of function f(a,b) returns a+b | |
| ADDI | R6 R6 1 | ; pop R7 from stack | |
| ADD | R7 R6 R0 | | |
| ADDI | R6 R6 1 | ; pop R6 from stack | |
| ADD | R6 R6 R0 | ||
| JALR | R0 R7 0 | ; return from function | |
| # | pc | op | rd | qd | immed |
|---|---|---|---|---|---|
| 1 | 00 | LI | 6 | 001E | 001E |
| 2 | 01 | LI | 1 | 000A | 000A |
| 3 | 02 | LI | 2 | 0005 | 0005 |
| 4 | 03 | LI | 3 | 0008 | 0008 |
| 5 | 04 | JALR | 7 | 0005 | 0060 |
| 6 | 08 | ADD | 6 | 001E | 00C0 |
| 7 | 09 | ADDI | 6 | 001D | 00DF |
| 8 | 0A | ADD | 6 | 0005 | 00E0 |
| 9 | 0B | ADDI | 6 | 0004 | 00DF |
| 10 | 0C | ADD | 3 | 000F | 0028 |
| 11 | 0D | ADDI | 6 | 0005 | 00C1 |
| 12 | 0E | ADD | 7 | 0005 | 00C0 |
| 13 | 0F | ADDI | 6 | 0006 | 00C1 |
| 14 | 10 | ADD | 6 | 0006 | 00C0 |
| 15 | 11 | JALR | 0 | 0012 | 00E0 |
| 16 | 05 | SWI | 0 | 001F | 001F |
| format | r1 | r2 | r3 | r4 | r5 | r6 | r7 |
|---|---|---|---|---|---|---|---|
| hex | 000A | 0005 | 000F | 4444 | 5555 | 0006 | 0005 |
| decimal | 10 | 5 | 15 | 17476 | 21845 | 6 | 5 |
| addr | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 1E1E | 190A | 1A05 | 1B08 | 5F60 | 131F | 0000 | 0000 | 46C0 | 3EDF | 46E0 | 3EDF | 4328 | 3EC1 | 47C0 | 3EC1 |
| 0010 | 46C0 | 58E0 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 000F |