я пытаюсь перевести этот простой фрагмент C в MIPS:Невозможно выяснить ошибку MIPS в MARS: Ошибка в: недопустимое значение счетчика программы: 0x00000000 Перейти: выполнение прекращается с ошибками
int leaf_example(int g, int h, int i, int j) {
int f;
f = (g + h) - (i + j);
return f;
}
Это мой MIPS код:
.text
main:
leaf:
addi $sp, $sp, -8 #adjust stack to make room for 3 items
sw $t1, 8($sp) #save register $t1 for use in memory location 8
sw $t0, 4($sp) #save register $t0 for use in memory location 4
sw $s0, 0($sp) #save register $s0 for use in memory location 0
add $t0, $a0, $a1 #register $t0 contains $a0 + $a1
add $t1, $a2, $a3 #register $t1 contains $a2 + $a3
sub $s0, $t0, $t1 #$t0 = $t0 - $t1 -> $t0 = ($a0 + $a1) - ($a2 + $a3)
add $v0, $s0, $zero #copy $s0 to return register $v0
#Before returning, we restore three original values of registers we pushed onto stack by popping them
lw $s0, 0($sp) #restore register $s0 for caller
lw $t0, 4($sp) #restore register $t0 for caller
lw $t1, 8($sp) #restore register $t1 for caller
addi $sp, $sp, 8 #adjust stack to delete 3 items
jr $ra #jump back to calling routine
Однако, когда я компилирую и попытка запуска этого, он дает мне эту ошибку:
«Ошибка: недопустимое значение счетчика программы: 0x00000000
Перейти: выполнение завершено с ошибками. "
Я вообще не понимаю эту ошибку. Может кто-то указать мне верное направление?
Вы храните 12 байт в стеке, но только выделенное пространство для 8. – Jester
'точка PC' к следующей инструкции в памяти для выполнения. Если он указывает на '0x0000', ваш' PC' указывает куда-то не так. Возможно, вы переопределили его где-нибудь в своем коде. –
@Jester Что значит? Он начинается с 0, и у меня есть три элемента: 0, 4 и 8. Должен ли мой код 'addi $ sp, $ sp, -12 ...' вместо этого? –