Coursera - 计算机组成 - W3 - MIPS汇编程序设计
2016-12-29 17:55
363 查看
第一题:用系统功能调用实现简单输入输出
利用系统功能调用从键盘输入,转换后在屏幕上显示,具体要求如下:(1) 如果输入的是字母(A~Z,区分大小写)或数字(0~9),则将其转换成对应的英文单词后在屏幕上显示,对应关系见下表
(2) 若输入的不是字母或数字,则在屏幕上输出字符“*”,
(3) 每输入一个字符,即时转换并在屏幕上显示,
(4) 支持反复输入,直到按“?”键结束程序。
A Alpha N November 1 First a alpha n november
B Bravo O Oscar 2 Second b bravo o oscar
C China P Paper 3 Third c china p paper
D Delta Q Quebec 4 Fourth d delta q quebec
E Echo R Research 5 Fifth e echo r research
F Foxtrot S Sierra 6 Sixth f foxtrot s sierra
G Golf T Tango 7 Seventh g golf t tango
H Hotel U Uniform 8 Eighth h hotel u uniform
I India V Victor 9 Ninth i india v victor
J Juliet W Whisky 0 zero j juliet w whisky
K Kilo X X-ray k kilo x x-ray
L Lima Y Yankee l lima y yankee
M Mary Z Zulu m mary z zulu
# 用系统功能调用实现简单输入输出 # '0'=48 '9'=57 'A'=65 'Z'=90 'a'=97 'z'=122 '*'=42 '?'=63 '\n'=10 .data arrC: .asciiz "Alpha", "Bravo", "China", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mary", "November" ,"Oscar", "Paper", "Quebec", "Research", "Sierra", "Tango", "Uniform", "Victor", "Whisky", "X-ray", "Yankee", "Zulu" indC: .word 0, 6, 12, 18, 24, 29, 37, 42, 48, 54, 61, 66, 71, 76, 85, 91, 97, 104, 113, 120, 126, 134, 141, 148, 154, 161 arrN: .asciiz "zero", "First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh", "Eighth", "Ninth" indN: .word 0, 5, 11, 18, 24, 31, 37, 43, 51, 58 # 输出换行 .macro newline li $v0, 11 li $a0, 10 # '\n' syscall .end_macro .text .globl main main: # 输入一个字符 li $v0, 12 syscall move $t0, $v0 newline # 问号表示结束 li $t1, 63 # '?' beq $t0, $t1, exit # 大写字母 uc: # 'A'-1 < $t0 < 'Z'+1 li $t1, 64 sltu $t2, $t1, $t0 li $t1, 91 sltu $t3, $t0, $t1 and $t1, $t2, $t3 beqz $t1, lc # 取出偏移量 subu $t1, $t0, 65 la $t2, indC addu $t2, $t2, $t1 addu $t2, $t2, $t1 addu $t2, $t2, $t1 addu $t2, $t2, $t1 lw $t2, ($t2) # 输出字符串 li $v0, 4 la $a0, arrC addu $a0, $a0, $t2 syscall b loop # 小写字母 lc: # 'a'-1 < $t0 < 'z'+1 li $t1, 96 sltu $t2, $t1, $t0 li $t1, 123 sltu $t3, $t0, $t1 and $t1, $t2, $t3 beqz $t1, num # 取出偏移量 subu $t1, $t0, 97 la $t2, indC addu $t2, $t2, $t1 addu $t2, $t2, $t1 addu $t2, $t2, $t1 addu $t2, $t2, $t1 lw $t2, ($t2) # 输出首字母 li $v0, 11 move $a0, $t0 syscall # 输出其余字符串 li $v0, 4 la $a0, arrC addu $a0, $a0, $t2 addiu $a0, $a0, 1 syscall b loop # 数字 num: # '0'-1 < 输入 < '9'+1 li $t1, 47 sltu $t2, $t1, $t0 li $t1, 58 sltu $t3, $t0, $t1 and $t1, $t2, $t3 beqz $t1, unknown # 取出偏移量 subu $t1, $t0, 48 la $t2, indN addu $t2, $t2, $t1 addu $t2, $t2, $t1 addu $t2, $t2, $t1 addu $t2, $t2, $t1 lw $t2, ($t2) # 输出字符串 li $v0, 4 la $a0, arrN addu $a0, $a0, $t2 syscall b loop # 其它 unknown: # 输出星号 li $v0, 11 li $a0, 42 # '*' syscall # 循环 loop: newline b main exit: # 退出 # eof
第二题:字符串查找比较
利用系统功能调用从键盘输入一个字符串,然后输入单个字符,查找该字符串中是否有该字符(区分大小写)。具体要求如下:(1) 如果找到,则在屏幕上显示:
Success! Location: X
其中,X为该字符在字符串中第一次出现的位置
(2) 如果没找到,则在屏幕上显示:
Fail!
(3) 输入一个字符串后,可以反复输入希望查询的字符,直到按“?”键结束程序
(4) 每个输入字符独占一行,输出查找结果独占一行,位置编码从1开始。
提示:为避免歧义,字符串内不包含”?”符号
格式示例如下:
abcdefgh
a
Success! Location: 1
x
Fail!
# 字符串查找比较 # '?'=63 '\n'=10 .data string: .space 1024 successmsg: .asciiz "Success! Location: " failmsg: .asciiz "Fail!" # 输出换行 .macro newline li $v0, 11 li $a0, 10 # '\n' syscall .end_macro .text .globl main main: # 输入字符串 li $v0, 8 la $a0, string li $a1, 1024 syscall # 去除最后一个换行符 li $t0, 10 # '\n' la $t1, string search_0: lb $t2, ($t1) beqz $t2, string_end addiu $t1, $t1, 1 b search_0 string_end: la $t2, string beq $t1, $t2, input addiu $t1, $t1, -1 lb $t2, ($t1) bne $t2, $t0, input sb $0, ($t1) # 输入字符 input: li $v0, 12 syscall move $t0, $v0 newline # 问号表示结束 li $t1, 63 # '?' beq $t0, $t1, exit # 查找字符 la $t1, string search: lb $t2, ($t1) beqz $t2, not_found beq $t0, $t2, found addiu $t1, $t1, 1 b search # 找到字符 found: li $v0, 4 la $a0, successmsg syscall li $v0, 1 la $t2, string subu $a0, $t1, $t2 addiu $a0, $a0, 1 syscall b loop # 没找到 not_found: li $v0, 4 la $a0, failmsg syscall # 循环 loop: newline b input exit: # 退出 # eof
-eof-
相关文章推荐
- 计算机组成第一次互评作业:MIPS汇编程序设计
- [Coursera]计算机组成_Week3_Mips_Q1
- 基于Dais CMX16的计算机组成原理微程序课程设计
- 第一次互评作业:MIPS汇编程序设计
- [Coursera]计算机组成_Week3_Mips_Q2
- 汇编,C,C++,计算机硬件,数据结构算法,计算机网络,设计模式,这些任何一门不精通,你根本就不懂程序,更不可能成为大牛,Hack就更谈不上了。
- 计算机组成原理之MIPS汇编:冒泡排序
- 程序设计实践-规则汇编
- 深入理解计算机系统读书笔记之一个简单汇编程序的调试分析
- 程序设计实践-规则汇编
- 计算机组成实验-第6章_CPU控制器设计
- 汇编程序语言设计复习题整理
- 计算机组成原理课程设计之设计RISC处理器
- 汇编程序语言设计复习题整理
- 计算机组成实验-第4章_ALU与ALU控制器设计实验
- 【汇编】 汇编程序设计中的英文缩写
- 计算机组成原理课程设计报告书
- 关于汇编程序设计
- 组成原理课程设计——微程序初版(无注释版)
- 32位环境下的16汇编程序设计