实验目的:用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: Wu Yiting\r\n"
myid: .asciiz "ID: 1200012875\r\n"
suc: .asciiz "\nSuccess!!!Location:"
fail: .asciiz "\r\nFail!!!\r\n"
buf: .space 100
.text
.globl main
main:
la $a0, buf
la $a1, 100
li $v0, 8 #input a string
syscall
# $a0 = address of input bufferll
# $a1 = maximum number of characters to read
inputchar:
li $v0, 12 # input a char
syscall
addi $t7, $0, '?'
sub $t6, $t7, $v0
beq $t6, $0, exit
add $t0, $0, $0
la $s1, buf
find_loop:
lb $s0, 0($s1)
sub $t1, $v0, $s0
beq $t1, $0, success
addi $t0, $t0, 1
slt $t3, $t0, $a1
beq $t3, $0, failed
addi $s1 $s1, 1
j find_loop
success:
la $a0, suc
li $v0, 4
syscall
addi $a0, $t0, 1
li $v0, 1
syscall
j inputchar
failed:
la $a0, fail
li $v0, 4
syscall
j inputchar
exit:
la $a0, myname
li $v0, 4
syscall
la $a0, myid
li $v0, 4
syscall
li $v0, 10
syscall
没什么难度,依次比对各字符即可,输出时可直接输出数字,相对x86简单很多