第一题:用系统功能调用实现简单输入输出

题目要求

利用系统功能调用从键盘输入,转换后在屏幕上显示,具体要求如下:

  1、如果输入的是字母(A~Z,区分大小写)或数字(0~9),则将其转换成对应的英文单词后在屏幕上显示,对应关系见下表

  2、若输入的不是字母或数字,则在屏幕上输出字符“*”

  3、每输入一个字符,即时转换并在屏幕上显示

  4、支持反复输入,直到按“?”键结束程序

MIPS代码

 .data
alphabetU: .asciiz " Alpha\n"," Bravo\n"," China\n"," Delta\n"," Echo\n"," Foxtrot\n"," Golf\n"," Hotel\n",
" India\n"," Juliet\n"," Kilo\n"," Lima\n"," Mary\n"," November\n"," Oscar\n"," Paper\n"," Quebec\n",
" Research\n"," Sierra\n"," Tango\n"," Uniform\n"," Victor\n"," Whisky\n"," X-ray\n"," Yankee\n"," Zulu\n"
alphabetL: .asciiz " alpha\n"," bravo\n"," china\n"," delta\n"," echo\n"," foxtrot\n"," golf\n"," hotel\n"," india\n",
" juliet\n"," kilo\n"," lima\n"," mary\n"," november\n"," oscar\n"," paper\n"," quebec\n"," research\n",
" sierra\n"," tango\n"," uniform\n"," victor\n"," whisky\n"," x-ray\n"," yankee\n"," zulu\n"
al_offset: .word ,,,,,,,,,,,,,,,,,,,,,,,,,
number: .asciiz " Zero\n"," First\n"," Second\n"," Third\n"," Fourth\n"," Fifth\n"," Sixth\n"," Seventh\n"," Eighth\n"," Ninth\n"
n_offset: .word ,,,,,,,,,
exit_str: .asciiz "#Stop program#" .text
.globl main
main:
li $v0, #$v0 contian character read
syscall
beq $v0,'?',exit #if(v0 == '?'),exit #is symble?
sub $t1,$v0,''
blt $t1,,symble #is number?
sub $t2,$t1, #$t2 = $t1 -
blt $t2,,getnum #is upper case?
sub $t0,$v0,
slt $s2,$t0,$ #if (v0 < 'Z') then s2 = 1
sub $t0,$v0,
sgt $s3,$t0,$ #if(v0 > 'A') then s3 = 1
and $s1,$s2,$s3 #$s1 = ($s2 && s3)
beq $s1,,getuword #is lower case?
sub $t0,$v0,
slt $s2,$t0,$ #if (v0 < 'Z') then s2 = 1
sub $t0,$v0,
sgt $s3,$t0,$ #if(v0 > 'A') then s3 = 1
and $s1,$s2,$s3 #$s1 = ($s2 && s3)
beq $s1,,getlword symble:
li $v0,
add $a0,$, #load value into argument register $a0
syscall #print space add $a0,$a0, # + = '*'
syscall sub,$a0,$a0, #'*' - = '\n'
syscall
j main getnum:
add $t2,$t2, #add
sll $t2,$t2, #every word use byte (no. at address of <<) la $s0,n_offset #load address to $s0
add $s0,$s0,$t2 #$s0 = $s0 + offset
lw $s1,($s0) la $a0,number
add $a0,$a0,$s1 #$a0 = number + offset
li $v0,
syscall
j main getuword:
sub,$t0,$t0,
sll $t0,$t0,
la $s0,al_offset
add $s0,$s0,$t0
lw $s1,($s0)
la $a0,alphabetU
add $a0,$a0,$s1
li $v0,
syscall
j main getlword:
sub,$t0,$t0,
sll $t0,$t0,
la $s0,al_offset
add $s0,$s0,$t0
lw $s1,($s0)
la $a0,alphabetL
add $a0,$a0,$s1
li $v0,
syscall
j main exit:
add $a0,$,'\n'
li $v0,
syscall la $a0,exit_str
li $v0,
syscall

第二题:字符串查找比较

题目要求

利用系统功能调用从键盘输入一个字符串,然后输入单个字符,查找该字符串中是否有该字符(区分大小写)。具体要求如下:

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

       Success! Location: X

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

  2、如果没找到,则在屏幕上显示

    Fail!

  3、输入一个字符串后,可以反复输入希望查询的字符,直到按“?”键结束程序

  4、每个输入字符独占一行,输出查找结果独占一行,位置编码从1开始。

提示:为避免歧义,字符串内不包含”?”符号

MIPS代码

 #https://ehye.github.io/2017/10/10/MIPS-program-design0/
.data
success_str: .asciiz "\nSuccess! Location: "
fail_str: .asciiz "\nFail!
buffer: .space
exit_str: .asciiz "\n#Stop program#"
str1: .asciiz "Enter string: "
str2: .asciiz "Enter char: .text
.globl main
main:
#init
# a0 = input/result string
# a1 = input string length
# a2 = input char
# a3 = loop donefail
li $a3,
li $t0, #take string
la $a0,buffer
li $a1,
li $v0,
syscall takechar:
li $v0,
syscall
beq $v0,'?',exit
move $a2,$v0 search:
beq $t0,$a1,fail #if (i == length) then donefail
la $a0,buffer #else load byte
add $t2,$a0,$t0 #$t2 = $a0 + offset
lb $s1,($t2) #$s1 = *$t2
beq $s1,$a2,success #if($s1 == $a2),thne sucess
add $t0,$t0, #i++
j search fail:
add $a3,$zero, # flag donefail =
add $t0,$zero,$zero # reset int i = la $a0,fail_str
li $v0,
syscall add $a0,$zero,'\n'
li $v0,
syscall
j takechar success:
la $a0,success_str
li $v0,
syscall li $v0,
add $a0,$t0, #print index begin from
syscall add $a0,$zero,'\n'
li $v0,
syscall
add $t0,$zero, #reset int i =
j takechar exit:
la $a0,exit_str #print exit
li $v0,
syscall li $v0, #exit
syscall

解释一下,由于这个编辑器插入代码不能选择MIPS,所以没有语法高亮,额,哎哎,水平太菜,知道好的解决方法得大佬请留言啊!

MIPS程序设计实例的更多相关文章

  1. gpgpu-sim卡分配程序设计实例分析

    gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...

  2. Java 打印程序设计实例

    3.1 打印文本 3.1.1 应用场景 假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印 54 行,如何实现呢? 3.1.2 解决方法 基本思路如下:首 ...

  3. 《Java程序设计》终极不改版【下】

    package 大学生信息管理系统; import java.awt.event.*; import javax.swing.*; import java.awt.*; import java.uti ...

  4. 《程序设计方法》【PDF】下载

    内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...

  5. 批处理引擎MapReduce程序设计

    批处理引擎MapReduce程序设计 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce API Hadoop同时提供了新旧两套MapReduce API,新AP ...

  6. C#图书资源【更新中...】喜欢的就转存吧

    百度分享暂时取消了,需要的朋友可以直接关注我,我发给你. 重点篇 1.C#与.NET3.5高级程序设计 2.C#与.NET3.5高级程序设计.rar 3.Effective_C#_中文版_改善C#程序 ...

  7. 3000本IT书籍下载地址

    http://www.shouce.ren/post/d/id/112300    黑客攻防实战入门与提高.pdfhttp://www.shouce.ren/post/d/id/112299    黑 ...

  8. B/S在北大青鸟-ASP.NET 总结

    一个.前言: 这几周跟着于海涛老师进入了.NET编程世界.领略到了ASP.NET的精髓. 要说起ASP.NET的发展史,那要追溯到HTML了,由于它功能简单,无法从用户接收信息并自己主动进行更新.而不 ...

  9. 如何学习FPGA

    如何学习FPGA 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/k331922164/article/details/44626989 PS:笔者强 ...

随机推荐

  1. Fitnesse中TemplateLibrary的使用方法

    1.新建一个SuitePage,命名为TemplateLibrary 2.然后如下图,添加作为template的TestPage,如下面的Get 3.在Get page中添加template内容,如下 ...

  2. selenium浏览器驱动下载地址整理

    今天把手头有的一些关于selenium测试的资源整理了一下,分享出来. 1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是 ...

  3. TP5之使用layui分页样式

    1.首先你得引入layui文件吧 2.在 application\config.php 中配置,像这样,,, 3.controller中这样写 $data = Db::table($table) -& ...

  4. Lightoj1000【简单A+B】

    balababalabalabala! #include<stdio.h> #include<queue> #include<string.h> #include& ...

  5. ES6之Promise对象学习——8个例子学会Promise

    目录 Promise 立即执行 Promise 三种状态 Promise 不可逆性 链式调用 Promise.then()回调异步性 Promise中的异常 Promise.resolve() res ...

  6. Memcached 查看帮助

    进入到memcached目录, 输入命令: memcached -h 即可查看帮助 -p<num>要侦听的TCP端口号(默认值:11211) -u<num>udp监听端口号(默 ...

  7. ubuntu 14.04 源码编译postgresql

    环境 ubuntu 14.04 桌面版 postgresql 源码下载链接,本教程是使用postgresql 9.3.4 进行编译的 http://www.postgresql.org/ftp/sou ...

  8. MyBatis逆向工程中domainObjectRenamingRule报错或无效

    使用domainObjectRenamingRule报错 在使用MyBatis逆向工程时报错如下: org.mybatis.generator.exception.XMLParserException ...

  9. JTextArea设置滚动条

    应将JTextArea置于JScrollPanel中 若要使只有垂直滚动条而没有水平滚动条,使用JTextArea.setLineWrap(true),自动换行.   以下摘自[url]http:// ...

  10. 洛谷 P2662 牛场围栏

    做法是这样的: 首先暴力把所有可能的边长搞出来..(当然<=0的不要) 排序边长+去重, 当且仅当可行边长里面有1时,任何长度都能取到,输出-1 当且仅当所有可行边长的gcd大于1时,不能取到的 ...