неверное значение счетчика программы: 0 - PullRequest
2 голосов
/ 13 мая 2010

В настоящее время я работаю с языком ассемблера под процессором MIPS. я в настоящее время используя симулятор MARS и по неизвестным причинам я получаю следующее сообщение об ошибке после каждого запуска:

Go: работает try.s

Ошибка в: неверное значение счетчика программы: 0

Go: выполнение прекращено с ошибками.

Я получаю это сообщение об ошибке независимо от кода, который я использую, просто интересно, если это ошибка в симуляторе MARS или если что-то мне не хватает.

Ответы [ 3 ]

7 голосов
/ 14 ноября 2010

Вы, вероятно, заканчиваете свою программу с jr $ra (возврат к вызывающей стороне). Однако код, выполняемый MARS, не имеет вызывающей стороны - он выполняется при запуске и не имеет функции для возврата, поэтому содержимое $ra равно нулю.

Правильный способ завершить программу на MARS - использовать системный вызов exit:

    li $v0, 10
    syscall
5 голосов
/ 03 февраля 2011

Я новичок в MIPS, и у меня только что была эта проблема. Вот что у меня было:

    .data

    .text

swap:
    # do stuff
    jr  $ra

main:
    # do stuff
    jal swap
    li  $v0,10
    syscall

Я исправил это, изменив это на:

    .data

    .text
main:
    # do stuff
    jal swap
    li  $v0,10
    syscall

swap:
    # do stuff
    jr  $ra

Обратите внимание, что я переместился в главное, чтобы быть перед свопом. Я ошибочно предположил, что main был зарезервированным ярлыком. И что он автоматически прыгнет прямо на главную в первую очередь. Но, очевидно, это не тот случай, потому что он выполнял мои инструкции jr $ ra, прежде чем я вызвал jal swap в main.

В любом случае, я надеюсь, что это поможет.

3 голосов
/ 02 октября 2011

Я знаю, что этот вопрос старый, но для тех, кто был таким же, как я, и отчаянно пытался найти ответ: попытайтесь выполнить описанную выше задачу системного вызова вместо возврата и попробуйте поставить свою основную функцию перед всеми другими метками. Кроме того, в меню «Настройки» есть «Инициализировать счетчик программы на глобальный« основной », если он определен»; убедитесь, что проверено. Я не знаю, позволяет ли это включить основной ярлык после других ярлыков, так как я еще не пробовал. То, что я описал, это то, что я сделал, чтобы это работало, и ничего больше. Удачи!

...