Sei sulla pagina 1di 53

ASSEMBLY

Ciro Ceissler clac@cin.ufpe.br / ciro.ceissler@gmail.com

Assembly 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

Assembly

A linguagem Assembly atrelada arquitetura de uma certa CPU, ou seja, ela depende completamente do hardware Cada famlia de processador tem sua prpria linguagem assembly (Ex. X86, ARM, SPARC, MIPS) Por essa razo Assembly no uma linguagem portvel, ao contrrio da maioria das linguagens de alto nvel

Assembly

Antes do assembly:
adio do microprocessador de sinal digital (DSP) TMS-320C54x da Texas Instruments
0000000SIAAAAAAA

instruo de adio dos computadores B-200, B-300 e B-500 da Burroughs Corporation:


Campo: O M N AAA BBB CCC Cdigo: 1 2 3 100 200 300

Assembly

As 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 - Histria

Assembly 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 - Histria

Atualmente 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 - Histria

A 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 - Assembler

Exemplo:

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

Assembly - Assembler

Byte, 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 - Fundamentos

Em 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 - Fundamentos

Um 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

Binrio
10000000 10000000000000 01 11111111111111 11 11111111111111 11111111111111 1111

Hexa 80 8001 FFFF FFFFFFFF

Decimal 128 32.769 65.535

Tipo byte word word

4.294.967.2 dword 95

Assembly - Fundamentos

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

So 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 - Registradores

Assembly - Registradores

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

EAX -> 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 - Registradores

ECX -> 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 - Registradores

ESI 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 - Registradores

ESP 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 - Registradores

Entre 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 - Registradores

Assembly - Registradores

O => Overflow D => Direction I => Interrupt Enable T => Trap S => Signal

Assembly - Registradores

Z => Zero A => Auxiliar Carry P => Parity C => Carry

Todos 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 - Pilha

A 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 - Pilha

As 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 - Pilha

push push push push push push push push

ax bx cx dx ds es di si

pusha push es, ds popa pop es, ds

Assembly Exemplo Pilha

Movimentao 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

Intel mov eax, 1 mov ebx, 0ffh

AT&T movl $1, %eax movl $0xff, %ebx

mov eax, [ebx]


mov eax, [ebx+3]

movl (%ebx), %eax


movl 3(%ebx), %eax

Assembly - Instrues

Instruo de soma:

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

Assembly - Instrues

Instruo de subtrao:

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

Assembly - Instrues

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

Instruo de comparao:

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

Assembly - Instrues

Instrues de jump:

Pulo incondicional: - jmp [100] (Sintaxe Intel) - jmp eax (Sintaxe Intel) - jmp *100 (Sintaxe AT&T) - jmp *%eax (Sintaxe AT&T)

Assembly - Instrues

Pulo condicional: - je [100] (Sintaxe Intel) - jne eax (Sintaxe Intel) - je *100 (Sintaxe AT&T) - jne *%eax (Sintaxe AT&T)

Assembly - Instrues

Instrues de manipulao da pilha:

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

Assembly - Instrues

O 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 bytes numero: 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 - Sees

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

Quando 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 - Interrupes

Para 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 EBX int 80h ; Chamada da interrupo

- Exemplo (Sintaxe AT&T): movl $1,%eax movl $0, %ebx int $0x80

Assembly - Interrupes

Assembly - Interrupes

Um programa constituido por vrias regies de memria.


Pilha Heap Cdigo Dados

Assembly Organizao do Programa

Hello World (Sintaxe Intel)

section .data hello: db 'Hello world!',10 ; A string 'Hello World! e um linefeed helloLenght: equ $-hello ; Tamanho da string hello section .text global _start _start: mov eax,4 ; Interrupo de escrita (sys_write) mov ebx,1 ; Argumento que indica modo de escrita mov 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 interrupo int 80h ; Chamada da interrupo

Assembly - Exemplo

Hello 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 - Exemplo

.stack .data include arquivo1.asm include arquivo2.asm .code start: include arquivo3.asm end start

Assembly - Include

.data arquivo1 arquivo2 arquivo3 arquivo4 arquivo5 arquivo6 arquivo7 arquivo8

db db db db db db db db

'dat/arquivo1' 'dat/arquivo2' 'dat/arquivo3' 'dat/arquivo4' 'dat/arquivo5' 'dat/arquivo6' 'dat/arquivo7' 'dat/arquivo8'

, , , , , , , ,

0 0 0 0 0 0 0 0

Assembly Carregar Arquivos

.text call NomeProcedimento NomeProcedimento PROC NEAR mov ax, 0x0F; ret NomeProcedimento ENDP

Assembly - Procedimentos

Exemplo mov ah, 0 mov al, 13h int 10h


; modo video 320*200

Video Display Area (RAM)


A000 -> grficos de alta resoluo B000 B800

Assembly Interrupo de Vdeo

www.cin.ufpe.br/~clac/infra_de_software http://www.wagemakers.be/english/doc/vga http://www.scribd.com/doc/13290971/INTERRUPCOES http://maven.smith.edu/~thiebaut/ArtOfAssembly/artof asm.html http://www.xs4all.nl/~smit/asm04001.htm#vga http://arapaho.nsuok.edu/~kingw/CS3173/Chapter9.ht m http://burks.bton.ac.uk/burks/language/asm/asmtut/as m8.htm

Assembly Referncias

Potrebbero piacerti anche