ASSEMBLY Lucas Aranha lab3@cin.ufpe.br. Assembly Assembly é uma linguagem de baixo nível, chamada freqüentemente de “linguagem de montagem” Assembly é

  • View
    215

  • Download
    0

Embed Size (px)

Text of ASSEMBLY Lucas Aranha lab3@cin.ufpe.br. Assembly Assembly é uma linguagem de baixo nível, chamada...

  • ASSEMBLYLucas Aranhalab3@cin.ufpe.br

  • AssemblyAssembly uma linguagem de baixo nvel, chamada freqentemente de linguagem de montagem

    uma linguagem considerada difcil, principalmente porque o programador precisa conhecer a estrutura da mquina para us-la

  • AssemblyA linguagem Assembly atrelada arquitetura de uma certa CPU, ou seja, ela depende completamente do hardware

    Por essa razo Assembly no uma linguagem portvel, ao contrrio da maioria das linguagens de alto nvel

  • Assembly - HistriaAs primeiras linguagens Assembly surgiram na dcada de 50, na chamada segunda gerao das linguagens de programao

    A segunda gerao visou libertar os programadores de dificuldades como lembrar cdigos numricos e calcular endereos

  • Assembly - HistriaAssembly foi muito usada para vrias aplicaes at os anos 80, quando foi substituda pelas linguagens de alto nvel

    Isso aconteceu principalmente pela necessidade de aumento da produtividade de software

  • Assembly - HistriaAtualmente Assembly usada para manipulao direta de hardware e para sistemas que necessitem de performance crtica

    Device drivers, sistemas embarcados de baixo nvel e sistemas de tempo real so exemplos de aplicaes que usam Assembly

  • Assembly - AssemblerA linguagem Assembly de baixo nvel, porm ainda precisa ser transformada na linguagem que a mquina entende

    Quem faz isso o Assembler. O Assembler um utilitrio que traduz o cdigo Assembly para a mquina

  • Assembly - AssemblerExemplo:

    Antes -> mov al, 061h (x86/IA-32)

    Depois -> 10110000 01100001

  • Assembly - FundamentosByte, Word e Dword so blocos de dados bsicos. O processador trabalha com o tamanho de dados adequados para executar as instrues

    Um byte possui 8 bits, um word possui 16 bits ou 2 bytes e um dword possui 32 bits ou 4 bytes

  • Assembly - FundamentosEm Assembly comum representar os nmeros na forma hexadecimal. Isso acontece porque interessante visualizar o nmero na forma de dados

    A representao hexadecimal facilita o tratamento de nmeros muito grandes e permite saber quais bits esto ligados ou desligados

  • Assembly - FundamentosUm algarismo hexadecimal pode ser representado por quatro algarismos binrios

    Logo um byte pode ser representado como dois nmeros hexa, um word como quatro nmeros hexa e um dword como oito nmeros hexa

  • Assembly - Fundamentos

  • Assembly - RegistradoresRegistradores so reas especiais dentro do processador que so mais rpidas que operandos de memria.

    Como vamos trabalhar com o processador Intel, existem apenas 8 registradores de uso geral

  • Assembly - RegistradoresSo eles:EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP

    Os registradores ESP e EBP s devem ser usados preferencialmente para trabalhar com a pilha

  • Assembly - RegistradoresNos registradores de uso geral (Exceto ESI e EDI) permitido usar trs modos de acesso diferentes, ilustrados pela figura abaixo:

  • Assembly - RegistradoresEAX -> Chamado de Acumulador, geralmente usado para operaes aritmticas e para guardar resultados

    EBX -> Chamado de Base, geralmente usado para armazenar dados em geral e para endereos de memria

  • Assembly - RegistradoresECX -> Chamado de Contador, como o nome j diz usado como contador, principalmente para controlar loops

    EDX -> Chamado de registrador de dados, usado geralmente para guardar o endereo de uma varivel na memria

  • Assembly - RegistradoresESI e EDI -> Respectivamente Source Index e Destination Index, so menos usados do que os registradores descritos anteriormente. Geralmente usa-se ESI e EDI para movimentao de dados, com ESI guardando o endereo fonte de uma varivel e EDI guardando o endereo destino. No podem ser acessados em nvel de Byte.

  • Assembly - RegistradoresESP e EBP -> Respectivamente Stack Pointer e Base Pointer, s devem ser usados para manipulao da pilha. O Registrador ESP guarda a referncia para o topo da pilha, enquanto o registrador EBP usado para andar pela pilha

  • Assembly - RegistradoresEntre os registradores que no so de uso geral, existe um registrador muito relevante para o programador, o registrador flags

    Atravs do registrador flags podemos saber se dois valores so iguais, se um maior que outro ou se um valor negativo, alm de outras informaes

  • Assembly - RegistradoresO => OverflowD => DirectionI => Interrupt EnableT => TrapS => Signal

  • Assembly - RegistradoresZ => ZeroA => Auxiliar CarryP => ParityC => Carry

  • Assembly - PilhaTodos os programas fazem uso da pilha em tempo de execuo, porm nas linguagens de alto nvel no preciso se preocupar com o funcionamento da pilha

    J em Assembly, o programador precisa saber trabalhar com a pilha, pois ela uma ferramenta importante

  • Assembly - PilhaA pilha uma rea de dados existente na memria em tempo de execuo, na qual seu programa pode armazenar dados temporariamente

    O processador rpido no acesso pilha, tanto para escrever quanto para ler

  • Assembly - PilhaAs principais funcionalidades da pilha so:

    - Preservar valores de registradores em funes - Preservar dados da memria - Transferir dados sem usar registradores- Reverter a ordem de dados- Chamar outras funes e depois retornar- Passar parmetros para funes

  • Assembly - InstruesMovimentao de dados:

    - mov destino, fonte (Sintaxe Intel)

    - mov fonte, destino (Sintaxe AT&T)

    Obs: Nas instrues AT&T, necessrio informar o tamanho do dado com que se est trabalhando

  • Assembly - Instrues

  • Assembly - InstruesInstruo de soma:

    - add destino, fonte (Sintaxe Intel)Exemplo: add eax,[ebx+ecx]

    - add fonte, destino (Sintaxe AT&T)Exemplo: addl (%ebx,%ecx),%eax

  • Assembly - InstruesInstruo de subtrao:

    - sub destino, fonte (Sintaxe Intel)Exemplo: sub eax,ebx

    - sub fonte, destino (Sintaxe AT&T)Exemplo: subl %ebx,%eax

  • Assembly - InstruesInstrues de operaes lgicas:

    - and/or/xor destino, fonte (Sintaxe Intel)Exemplo: and ax,bx

    - and/or/xor fonte, destino (Sintaxe AT&T)Exemplo: andw %bx,%ax

  • Assembly - IntruesInstruo de comparao:

    - cmp operando1, operando2 (Sintaxe Intel)Exemplo: cmp 08h, eax- cmp operando1, operando2 (Sintaxe AT&T)Exemplo: cmp $0x8, %eax

  • Assembly - InstruesInstrues de jump:

    Pulo incondicional:

    - jmp [100] (Sintaxe Intel) - jmp eax (Sintaxe Intel)

    - jmp *100 (Sintaxe AT&T)- jmp *%eax (Sintaxe AT&T)

  • Assembly - InstruesPulo condicional:

    - je [100] (Sintaxe Intel) - jne eax (Sintaxe Intel)

    - je *100 (Sintaxe AT&T)- jne *%eax (Sintaxe AT&T)

  • Assembly - InstruesInstrues de manipulao da pilha:

    - push eax (Sintaxe Intel)- push %eax (Sintaxe AT&T)

    - pop eax (Sintaxe Intel)- pop %eax (Sintaxe AT&T)

  • Assembly - SeesO cdigo Assembly dividido em sees. As principais sees no Linux so:

    - section .data -> A seo .data usada para declarar variveis inicializadas. Porm essas variveis no mudam no decorrer do programa. Essa seo usada geralmente para definir nomes de arquivos, constantes, entre outros.

  • Assembly - Sees- Exemplo:

    section .data mensagem: db 'Hello world!' msglength: equ 12

  • Assembly - Sees- section .bss -> a seo usada para declarar as variveis do programa

    - Exemplo:section .bss nomearq: resb 230 ;Reserva 230 bytesnumero: resb 1 ;Reserva 1 byte array: resw 10 ;Reserva 10 words

  • Assembly - Sees- section .text -> Essa a seo onde o cdigo do programa escrito

    - Exemplo:section .text global _start

    _start: . . . . . . . . .

  • Assembly InterrupesInterrupes so chamadas ao processador requisitando um servio

    O nome interrupo vem do fato de que o processador tem sua atividade atual interrompida quando recebe um sinal de chamada

  • Assembly - InterrupesQuando isso acontece, o processador salva o processo atual e executa a rotina daquela interrupo

    Aps a execuo da rotina, que geralmente est armazenada em uma tabela na memria RAM, o processador retorna ao processo em que estava anteriormente

  • Assembly - InterrupesPara se chamar uma interrupo no Linux, feito o seguinte processo:- Coloca-se o nmero da interrupo no registrador EAX - Coloca-se os argumentos requeridos pela interrupo nos devidos registradores - Chama-se a interrupo O resultado geralmente ser retornado em EAX

  • Assembly - Interrupes- Exemplo (Sintaxe Intel):mov eax,1 ; Interrupo Exit mov ebx,0 ; Argumento em EBXint 80h ; Chamada da interrupo

    - Exemplo (Sintaxe AT&T):movl $1,%eaxmovl $0, %ebxint $0x80

  • Assembly - ExemploHello World (Sintaxe Intel)

    section .data hello: db 'Hello world!',10 ; A string 'Hello World! e um linefeed helloLenght: equ $-hello ; Tamanho da string hellosection .text global _start _start: mov eax,4 ; Interrupo de escrita (sys_write) mov ebx,1 ; Argumento que indica onde a string vai ser escritamov ecx,hello ; Argumento que indica o endereo da string mov edx,helloLenght ; Argumento que indica o tamanho da string int 80h ; Chamada da interrupo mov eax,1 ; Interrupo exit (sys_exit)mov ebx,0 ; Argumento da interrupoint 80h ; Chamada da interrupo

  • Assembly - ExemploHello World (Sintaxe AT&T)

    .data hello: .string "Hello World!\n" .text .globl main main: mov $4,%eax mov $1,%ebx mov $hello,%ecx mov $13,%edx int $0x80 mov $1,%eax mov $0,%ebx int $0x80

  • Assembly Referncias

    www.cin.ufpe.br/~lab3

    No meu p