Armando gon alves ciro ceissler
This presentation is the property of its rightful owner.
Sponsored Links
1 / 31

ASSEMBLY – aula 2 PowerPoint PPT Presentation


  • 71 Views
  • Uploaded on
  • Presentation posted in: General

Armando Gonçalves Ciro Ceissler. ASSEMBLY – aula 2. Roteiro. 1- Intel x AT&T 2- Pilha e command line arguments 4- Simulando alguns comandos C 5- Assembly inline 7- Exemplos de código c/c++ 8- Exemplos de código Assembly inline. Intel x AT&T. Diferenças:

Download Presentation

ASSEMBLY – aula 2

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Armando gon alves ciro ceissler

Armando Gonçalves

CiroCeissler

ASSEMBLY – aula 2


Roteiro

Roteiro

1- Intel x AT&T

2- Pilha e command line arguments

4- Simulando alguns comandos C

5- Assembly inline

7- Exemplos de código c/c++

8- Exemplos de código Assembly inline


Intel x at t

Intel x AT&T

  • 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


Intel x at t1

Intel x AT&T


Intel x at t exemplo fatorial

Intel x AT&T- Exemplo: Fatorial

  • C

    int fatorial (int numero) {

    int y = 1;

    if (numero <= 1)

    return 1;

    y = numero * fatorial (numero - 1);

    return y;

    }


Intel x at t exemplo fatorial1

Intel x AT&T- Exemplo: Fatorial

  • Intel

    segment .data

    segment .bss

    segment .text

    global _asm_main

    _asm_main:

    moveax, 5

    movebx, 1

    L1:

    cmpeax, 0

    je L2

    imulebx, eax

    deceax

    jmp L1

    L2: ret


Intel x at t exemplo fatorial2

Intel x AT&T- Exemplo: Fatorial

  • AT&T

    .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 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

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


Intel x at t exemplo ponto de entrada1

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

Intel x AT&T- Exemplo: Ponto de entrada


Pilha e argumentos de linha de comando

Pilha e Argumentos de linha de comando

  • Exemplo:

    • ./programa infra software 677


Pilha e argumentos de linha de comando1

Pilha e Argumentos de linha de comando

  • Exemplo:

    • ./programa infra software 677


Gerando c digo assembly

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”


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


Simulando comandos c if then else1

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- If-then-else


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


Simulando comandos c while1

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

Simulando comandos C- while


Assembly inline fun es inline em c

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


Assembly inline fun es inline em c1

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


Assembly inline fun es inline em c2

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


Assembly inline

Assembly Inline

  • Rotinas assembly escritas como funções inline

  • Características

    • Convenientes

    • Velozes

    • Amplamente utilizadas na programações de sistemas


Assembly inline1

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


Assembly inline2

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”)


Assembly inline3

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


Assembly inline4

Assembly Inline

  • Exemplo 3:

    #include <stdio.h>

    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 inline5

Assembly Inline

  • Exemplo 4:

    #include <stdio.h>int main()

    {__asm__("

    movl$1,%eax// SYS_exitxor %ebx,%ebx

    int $0x80");

    }


Hello world usando interrup es

Hello World usando Interrupções


Chamando fun es externas

Chamando funções externas


Chamando fun es externas m ltiplos parametros

Chamando funções externas (múltiplos parametros)


Chamando fun es externas m ltiplos parametros1

Chamando funções externas (múltiplos parametros)


Obtendo o tempo de sistema

Obtendo o tempo de sistema


Criando e modificando arquivos

Criando e Modificando Arquivos


  • Login