sub-rotinas e pilha - rc.unesp.br · sub-rotinas sub-rotinas são essenciais para o desenvolvimento...
TRANSCRIPT
![Page 1: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/1.jpg)
MICROPROCESSADORES II (EMA911915)
SUB-ROTINAS E PILHA 2O SEMESTRE / 2018
![Page 2: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/2.jpg)
MATERIAL DIDÁTICO
◆ Harris & Harris • 6.4.6 – Procedure Calls
◆ Patterson & Hennessy (4a edição) • 2.8 – Supporting Procedures in Computer Hardware
◆ Usem as referências acima somente para entender os conceitos. As instruções para procedimentos e formato da pilha que usaremos difere dos apresentados acima
• Melhor referência: Nios II Processor Reference Handbook, capítulo 7
Microprocessadores II - Sub-rotinas e pilha
![Page 3: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/3.jpg)
SUB-ROTINAS
◆ Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado
• Programação procedural
◆ Sub-rotinas permitem aos programadores se concentrarem em apenas uma parte da tarefa por vez
◆ Parâmetros funcionam como uma interface entre uma sub-rotina e o resto do programa
• Dados podem ser passados para a sub-rotina e retornados por essa
Microprocessadores II - Sub-rotinas e pilha
![Page 4: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/4.jpg)
EXECUÇÃO DE SUB-ROTINAS
◆ Na execução de uma sub-rotina, o programa deve seguir 6 passos básicos
1. Colocar os parâmetros em algum lugar onde a sub-rotina possa acessá-los
2. Transferir controle para a sub-rotina 3. Reservar recursos (memória) necessários à sub-rotina 4. Realizar o trabalho necessário 5. Colocar o resultado em algum lugar acessível a quem chamou a sub-
rotina 6. Retornar controle ao ponto de origem (quem chamou)
Microprocessadores II - Sub-rotinas e pilha
![Page 5: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/5.jpg)
EXECUÇÃO DE SUB-ROTINAS
◆ Na execução de uma sub-rotina, o programa deve seguir 6 passos básicos
1. Colocar os parâmetros em algum lugar onde a sub-rotina possa acessá-los
2. Transferir controle para a sub-rotina 3. Reservar recursos (memória) necessários à sub-rotina 4. Realizar o trabalho necessário 5. Colocar o resultado em algum lugar acessível a quem chamou a sub-
rotina 6. Retornar controle ao ponto de origem (quem chamou)
Memória (pilha) ou registradores?
Microprocessadores II - Sub-rotinas e pilha
![Page 6: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/6.jpg)
EXECUÇÃO DE SUB-ROTINAS
◆ Na execução de uma sub-rotina, o programa deve seguir 6 passos básicos
1. Colocar os parâmetros em algum lugar onde a sub-rotina possa acessá-los
2. Transferir controle para a sub-rotina 3. Reservar recursos (memória) necessários à sub-rotina 4. Realizar o trabalho necessário 5. Colocar o resultado em algum lugar acessível a quem chamou a sub-
rotina 6. Retornar controle ao ponto de origem (quem chamou)
Instrução do processador
Microprocessadores II - Sub-rotinas e pilha
![Page 7: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/7.jpg)
EXECUÇÃO DE SUB-ROTINAS
◆ Na execução de uma sub-rotina, o programa deve seguir 6 passos básicos
1. Colocar os parâmetros em algum lugar onde a sub-rotina possa acessá-los
2. Transferir controle para a sub-rotina 3. Reservar recursos (memória) necessários à sub-rotina 4. Realizar o trabalho necessário 5. Colocar o resultado em algum lugar acessível a quem chamou a sub-
rotina 6. Retornar controle ao ponto de origem (quem chamou)
Configurar stack frame
Microprocessadores II - Sub-rotinas e pilha
![Page 8: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/8.jpg)
EXECUÇÃO DE SUB-ROTINAS
◆ Na execução de uma sub-rotina, o programa deve seguir 6 passos básicos
1. Colocar os parâmetros em algum lugar onde a sub-rotina possa acessá-los
2. Transferir controle para a sub-rotina 3. Reservar recursos (memória) necessários à sub-rotina 4. Realizar o trabalho necessário 5. Colocar o resultado em algum lugar acessível a quem chamou a sub-
rotina 6. Retornar controle ao ponto de origem (quem chamou)
Microprocessadores II - Sub-rotinas e pilha
![Page 9: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/9.jpg)
EXECUÇÃO DE SUB-ROTINAS
◆ Na execução de uma sub-rotina, o programa deve seguir 6 passos básicos
1. Colocar os parâmetros em algum lugar onde a sub-rotina possa acessá-los
2. Transferir controle para a sub-rotina 3. Reservar recursos (memória) necessários à sub-rotina 4. Realizar o trabalho necessário 5. Colocar o resultado em algum lugar acessível a quem chamou a sub-
rotina 6. Retornar controle ao ponto de origem (quem chamou)
Novamente... pilha ou
registradores ?
Microprocessadores II - Sub-rotinas e pilha
![Page 10: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/10.jpg)
EXECUÇÃO DE SUB-ROTINAS
◆ Na execução de uma sub-rotina, o programa deve seguir 6 passos básicos
1. Colocar os parâmetros em algum lugar onde a sub-rotina possa acessá-los
2. Transferir controle para a sub-rotina 3. Reservar recursos (memória) necessários à sub-rotina 4. Realizar o trabalho necessário 5. Colocar o resultado em algum lugar acessível a quem chamou a sub-
rotina 6. Retornar controle ao ponto de origem (quem chamou)
Instrução do processador
Microprocessadores II - Sub-rotinas e pilha
![Page 11: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/11.jpg)
STACK FRAME
◆ Também chamado de registro de ativação (activation record)
◆ Área de memória (pilha) que armazena o estado da sub-rotina, e contém geramente as seguintes informações
• Os argumentos passados para a sub-rotina • O endereço de retorno para quem chamou (caller) • Espaço para as variáveis locais à sub-rotina
Microprocessadores II - Sub-rotinas e pilha
![Page 12: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/12.jpg)
ALGUMAS PERGUNTAS
◆ Passar os parâmetros através da pilha ou registradores? • Se registradores, quais ?
◆ Qual o formato (conteúdo) do stack frame ?
◆ Quais registradores devem ser salvos pela sub-rotina chamada (callee) e quais pelo programa que a chamou (caller) ?
◆ Como retornar o(s) resultado(s) ? • Se registradores, quais ?
Microprocessadores II - Sub-rotinas e pilha
![Page 13: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/13.jpg)
APPLICATION BINARY INTERFACE (ABI)
◆ As respostas para as perguntas anteriores são respondidas pela ABI
◆ ABI é uma convenção que determina a interface entre o processador e o sistema (sistema operacional + compilador)
• Quais os tamanhos para os tipos de dados básicos • Quais registradores precisam ser salvos pela sub-rotina chamada • Qual o layout do stack frame
Microprocessadores II - Sub-rotinas e pilha
![Page 14: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/14.jpg)
ABI ALTERA NIOS II
◆ Presente no capítulo 7 da referência “Nios II Processor Reference Handbook”
• Disponível no site da disciplina
◆ Nos nossos programas em linguagem de montagem vamos seguir essa ABI
• Essencial quando estivermos mesclando código assembly e C
Microprocessadores II - Sub-rotinas e pilha
![Page 15: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/15.jpg)
USO DE REGISTRADORES
◆ A ABI define o seguinte uso
Registrador Nome Uso regular
r0 zero 0x00000000
r1 at Temporário usado pelo montador
r2 Valor de retorno (32 bits menos significativos)
r3 Valor de retorno (32 bits mais significativos)
r4 ... r7 Registradores de argumento (primeiro ao quarto, respectivamente)
r8 ... r15 Registradores de propósito geral, salvos pelo caller
r16 ... r23 Registradores de propósito geral, salvos pelo callee
r27 sp Stack pointer
r28 fp Frame pointer
r31 ra Endereço de retorno
Os registradores omitidos serão vistos mais adiante na disciplina – procurar não usá-los no momento
Microprocessadores II - Sub-rotinas e pilha
![Page 16: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/16.jpg)
PILHA (1)
◆ A pilha é a estrutura utilizada para comunicação entre o caller e o callee, e para variáveis automáticas (locais)
• Lembre-se: pilha –> last-in, first-out
◆ Quando mais de quatro argumentos devem ser passados para uma sub-rotina, precisamos usar a pilha
• A ABI só fornece 4 registradores
◆ Um registrador especial, stack pointer (sp), aponta para o último elemento inserido na pilha
Microprocessadores II - Sub-rotinas e pilha
![Page 17: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/17.jpg)
PILHA (2)
◆ A pilha “cresce para baixo”, ou seja, de endereços maiores para menores
◆ Para facilitar a manipulação do stack frame, um outro registrador, chamado de frame pointer (ou base pointer), é usado
◆ O frame pointer sempre aponta para o antigo frame pointer salvo na pilha (geralmente no topo da stack frame)
Microprocessadores II - Sub-rotinas e pilha
![Page 18: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/18.jpg)
STACK FRAME – NIOS II
argumentos de saída da pilha
endereços altos
endereços baixos
stack pointer (sp) argumentos de entrada da pilha
endereço de retorno
antigo frame pointer
registradores salvos
espaço para variáveis
temporárias
espaço para argumentos de
saída para outra chamada stack pointer (sp)
frame pointer (fp)
Alocado e liberado pelo caller
Alocado e liberado pelo callee (sub-rotina corrente)
pilha antes da chamada forma geral da pilha após stack frame ter sido inicializado
Microprocessadores II - Sub-rotinas e pilha
![Page 19: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/19.jpg)
CHAMADA E RETORNO
◆ A instrução do Nios II usada para saltar para sub-rotina é a call
◆ A instrução call automaticamente já salva PC+4 (endereço de retorno) no registrador r31 (ra)
◆ Para retornar de uma sub-rotina, usamos a instrução ret
call minha_rotina
Salta para sub-rotina chamada minha_rotina
ret
Microprocessadores II - Sub-rotinas e pilha
![Page 20: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/20.jpg)
PRÓLOGO E EPÍLOGO
◆ Prólogo • Trecho de código inicial em uma sub-rotina, responsável por configurar a
stack frame • No Nios II, o prólogo deve:
• Ajustar o stack pointer (alocar espaço para o frame) • Armazenar registradores no frame • Setar o frame pointer para a posição do frame pointer anterior salvo na
pilha
◆ Epílogo • Trecho de código no final da sub-rotina responsável por restaurar os
registradores e o estado da pilha
Microprocessadores II - Sub-rotinas e pilha
![Page 21: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/21.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp) Estado atual da pilha antes da chamada
Microprocessadores II - Sub-rotinas e pilha
![Page 22: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/22.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp) Após chamada ...
/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8
Microprocessadores II - Sub-rotinas e pilha
![Page 23: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/23.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp)
Após chamada ...
/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8
Microprocessadores II - Sub-rotinas e pilha
![Page 24: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/24.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp)
Após chamada ...
/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8
ra
Microprocessadores II - Sub-rotinas e pilha
![Page 25: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/25.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp)
Após chamada ...
/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8
ra
fp
Microprocessadores II - Sub-rotinas e pilha
![Page 26: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/26.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp)
Após chamada ...
/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8
ra
fp
r16
Microprocessadores II - Sub-rotinas e pilha
![Page 27: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/27.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp)
Após chamada ...
/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8
ra
fp
r16
r17
Microprocessadores II - Sub-rotinas e pilha
![Page 28: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/28.jpg)
EXEMPLO – PRÓLOGO
stack pointer (sp)
Após chamada ...
/* Adjust the stack pointer */ addi sp, sp, -16 /* make a 16-byte frame */ /* Store registers to the frame */ stw ra, 12(sp) /* store the return address */ stw fp, 8(sp) /* store the frame pointer*/ stw r16, 4(sp) /* store callee-saved register */ stw r17, 0(sp) /* store callee-saved register */ /* Set the new frame pointer */ addi fp, sp, 8
ra
fp
r16
r17
frame pointer (fp)
Microprocessadores II - Sub-rotinas e pilha
![Page 29: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/29.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp)
Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
fp
r16
r17
frame pointer (fp)
Microprocessadores II - Sub-rotinas e pilha
![Page 30: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/30.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp)
Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
fp
r16
r17
frame pointer (fp)
Microprocessadores II - Sub-rotinas e pilha
![Page 31: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/31.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp)
Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
fp
r16
r17
frame pointer (fp)
Microprocessadores II - Sub-rotinas e pilha
![Page 32: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/32.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp)
Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
fp
r16
r17
Microprocessadores II - Sub-rotinas e pilha
![Page 33: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/33.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp)
Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
r16
r17
fp
Microprocessadores II - Sub-rotinas e pilha
![Page 34: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/34.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp)
Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
r16
fp
r17
Microprocessadores II - Sub-rotinas e pilha
![Page 35: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/35.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp) Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
fp
r16
r17
Microprocessadores II - Sub-rotinas e pilha
![Page 36: SUB-ROTINAS E PILHA - rc.unesp.br · SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento de software modularizado e estruturado • Programação procedural Sub-rotinas](https://reader034.vdocuments.com.br/reader034/viewer/2022052309/5c34ba2109d3f212298c27e9/html5/thumbnails/36.jpg)
EXEMPLO – EPÍLOGO
stack pointer (sp) Antes do retorno ...
/* Restore ra, fp, sp, and registers */ mov sp, fp ldw ra, 4(sp) ldw fp, 0(sp) ldw r16, -4(sp) ldw r17, -8(sp) addi sp, sp, 8 /* Return from subroutine */ ret
ra
fp
r16
r17
Microprocessadores II - Sub-rotinas e pilha