SUB-ROTINAS E PILHA - rc.unesp.br .SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento

  • View
    215

  • Download
    0

Embed Size (px)

Text of SUB-ROTINAS E PILHA - rc.unesp.br .SUB-ROTINAS Sub-rotinas são essenciais para o desenvolvimento

MICROPROCESSADORES II (EMA911915)

SUB-ROTINAS E PILHA 2O SEMESTRE / 2018

MATERIAL DIDTICO

Harris & Harris 6.4.6 Procedure Calls

Patterson & Hennessy (4a edio) 2.8 Supporting Procedures in Computer Hardware

Usem as referncias acima somente para entender os conceitos. As instrues para procedimentos e formato da pilha que usaremos difere dos apresentados acima

Melhor referncia: Nios II Processor Reference Handbook, captulo 7

Microprocessadores II - Sub-rotinas e pilha

SUB-ROTINAS

Sub-rotinas so essenciais para o desenvolvimento de software modularizado e estruturado

Programao procedural

Sub-rotinas permitem aos programadores se concentrarem em apenas uma parte da tarefa por vez

Parmetros 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

EXECUO DE SUB-ROTINAS

Na execuo de uma sub-rotina, o programa deve seguir 6 passos bsicos

1. Colocar os parmetros em algum lugar onde a sub-rotina possa acess-los

2. Transferir controle para a sub-rotina 3. Reservar recursos (memria) necessrios sub-rotina 4. Realizar o trabalho necessrio 5. Colocar o resultado em algum lugar acessvel a quem chamou a sub-

rotina 6. Retornar controle ao ponto de origem (quem chamou)

Microprocessadores II - Sub-rotinas e pilha

EXECUO DE SUB-ROTINAS

Na execuo de uma sub-rotina, o programa deve seguir 6 passos bsicos

1. Colocar os parmetros em algum lugar onde a sub-rotina possa acess-los

2. Transferir controle para a sub-rotina 3. Reservar recursos (memria) necessrios sub-rotina 4. Realizar o trabalho necessrio 5. Colocar o resultado em algum lugar acessvel a quem chamou a sub-

rotina 6. Retornar controle ao ponto de origem (quem chamou)

Memria (pilha) ou registradores?

Microprocessadores II - Sub-rotinas e pilha

EXECUO DE SUB-ROTINAS

Na execuo de uma sub-rotina, o programa deve seguir 6 passos bsicos

1. Colocar os parmetros em algum lugar onde a sub-rotina possa acess-los

2. Transferir controle para a sub-rotina 3. Reservar recursos (memria) necessrios sub-rotina 4. Realizar o trabalho necessrio 5. Colocar o resultado em algum lugar acessvel a quem chamou a sub-

rotina 6. Retornar controle ao ponto de origem (quem chamou)

Instruo do processador

Microprocessadores II - Sub-rotinas e pilha

EXECUO DE SUB-ROTINAS

Na execuo de uma sub-rotina, o programa deve seguir 6 passos bsicos

1. Colocar os parmetros em algum lugar onde a sub-rotina possa acess-los

2. Transferir controle para a sub-rotina 3. Reservar recursos (memria) necessrios sub-rotina 4. Realizar o trabalho necessrio 5. Colocar o resultado em algum lugar acessvel a quem chamou a sub-

rotina 6. Retornar controle ao ponto de origem (quem chamou)

Configurar stack frame

Microprocessadores II - Sub-rotinas e pilha

EXECUO DE SUB-ROTINAS

Na execuo de uma sub-rotina, o programa deve seguir 6 passos bsicos

1. Colocar os parmetros em algum lugar onde a sub-rotina possa acess-los

2. Transferir controle para a sub-rotina 3. Reservar recursos (memria) necessrios sub-rotina 4. Realizar o trabalho necessrio 5. Colocar o resultado em algum lugar acessvel a quem chamou a sub-

rotina 6. Retornar controle ao ponto de origem (quem chamou)

Microprocessadores II - Sub-rotinas e pilha

EXECUO DE SUB-ROTINAS

Na execuo de uma sub-rotina, o programa deve seguir 6 passos bsicos

1. Colocar os parmetros em algum lugar onde a sub-rotina possa acess-los

2. Transferir controle para a sub-rotina 3. Reservar recursos (memria) necessrios sub-rotina 4. Realizar o trabalho necessrio 5. Colocar o resultado em algum lugar acessvel 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

EXECUO DE SUB-ROTINAS

Na execuo de uma sub-rotina, o programa deve seguir 6 passos bsicos

1. Colocar os parmetros em algum lugar onde a sub-rotina possa acess-los

2. Transferir controle para a sub-rotina 3. Reservar recursos (memria) necessrios sub-rotina 4. Realizar o trabalho necessrio 5. Colocar o resultado em algum lugar acessvel a quem chamou a sub-

rotina 6. Retornar controle ao ponto de origem (quem chamou)

Instruo do processador

Microprocessadores II - Sub-rotinas e pilha

STACK FRAME

Tambm chamado de registro de ativao (activation record)

rea de memria (pilha) que armazena o estado da sub-rotina, e contm geramente as seguintes informaes

Os argumentos passados para a sub-rotina O endereo de retorno para quem chamou (caller) Espao para as variveis locais sub-rotina

Microprocessadores II - Sub-rotinas e pilha

ALGUMAS PERGUNTAS

Passar os parmetros atravs da pilha ou registradores? Se registradores, quais ?

Qual o formato (contedo) 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

APPLICATION BINARY INTERFACE (ABI)

As respostas para as perguntas anteriores so respondidas pela ABI

ABI uma conveno que determina a interface entre o processador e o sistema (sistema operacional + compilador)

Quais os tamanhos para os tipos de dados bsicos Quais registradores precisam ser salvos pela sub-rotina chamada Qual o layout do stack frame

Microprocessadores II - Sub-rotinas e pilha

ABI ALTERA NIOS II

Presente no captulo 7 da referncia Nios II Processor Reference Handbook

Disponvel no site da disciplina

Nos nossos programas em linguagem de montagem vamos seguir essa ABI

Essencial quando estivermos mesclando cdigo assembly e C

Microprocessadores II - Sub-rotinas e pilha

USO DE REGISTRADORES

A ABI define o seguinte uso

Registrador Nome Uso regular

r0 zero 0x00000000

r1 at Temporrio 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 propsito geral, salvos pelo caller

r16 ... r23 Registradores de propsito geral, salvos pelo callee

r27 sp Stack pointer

r28 fp Frame pointer

r31 ra Endereo de retorno

Os registradores omitidos sero vistos mais adiante na disciplina procurar no us-los no momento

Microprocessadores II - Sub-rotinas e pilha

PILHA (1)

A pilha a estrutura utilizada para comunicao entre o caller e o callee, e para variveis automticas (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

PILHA (2)

A pilha cresce para baixo, ou seja, de endereos maiores para menores

Para facilitar a manipulao 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

STACK FRAME NIOS II

argumentos de sada da pilha

endereos altos

endereos baixos

stack pointer (sp) argumentos de entrada da pilha

endereo de retorno

antigo frame pointer

registradores salvos

espao para variveis

temporrias

espao para argumentos de

sada 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 aps stack frame ter sido inicializado

Microprocessadores II - Sub-rotinas e pilha

CHAMADA E RETORNO

A instruo do Nios II usada para saltar para sub-rotina a call

A instruo call automaticamente j salva PC+4 (endereo de retorno) no registrador r31 (ra)

Para retornar de uma sub-rotina, usamos a instruo ret

call minha_rotina

Salta para sub-rotina chamada minha_rotina

ret

Microprocessadores II - Sub-rotinas e pilha

PRLOGO E EPLOGO

Prlogo Trecho de cdigo inicial em uma sub-rotina, responsvel por configurar a

stack frame No Nios II, o prlogo deve:

Ajustar o stack pointer (alocar espao para o frame) Armazenar registradores no frame Setar o frame pointer para a posio do frame pointer anterior salvo na

pilha

Eplogo Trecho de cdigo no final da sub-rotina responsvel por restaurar os

registradores e o estado da pilha

Microprocessadores II - Sub-rotinas e pilha

EXEMPLO PRLOGO

stack pointer (sp) Estado atual da pilha antes da chamada

Microprocessadores II - Sub-rotinas e pilha

EXEMPLO PRLOGO

stack pointer (sp) Aps chamada ...

/* Adjust the stack pointer */ addi sp, sp, -16 /*