字符串查找比较(mips)

原创
2014/03/30 12:03
阅读数 3.3K

字符串查找比较

实验目的:用MIPS精简指令实现x86复杂的串指令的功能,体会其区别

实验内容:利用系统功能调用从键盘输入一个字符串,然后输入单个字符,查找该字符串中是否有该字符。具体要求如下:

(1) 如果找到,则在屏幕上显示:

Success!!! Location: X

其中,X为该字符在字符串中第一次出现的位置

(2) 如果没找到,则在屏幕上显示:

Fail!!!

(3) 输入一个字符串后,可以反复输入希望查询的字符,直到按ESC键结束程序

(4) 程序结束时,在屏幕上显示本人的姓名全拼和学号

(5) 每个输入字符独占一行,输出查找结果独占一行,位置编码从0开始,格式示例如下:

   abcdefgh

   a

Success!!! Location: 0

  j

  Fail!!! 

.data
myname:.asciiz "\r\nNAME: locusxt\r\n"
id:	.asciiz "ID:locusxt\r\n"
buf:	.word 0:1024
suc:	.asciiz "\r\nSuccess!!! Location: "
fai:	.asciiz "\r\nFail!!!\r\n"
endl:	.asciiz "\r\n"

	.text
	.globl main
main:	
inputstr:#输入一个字符串
	la $a0, buf
	li $a1, 1000
	li $v0, 8
	syscall

inputchar:#输入一个字符
	li $v0, 12
	syscall
	addi $s0, $v0, 0 #s0存待寻找的字符

judgeend:#判断是否结束
	li $t0, '?'
	beq $t0, $s0, dealend
	
search:
	or $t0, $0, $0 #t0作为计数器
	la $t1, buf #t1是缓冲区的头
	li $s1, '\0'
	
loop:	#逐个与待比较字符比较
	add $t2, $t1, $t0
	lbu $t3, ($t2) ###
	beq $t3, $s1, failed #找到了最后
	beq $t3, $s0, success #找到了匹配的字符
	addi $t0, $t0, 1
	j loop
	
success: #成功找到的情况
	la $a0, suc
	li $v0, 4
	syscall
	addi $a0, $t0, 0
	li $v0, 1
	syscall
	la $a0, endl
	li $v0, 4
	syscall
	j inputchar
	
failed: #没找到
	la $a0, fai
	li $v0, 4
	syscall
	j inputchar
	
dealend:
	la $a0, myname
	li $v0, 4
	syscall
	la $a0, id
	li $v0, 4
	syscall



===========
感觉比x86的好写.
因为可以直接输出个数字.



展开阅读全文
打赏
1
0 收藏
分享
加载中
想请问大佬一下,.data 里buf 那行的1024 是什么意思呀?初学MIPS还请大佬指教☺
2018/11/21 20:50
回复
举报
是为数组开辟空间
2019/10/23 12:49
回复
举报
更多评论
打赏
2 评论
0 收藏
1
分享
返回顶部
顶部