-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelloworld.asm
More file actions
58 lines (44 loc) · 1.07 KB
/
helloworld.asm
File metadata and controls
58 lines (44 loc) · 1.07 KB
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
$helloworld
string "Hello world!"
===
@func_main
// フレームポインタの設定
addi r2 = r0, 0x100
// "Hello world!"
addi r10 = r0, $helloworld
beq r1, (r0, r0) -> @func_print
// 無限ループ
@loop.func_main
beq r0, (r0, r0) -> @loop.func_main
@func_print
// フレームポインタの退避
subi r2 = r2, 4
sw r2[0] = r3
addi r3 = r2, 0
// レジスタの退避
subi r2 = r2, 4
sw r3[-4] = r1
// 文字列出力ループ
add r4 = r0, r10
@loop.func_print
// 文字列取得
lb r5 = r4[0]
// NULLチェック
beq r0, (r5, r0) -> @end.loop.func_print
// 出力
out r0[0] = r5
// カウンタ加算
addi r4 = r4, 1
beq r0, (r0, r0) -> @loop.func_print
@end.loop.func_print
// 改行文字出力
addi r4 = r0, 10
out r0[0] = r4
// レジスタの復元
lw r1 = r3[-4]
addi r2 = r2, 4
// フレームポインタの復元
lw r3 = r3[0]
addi r2 = r2, 4
// return
jal r0, r1[0]