Procedimentos Registro de Ativação e Variáveis Locais 11 1.

Slides:



Advertisements
Apresentações semelhantes
Arquitetura e organização de computadores
Advertisements

Programação II Estruturas de Dados
SOFTWARE BÁSICO.
Aula 5 – Sumário Revisão da aula anterior Endereçamento indirecto
Assembly MAC-1 Implementação de ciclos Ciclo ‘while’ // Em Java : ...
Programação MAC-1 Exemplo: copiar vector
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
Alocação Dinâmida de Memória
Variáveis Dinâmicas Caixas de Nós
Alocação Dinâmica de Memória
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
LPG - I: Alocação Dinâmica de Memória - Ponteiros
LPG-I: Tipos Complexos - Estruturas
Universidade de Brasília
Lista Encadeada Circular Lista Duplamente Encadeada
Escola Secundária c/ 3º CEB da Batalha
A arquitectura IA32 A arquitectura de um processador é caracterizada pelo conjunto de atributos que são visíveis ao programador. Tamanho da palavra Número.
Programação em Assembly Procedimentos e funções
Arquitecturas RISC Programação em assembly
Programação em assembly
Y86: Definição da Arquitectura
Listas Encadeadas.
Revisão da Linguagem C.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Linguagem de Montagem.
Linguagem de Montagem Vetores.
AJProença, Sistemas de Computação, UMinho, 2013/141 Análise do código de gestão de uma função –invocação e regresso instrução de salto, mas com salvaguarda.
Alocação Dinâmica de Memória
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Argumentos por valor Passagem de valor da variável indicada Não permite alteração de variável indicada Exemplo: int quadrado_de(int ); //protótipo int.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Organização do Ambiente de Execução (Runtime System)
Organização do Ambiente de Execução (Runtime system) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos.
Hugo Calazans André Ricardo
Aula 3 Vetores e Listas. Arrays (vetores) Array – sequência de elementos do mesmo tipo. Tamanho do Array – seu número de elementos (número fixo) Consequência:
Listas, Filas e Pilhas Katia Guimarães.
Interface entre as linguagens C e Assembly 8085
Ambiente de Execução - Rotinas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
8088 Assembly Software Básico Mitsuo Takaki.
Recursividade Bruno Silva.
8 - 1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM A pilha e subrotinas.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Hugo Calazans André Ricardo
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
1 Aula 6 – Sumário  Revisão da aula anterior  Endereçamento indirecto  Recursividade  Conceito  Exemplos.
Aula 4 – Sumário Linguagem assembly do MAC-1: Funções e procedimentos
Lucas Aranha ASSEMBLY Lucas Aranha
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Organização do Armazenamento EstáticaEstática –Variáveis globais; –Fortran; Dinâmica (pilha e heap)Dinâmica (pilha e heap) –Variáveis locais; –Sem aninhamento:
Existem 8 registos principais de 32 bits no processador (existem mais como %EIP): %EAX %EBX %ECX %EDX %ESI %EDI %EBP %ESP Os registos são armazenados em.
Ponteiros em C Prof. Kariston Pereira
ASSEMBLY – aula 2 Hugo Calazans
COMPILADORES 07 Prof. Marcos.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Programação em Assembly
Suporte a funções e procedimentos no IA-32 (3)
Suporte a funções e procedimentos no IA-32 (3)
Suporte a funções e procedimentos no IA-32 (3)
Transcrição da apresentação:

Procedimentos Registro de Ativação e Variáveis Locais 11 1

Registro de Ativação A implementação de procedimentos tem como base o uso de uma pilha –passagem de parâmetros, armazenamento do endereço de retorno, salvamento de registradores, armazenamento de variáveis locais e valores temporários Cada chamada de procedimento é associada a uma porção da pilha, que é liberada no retorno desse procedimento –Chamada de registro de ativação ou stack frame –o RA corrente (no topo da pilha) é delimitado por dois ponteiros: %ebp: frame pointer → base do registro de ativação (fixa) %esp: stack pointer → topo da pilha (dinâmico) 2

Estrutura do Registro de Ativação 3 Endereços crescem Registro de Ativação corrente Registro de Ativação do Chamador registradores, variáveis locais e temporários Frame pointer %ebp Stack pointer %esp Topo da Pilha Base da Pilha –4 Registros de Ativação anteriores parâmetro 1 end. retorno %ebp salvo parâmetro n

Acesso ao Registro de Ativação Início de procedimento: pushl %ebp → salva endereço do Registro de Ativação anterior movl %esp, %ebp →base do novo Registro de Ativação Fim de procedimento: movl %ebp, %esp popl %ebp → restaura ebp-ant ret 4 end.ret... %ebp ebp-ant... %esp %ebp-4 liberação do registro de ativação registro de ativação

Variáveis Locais Variáveis locais de um procedimento podem ser armazenadas na pilha (registro de ativação): –quando o número de registradores é insuficiente –armazenamento de arrays e estruturas –quando o operador ‘&’ é aplicado à variável (exige a geração de um endereço) A alocação de espaço é tipicamente feita subtraindo-se o espaço a ser alocado (número de bytes) de %esp: –subl $20, %esp → alocação de 5 palavras... O acesso é realizado com base no frame pointer (%ebp) –movl $0, -4(%ebp) 5

Exemplo de variável local void troca (int *x, int *y){ int tmp; tmp = *x; *x = *y; *y = tmp; } pushl %ebp movl %esp, %ebp subl $4, %esp movl 8(%ebp), %eax movl (%eax),%edx movl %edx, -4(%ebp) movl 12(%ebp), %ecx movl (%ecx), %edx movl %edx, (%eax) movl -4(%ebp), %edx movl %edx, (%ecx) movl %ebp, %esp popl %ebp ret troca: 6 end.ret %ebp ebp-ant x %ebp-4 tmp y... %ebp+8

Outro exemplo int caller() { int x = 534; int y = 1057;... return f( &x, y ); } pushl %ebp movl %esp, %ebp subl $8, %esp movl $534, -4(%ebp) movl $1057, -8(%ebp)... movl -8(%ebp), %eax pushl %eax movl %ebp, %eax subl $4, %eax pushl %eax call f movl %ebp, %esp popl %ebp ret caller: 7 end.ret %ebp ebp-ant %ebp-4 x... y %ebp-8

Mais um exemplo int proc() { int i; scanf( "%x", &i ); return i+1 ; } pushl %ebp movl %esp, %ebp subl $4, %esp movl %ebp, %eax sub $4, %eax pushl %eax pushl $S1 call scanf movl -4(%ebp), %eax addl $1, %eax movl %ebp, %esp popl %ebp ret S1:.string "%x" proc: 8

Alocação de arrays na pilha 9 end.ret... ebp-ant... tmp registro de ativação de “f” void f() { int tmp; char a[3]; int x[2];... } x[1] x[0] %ebp ebx-ant %ebp-4 %ebp-8 a[0] a[1] a[2] %ebp-12 %ebp-20 %esp pushl %ebp movl %esp, %ebp subl $20, %esp movl %ebx, -4(%ebp)... movl -4(%ebp), %ebx movl %ebp, %esp popl %ebp ret 16 bytes

Alocação de Variáveis Locais Não existe convenção para a ordenação de variáveis na pilha! –apenas a própria função obtém os endereços dessas variáveis Devem ser respeitadas as convenções de alinhamento para arrays e estruturas! –o acesso aos elementos de um array a partir de seu endereço inicial deve independer de sua localização (pilha ou memória global) –o acesso aos campos de uma estrutura a partir do seu endereço inicial deve independer de sua localização (pilha ou memória global) 10