我正在尝试为我的CS课程学习MIPS汇编语言。我在语法上努力尝试编写这个程序。我看过我教授给我们的另一个例子,我密切关注它。我在我的分支机构上遇到错误并不等同。代码如下。
# Main program that will call subroutine fib to calculate the fibonacci and
# print the result
.text
.globl main
sub $sp,$sp,4
sw $ra,0($sp)
li $a0,3
jal fib
la $a0,str
syscall
sw $a0,0($v0)
syscall
lw $ra,0($sp)
add $sp,$sp,4
jr $ra
.data
str:
.asciiz "fib = "
.text
fib:
sw $a1,0($a0)
bne $a0,$0,1 # Branch if the argument is not equal to zero
add $v0,$0 # If it is equal to 0,add 0 to the return value.
addi $t0,$0,1 # Create temporary equal to 1.
bne $a0,$t0,1 # Branch if argument is not equal to 1.
addi $v0,1 # If it is,add one to the return value.
addi $sp,$sp,-4 # Create space on the stack for the return value.
sw $ra,0($sp) # Save old return address to the stack
addi $a0,-1
jal fib #jump to fib and save address
addi $a0,$a1,-2 #subtract 2 from the starting number.
jal fib
lw $ra,0($sp)
add $sp,$sp,4
jr $ra
我知道此代码目前无法正常运行。但是,我不是在寻求帮助编程这个函数,我只是希望能够运行它以便我可以看到发生了什么。在我甚至可以加载文件之前,我在下一行收到语法错误。
bne $a0,$0,1 # Branch if the argument is not equal to zero
错误内容如下。
spim: (parser) syntax error on line 35 of file ...
bne $a0,$0,1 #Branch if the argument is not equal to zero
^
任何和所有的帮助将非常感谢!非常感谢你!
答案 0 :(得分:0)
bne
将分支到第三个参数指定的标签,在您的情况下,如果$a0
不是,则告诉它分支等于$0
,但你没有给它跳转标签,bne
的最后一个参数是源文件中定义任何地方的标签,你拥有的是bne $t0, $0, 1
,什么是1
?此外,1
不是有效标签的名称,标签必须只包含字母,数字和下划线,它们必须以字母开头,并且它们不能是任何特殊说明。 MIPS指令集