ASSEMBLY - PowerPoint PPT Presentation

About This Presentation
Title:

ASSEMBLY

Description:

Title: ASSEMBLY Author: Lucas Aranha Last modified by: efpc Document presentation format: On-screen Show (4:3) Other titles: Tahoma Lucida Sans Unicode Wingdings ... – PowerPoint PPT presentation

Number of Views:59
Avg rating:3.0/5.0
Slides: 42
Provided by: LucasA4
Category:
Tags: assembly

less

Transcript and Presenter's Notes

Title: ASSEMBLY


1
ASSEMBLY aula 2
  • Hugo Calazans
  • André Ricardo

2
Roteiro
  • 1- Intel x ATT
  • 2- Pilha e command line arguments
  • 3- Procedimentos
  • 4- Simulando alguns comandos C
  • 5- Assembly inline
  • 6- Criando um projeto C/C no eclipse
  • 7- Exemplos de código c/c
  • 8- Exemplos de código Assembly inline
  • 9- Linux Man Pages
  • 10- Referências

3
Intel x ATT
  • Diferenças
  • 1- Ordenação entre source e destination
  • 2- Nome dos registradores
  • 3- Operandos imediatos (immediate)
  • 4- Tamanho dos operandos
  • 5- Operandos na memória

4
Intel x ATT
Intel Code ATT Code
mov eax,1 mov ebx,0ffh int 80h mov ebx, eax mov eax,ecx mov eax,ebxplus3 mov eax,ebx20h add eax,ebxecx2h lea eax,ebxecx sub eax,ebxecx4h-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
5
Intel x ATT- Exemplo Fatorial
  • C
  • int fatorial (int numero)
  • int y 1
  • if (numero lt 1)
  • return 1
  • y numero fatorial (numero - 1)
  • return y

6
Intel x ATT- Exemplo Fatorial
  • Intel
  • .globl main
  • main
  • mov eax, 5
  • mov ebx, 1
  • L1 cmp eax, 0 //compara 0 com o valor em eax
  • je L2 //pula p/ L2 se 0eax (je pula se
    igual)
  • imul ebx, eax // ebx ebxeax
  • dec eax //decrementa eax
  • jmp L1 // pulo incondicional para L1
  • L2 ret

7
Intel x ATT- Exemplo Fatorial
  • ATT
  • .globl main
  • main
  • movl 5, eax
  • movl 1, ebx
  • L1 cmpl 0, eax //compara 0 com o valor em
    eax
  • je L2 //pula p/ L2 se 0eax (je pula se
    igual)
  • imull eax, ebx // ebx ebxeax
  • decl eax //decrementa eax
  • jmp L1 // pulo incondicional para L1
  • L2 ret

8
Intel x ATT- Exemplo Ponto de entrada
  • 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

9
Intel x ATT- Exemplo Ponto de entrada
  • ATT
  • .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

10
Pilha e Argumentos de linha de comando
  • Exemplo
  • ./programa infra software 677

PILHA
4
programa
infra
software
677
11
Pilha e Argumentos de linha de comando
  • Exemplo
  • ./programa infra software 677

INTEL ATT 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
12
Procedimentos?
  • Diferentemente do TASM, NASM não possui o
    conceito de procedimento
  • Tudo é Label!
  • Nada de keywords "proc" ou "endp"
  • basta colocar uma label
  • Boa prática
  • comentários delimitando o bloco de código

13
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

14
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
  • ATT
  • fileWrite movl 4, eax movl (filedesc),
    ebx movl stuffToWrite, ecx movl (stuffLen),
    edx int 0x80 ret endp fileWrite

15
Gerando Código Assembly
  • 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
  • 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

16
Simulando comandos C- If-then-else
  • C
  • if (EAX 'w') writeFile()
  • else doSomethingElse()
  • NASM
  • cmp eax, 'w'
  • jne skipWrite Se não, skip
  • call writeFile
  • jmp outOfThisMess
  • skipWrite
  • call doSomethingElse
  • outOfThisMess ... resto do programa

17
Simulando comandos C- If-then-else
  • C
  • if (EAX 'w') writeFile()
  • else doSomethingElse()
  • ATT
  • cmpl 'w, eax
  • jne skipWrite Se não, skip
  • call writeFile
  • jmp outOfThisMess
  • skipWrite
  • call doSomethingElse
  • outOfThisMess ... resto do programa

18
Simulando comandos C- while
  • C
  • int i 0
  • while(ilt 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

19
Simulando comandos C- while
  • C
  • int i 0
  • while(ilt 100)
  • i i 1
  • ATT
  • movl 0, eax
  • whileLoop movl 100, ebx
  • cmpl ebx, eax
  • jge WhileTerminado
  • incl eax
  • jmp WhileLoop
  • WhileTerminado
  • resto do código

20
Assembly Inline- funções inline em C
  • 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

21
Assembly Inline- funções inline em C
  • 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

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

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

24
Assembly Inline
  • Como declarar?
  • asm("assembly code")
  • 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

25
Assembly Inline
  • Exemplo 1
  • Move o conteúdo de ecx para eax
  • __asm__("movl ecx, eax")
  • 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)

26
Assembly Inline
  • 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

27
Assembly Inline
  • Exemplo 3
  • include ltstdio.hgt
  • int main()
  • __asm__ ( "movl eax, ebx\n\t
  • "movl 56, esi\n\t
  • "movl ecx, label(edx,ebx,4)\n\t"
    "movb ah, (ebx)")

28
Assembly Inline
  • Exemplo 4
  • include ltstdio.hgt int main()
  • __asm__("
  • movl 1,eax // SYS_exit xor ebx,ebx
  • int 0x80 ")

29
Criando um projeto C/C no eclipse
30
Exemplo Código C/C
31
Executando a aplicação
32
Hello World usando Interrupções
33
Chamando funções externas
34
Chamando funções externas (múltiplos parametros)
35
Chamando funções externas (múltiplos parametros)
36
Obtendo o tempo de sistema
37
Criando e Modificando Arquivos
38
Linux Man Pages
  • O que são?
  • documentação extensiva presente na maior parte
    dos SOs da família UNIX
  • Comando
  • man ltpage_namegt
  • Ótima referência para system calls
  • Section 2
  • Executadas a partir do serviço de interr 80h

39
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

40
Linux Man Pages
  • A partir do terminal do unix
  • Exemplo digite man 2 write
  • Online
  • http//www.linuxmanpages.com/
  • http//man.he.net/
  • http//www.die.net/doc/linux/man/

41
Assembly Referências
  • http//www/htcrs/if677/assembly/referencias.txt
Write a Comment
User Comments (0)
About PowerShow.com