-
Notifications
You must be signed in to change notification settings - Fork 1
Li-Fish/ARC
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
####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储存的寄存器从栈中储存。
About
使用 ARC 汇编实现的读入字符,转换大小写,排序
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published