文档章节

字符串查找比较(mips)

locusxt
 locusxt
发布于 2014/03/30 12:03
字数 478
阅读 1058
收藏 0

字符串查找比较

实验目的:用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的好写.
因为可以直接输出个数字.



© 著作权归作者所有

locusxt
粉丝 27
博文 140
码字总数 90989
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

笃笃你呀
想请问大佬一下,.data 里buf 那行的1024 是什么意思呀?初学MIPS还请大佬指教☺
MIPS32模拟器--SPIM

SPIM是一个独立的MIPS32模拟器,可以读取和运行MIPS32汇编程序。同时提供了一个简单的调试器和最小化的操作系统服务,但是它并不能运行编译后的二进制程序。 SPIM几乎完整(除浮点数比较、舍...

漆兴
2015/04/22
2.5K
0
路由器固件安全分析技术(一)

前言 本文可作为路由器安全的入门学习教程,一起学习从零基础从搭建环境开始入门路由器固件安全分析的技术。 搭建环境篇 演示系统:debian 3.16.0-4-686-pae 本篇重在演示路由器固件分析及运...

广岛秋泽
2017/06/24
0
0
KMP子字符串查找算法分析与实现

原创博客,转载请注明http://my.oschina.net/BreathL/blog/137916 子字符串查找,是程序设计的一个基本且普遍的问题。通常情况下子字符串查找不需要特别的设计,一是由于执行的次数不多,二是...

Breath_L
2013/06/16
2.7K
0
查libevent不能编译出动态库问题

博主从事嵌入式Linux上的软件开发,其中用到了很多库。博主发现这些库都是静态链接的。如果有多个程序都要用到这个库,而且这个库又比较大的时候。这将是一个莫大的空间浪费。 博主对比了一下...

临峰不畏
2016/05/15
251
0
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转...

Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等) s.strip() .lstrip() .rstrip(',') 去空格及特殊符号 复制字符串 Python 连接字符串 Pyth...

木雨山
2012/09/13
797
0

没有更多内容

加载失败,请刷新页面

加载更多

Phpstorm2018 永久激活

1、安装phpstorm,安装包请自行官网下载 http://www.jetbrains.com/phpstorm/download/ 2、下载JetbrainsCrack.jar文件,存放至你的phpstorm执行文件同级目录下 下载JetbrainsCrack.jar 提取...

happyfish319
29分钟前
6
0
谈一谈Android进程间通信的几种方式

###来看一下Android中除了AIDL还有哪些进程间通信的方式: 1、Bundle Bundle实现了Parcelable,所以在Android中我们可以通过Intent在不同进程间传递Bundle数据。 但是在Intent 传输数据的过程...

二营长的意大利炮手
30分钟前
7
0
互联网薪资“高开低走”,你的能力是否真的可以匹配高薪?

对于国内外主流互联网大厂,技术出身似乎已经成为各大掌门人的必备标签。谷歌 CEO 桑达尔·皮查伊、马克·扎克伯格、李彦宏、马化腾、雷军等等皆为技术人出身,都曾参与了公司内部重要产品的...

Java技术剑
31分钟前
9
0
java 多线程

线程声明周期 线程的五个状态:新建,就绪,运行,阻塞,死亡。 其中就绪和运行两个状态客户互相转换,但运行到阻塞,阻塞到就绪,只能单向转换。 刚new出的线程就是【新建】状态,调用start...

雷开你的门
33分钟前
11
0
构造器Constructor是否可被overrid

构造器不能被重写,不能用static修饰构造器,只能用public private protected这三个权限修饰符,且不能有返回语句。

无名氏的程序员
37分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部