Programação em Assembly Procedimentos e funções

Slides:



Advertisements
Apresentações semelhantes
Modelos de Microprocessadores
Advertisements

Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Recursividade Função recursiva é aquela que chama a si própria.
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.
Arquitetura e organização de computadores
Listas encadeadas Prof. Rosana Palazon.
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
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
Algoritmos e Estrutura de Dados I
PROCEDIMENTOS COM RECURSIVIDADE
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Programação C++.
Assembly x86.
Aula 11 Tipos Abstractos de Dados II. 2003/2004 Introdução à Programação 2 Estrutura global do programa #include using namespace std; int mdc(int const.
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 Optimização do código
Programação em Assembly Variáveis estruturadas
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 Dependentes da Máquina
Listas Encadeadas.
1 Ponteiros Ponteiros são variáveis que guardam localizações em memória. A declaração de uma variável ponteiro x para um dado tipo type é type *x; Essa.
Linguagem de Montagem.
Linguagem de Montagem Vetores.
Instruções condicionais
João Ferreira, Dez 2003STRINGS, 1/6 Definição de String String (sentido lato) -> um string é um conjunto de valores (não necessariamente interpretáveis.
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.
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 Montagem PROVA 4 – 3/12.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Prof. Ricardo Santos PONTEIROS
Hugo Calazans André Ricardo
Interface entre as linguagens C e Assembly 8085
Ambiente de Execução - Rotinas
Geração de Código Intermediário
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Uso de parâmetros na linha de comando. Parâmetros da função main:
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.
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.
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.
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.
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Linguaguem de Programação II
ASSEMBLY – aula 2 Hugo Calazans
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Programação em Assembly
Processamento Vectorial: Single Instruction Multiple Data
Suporte a funções e procedimentos no IA-32 (3)
Suporte a funções e procedimentos no IA-32 (3)
Programação em assembly
Suporte a funções e procedimentos no IA-32 (3)
Transcrição da apresentação:

Programação em Assembly Procedimentos e funções IA32 AC1 – Programação em Assembly 3

Contexto da função – Stack Frame O contexto de cada função, definido como o conjunto de dados e informação de controlo usado pela função, é armazenado na stack, numa estrutura designada por stack frame ou activation record. Cada função tem a sua própria stack frame. De um modo geral esta contém: Argumentos Endereço de retorno Frame pointer anterior Registos salvaguardados Variáveis locais AC1 – Programação em Assembly 3

IA32 – Stack frame Endereços maiores A função que invoca coloca os parâmetros na stack (push op) %esp Parâmetros A função que invoca coloca o endereço de retorno na stack (call addr) %esp End. Ret. %esp A função invocada guarda %ebp (pushl %ebp) Antigo %ebp %esp %ebp Registos A função invocada copia %esp para %ebp (movl %esp, %ebp) %esp Variáveis Locais A função invocada salvaguarda alguns registos (pushl regs) A função invocada reserva espaço para variáveis locais (subl $imm, %esp) %esp Endereços menores AC1 – Programação em Assembly 3

IA32 – Stack frame int main (int argc, char **argv) { int i, j=10; Endereços maiores int main (int argc, char **argv) { int i, j=10; i = j * 4; } Parâmetros End. Ret. main: pushl %ebp movl %esp, %ebp %esp Antigo %ebp %esp %ebp %ebp-4 %ebp-8 subl $4, %esp ; espaço p/ i i %esp pushl $10 ; j=10 j movl $-8(%ebp), %eax sall $2, %eax movl %eax, -4(%ebp) ; i=j*4 %esp leave ret Endereços menores leave  movl %ebp,%esp;popl %ebp AC1 – Programação em Assembly 3

IA32 – Stack Frame Par. Par. Par. E.R. E.R. E.R. Old BP Old BP Old BP Regs. Vars. BP SP Par. E.R. Old BP Regs. Vars. BP SP Par. E.R. Old BP Regs. Vars. BP SP Par. E.R. Old BP Regs. Vars. BP SP Invocação Invocação Fim AC1 – Programação em Assembly 3

IA32 – Salvaguarda de registos main: ... movl $10, %eax call func Qual o valor que está em %eax após o call? Convenciona-se que: caller save – alguns registos podem ser alterados pela função invocada. Se a função que invoca precisar de os manter, então guarda-os na stack. callee save – alguns registos não podem ser alterados pela função invocada. Se esta os alterar, deve guardar o valor anterior na stack. caller save callee save %eax, %ecx, %edx %ebx, %esi, %edi %ebp AC1 – Programação em Assembly 3

IA32 – Funções e procedimentos main: pushl %ebp movl %esp, %ebp pushl %ebx pushl %esi movl $0, %ebx ; accum (%ebx)=0 movl $0, %esi ; i (%esi) =0 jmp teste ciclo: pushl %esi ; parâmetro call f addl $4, %esp ; tirar parâm. addl %eax, %ebx incl %esi teste: cmpl $100, %esi jl ciclo pop %esi pop %ebx leave ret int main (int c, char **v) { int i, accum=0; for (i=0;i<100;i++) accum += f(i); } Parâmetros main () Retorno %esp Ant. %ebp %ebp %esp Registos %esp Parâmetros f () %esp AC1 – Programação em Assembly 3

IA32 – Funções e procedimentos int f (int p) { int j, ret=1; for (j=p;j>1;j--) ret *= j; return (ret); } f: pushl %ebp movl %esp, %ebp movl $1, %eax ; ret=1 movl 8(%ebp), %ecx ; j=p jmp teste ciclo: mull %ecx, %eax ; ret*=j decl %ecx ; j-- teste: cmpl $1, %ecx jg ciclo leave ret p E.R. Old. BP BP NOTA: f() não invoca nenhuma função. AC1 – Programação em Assembly 3

IA32 – Funções e procedimentos f: pushl %ebp movl %esp, %ebp pushl %ebx movl 8(%ebp), %ebx cmpl $1, %ebx ; p>1?? jle else leal -1(%ebx), %ecx pushl %ecx ; parâmetro call f addl $4, %esp ; tirar parâm. mull %ebx, %eax ;ret=p*f(p-1) jmp f_if else: movl $1, %eax ; ret=1 f_if: pop %ebx leave ret int f (int p) { int ret; if (p>1) ret= p * f(p-1); else ret=1; return (ret); } p E.R. Old. BP BP %ebx NOTA: f() recursiva. AC1 – Programação em Assembly 3

IA32 – Funções e procedimentos Tema Hennessy [COD] Bryant [CS:APP] IA32 – Procedimentos e funções Sec 3.7 e 3.11 AC1 – Programação em Assembly 3