-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathREADME
More file actions
255 lines (185 loc) · 5.79 KB
/
Copy pathREADME
File metadata and controls
255 lines (185 loc) · 5.79 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
####CONSTANT####
-------------------------------------
BASE:
用来当作IO操作的基地址。
COUT:
输出口的偏移量。
COTSTAT:
输出状态口的偏移量。
CIN:
输入口的偏移量。
CINSTAT:
输入状态口的偏移量。
Select:
用来储存用户所选择信息。
Array:
储存用户输入的数组。
Menu:
用来储存菜单的信息。
Number:
用来储存ASCII和转化成的16进制或8进制数。这是尾部地址,使用时和栈类似。
####FUNCTION####
-------------------------------------
Main:
无参数。无返回值。
主函数,负责进行各种函数的调用,与主逻辑的实现。
Read:
一个参数:
读入的字符串要放到的首地址。
一个返回值:
代表字符串的长度。
读入字符串。
寄存器:
%r1:储存输入口的状态标志。
%r2:储存偏移量。
%r3:储存当前读入的字符。
%r4:储存要储存数据的基地址。
Put:
一个参数:
要输出的字符串的首地址。
无返回值。
输出字符串。
寄存器:
%r1:储存输入口的状态标志。
%r3:储存当前读入的字符。
%r4:储存要储存数据的基地址。
%r5:储存偏移量。
Select:
需要一个参数:
代表输入数据的长度。
无返回值。
选择函数,用来实现排序算法的选择。用到了嵌套调用子程序。
寄存器:
%r1:用来储存输入口的状态。
%r3:用来储存输入的数据。
%r4:储存输入数据的长度。
%r5:用来储存输入数据的尾地址。
HeapSort:
两个参数:
第一个是需要排序的数组的首地址,第二个是数组的长度。
无返回值。
对数组进行堆排序。
寄存器:
%r2:储存数据的首地址。
%r7:储存堆的最后一个元素的下标。
%r8:储存数据的长度。
CreateHeap:
两个参数:
第一个是需要构造成堆的数组的首地址。
第二个是数组的长度。
无返回值。
将数组构造成一个最大堆。
寄存器:
%r1:储存需要调整的节点下标。
%r2:储存数据的首地址。
%r8:储存数据的长度。
DropNode:
三个参数:
第一个是堆的首地址。
第二个是需要调整的节点的下标。
第三个是堆的大小。
无返回值。
对一个节点进行递归的调整,如果当前节点的值小于他儿子的节点,那么这个节点与他的孩子节点交换,并且继续调整他的孩子节点。
寄存器:
%r1:储存需要调整的节点下标。
%r2:储存数据的首地址。
%r3:存储用来判断的临时数据。
%r5:储存左孩子的下标。
%r6:储存右孩子的下标。
%r7:储存当前临时数据的值。
%r8:储存另一个临时数据的值。
%r9:储存堆的大小。
QuickSort:
两个参数:
第一个是字符串的首地址。
第二个是字符串的尾地址。
无返回值。
对字符串进行快速排序,用到了递归调用。
寄存器:
%r1:临时的左边界。
%r2:临时的右边界。
%r3:数据的左边界。
%r4:数据的右边界。
在循环中:
%r5:用来当做基的值。
%r6:用来储存临时的数据进行比较。
%r7:用来进行交换数据的临时寄存器。
之后:
%r5:新的左边界。
%r6:新的右边界。
Uppercase:
需要一个参数:
表示字符串的首地址。
无返回值。
将小写字母转化为大写字母,通过对小写字母减32实现。
寄存器:
%r2:需要操作的数据的地址。
%r3:储存当前的字符。
Lowercase:
同上,改为小写字母转大写字母。
GetOctal:
需要两个参数:
第一个是要转化成八进制的数。
第二个是转化后字符串的首地址。
一个返回值,返回转化后八进制字符串的首地址。
将一个值转化为一个八进制表示的字符串。
寄存器:
%r1:需要转化的数。
%r2:输出到的地址。
%r3:转化后的字符。
GetHex:
同上,改为转成16进制数。
Sum:
一个参数:
字符串的首地址。
一个返回值:
返回字符串的ASCII玛和。
实现字符串的求和。
寄存器:
%r2:数据的首地址。
%r3:当前的字符。
%r4:存储ASCII码和。
####MACRO####
---------------------------------------------
pop:
一个参数,代表一个寄存器。
无返回值。
从栈中取一个数,并放到寄存器。
push:
一个参数,代表一个寄存器。
无返回值。
将寄存器中的数放到栈里。
pushI:
一个参数,代表一个立即数。
无返回值。
将一个立即数放到栈里。
store:
两个参数,两个寄存器。
无返回值。
把第一个寄存器里储存的地址当作栈指针,把第二寄存器里的数放到栈里。
init:
无参数。
无返回值。
进行初始化。
return:
一个参数X。
可以有返回值。
X代表%rX,如果X是0,代表无返回值,否则有返回值。首先从栈中取出要返回的地址,然后将%rX里的数据放到栈里(如果X不为0的话),然后跳转到要返回的地址。
left:
两个参数,两个寄存器。
无返回值。
第一个寄存器为一颗完全二叉树节点的下标,给第二寄存器赋值为这个节点左孩子的下标。
right:
同上,赋值为右孩子的下标。
swap:
三个参数,三个寄存器。
无返回值。
第一个寄存器和第二寄存器代表一个下标,第三个寄存器是基地址,交换内存中的两个值。
sava:
无参数。
一堆返回值。
把所有用到的寄存器放到栈里储存。
load:
一堆参数。
无返回值。
将之前save储存的寄存器从栈中储存。