简单的 MIPS 程序集 - 返回斐波那契数
Simple MIPS Assembly - Returning a Fibonacci number
我正在尝试创建一个简单的汇编代码,它接受一个输入 N 和 returns 第 N 个斐波那契数(例如,如果你输入 2,它应该输出 1,如果你输入 3,它应该输出 2 ).我的代码没有抛出任何错误,但在你输入一个数字后它 returns 有点奇怪。
如果输入1,则returns2685009921。
如果输入 2,则 returns0.01。
如果输入 3,则 returns0.02。
如果您输入 4,它会在开头输出文本,要求输入一个正整数,然后输入 3(正确答案)。
如果你输入 5,它什么都不输出,当你再次按下 enter 时,它会给出一个 运行 时间异常(无效的整数输入系统调用 5)。
超过五的任何东西都会出现奇怪的错误。
这几乎就好像它是 运行 以输入数字作为代码的系统调用,这可以解释为什么前四个数字输出东西(前四个系统调用输出数据)。
你怎么看?这是代码:
.data
introText: .asciiz "Type a positive integer, please! \n"
input: .word 123
.text
# ask user for input
li $v0, 4
la $a0, introText
syscall
# read input int
li $v0, 5
syscall
# store input
addi $s1, $v0, 0
syscall
# main loop
li $s2, 0 # s2 starts at 0 and will increase until it's equal to $s1, the player input
li $s3, 0 # this will hold the most recent fib number
li $s4, 1 # this will hold the second most recent fib number
loop:
addi $s2, $s2, 1 # increment s2 for loop
add $s5, $s3, $s4 # make the current result the sum of the last two fib numbers
addi, $s4, $s3, 0 # make the second most recent fib number equal to the most recent fib number
addi, $s3, $s5, 0 # make the most recent fib number equal to the current fib number
bne $s2, $s1, loop
# return the answer
li $v0, 1
addi $a0, $s5, 0
syscall
# end program
li $v0, 10
syscall
出于某种原因,您在 addi $s1, $v0, 0
之后放置了 syscall
。那个指令不应该在那里。
我正在尝试创建一个简单的汇编代码,它接受一个输入 N 和 returns 第 N 个斐波那契数(例如,如果你输入 2,它应该输出 1,如果你输入 3,它应该输出 2 ).我的代码没有抛出任何错误,但在你输入一个数字后它 returns 有点奇怪。
如果输入1,则returns2685009921。 如果输入 2,则 returns0.01。 如果输入 3,则 returns0.02。 如果您输入 4,它会在开头输出文本,要求输入一个正整数,然后输入 3(正确答案)。 如果你输入 5,它什么都不输出,当你再次按下 enter 时,它会给出一个 运行 时间异常(无效的整数输入系统调用 5)。 超过五的任何东西都会出现奇怪的错误。
这几乎就好像它是 运行 以输入数字作为代码的系统调用,这可以解释为什么前四个数字输出东西(前四个系统调用输出数据)。
你怎么看?这是代码:
.data
introText: .asciiz "Type a positive integer, please! \n"
input: .word 123
.text
# ask user for input
li $v0, 4
la $a0, introText
syscall
# read input int
li $v0, 5
syscall
# store input
addi $s1, $v0, 0
syscall
# main loop
li $s2, 0 # s2 starts at 0 and will increase until it's equal to $s1, the player input
li $s3, 0 # this will hold the most recent fib number
li $s4, 1 # this will hold the second most recent fib number
loop:
addi $s2, $s2, 1 # increment s2 for loop
add $s5, $s3, $s4 # make the current result the sum of the last two fib numbers
addi, $s4, $s3, 0 # make the second most recent fib number equal to the most recent fib number
addi, $s3, $s5, 0 # make the most recent fib number equal to the current fib number
bne $s2, $s1, loop
# return the answer
li $v0, 1
addi $a0, $s5, 0
syscall
# end program
li $v0, 10
syscall
出于某种原因,您在 addi $s1, $v0, 0
之后放置了 syscall
。那个指令不应该在那里。