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.

Slides:



Advertisements
Apresentações semelhantes
Parte 1: Organização de Computadores
Advertisements

IC - UFF Sistemas Operacionais Threads. IC - UFF Processos e threads Vimos o conceito de processo englobando duas características básicas: propriedade.
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
Alocação Dinâmida de Memória
Recursividade Inhaúma Neves Ferraz
Alocação Dinâmica de Memória
Programação C++.
Assembly x86.
Autor: Fernando de Mesentier Silva
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 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
Redes de computadores Prof. António dos Anjos
Subprogramas São blocos de execução internas a um programa.
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Linguagem de Montagem.
Linguagem de Montagem Vetores.
Aula 3©Universidade do Algarve 1 Do alto-nível ao assembly Compiladores, Aula Nº 3 João M. P. Cardoso.
Sistema Operacional Processos
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.
Redes de computadores Prof. António dos Anjos
Hugo Calazans André Ricardo
Introdução à linguagem C
Interface entre as linguagens C e Assembly 8085
Módulos de um S.O. Tiago Gomes Nº21 11ºi.
Ambiente de Execução - Rotinas
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Construção do executável1 Construção de ficheiros executáveis Compilação Ligação Carregamento ( loading ) Bibliotecas estáticas e dinâmicas.
Capítulo VIII Ambientes de Execução
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Modularização Dividir um problema em subproblemas Módulos menores facilita a depuração Dividir o desenvolvimento entre vários programadores “Reutilização”
A Linguagem de Máquina – Funções e recursividade Prof. André Luis M. Silva orgearq wordpress.com.
8088 Assembly Software Básico Mitsuo Takaki.
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.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
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
COMPILADORES 07 Prof. Marcos.
Fundamentos de Programação 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.
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:

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 do end. regresso –em registo (RISC; aninhamento / recursividade ? ) –em memória/stack (IA-32; aninhamento / recursividade ? ) –invocação e regresso 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 (em stack) atualização/recuperação do frame pointer (IA ) reserva/libertação de espaço para variáveis locais Suporte a funções e procedimentos no IA-32 (3)

AJProença, Sistemas de Computação, UMinho, 2013/142 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 Corpo Arranque Término

AJProença, Sistemas de Computação, UMinho, 2013/143 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); (…) } em call_swap 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 Análise dos contextos em swap, no IA-32

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

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

AJProença, Sistemas de Computação, UMinho, 2013/146 antigo %ebp endereço crescente stack 2. Preparação p/ invocar swap salvaguardar registos?...não... passagem de parâmetros &zip2 %esp %ebp frame pointer 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; } zip1 zip2 &zip1 %ebp-12 call_swap Evolução da stack, no IA-32 (2)

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

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

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

AJProença, Sistemas de Computação, UMinho, 2013/1410 antigo %ebp endereço crescente stack *yp zip1 zip2 *xp antigo %eip %esp antigo %ebp %ebp frame pointer antigo %ebx 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 2. Corpo de swap %ebp+8 %ebp+12 void swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; } swap Evolução da stack, no IA-32 (6)

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

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