ASSEMBLY – aula 2 Hugo Calazans

Slides:



Advertisements
Apresentações semelhantes
Python: Funções Claudio Esperança.
Advertisements

Curso de aprofundamento na linguagem C
Parte 1: Organização de Computadores
Arquitetura e organização de computadores
Algoritmos de manipulação de estruturas elementares 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
Programação para Engenharia I
ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM
PROCEDIMENTOS COM RECURSIVIDADE
Ferramentas Programação
Assembly x86.
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
Revisão da Linguagem C.
Introdução a Computação e Cálculo Numérico
Unidade I: “Dê um mergulho rápido”
PROGRAMAÇÃO I UNIDADE 1.
A ULA P RÁTICA - A SSEMBLY Ciro Luiz Araujo Ceissler.
Aula Prática - Assembly
Curso de Nivelamento LCG
Linguagem de Montagem.
Linguagem de Montagem Vetores.
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.
CADEIA DE CARACTERES (Strings)
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.
Prática de Programação Assembly 8086
Hugo Calazans André Ricardo
Interface C / Assembly Modo Real
2 -1 Organização Básica de Computadores e Linguagem de Montagem Ricardo Pannain ORGANIZAÇÃO BÁSICA DE COMPUTADORES E LINGUAGEM DE MONTAGEM - Laboratório.
Interface entre as linguagens C e Assembly 8085
Java Bytecode Software Básico Mitsuo Takaki.
Técnicas de Desenvolvimento de Programas
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
JAVA Sintaxe.
Programação de Computadores I – Arquivos
CES-41 COMPILADORES Aulas Práticas
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
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.
Hugo Calazans André Ricardo
Ciro Ceissler / ASSEMBLY Ciro Ceissler /
Aula 4 – Sumário Linguagem assembly do MAC-1: Funções e procedimentos
Lucas Aranha ASSEMBLY Lucas Aranha
Introdução à Programação
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.
PROGRAMAÇÃO II – PARTE 1 Profa. Maria Augusta Constante Puget.
Linguaguem de Programação II
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Ney Laert Vilar Calazans Exemplo de Apresentação de TP1 Descrição Resumida de uma Arquitetura de Processador: o estudo de caso do Intel 8086 ORGANIZAÇÃO.
EA869 Subrotinas Faculdade de Engenharia Elétrica e de Computação (FEEC) Universidade Estadual de Campinas (UNICAMP) Prof. Levy Boccato 1.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Arquitetura ARM Subrotinas.  Implementar uma sub-rotina requer dois passos: 1.Armazenar o endereço de retorno. 2.Desviar a execução para o endereço da.
Programação em Assembly Ambiente de Programação Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
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:

ASSEMBLY – aula 2 Hugo Calazans

Roteiro 1- Recapitulação (Intel x AT&T) 2- Pilha e command line arguments 3- Procedimentos 4- Simulando alguns comandos C 5- Assembly inline 6- Linux Man Pages

Intel x AT&T - recapitulação Intel Code AT&T Code mov eax,1 mov ebx,0ffh int 80h mov ebx, eax mov eax,[ecx] mov eax,[ebx+3] mov eax,[ebx+20h] add eax,[ebx+ecx*2h] lea eax,[ebx+ecx] sub eax,[ebx+ecx*4h-20h] movl $1,%eax movl $0xff,%ebx int $0x80 movl %eax, %ebx movl (%ecx),%eax movl 3(%ebx),%eax movl 0x20(%ebx),%eax addl (%ebx,%ecx,0x2),%eax leal (%ebx,%ecx),%eax subl -0x20(%ebx,%ecx,0x4),%eax

Intel x AT&T - recapitulação Diferenças: Diferenças: 1- Ordenação entre source e destination 2- Nome dos registradores (prefixação) 3- Operandos imediatos (prefixação) 4- Menção feita ao tamanho dos operandos 5- Manipulação de operandos na memória

Intel x AT&T - Exemplo: Fatorial C int fatorial (int numero) { int fat = 1; if (numero <= 1) return 1; fat = numero * fatorial (numero - 1); return fat; }

Intel x AT&T - Exemplo: Fatorial Intel Intel mov eax, 5 mov ebx, 1 L1:cmp eax, 0 //compara 0 com o valor em eax je L2 //pula p/ L2 se 0==eax (je – pula se igual) imul ebx, eax // ebx = ebx*eax dec eax //decrementa eax jmp L1 // pulo incondicional para L1 L2: ret

Intel x AT&T - Exemplo: Fatorial AT&T AT&T movl $5, %eax movl $1, %ebx L1:cmpl $0, %eax //compara 0 com o valor em eax je L2 //pula p/ L2 se 0==eax (je – pula se igual) imull %eax, %ebx // ebx = ebx*eax decl %eax //decrementa eax jmp L1 // pulo incondicional para L1 L2: ret

Intel x AT&T - Exemplo: Ponto de entrada NASM NASM section.data section.text global _start _start: push epb mov ebp,esp push ebx push esi push edi ; código do seu programa pop edi pop esi pop ebx mov esp,ebp pop ebp

Intel x AT&T - Exemplo: Ponto de entrada AT&T.data.globl main main: pushl %epb movl %ebp,%esp pushl %ebx pushl %esi pushl %edi ; código do seu programa popl %edi popl %esi popl %ebx movl %esp,%ebp popl %ebp

Pilha e Argumentos de linha de comando Exemplo: Exemplo: –./programa infra software 677 PILHA 4 “programa” “infra” “software” “677”

Pilha e Argumentos de linha de comando Exemplo: Exemplo: –./programa infra software 677 INTELAT&T O que é? pop eax pop ebx pop ecx pop edx pop eax pop %eax pop %ebx pop %ecx pop %edx pop %eax # de args “programa”“infra”“software”“677”

Procedimentos? Diferentemente do TASM, NASM não possui o conceito de procedimento Diferentemente do TASM, NASM não possui o conceito de procedimento –Tudo é Label! Nada de keywords "proc" ou "endp" Nada de keywords "proc" ou "endp" –basta colocar uma label Boa prática Boa prática –comentários delimitando o bloco de código

Procedimentos? No DOS, sim! DOS proc fileWrite: mov ah, 40h mov bx, [filehandle] mov cl, [stuffLen] mov dx, offset stuffToWrite int 21h ret endp fileWrite

Procedimentos? No Linux, não. Labels! INTEL fileWrite: mov eax,4 mov ebx, [filedesc] mov ecx, stuffToWrite mov edx, [stuffLen] int 80h ret ; endp fileWrite AT&T fileWrite: movl $4, %eax movl ($filedesc), %ebx movl $stuffToWrite, %ecx movl ($stuffLen), %edx int $0x80 ret ; endp fileWrite

Gerando Código Assembly Como gerar código assembly de um programa escrito em C? Como gerar código assembly de um programa escrito em C? –gcc -S nomeDoPrograma.c Será gerado um arquivo assembly com o nome “nomeDoPrograma.s” Será gerado um arquivo assembly com o nome “nomeDoPrograma.s” Estratégia muito boa para se aprender assembly Estratégia muito boa para se aprender assembly –Construir programas em C e compilar com o parâmetro “-S” para gerar o código “.s”

Simulando comandos C - If-then-else C if (EAX == 'w') { writeFile(); } else { doSomethingElse(); } NASM cmp eax, 'w' jneskipWrite ; Se não, skip callwriteFile jmp outOfThisMess skipWrite: call doSomethingElse outOfThisMess:...; resto do programa

Simulando comandos C - If-then-else C if (EAX == 'w') { writeFile(); } else { doSomethingElse(); } AT&T cmpl 'w‘, %eax jneskipWrite ; Se não, skip callwriteFile jmp outOfThisMess skipWrite: call doSomethingElse outOfThisMess:...; resto do programa

Simulando comandos C - while C int i = 0; while(i< 100){ i = i + 1; } NASM mov eax, 0 whileLoop:mov ebx, 100 cmp eax, ebx jge WhileTerminado inc eax jmp WhileLoop WhileTerminado: ;resto do código

Simulando comandos C - while C int i = 0; while(i< 100){ i = i + 1; } AT&T movl $0, %eax whileLoop:movl $100, %ebx cmpl %ebx, %eax jge WhileTerminado incl %eax jmp WhileLoop WhileTerminado: ;resto do código

Assembly Inline - funções inline em C O que é inline function? O que é inline function? –Uma forma de instruir o compilador a inserir o código de uma determinada função dentro do código de quem a chama

Assembly Inline - funções inline em C Benefícios Benefícios –Redução do overhead existente para a chamada de uma função –Possível simplificações em tempo de compilação, de forma que não necessariamente todo o código da função inline precise ser incluído

Assembly Inline - funções inline em C Desvantagens Desvantagens –Possível aumento do tamanho do código Como usar? Como usar? –Colocando a palavra chave “inline” na declaração da função

Assembly Inline Rotinas assembly escritas como funções inline Rotinas assembly escritas como funções inline Características Características –Convenientes –Velozes –Amplamente utilizadas na programações de sistemas

Assembly Inline Como declarar? Como declarar? –asm("assembly code"); Importância Importância –Atua como interface entre funções assembly e os programas C que as contêm –Atuação sobre operandos e produção de resultados visíveis para variáveis C

Assembly Inline Exemplo 1: Exemplo 1: –Move o conteúdo de ecx para eax: __asm__("movl %ecx, %eax"); __asm__("movl %ecx, %eax"); Exemplo 2: Exemplo 2: –Move o conteúdo de ecx para o endereço da memória apontado por eax: asm("movb %ecx, (%eax)"); } –Observe nos dois exemplos acima a possibilidade de se utilizar __asm__(“código”) ou asm(“código”)

Assembly Inline No caso de mais de uma instrução: No caso de mais de uma instrução: –Escreve-se uma por linha –Entre aspas –Com o sufixo “\n\t” ao final da instrução –Isso se deve ao fato de que GCC envia cada instrução como uma String ao GNU Assembler

Assembly Inline Exemplo 3: Exemplo 3: #include #include int main() { __asm__ ("movl %eax, %ebx\n\t“ "movl $56, %esi\n\t“ "movl %ecx, $label(%edx,%ebx,$4)\n\t" "movb %ah, (%ebx)"); }

Assembly Inline Exemplo 4: Exemplo 4: #include int main() { __asm__(" movl$1,%eax// SYS_exit xor %ebx,%ebx int $0x80 "); }

Linux Man Pages O que são? O que são? –documentação extensiva presente na maior parte dos SOs da família UNIX Comando Comando –man –man Ótima referência para system calls Ótima referência para system calls –Section 2 Executadas a partir do serviço de interr 80h Executadas a partir do serviço de interr 80h

Linux Man Pages - Organização típica 1. General Commands 2. System Calls 3. Subroutines 4. Special Files 5. File Formats 6. Games and screensavers 7. Macros and Conventions 8. Maintenence Commands

Linux Man Pages A partir do terminal do unix: A partir do terminal do unix: –Exemplo: digite “man 2 write” Online: Online: – – –

Assembly – Referências

Exercício Escreva programas em C que implementem: Escreva programas em C que implementem: –Loops –Impressão de String na tela Gere o código assembly correspondente a esses programas Gere o código assembly correspondente a esses programas Analise o código gerado Analise o código gerado