aboutsummaryrefslogtreecommitdiffstats
path: root/examples/hello_world.subv
blob: aa044ae246a353e116589b0dcf739f3fcb013f55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
== code 0x80400000
  # trap all but first Hart (a0 = mhartid)
  # 63/branch 1/subop/!= a/rs/a0 0/rs/x0 0/off13

main:
  # a0 = &message
  # . load high bits
  37/lui a/rd/a0 Message/imm20hi
  # . add low bits
  13/opi 0/subop/add a/rd/a0 a/rs/a0 Message/imm12lo
  # call print
  6f/jal 1/rd/ra print/off21
loop:
  # infinite loop
  6f/jal 0/rd/x0 main/off21

print:
  # load 0x10000000 (UART0) into t0
  37/lui 5/rd/t0 0x10000/imm20
print:loop:
  # load unsigned byte at a0
  03/load 4/subop/byte 6/rd/t1 a/rs/a0 0/imm12
  # break loop if zero
  63/branch 0/subop/== 6/rs/t1 0/rs/x0 print:break/off13
print:spin:
  # spin if FIFO is full (thr_emtpy = UART+5 & 0x20)
  03/load 4/subop/byte 7/rd/t2 5/rs/t0 5/imm12
  13/opi 7/subop/and 7/rd/t2 7/rs/t2 20/imm12
  63/branch 0/subop/== 7/rs/t2 0/rs/x0 print:spin/off13
  # print char
  23/store 2/width/word 5/rs/t0 6/rs/t1 0/off12
  # increment a0
  13/opi 0/subop/add a/rd/a0 a/rs/a0 1/imm12
  # jump back up
  6f/jal 0/rd/x0 print:loop/off21
print:break:
  # return
  67/jalr 0/subop 0/rd/x0 1/rs/ra 0/off12

== data 0x80500000
Message:
  # "Hello World!\n\0"
  48/8 65/8 6c/8 6c/8 6f/8 20/8 77/8 6f/8 72/8 6c/8 64/8 21/8 0a/8 00/8