MIPS bne解析器语法错误

时间:2017-10-08 05:37:55

标签: mips mips32 qtspim

我正在尝试为我的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
          ^

任何和所有的帮助将非常感谢!非常感谢你!

1 个答案:

答案 0 :(得分:0)

当第一个参数不等于第二个参数时,

bne将分支到第三个参数指定的标签,在您的情况下,如果$a0不是,则告诉它分支等于$0,但你没有给它跳转标签,bne的最后一个参数是源文件中定义任何地方的标签,你拥有的是bne $t0, $0, 1,什么是1?此外,1不是有效标签的名称,标签必须只包含字母,数字和下划线,它们必须以字母开头,并且它们不能是任何特殊说明。 MIPS指令集