【发布时间】:2016-01-27 17:48:22
【问题描述】:
我在作业中遇到了一些问题,希望能得到一些帮助。我不是在问答案,我更喜欢把两个和两个放在一起来自己弄清楚,但我对 MIPS 知之甚少,我很难知道从哪里开始。
这是我的开始
.data
.text
main:
addi $sp, $sp, -16 #prepare stack for 4 items
sw $s0, 0($sp)
sw $s1, 4($sp)
sw $s2, 8($sp)
sw $ra, 12($sp)
move $s0, $a0
move $s1, $a1
add $s2, $s0, $s1 #add two previous numbers and store result in $s2
move $v0, $s2 #put answer into $v0
lw $s0, 0($sp)
lw $s1, 4($sp)
lw $s2, 8($sp)
lw $ra, 12($sp)
addi $sp, $sp, 16
jr$ra
本质上,我们将使用递归函数来计算斐波那契数,并使用循环打印出斐波那契数列的前 10 个数。
我查阅了很多示例,但它们都使用了我们还没有学过的指令,所以我无法理解它,我只能假设我们不希望使用它们。在上面的代码中,我实际上是在创建一个堆栈来存储 $ra 以及三个值,即要添加的两个数字和总和。我的部分问题是了解函数的开始和结束位置以及正在完成的工作的全部内容。
我们还被告知要打印您使用以下内容
li $v0, 1
move $a0, $s0
syscall
我认为这是打印存储在 $v0 中的值是否正确?
【问题讨论】: