Escolar Documentos
Profissional Documentos
Cultura Documentos
Laboratório - Assembly-Procedimentos
Laboratório - Assembly-Procedimentos
de computadores II
1 APRESENTAÇÃO
Colocar o valor de retorno em um local onde o programa que o chamou possa acedê-
lo;
Retornar o controlo para o ponto de origem, pois um procedimento pode ser chamado
de vários pontos em um programa.
Para apoiar tais situações, computadores como o MIPS utilizam uma instrução de jump
register.
jr $ra
Como temos de cobrir nossos rastos após o término desta missão, quaisquer registadores
necessários ao caller deverão ser restaurados aos valores que possuíam antes de o
procedimento ser chamado.
– uma fila do tipo “último a entrar, primeiro a sair”. Uma pilha precisa de um ponteiro para o
endereço alocado mais recentemente na pilha, a fim de mostrar onde o próximo
procedimento deverá colocar os spilled registers ou onde os valores antigos dos
registradores estão localizados.
O stack pointer é ajustado em uma palavra para cada registrador salvo ou restaurado
O stack pointer é ajustado em uma palavra para cada registrador salvo ou restaurado.
O software MIPS reserva o registrador 29 para o stack pointer, dando-lhe o nome óbvio $sp.
As pilhas são tão comuns que possuem seus próprios termos para transferir dados da pilha e
para ela: colocar dados na pilha é denominado push, e remover dados da pilha é
denominado pop.
Pilha (stack) – Uma estrutura de dados utilizada para armazenar o spilled registers,
organizada como uma fila do tipo “último a entrar, primeiro a sair” LIFO
Stack pointer – Um valor indicando o endereço alocado mais recentemente em uma pilha,
que mostra onde o spilled registers devem se armazenados ou onde os valores antigos dos
registadores podem ser localizados.
Antes de retornar, restauramos os três valores antigos dos registradores que salvamos,
desempilhando-os:
Os valores do stack pointer e a pilha (a) antes, (b) durante e (c) após a chamada do
procedimento.
O stack pointer sempre aponta para o “topo” da pilha ou para a última palavra na pilha
neste desenho.
2022/2023
Na primeira vez que fact é chamado, sw salva um endereço do programa que chamou
fact.
Depois, ele retira os dois valores salvos da pilha e desvia para o endereço de retorno:
Antes de retirar dois itens da pilha, poderíamos ter restaurado $a0 e $ra. Como $a0 e $ra
não mudam quando n é menor do que 1, pulamos essas instruções.
Principal
PATTERSON, D. A. e HENNESSY, J.L. Computer organization and design: the
hardware/software interface 4. Ed. Elsevier Editora Ltda: 2014.
Complementar
STALLINGS, W. Computer organization and architecture: designing for performance 8. Ed.
São Paulo: Pearson Pratice Hall, 2010.
25
Volenti Nihil Difficili -“A quem quer, nada é difícil”