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

题目要求

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

  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. Flutter实战视频-移动电商-02.Flutter实战建立项目和编写入口文件

    02.Flutter实战建立项目和编写入口文件 创建项目: flutter create flutter_shop 创建完成之后呢,它会提示我们, 进入flutter_shop的目录,然后执行flut ...

  2. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 26. 缓存

    In-Memory 使用IMemeryCache接口 注册缓存 HomeController注入进来 建一个类,用来存缓存的常量 判断缓存里面是否有数据,如果没有就读数据库存起来. 设置缓存事件,可调 ...

  3. Validtion

    今天在使用Validation框架实现验证时,出现以上的错误.查询资料后发现“validation-config.dtd”这个文件没有导入自己的工程,才会出现这样的错误. 将从文件导入后果然解决了问题 ...

  4. supervisor简明教程

    一.supervisor是什么 Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态 ...

  5. pre 自动换行

    pre { white-space:pre-wrap; word-wrap:break-word; } 增加那么一句即可!

  6. E20181012-hm

    expiration  n. 呼气; 截止; 满期;

  7. HDU5904【瞎搞】

    哇咔咔,挂完. 靠着hack的100分挂在了rank167... 就是memset的问题,超时了:用map好了.. 思路: 标记a串以当前值为尾的上升子序列长度,然后还是搞b串,每次判一下当前值在a串 ...

  8. unity 引入 android第三方sdk

    unity中调用java代码中介绍了unity调用android java代码的一些基础.引入android开发第三方sdk的操作跟调用java代码的操作相似,只是多了一步引入第三方jar. unit ...

  9. OPENGL2_基本框架

    一些概念 HDC:设备描述句柄(窗口着色描述表句柄),是WINDOWS的一种数据类型,HDC定义的变量指向一块内存,这块内存用来描述一个设备的相关的内容(设备描述表). HGLRC:OpenGL渲染环 ...

  10. OPENGL0_简介

    opengl定义: Open Graphics Library,开放图形程序接口,跨平台,跨语言.提供了与底层图形硬件的接口,是一个功能强大的底层图形库. opengl库种类: gl:核心库,常规,核 ...