Suporte a funções e procedimentos no IA-32 (3)

Slides:



Advertisements
Apresentações semelhantes
IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
Advertisements

Estruturas de Repetição
V Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. v Funções – são procedimentos.
Medição do desempenho Computacional
Arquitetura e organização de computadores
Arquitetura e organização de computadores
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
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Funções e Subrotinas.
Programação C++.
Implementação da CPU Análise de um computador simplificado Implementação da Unidade de Controle para o computador simplificado.
Assembly x86.
Arquitectura e Organização de Computadores
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 Variáveis estruturadas
Programação em Assembly Procedimentos e funções
Arquitecturas RISC Programação em assembly
Programação em assembly
Y86: Definição da Arquitectura
Y86: Encadeamento de Instruções (PIPE-)
Optimização do Desempenho: Técnicas Independentes da Máquina Arquitectura de Computadores Lic. em Engenharia Informática Luís Paulo Santos.
Optimização do Desempenho: Técnicas Dependentes da Máquina
Subprogramas São blocos de execução internas a um programa.
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.
PROGRAMAÇÃO I UNIDADE 4.
Entendendo as definições de classe
Linguagem de Montagem PROVA 4 – 3/12.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Hugo Calazans André Ricardo
Interface entre as linguagens C e Assembly 8085
Ambiente de Execução - Rotinas
Construção do executável1 Construção de ficheiros executáveis Compilação Ligação Carregamento ( loading ) Bibliotecas estáticas e dinâmicas.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
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.
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Capítulo 4: Processos.
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
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
Linguaguem de Programação II
O Stack e Subrotinas Permitem reusar o código Escreva e depure o código uma vez, use-o quantas vezes for preciso Uma Subrotina deve ser chamada Uma Subrotina.
ASSEMBLY – aula 2 Hugo Calazans
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
PRE 1002 Éverlin Marques 2015/1.
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.
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Isabel Cafezeiro
Programação em Assembly
Aspectos de Interrupção
Computador MIPS Organização básica e conjunto de instruções.
Prof. Wellington Franco Sub-Rotinas:Funções e Procedimentos
Processamento Vectorial: Single Instruction Multiple Data
Departamento de Estatística e Informática
Subalgoritmo É um trecho de algoritmo construído para resolver parte de um problema maior. Também chamado de módulo. A técnica que consiste dividir o.
Pthreads – POSIX Threads
Suporte a funções e procedimentos no IA-32 (3)
Programação em assembly
Suporte a funções e procedimentos no IA-32 (3)
Fundamentos de Programação 1
Transcrição da apresentação:

Suporte a funções e procedimentos no IA-32 (3) Análise do código de gestão de uma função invocação e regresso instrução de salto, mas com salvaguarda do end. regresso em registo (RISC; aninhamento / recursividade ? ) em memória/stack (IA-32; aninhamento / recursividade ? ) instrução de salto para o endereço de regresso salvaguarda & recuperação de registos (na stack) função chamadora ? (nenhum/ alguns/ todos ? RISC/IA-32 ? ) função chamada? (nenhum/ alguns/ todos ? RISC/IA-32 ? ) gestão do contexto (na stack, em activation record ou frame) atualização/recuperação do frame pointer (IA-32... ) reserva/libertação de espaço para variáveis locais

Análise das fases em swap, no IA-32 (fig. já apresentada) void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } swap: pushl %ebp movl %esp,%ebp pushl %ebx movl 12(%ebp),%ecx movl 8(%ebp),%edx movl (%ecx),%eax movl (%edx),%ebx movl %eax,(%edx) movl %ebx,(%ecx) movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret Arranque Corpo Término

Análise dos contextos em swap, no IA-32 em call_swap void call_swap() { int zip1 = 15213; int zip2 = 91125; (…) swap(&zip1, &zip2); } void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } na invocação de swap na execução de swap no regresso a call_swap Que contextos (IA-32)? passagem de parâmetros via stack espaço para variáveis locais na stack info de suporte à gestão (stack) endereço de regresso apontador para a stack frame salvaguarda de registos

Construção do contexto na stack, no IA-32 %esp call_swap swap variáveis locais de swap endereço crescente 1. Antes de invocar swap 2. Preparação p/ invocar swap salvaguardar registos? passagem de parâmetros salv. registos ? %ebp frame pointer %esp antigo %ebp 3. Invocar swap e guardar endereço de regresso %esp ender. regresso 1. Início de swap atualizar frame pointer salvaguardar registos ? reservar espaço p/ locais %esp parâmetros p/ swap 2. Corpo de swap salv. registos ? 3. Término de swap ... libertar espaço de var locais recuperar registos ? recuperar antigo frame pointer regressar a call_swap %esp variáveis locais de call_swap stack %ebp frame pointer 4. Terminar invocação de swap... libertar espaço com parâmetros na stack recuperar registos? antigo %ebp

Evolução da stack, no IA-32 (1) call_swap 1. Antes de invocar swap endereço crescente void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } void call_swap() { int zip1 = 15213; int zip2 = 91125; (…) swap(&zip1, &zip2); } %esp zip2 stack %ebp-4 zip1 %ebp frame pointer antigo %ebp

Evolução da stack, no IA-32 (2) call_swap 2. Preparação p/ invocar swap salvaguardar registos?...não... passagem de parâmetros endereço crescente void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } void call_swap() { int zip1 = 15213; int zip2 = 91125; (…) swap(&zip1, &zip2); } %esp &zip1 %ebp-12 &zip2 zip2 stack zip1 %ebp frame pointer antigo %ebp

Evolução da stack, no IA-32 (3) call_swap endereço crescente 2. Preparação p/ invocar swap salvaguardar registos?...não... passagem de parâmetros leal -8(%ebp),%eax Calcula &zip2 pushl %eax Empilha &zip2 leal -4(%ebp),%eax Calcula &zip1 pushl %eax Empilha &zip1 %esp &zip1 %ebp-12 &zip2 zip2 stack zip1 %ebp frame pointer antigo %ebp

Evolução da stack, no IA-32 (4) call_swap 3. Invocar swap e guardar endereço de regresso endereço crescente void call_swap() { int zip1 = 15213; int zip2 = 91125; (…) swap(&zip1, &zip2); } %esp antigo %eip &zip1 %ebp-12 &zip2 zip2 stack call swap Invoca função swap zip1 %ebp frame pointer antigo %ebp

Evolução da stack, no IA-32 (5) 1. Início de swap atualizar frame pointer salvaguardar registos reservar espaço p/ locais...não... swap endereço crescente %esp antigo %ebx void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } %esp %ebp frame pointer antigo %ebp antigo %eip *xp *yp swap: pushl %ebp Salvaguarda antigo %ebp movl %esp,%ebp Faz %ebp frame pointer pushl %ebx Salvaguarda %ebx zip2 stack zip1 antigo %ebp %ebp antigo %ebp

Evolução da stack, no IA-32 (6) swap %esp 2. Corpo de swap antigo %ebx %ebp endereço crescente frame pointer antigo %ebp void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } antigo %eip %ebp+8 *xp %ebp+12 *yp zip2 movl 12(%ebp),%ecx Carrega arg yp em ecx movl 8(%ebp),%edx Carrega arg xp em edx movl (%ecx),%eax Coloca y em t1(eax) movl (%edx),%ebx Coloca x em t0 (ebx) movl %eax,(%edx) Armazena y em *xp movl %ebx,(%ecx) Armazena x em *yp zip1 stack antigo %ebp

Evolução da stack, no IA-32 (7) swap 3. Término de swap ... libertar espaço de var locais...não... recuperar registos recuperar antigo frame pointer regressar a call_swap %esp antigo %ebx antigo %ebx endereço crescente antigo %ebp antigo %ebp antigo %eip antigo %eip void swap(int *xp, int *yp) { (…) } *xp *yp zip2 popl %ebx Recupera %ebx movl %ebp,%esp Recupera %esp popl %ebp Recupera %ebp ou leave Recupera %esp, %ebp ret Regressa à f. chamadora zip1 stack %ebp antigo %ebp frame pointer

Evolução da stack, no IA-32 (8) call_swap 4. Terminar invocação de swap... libertar espaço de parâmetros na stack... recuperar registos?...não... endereço crescente void call_swap() { int zip1 = 15213; int zip2 = 91125; (…) swap(&zip1, &zip2); } &zip1 *yp *xp &zip2 %esp zip2 stack addl $8,%esp Atualiza stack pointer zip1 %ebp frame pointer antigo %ebp