При вызове C из MIPS мы используем JR или JALR?

Я пишу самомодифицирующийся код и хочу вызвать функцию C (назовем ее foo) из MIPS.

Я загрузил добавление памяти foo, &foo в $t1. Сейчас я jr/jalr $t1.

Будет ли C устанавливать $ra в качестве моего текущего ПК(+8) (до прыжка), что позволит мне использовать JR, или вместо этого мне придется использовать JALR (т.е. позаботиться об этом, потому что C этого не сделает)?

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


person C.E.Sally    schedule 10.02.2013    source источник
comment
Просто чтобы убедиться, но ваш C скомпилирован как MIPS, верно?   -  person Seth Carnegie    schedule 10.02.2013
comment
Какой компилятор вы используете?   -  person Seth Carnegie    schedule 10.02.2013
comment
@SethCarnegie, я использую исходный код codebench lite, который, если я не ошибаюсь, представляет собой модифицированную сборку gcc и работает на симуляторе OVP Malta (это плата MIPS, которая может запускать Linux).   -  person C.E.Sally    schedule 10.02.2013


Ответы (1)


Вы должны использовать JALR. Как функция C могла знать, как установить $ra для вас?

person zwol    schedule 10.02.2013