MIPS程序无法正常工作错误:在表格中找不到符号出口

时间:2018-06-26 19:11:15

标签: assembly mips

.text
main:

检查用户输入的第二个值是否小于零,如果是,则退出程序

blez $t1, exit

接受用户的首次输入

la,$a0,InputValone
li,$v0,4
syscall

li,$v0,5
move $t0,$v0
syscall

接受用户的第二次输入

la,$a0,InputValTwo
li $v0,4
syscall

li $v0,5
move $v0,$t1
syscall

将两个输入相乘

mul $t2,$t1,$t0
move $t3,$t0

loop:
    beq $t2,$t3, endloop    #if $t2==$t3, end the program
    add $t3,$t3,$t0     #else $t3=$t3+$t0

    b loop

    la      $a0,OutputValue
    li      $v0,4
    syscall

    move    $a0,$t3
    li      $v0,1
    syscall


    endloop:
.data
    InputValone: .asciiz "Enter Your First Value : "
    InputValTwo: .asciiz "Enter Your Second Value : "
    OutputValue: .asciiz "Output is : "

1 个答案:

答案 0 :(得分:1)

 endloop:
 .data

您真的不想要这样做吗?

使用blez $t1, exitbeq $t2,$t3, endloop之类的跳转指令跳转到标签。

显然exit:标签丢失了。

还没有定义endloop:标签后的哪条指令:

普通编译器(对于真正的MIPS CPU,不是MIPS仿真器)将在代码部分的最后一条指令和.data部分之间插入一些伪字节-就像这样:

endloop:
  .word some_dummy_data
  .word some_dummy_data
  .word some_dummy_data
  .word some_dummy_data
  .word some_dummy_data
  ...
.data

CPU会将这些字节解释为指令并执行它们...

您必须添加exit:标签,然后ll have to add code after the endloop:`标签:

exit:
endloop:
    li      $v0,<value that exits the program>
    syscall

不知道您的模拟器,我无法告诉您退出程序的v0的正确值。对于Linux / MIPS,值v0=4001是合适的...