您的位置:首页 > 理论基础

[Coursera]计算机组成_Week3_Mips_Q1

2016-03-19 21:50 246 查看
#用补齐'\0'的方法保证每个单词的开头线性排列
#单词最长八位,所以补到九位;数字全部补到8位
.data
uppercase:
.ascii
"Alpha\0\0\0\0"
"Bravo\0\0\0\0"
"China\0\0\0\0"
"Delta\0\0\0\0"
"Echo\0\0\0\0\0"
"Foxtrot\0\0"
"Golf\0\0\0\0\0"
"Hotel\0\0\0\0"
"India\0\0\0\0"
"Juliet\0\0\0"
"Kilo\0\0\0\0\0"
"Lima\0\0\0\0\0"
"Mary\0\0\0\0\0"
"November\0"
"Oscar\0\0\0\0"
"Paper\0\0\0\0"
"Quebec\0\0\0"
"Research\0"
"Sierra\0\0\0"
"Tango\0\0\0\0"
"Uniform\0\0"
"Victor\0\0\0"
"Whisky\0\0\0"
"X-ray\0\0\0\0"
"Yankee\0\0\0"
"Zulu\0\0\0\0\0"

lowercase:
.ascii
"alpha\0\0\0\0"
"bravo\0\0\0\0"
"china\0\0\0\0"
"delta\0\0\0\0"
"echo\0\0\0\0\0"
"foxtrot\0\0"
"golf\0\0\0\0\0"
"hotel\0\0\0\0"
"india\0\0\0\0"
"juliet\0\0\0"
"kilo\0\0\0\0\0"
"lima\0\0\0\0\0"
"mary\0\0\0\0\0"
"november\0"
"oscar\0\0\0\0"
"paper\0\0\0\0"
"quebec\0\0\0"
"research\0"
"sierra\0\0\0"
"tango\0\0\0\0"
"uniform\0\0"
"victor\0\0\0"
"whisky\0\0\0"
"x-ray\0\0\0\0"
"yankee\0\0\0"
"zulu\0\0\0\0\0"

numbers:
.ascii
"zero\0\0\0\0"
"First\0\0\0"
"Second\0\0"
"Third\0\0\0"
"Fourth\0\0"
"Fifth\0\0\0"
"Sixth\0\0\0"
"Seventh\0"
"Eighth\0\0"
"Ninth\0\0\0"

CR:
.asciiz "\n"
Space:
.asciiz " "

.text
li $s1,'*'
li $s2,'A'
li $s3,'Z'
li $s4,'a'
li $s5,'z'
li $s6,'0'
li $s7,'9'
loop:
li $v0,12
syscall 		 # 读取一个输入的字符
move $t7,$v0 		 # 把这个字符存到$a0里
la   $a0, CR           	 # 输出回车
li   $v0, 4
syscall
move $a0,$t7 		 # 把这个字符存到$a0里
beq $a0,'?',end		 # 若输入为'?'就终止程序

C1:	bge $a0,$s2,N1 		 # 判断是否在'A'~'Z'之间
j C2
N1:	ble $a0,$s3,R1
j C2
R1:
sub $a0,$a0,'A'
mul $a0,$a0,9
la $t0,uppercase
add $a0,$a0,$t0
li $v0,4
syscall

la   $a0, CR           	 # 输出回车
li   $v0,4
syscall
j loop

C2:	bge $a0,$s4,N2  	#判断是否在'a'~'z'之间
j C3
N2:	ble $a0,$s5,R2
j C3
R2:	sub $a0,$a0,'a'
mul $a0,$a0,9
la $t0,lowercase
add $a0,$a0,$t0
li $v0,4
syscall

la   $a0, CR           	 # 输出回车
li   $v0,4
syscall
j loop

C3:	bge $a0,$s6,N3  	#判断是否在'0'~'9'之间
j NotFind
N3:	ble $a0,$s7,R3
j NotFind
R3:	sub $a0,$a0,'0'
mul $a0,$a0,8
la $t0,numbers
add $a0,$a0,$t0
li $v0,4
syscall

la   $a0, CR           	 # 输出回车
li   $v0,4
syscall
j loop

NotFind:
move $a0,$s1
li $v0,11		 #输出没有找到"*"
syscall
la   $a0, CR           	 # 输出回车
li   $v0,4
syscall

j loop

end:				#终止程序
li $v0,10
syscall
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: