MIPS汇编语言实现Fibonacci数列(斐波那契数列)
MIPS汇编语言实现Fibonacci数列的存储和输出,其中输出方式有两种(十进制和十六进制)。
下面给出自己的代码,如有bug欢迎指出
.data
start: .asciiz "\n Input N = "
last: .asciiz "\n The result is "
out1: .asciiz "\n N is not legal\n"
out2: .asciiz "\n overflow\n"
empty: .asciiz " "
Hex: .asciiz " 0Xxxxxxxxx\n"
buf: .word 1,1.space 4096 #设定数组大小.text
main: la $a0,startli $v0,4syscall #输出startla $a0,bufmove $a1,$a0 #$a1是地址 ==$s2li $v0,5syscall #输入Naddi $v0,$v0,-1move $a0,$v0 #$a0是计数器N ==$s3bltz $a0,out_1move $t5,$a1move $t6,$a0li $s1,1jal FIB #按要求存储数据addi $a3,$a0,0li $a2,0la $a0,startli $v0,4syscaljal print #按要求打印数据li $v0,10 #退出syscall
FIB: ble $t6,$s1,ret #$t6<=1就返回addi $a2,$t5,4lw $t1,($t5)lw $t2,($a2)addu $a3,$t1,$t2 addi $t4,$0,-1 #f3=f1+f2subu $t3,$t4,$t1bltu $t3,$t2,out_2 #判断溢出sw $a3,4($a2)addi $t5,$t5,4addi $t6,$t6,-1b FIB
print: bgt $a2,$a3,retmove $a0,$a2li $v0,1syscall #打印下标la $a0,emptyli $v0,4syscall #空格lw $a0,($a1)li $v0,1syscall #打印十进制数值la $a0,emptyli $v0,4syscall #空格lw $a0,($a1)addi $sp,$sp,-16sw $ra,12($sp)sw $a0,8($sp)sw $a2,4($sp) sw $a1,($sp) #用堆栈存储来保护寄存器中的值jal hex #调用hex函数转换成十六进制lw $ra,12($sp)lw $a0,8($sp)lw $a2,4($sp)lw $a1,($sp) #恢复相应寄存器的值addi $sp,$sp,16la $a0,Hexli $v0,4syscall #输出转换好的的十六进制字符串addi $a1,$a1,4addi $a2,$a2,1b print
hex: la $a0, Hex lw $a1,8($sp)li $a2, 7 #循环次数addi $t1, $a0, 10 #从位置buf+10处开始存放16进制数
loop: andi $t0, $a1, 0x0f #取a1的低4位srl $a1, $a1, 4 #a1右移4位bge $t0, 10, char #t0大于等于10跳转到为A-F处理addi $t0, $t0, 0x30 #0的ASCII码为0x30,在原先基础上加0x30b put
char: addi $t0, $t0, 0x37 #A的ASCII码为65,在原先基础上加(65-10)
put: sb $t0, ($t1) #放置字符addi $t1, $t1, -1 #放置位置前移一个字符addi $a2, $a2, -1 #将循环次数减1bgez $a2, loop #判断循环是否结束jr $ra
out_1: la $a0,out1 #N非法li $v0,4syscallb out
out_2: la $a0,out2 #数值出现溢出li $v0,4syscallb out
ret: jr $ra #返回地址out: li $v0,10 #退出syscall
已通过mars测试.
测试结果:
MIPS汇编语言实现Fibonacci数列(斐波那契数列)相关推荐
- C++large fibonacci大斐波那契数列的实现(附完整源码)
C++large fibonacci大斐波那契数列的实现算法 C++large fibonacci大斐波那契数列的实现算法完整源码(定义,实现,main函数测试) 用于对任意大数执行算术运算的库lar ...
- Python - Python3 编程第一步 Fibonacci series: 斐波纳契数列
Fibonacci series: 斐波纳契数列, 两个元素的总和确定了下一个数,例如:1 1 2 3 5 8 13 21 34 55 Python程序如下: def fibonacci1(n):a, ...
- HDU1568 Fibonacci【斐波拉契数列】
Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU-A Fibonacci sequence斐波那契数列-大数求和
问题及代码: /* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:Fibonacci.cpp *作 者:单昕昕 *完成日期 ...
- 第十一章 ALDS1_10_A:Fibonacci Number 斐波那契数列
问题链接 ALDS1_10_A:Fibonacci Number 问题内容 求出斐波那契数列的第n项的值. 思路 递推并记录前n项的值到数组,求第n项的值时用到第n-1项和第n-2项,这样我们先记录开 ...
- 斐波那契数列不用数组_兔子数列——斐波那契数列
相信人们都对斐波那契数列有或多或少的了解,如果没有,那你一定听过黄金分割比或是见过下面这种图片: 斐波那契生活在十三世纪的意大利,原名列奥纳多·皮萨诺(Leonardo Pisano),他出生在意大利 ...
- matlab斐波那契数列画图,斐波拉契数列 斐波那契数列 matlab程序
斐波那契数列数列从第3项开始,每一项都等于前两项之和. 例子:数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,25 ...
- 斐波那契数列编程python_fibonacci数列-斐波那契数列-python编程
未完待续~ 了解fibonacci数列: 斐波纳契数列(Fibonacci Sequence),又称黄金分割数列. 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610 ...
- c语言斐波那契数列_神奇的数列——斐波那契数列
斐波那契数列之美 斐波那契是一位数学家,生于公元1170年,籍贯大概是比萨,卒于1240年后.1202年,他撰写了<珠算原理>(Liber Abaci)一书.他是第一个研究了印度和阿拉伯数 ...
- HDU1250 Hat's Fibonacci 大数斐波那契数列
点击打开链接 Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
最新文章
- 简单好听的id_一位妈妈给孩子的10大家规,简单实用,值得所有父母借鉴!
- 如何在 Kubernetes 中对无状态应用进行分批发布
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- LASSOS方程--图像降噪
- 执行Hive的查询语句报错:java.lang.IllegalArgumentException: Does not contain a valid host:port authority: loca
- 李飞飞:一站式全链路数据管理与服务成为产业布局重点
- Python __all__的作用
- java进程消失_Linux系统下的Java进程无故消失的解决方法
- 宽度发生变化事件监听_PyQt5(3) :实现登录 事件监听处理 程序逻辑功能和界面分离...
- SQLiteDatabase中query、insert、update、delete方法参数说明
- Bootstrap 3之美03-独立行,文字环绕,图片自适应,隐藏元素
- 科学网—中文普通话语音识别DEMO,LilyMandarinSpeechRecognition V1.0 - 石自强的博文...
- Postman发送GET请求带中文
- 绑定touch事件后click无效,vue项目解决棒法
- 最简单的文件加密工具(完全免费)
- 计算过去某天距离今天过去了多少天。
- 华为人报:实事求是科研方向与20年艰苦努力
- 二分算法实例应用(二)
- 学海拾遗:汇编语言实验
- [SWPU2019]伟大的侦探1