39 lines
884 B
Typst
39 lines
884 B
Typst
|
#import "riscv.typ"
|
||
|
|
||
|
#set page(width: auto, height: auto, margin: 1cm)
|
||
|
|
||
|
#riscv.explain-instruction-encoding("lui x0, 0x12")
|
||
|
|
||
|
#riscv.explain-instruction-encoding("add sp, a0, a1")
|
||
|
|
||
|
#pagebreak()
|
||
|
|
||
|
#riscv.riscv-to-bin(```
|
||
|
0x00000300 main: jal ra, simple # call
|
||
|
0x00000304 add s0, s1, s1
|
||
|
0x0000051c simple: jalr x0, ra, 0 # return
|
||
|
```)
|
||
|
|
||
|
#pagebreak()
|
||
|
|
||
|
#riscv.riscv-to-bin(```
|
||
|
f1:
|
||
|
addi sp, sp, -20 # make space on stack for 5 words
|
||
|
sw a0, 16(sp)
|
||
|
sw a1, 12(sp)
|
||
|
sw ra, 8(sp) # save ra on stack
|
||
|
sw s4, 4(sp)
|
||
|
sw s5, 0(sp)
|
||
|
jal ra, f2
|
||
|
lw ra, 8(sp) # restore ra (and other regs) from stack
|
||
|
addi sp, sp, 20 # deallocate stack space
|
||
|
jalr zero, ra, 0
|
||
|
|
||
|
# f2 (leaf-function) only uses s4 and calls no functions
|
||
|
f2:
|
||
|
addi sp, sp, -4 # make space on stack for 1 word
|
||
|
sw s4, 0(sp)
|
||
|
lw s4, 0(sp)
|
||
|
addi sp, sp, 4 # deallocate stack space
|
||
|
jalr zero, ra, 0
|
||
|
```)
|