文档章节

系统功能调用实现简单输入输出(mips)

locusxt
 locusxt
发布于 2014/03/30 11:59
字数 799
阅读 971
收藏 1

系统功能调用实现简单输入输出

实验目的:熟悉MIPS的指令,掌握简单的汇编程序结构。

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

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

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

(3) 每输入一个字符,即时转换并在屏幕上显示,需考虑显示结果的清晰美观

(4) 支持反复输入,直到按?键结束程序

(5) 程序结束时,在屏幕上显示本人的姓名全拼和学号

例:在键盘上输入“U2011/”,对应输出内容为“Uniform two zero one one *

A

Alpha

N

November

1

one

B

Bravo

O

Oscar

2

two

C

Charlie

P

Papa

3

three

D

Delta

Q

Quebec

4

four

E

Echo

R

Romeo

5

five

F

Foxtrot

S

Sierra

6

six

G

Golf

T

Tango

7

seven

H

Hotel

U

Uniform

8

eight

I

India

V

Victor

9

nine

J

Juliet

W

Whisky

0

zero

K

Kilo

X

X-ray

 

 

L

Lima

Y

Yankee

 

 

M

Mike

Z

Zulu

 

.data
myname:.asciiz "\r\nNAME:locusxt\r\n"
id:	.asciiz "ID:locusxt\r\n"
aa:	.asciiz "Alpha " #以下是字母对应的字符串
bb:	.asciiz "Bravo "
cc:	.asciiz "Charlie "
dd:	.asciiz "Delta "
ee:	.asciiz "Echo "
ff:	.asciiz "Foxtrot "
gg:	.asciiz "Golf "
hh:	.asciiz "Hotel "
ii:	.asciiz "India "
jj:	.asciiz "Juliet "
kk:	.asciiz "Kilo "
lll:	.asciiz "Lima "
mm:	.asciiz "Mike "
nn:	.asciiz "November "
oo:	.asciiz "Oscar "
pp:	.asciiz "Papa "
qq:	.asciiz "Quebec "
rr:	.asciiz "Romeo "
ss:	.asciiz "Sierra "
tt:	.asciiz "Tango "
uu:	.asciiz "Uniform "
vv:	.asciiz "Victor "
ww:	.asciiz "Whisky "
xx:	.asciiz "X-ray "
yy:	.asciiz "Yankee "
zz:	.asciiz "Zulu "
zero:	.asciiz "zero "    #以下是数字对应的单词
one:	.asciiz "one "
two:	.asciiz "two "
three:	.asciiz "three "
four:	.asciiz "four "
five:	.asciiz "five "
six:	.asciiz "six "
seven:	.asciiz "seven "
eight:	.asciiz "eight "
nine:	.asciiz "nine "
star:	.asciiz "* "
alphabet: .word aa, bb, cc, dd, ee, ff, gg, hh, ii, jj, kk, lll, mm, nn, oo, pp ,qq, rr, ss, tt, uu, vv, ww, xx, yy, zz
num:	 .word zero, one, two, three, four, five, six, seven, eight, nine

backspace:	.asciiz "\b"

	.text
        .globl main
main:	
	li $s0, 'z'
	li $s1, 'a'
	li $s2, 'Z'
	li $s3, 'A'
	li $s4, '9'
	li $s5, '0'
	
	
getKey:
	li $v0, 12
	syscall
	
	#addi $t0, $v0, 0
	
	#la $a0, backspace
	#li $v0, 4
	#syscall
	
	#addi $v0, $t0, 0
	
compare:
	
	li $t0, '?'
	beq $v0, $t0, deal
	
	#判断是不是小写字母
	slt $t0, $s0, $v0 #s0 < v0 ?
	bne $t0, $0, dispstar
	slt $t0, $v0, $s1 #v0 < s1 ?
	beq $t0, $0, dispalph
	
	#判断是不是大写字母
	slt $t0, $s2, $v0
	bne $t0, $0, dispstar
	slt $t0, $v0, $s3
	beq $t0, $0, dispalphc
	
	#判断是不是数字
	slt $t0, $s4, $v0
	bne $t0, $0, dispstar
	slt $t0, $v0, $s5
	beq $t0, $0, dispnum
	
	j dispstar

dispalphc:#大写字母+32变小写
	addi $v0, $v0, 32
dispalph:#处理字母
	sub $v0, $v0, $s1 #v0 -= 'a'
	sll $v0, $v0, 2
	la $t0, alphabet
	add $t0, $t0, $v0
	lw $a0, ($t0)
	li $v0, 4
	syscall
	j getKey
dispnum:#处理数字
	sub $v0, $v0, $s5 #v0 -= '0'
	sll $v0, $v0, 2
	la $t0, num
	add $t0, $t0, $v0
	lw $a0, ($t0)
	li $v0, 4
	syscall
	j getKey
	
dispstar:
	la $a0, star
	li $v0, 4
	syscall
	j getKey

deal:#处理问号
	la $a0, myname
	li $v0, 4
	syscall
	la $a0, id
	li $v0, 4
	syscall



==================
syscall 里好像没有不回显的从键盘读
输出"退格"也是不行的,好像直接输出了个空格.
也有可能是mars模拟器太弱了.
这里以及另外一道的esc结束,都替换成了'?'结束

© 著作权归作者所有

下一篇: booth算法
locusxt
粉丝 27
博文 140
码字总数 90989
作品 0
海淀
程序员
私信 提问
加载中

评论(2)

locusxt
locusxt 博主

引用来自“leo_xiaofeixia”的评论

这是大几的课程内容啊?

计算机系大二

l
leo_xiaofeixia
这是大几的课程内容啊?
MIPS:用系统功能调用实现简单输入输出

实验目的:熟悉MIPS的指令,掌握简单的汇编程序结构。 实验内容:利用系统功能调用从键盘输入,转换后在屏幕上显示,具体要求如下: (1) 如果输入的是字母(A~Z,不区分大小写)或数字(0~9...

AlsaVictoria
2014/04/06
1K
0
路由器固件安全分析技术(一)

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

广岛秋泽
2017/06/24
0
0
基于 Unicorn 和 LibFuzzer 的模拟执行 fuzzing

作者:刘瑞恺 @平安科技银河实验室 原文链接:基于Unicorn和LibFuzzer的模拟执行fuzzing 之前,银河实验室对基于unicorn的模拟执行fuzzing技术进行了研究。在上次研究的基础上,我们进一步整...

平安科技银河实验室
08/02
0
0
libcsdbg 1.23 发布,C++ 异常堆栈跟踪器

libcsdbg-1.23会新增缓冲的输出流类的串行设备(sttybuf)。使用sttybuf对象,可以输出LDP页眉和跟踪数据的任何种类的串行设备(RS-232,RS-485,USB端子,虚拟终端机等)。当然,你可以使用...

kuki42
2014/02/15
758
0
可重定义 RISC-V 处理器核--f32c

f32c是可重定向的,标量的,流水线的32位处理器核,其可以执行RISC-V或MIPS指令集的子集。它在参数化VHDL中实现,其允许具有不同面积/速度权衡的合成,并且包括分支预测器,异常处理控制块和...

匿名
2017/01/05
614
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux 之docker部署,走过的那些坑

初次使用docker, 多有不足,这里把坑一点点的记下来 概念篇 docker 是什么? 太多文字不同,书读的少, 不懂大大道理; 在我的理解, 它就是个沙箱环境; 在linux中 ,独立进程, 有着自己的小世界 使...

莫库什勒
18分钟前
3
0
vue class绑定 组件

本文转载于:专业的前端网站➬vue class绑定 组件 当在一个自定义组件上使用 class 属性时,这些类将被添加到该组件的根元素上面。这个元素上已经存在的类不会被覆盖。 例如,如果你声明了这个...

前端老手
今天
4
0
exist和in

exist和in select ..from table where exist (子查询) ; select ..from table where 字段 in (子查询) ; 如果主查询的数据集大,则使用In,效率高。 如果子查询的数据集大,则使用exist,效率高...

潦草的犀牛
今天
5
0
Android OkHttp + Retrofit 取消请求的方法

本文链接 前言 在某一个界面,用户发起了一个网络请求,因为某种原因用户在网络请求完成前离开了当前界面,比较好的做法是取消这个网络请求。对于OkHttp来说,具体是调用Call的cancel方法。 ...

shzwork
今天
6
0
并发编程之Callable异步,Future模式

Callable 在Java中,创建线程一般有两种方式,一种是继承Thread类,一种是实现Runnable接口。然而,这两种方式的缺点是在线程任务执行结束后,无法获取执行结果。我们一般只能采用共享变量或...

codeobj
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部