Программа MIPS не работает Ошибка: символ выхода не найден в таблице - PullRequest
0 голосов
/ 26 июня 2018
.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 голосов
/ 26 июня 2018
 endloop:
 .data

Вы не очень хотите этого делать?

Используя инструкцию перехода, например blez $t1, exit или beq $t2,$t3, endloop, вы переходите к метке.

Очевидно, что метка exit: отсутствует.

И не определено, какая инструкция следует за меткой endloop::

Обычные компиляторы (для реальных процессоров MIPS, а не для эмуляторов MIPS) вставляют несколько фиктивных байтов между последней инструкцией раздела кода и разделом .data - вот так:

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

Процессор интерпретирует эти байты как инструкции и выполняет их ...

Вам нужно будет добавить метку exit:, и вы ll have to add code after the endloop: `label:

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

Не зная вашего симулятора, я не могу сказать вам правильное значение для v0 для выхода из программы. Для Linux / MIPS подойдет значение v0=4001 ...

...