функции (процедуры) в MIPS
Я новичок в языке MIPS, и я не понимаю, как работают функции (процедуры) на языке сборки MIPS. Вот только я уточню свою проблему:
-
что:
jal
jr
$ra
mean на языке mips и важная вещь
- как мы можем использовать их, когда мы хотим создать функцию (или процедуру)?
3 ответов
во-первых, вы можете проверить этой быстрая ссылка MIPS. Это действительно помогло мне.
во-вторых, объяснить jal
, jr
и $ra
. Что?!--4-- > делает это перейти к label
ярлык и магазин счетчик (считайте это адрес текущей команды) в $ra
зарегистрироваться. Теперь, когда вы хотите вернуться из label
туда, где вы изначально были, просто использовать jr $ra
.
вот пример:
.text
main:
li $t0, 1
jal procedure # call procedure
li $v0, 10
syscall
procedure:
li $t0, 3
jr $ra # return
вы заметите при запуске этого в эмуляторе SPIM, что значение осталось в $t0
это 3, тот, который загружен в так называемый процедура.
надеюсь, что это помогает.
1.первые две-это инструкции, третья-это своего рода специальный регистр
- jal=перейти и ссылка (адрес следующей инструкции положить в $ra,и перейти к целевому адресу)
- jr=перейти, чтобы указать register
- $ra=обратный адрес
мы часто используем такую инструкцию ...
- jr $ra (копировать $ra в счетчик программ)
это означает возврат(переход) на адрес, сохраненный в $РА .
2.
вот пример функции (процедуры) в C
int main(){
x=addthem(a,b);
}
int addthem(int a, int b){
return a+b;
}
функция в MIPS
.text
main: #assume value a is already in $t0, b in $t1
add $a0,,$t0 # it's the same function as move the value
add $a1,,$t1
jal addthem # call procedure
add $t3,,$v0 # move the return value from $v0 to where we want
syscall
addthem:
addi $sp,$sp,-4 # Moving Stack pointer
sw $t0, 0($sp) # Store previous value
add $t0,$a0,$a1 # Procedure Body
add $v0,,$t0 # Result
lw $t0, 0($sp) # Load previous value
addi $sp,$sp,4 # Moving Stack pointer
jr $ra # return (Copy $ra to PC)
вы захотите прочитать двоичный интерфейс приложения System V, дополнение процессора MIPS RISC. Это описывает соглашения, используемые для вызова функций, в частности, как стек управляется и параметры обмениваются (в MIPS нет аппаратного стека, все дело в соглашениях программного обеспечения, и ABI определяет эти соглашения).
документ выше предполагает некоторые базовые знания о том, что делают инструкции MIPS, поэтому вам также понадобится архитектура MIPS32 для программистов, в частности Том II (набор инструкций), в котором подробно описывается эффект каждой инструкции. Но, сделайте себе одолжение, сначала загрузите и прочитайте Том I (введение).
на jal
инструкция-это "прыжок и ссылке" код. Это скачков по целевому адресу (который является адресом первого кода операции вызываемой процедуры) при сохранении текущего указателя инструкции в связь регистров, который является регистром 31 (точнее, он сохраняет в регистре 31 значение x+8, где x адрес jal
сам код операции).