-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathEuclid's.txt
78 lines (60 loc) · 1.22 KB
/
Euclid's.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
68
69
70
71
72
73
74
75
76
77
78
#<python代码:求最大公约数>
# def GCD(x,y):
# if x < y:
# x,y = y,x
# if x%y == 0:
# return (y)
# return GCD(x%y,y)
# a = 48 # 用户自己修改
# b = 20 # 用户自己修改
# print (GCD(a,b))
#主函数有两个局部变量,分别是a = 48, b = 20
#求这两个数的最大公约数,并将结果保存到R1中
#<汇编代码:求两个数的最大公约数>
move R15, 10000 #R15表示fp,将基地址设为10000
move sp, R15 #设置当前栈顶位置
move R2, 48 # a = 48
move R3, 20 # b = 20
#move R2, 49 # a = 49
#move R3, 59 # b = 59
#move R2, 569
#move R3, 784
push R3 # 传参数a
push R2 # 传参数b
call Lgcd #调用求最大公约数函数Lgcd
goto Lprint #打印结果
Lgcd: #gcd(x,y) push pc
_pause
push R15
move R15,sp # 新的fp等于sp
push R2
push R3
push R4
push R5
load R2, 02(R15) # R2 = a
load R3, 03(R15) # R3 = b
slt R4,R2,R3 #比较R2与R3的大小,使得R2存大值,R3存小值
beqz R4, Lmod
load R2, 03(R15) # R2 = b
load R3, 02(R15) # R3 = a
Lmod: #求模,将求模的结果保存在R4中
div R5,R2,R3
mul R5,R5,R3
sub R4,R2,R5
beqz R4,L1
push R3
push R4
call Lgcd
goto Lreturn
L1:
move R1,R3
Lreturn:
pop R5
pop R4
pop R3
pop R2
move sp,R15 #sp = fp
pop R15 #重设fp的值,成为旧的fp
ret #pop pc
Lprint: #打印输出结果,输出结果保存在R1中
_pr R1