-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathindirect.32.asm
61 lines (47 loc) · 980 Bytes
/
indirect.32.asm
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
# indirect function call
# simple function which will print out 1
.fun fun1 NORMAL [] = []
.bbl start
# load constant into new register x
mov x:U32 1
pusharg x
bsr print_u_ln
ret
.fun fun2 NORMAL [] = []
.bbl start
mov x:U32 2
pusharg x
bsr print_u_ln
ret
.fun fun3 NORMAL [] = []
.bbl start
mov x:U32 3
pusharg x
bsr print_u_ln
ret
.mem fun_pointers 8 RO
.addr.fun 4 fun1
.addr.fun 4 fun2
.addr.fun 4 fun3
.fun main NORMAL [S32] = []
.reg C32 [fp]
.bbl start
bsr fun1
bsr fun2
bsr fun3
lea.fun fp = fun1
jsr fp fun1
lea.fun fp = fun2
# fun1 just denotes a signature which is the same as fun2
jsr fp fun1
lea.fun fp = fun3
# fun1 just denotes a signature which is the same as fun3
jsr fp fun1
ld.mem fp = fun_pointers 0
jsr fp fun1
ld.mem fp = fun_pointers 4
jsr fp fun1
ld.mem fp = fun_pointers 8
jsr fp fun1
pusharg 0:S32
ret