[Coursera]计算机组成_Week3_Mips_Q1

#用补齐'\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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值