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

题目要求

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

  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. iOS 中 常用的第三方库

    现在对于我们 iOS 开发来说,基本上说不可能不使用第三方轮子啦,毕竟没那么多时间,而且自己造的轮子往往想着成为上图中的最后一个,结果却成了上图中第二个或第一个啦,当然大公司另当别论.下面我从之前用过 ...

  2. 序列化框架MJExtension详解 + iOS ORM框架

    当开发中你的模型中属性名称和 字典(JSON/XML) 中的key 不能一一对应时, 或者当字典中嵌套了多层字典数组时..., 以及教你如何用 MJExtension 配置类来统一管理你的模型配置, ...

  3. CodeForces——Game with string(STL stack栈)

    Two people are playing a game with a string ss, consisting of lowercase latin letters. On a player's ...

  4. CodeForces691C 【模拟】

    这一题的模拟只要注意前后导零就好了... 感受就是... 如果是比赛中模拟题打好..要盯着注意点,测试不同的情况下的注意点..起码要针对性测试10分钟.. 还是蛮简单的,但是自己打烦了,应该,队友代码 ...

  5. OPENGL_三角形带GL_TRIANGLE_STRIP详解

    使用三角形带原因:减少顶点传递,渲染时api向显卡传输数据量是瓶颈,用较好的传递方法传递一个三角形最少可以少于一个点. 点的顺序根据奇数,偶数不一样的原因:保持所有三角形法线在同一方向. 原文:htt ...

  6. (十三)SpringBoot 发送E-mail

    一:添加mail依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...

  7. ZOJ1221 Risk

    Description Risk is a board game in which several opposing players attempt to conquer the world. The ...

  8. Spring Boot后端+Vue前端+微信小程序,完整的开源解决方案!

    项目简介 一个小商场系统,包括: 后端:Spring Boot 管理员前端:Vue 用户前端:微信小程序 功能介绍 1.小商城 首页 专题列表.专题详情 分类列表.分类详情 品牌列表.品牌详情 新品首 ...

  9. Java泛型学习摘抄

  10. Java - 怎么通过环境变量来切换jdk版本

    问题与分析 我在本地安装了1.7和1.8两个版本的jdk,此时我的JAVA_HOME环境变量配置的是jdk1.8,在cmd窗口输入java -version发现报错如下: C:\Users\Lewis ...