系统功能调用实现简单输入输出(mips)
2014-03-31 17:01
351 查看
摘要: mips汇编
系统功能调用实现简单输入输出
实验目的:熟悉MIPS的指令,掌握简单的汇编程序结构。
实验内容:利用系统功能调用从键盘输入,转换后在屏幕上显示,具体要求如下:
(1) 如果输入的是字母(A~Z,不区分大小写)或数字(0~9),则将其转换成对应的英文单词后在屏幕上显示,对应关系见下表
(2) 若输入的不是字母或数字,则在屏幕上输出字符“*”
(3) 每输入一个字符,即时转换并在屏幕上显示,需考虑显示结果的清晰美观
(4) 支持反复输入,直到按?键结束程序
(5) 程序结束时,在屏幕上显示本人的姓名全拼和学号
例:在键盘上输入“U2011/”,对应输出内容为“Uniform two zero one one *”
==================
syscall 里好像没有不回显的从键盘读
输出"退格"也是不行的,好像直接输出了个空格.
也有可能是mars模拟器太弱了.
这里以及另外一道的esc结束,都替换成了'?'结束
系统功能调用实现简单输入输出
实验目的:熟悉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结束,都替换成了'?'结束
相关文章推荐
- MIPS:用系统功能调用实现简单输入输出
- MIPS:用系统功能调用实现简单输入输出
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- 关于iOS中简单实现调用系统相机及相册功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- 关于iOS中简单实现调用系统相机及相册功能
- 关于iOS中简单实现调用系统相机及相册功能
- x86:用DOS功能调用实现简单输入输出
- 用DOS功能调用实现简单输入输出(汇编)
- 关于iOS中简单实现调用系统相机及相册功能
- Android编程实现调用系统图库与裁剪图片功能
- linux下使用系统调用编程实现copy命令功能
- python 简单照相机调用系统摄像头实现 pygame
- 简单的asp.net模拟邮箱系统基础实现(一 总体功能版块的设计,与简单数据库的设计)
- 调用系统代码实现电话短信功能
- Python django实现简单的邮件系统发送邮件功能
- Lua的系统学习(杂)_通过Lua调用C#方法(热更新最直观的原理理解)_简单的随机数实现
- 内存管理以及相关函数(系统调用和内核函数功能和实现)资料(汇总)