Program

This program demonstrates use of the stack and tests the JALR operation.

R1first argument
R2second argument
R3return value
R6stack pointer
R7return 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

Simulation Results

#pcoprdqdimmed
100LI6001E001E
201LI1000A000A
302LI200050005
403LI300080008
504JALR700050060
608ADD6001E00C0
709ADDI6001D00DF
80AADD6000500E0
90BADDI6000400DF
100CADD3000F0028
110DADDI6000500C1
120EADD7000500C0
130FADDI6000600C1
1410ADD6000600C0
1511JALR0001200E0
1605SWI0001F001F

Registers

formatr1r2r3r4r5r6r7
hex000A0005000F4444555500060005
decimal10515174762184565

Memory

addr0123456789ABCDEF
00001E1E190A1A051B085F60131F00000000 46C03EDF46E03EDF43283EC147C03EC1
001046C058E0000000000000000000000000 0000000000000000000000000000000F