Procedimentos e funções
Entrada e saída do procedimento
- chamada jal etiqueta
- retorno jr $ra
Valores
- argumentos $a0 ... $a3
- resultados $v0 (e $v1)
Estrutura de activação contém
- argumentos (quando são + de 4)
- registos salvados ($s0 ... $s7, $ra)
- variáveis locais (quando são + de 8)
Convenção para a chamada de procedimentos
Registo $sp indica a última posição ocupada
na pilha
Início da chamada
- guarda os registos a preservar ($t?,
$a?, ...)
- coloca os argumentos em $a0 ... $a3
- coloca os restantes argumentos na a pilha (arg5,
arg6, ...)
- salta para o bloco de código do procedimento: jal
etiqueta
Início do bloco de código do procedimento
- reserva espaço para a estrutura: addiu $sp,
$sp, -espaço
- guarda registos que vão ser alterados localmente
$s0 ... $s7, $ra
Fim do bloco de código do procedimento
- actualiza $v0 (e $v1) com o valor de
retorno
- recupera os valores iniciais dos registos alterados
- liberta o espaço da estrutura: addiu $sp, $sp,
espaço
- regressa ao código de chamada jr $ra
Fim da chamada
- liberta o espaço dos argumentos colocados na pilha
- recupera os valores iniciais dos registos preservados ($t?)