-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmin.txt
68 lines (53 loc) · 1.71 KB
/
min.txt
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
59
60
61
62
63
64
65
66
67
#<python代码:三个数求最小值>
#def get_min(x,y):
# if x<=y:
# return x
# else:
# return y
#a = 7
#b = 18
#c = 5
#d = get_min(c,get_min(a,b))
#print(d)
#主函数有三个局部变量a = 7,b = 18,c = 5
# 调用函数min(a,b)2次
# 找出a,b,c中的最小值
#<汇编代码:三个数求最小值>
move R15,300 #R15表示fp,将基地址设置为300
move sp,R15 # sp = fp
sub sp,sp,3 # sp从300往下开辟3个空间给局部变量a,b,c sp = sp-3
move R2,7 # a = 7
move R3,18 # b = 18
move R4,9 # c = 9
push R3 #传参数b
push R2 #传参数a
call L1 #调用函数min(a,b),返回值存在R1中
push R4 #传参数c
push R1 #传a和b中的最小值
call L1 #再次调用min(R1,c),返回值为保存在R1中
goto L3 #
# min函数有两个参数a,b,将最小值放到R1中返回
L1: # min(a,b)
push R15 #将旧的fp值存入栈内
move R15,sp # 新的fp等于sp
#sub sp,sp,0 # 因为此函数没有局部变量,所以可以去掉
push R2 #在函数中被更改,所以先存入栈内,在return之前会pop出来这三个值
push R3 #在函数中被更改,所以先存入栈内,在return之前会pop出来这三个值
push R4 #在函数中被更改,所以先存入栈内,在return之前会pop出来这三个值
load R2, 02(R15) # R2 = a
load R3, 03(R15) # R3 = b
sle R4, R2, R3 # R4 =(R2<=R3)
beqz R4, L100 # if (R4 == 0) goto L100
move R1,R2 # R1=R2,结果存在R1中
goto Lreturn
L100:
move R1,R3 #R1=R3,结果存在R1中
Lreturn:
pop R4 #返回旧的R4
pop R3 #返回旧的R3
pop R2 #返回旧的R2
move sp,R15 # sp = R15
pop R15 #重设R15的值,成为旧的R15
ret # pop pc
L3:
_pr R1 #打印最后的结果