MIPS:用系统功能调用实现简单输入输出
来源:互联网 发布:mac保存书签 编辑:程序博客网 时间:2024/06/05 08:59
实验目的:熟悉MIPS的指令,掌握简单的汇编程序结构。
实验内容:利用系统功能调用从键盘输入,转换后在屏幕上显示,具体要求如下:
(1) 如果输入的是字母(A~Z,不区分大小写)或数字(0~9),则将其转换成对应的英文单词后在屏幕上显示,对应关系见下表
(2) 若输入的不是字母或数字,则在屏幕上输出字符“*”
(3) 每输入一个字符,即时转换并在屏幕上显示,需考虑显示结果的清晰美观
(4) 支持反复输入,直到按?键结束程序
(5) 程序结束时,在屏幕上显示本人的姓名全拼和学号
例:在键盘上输入“PKU2011/”,对应输出内容为“Papa Kilo 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
.dataalphabet: .asciiz "Alpha ","Bravo ","Charlie ","Delta ","Echo ","Foxtrot ","Golf ","Hotel ","India ","Juliet ","Kilo ","Lima ","Mike ","November ","Oscar ","Papa ","Quebec ","Romeo ","Sierra ","Tango ","Uniform ","Victor ","Whisky ","X-ray ","Yankee ","Zulu "al_offset: .word 0,7,14,23,30,36,45,51,58,65,73,79,85,91,101,108,114,122,129,137,144,153,161,169,176,184number: .asciiz "zero ", "one ", "two ", "three ", "four ", "five ", "six ", "seven ","eight ","nine "n_offset: .word 0,6,11,16,23,29,35,40,47,54 myname:.asciiz "\r\nNAME: Wu Yiting\r\n"myid:.asciiz "ID: 1200012875\r\n" .text .globl main #? word length[] = 4main:li $v0, 12syscallsub $t1, $v0, 63# is '?" ?beqz $t1, exitsub $t1, $v0, 48 # 0 asciislt $s0, $t1, $0# if t1 < 0 then s0 = 1bnez $s0, otherssub $t2, $t1, 10slt $s1, $t2, $0bnez $s1, getnum# is capital?sub $t2, $v0, 91slt $s3, $t2, $0# if v0 <= 'Z' then s3 = 1sub $t3, $v0, 64sgt $s4, $t3, $0# if v0 >='A' then s4 = 1and $s0, $s3, $s4# if s3 == 1 && s4 == 1 bnez $s0, getword# is lower case?sub $t2, $v0, 123slt $s3, $t2, $0# if v0 <= 'z' then s3 = 1sub $t3,$v0, 96sgt $s4, $t3, $0# if v0 >= 'a' then s4 = 1and $s0, $s3, $s4bnez $s0, getwordj othersgetnum: add $t2, $t2, 10sll $t2, $t2, 2la $s0, n_offsetadd $s0, $s0, $t2lw $s1, ($s0)#sll $s1, $s1, 1la $a0, numberadd $a0, $a0, $s1li $v0, 4syscallj maingetword:sub $t3, $t3, 1sll $t3, $t3,2la $s0, al_offsetadd $s0, $s0, $t3lw $s1, ($s0)#sll $s1, $s1, 1la $a0, alphabetadd $a0, $s1, $a0li $v0, 4syscallj mainothers:and $a0, $0, $0add $a0, $a0, 42li $v0, 11syscallj mainexit:la $a0, mynameli $v0, 4syscallla $a0, myidli $v0, 4syscallli $v0, 1syscall##problem of offset
1、跟x86这题类似采用了二次寻址的思想(偏移量是写代码跑出来的=v=, 机器可以做的事情还是懒得数了)
2、夹逼确定数字以及大小写
3、注意.word偏移量*4(这里‘,’不会影响),而.ascii偏移量*1(尤其坑的是‘,’也算一位,调了很久才发现)
0 0
- MIPS:用系统功能调用实现简单输入输出
- x86:用DOS功能调用实现简单输入输出
- mips的系统调用
- 利用中断调用实现简单的输入输出
- 利用中断调用实现简单的输入输出
- [MIPS汇编语言]简单排序实现
- MIPS Linux 下添加系统调用
- MIPS系统调用与user API
- MIPS中断/异常处理机制/系统调用
- mips处理器linux内核添加系统调用
- MIPS中的异常处理和系统调用
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- 关于iOS中简单实现调用系统相机及相册功能
- 关于iOS中简单实现调用系统相机及相册功能
- 关于iOS中简单实现调用系统相机及相册功能
- 关于iOS中简单实现调用系统相机及相册功能
- 用vector(向量)实现动态开辟二维三维数组
- Cocos2d-x简单游戏<打飞机>代码实现|第四部分:主场景<Helloworld.h>
- 一个基于LL(1)的简易C++四则表达式计算
- 邀请别人看照片
- android ListView示例代码
- MIPS:用系统功能调用实现简单输入输出
- ARM初学者学习ARM的步骤
- S3C2416裸机开发系列十_串口打印调试
- 最短路-floyd
- eclipse优化设置(二)
- cocos2d-x简单游戏<打飞机>代码实现|第四部分:主场景<Helloworld.m>
- Android RingtoneManager铃声管理
- Leetcode_longest-consecutive-sequence
- 基于USB总线的无线网卡驱动程序