Вы находитесь на странице: 1из 10

SSC0112

Organização de
Computadores Digitais I
7ª Aula – Assembly MIPS
Profa. Sarita Mazzini Bruschi
sarita@icmc.usp.br

1
Procedimentos
• Passos:
– Colocar os parâmetros em um local onde o procedimento possa
encontrá-lo
– Transferir o controle para o procedimento
– Adquirir os recursos de armazenamento necessários para o
procedimento
– Realizar a tarefa desejada
– Colocar o valor de retorno em um local onde o programa que
chamou possa acessá-lo

2
Procedimentos
• Registradores (convenção)
– $a0 a $a3: argumentos
– $v0 e $v1: retorno
– $ra: endereço de retorno

3
Procedimentos
• Duas instruções para chamada de procedimentos:
– jal <label>
• jump and link
• Desvio incondicional, salvando o endereço da próxima instrução no $ra
– jr $ra
• jump register
• Desvio incondicional para o endereço armazenado em $ra

4
Procedimentos
• O registrador $ra é sempre utilizado para armazenar o
endereço de retorno
– O que acontece quando se tem chamadas de procedimentos
aninhadas?
– Deve-se utilizar a pilha para salvar o valor do registrador $ra

5
Procedimentos
• Deve-se utilizar a pilha também para salvar os registradores
internos ao procedimento
• Como utilizar a pilha no Assembly MIPS?

6
Procedimentos
• Primeiramente, deve-se criar espaço para a quantidade de
palavras que serão salvas
– addi $sp, -12 # reserva 3 palavras
– addi $sp, -8 # reserva 2 palavras
– addi $sp, -4 # reserva 1 palavra

7
Procedimentos
• Logo depois, deve-se armazenar os registradores nas palavras
reservadas
– Utiliza-se a instrução sw (store word)
– Sintaxe:
• sw <registrador>, <posicao_memoria>
onde <posicao_memoria> pode ser no formato:
<deslocamento>(<reg_base>)
– Exemplo:
• sw $s1, 20($s0)
– Memória[20+$s0] = $s1
8
Procedimentos
• Exemplo para armazenar (empilhar) os registradores $a0 e $ra na pilha
addi $sp, $sp,-8 # decrementa $sp
sw $a0, 4($sp) # salva $a0 na pilha
sw $ra, 0($sp) # salva $ra na pilha
• Exemplo para retirar os retirar (desempilhar) os registradores $a0 e $ra
da pilha
lw $a0, 4($sp) # recupera $a0 da pilha
lw $ra, 0($sp) # recupera $ra da pilha
addi $sp, $sp, 8 # incrementa $sp

9
Exemplos
• Fatorial não recursivo com procedimento
• Fatorial recursivo

10

Вам также может понравиться