Skip to content
/ ARC Public

使用 ARC 汇编实现的读入字符,转换大小写,排序

Notifications You must be signed in to change notification settings

Li-Fish/ARC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 

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

No packages published