Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Programação em Assembly

No description
by

on 31 October 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Programação em Assembly

Programação em Assembly
O que é linguagem assembly
Assembly, em inglês, significa montagem. Com essa linguagem, o programa é montado operação por operação, exatamente do jeito que o processador opera
Principais instruções
As instruções add e sub tomam como argumento dois registradores e colocam o resultado no primeiro. Por exemplo, se eax contém 5 e ebx contém 3, a instrução add eax, ebx fará com que eax contenha 8.
Mexendo na memória
Na seção .data ficam as variáveis inicializadas. Existem uma série de palavras reservadas para guardar byte por bye, palavra por palavra, etc.
Registradores
O paradigma de programação assembly é bem parecido com C. Uma das principais diferenças entre as duas linguagens é o uso de registradores, que são as variáveis disponíveis ao programador. No modo real, os registradores têm 16 bits. No modo protegido, 32. No modo longo, 64.
Principais registradores
Há quatro registradores de uso geral, chamados, no modo protegidos de EAX, EBX, ECX e EDX. Além desses, ESI e EDI (índices) também podem ser usados.
A instrução mov
A instrução mov recebe como primeiro argumento o destino de uma informção e como segundo argumento a fonte. mov eax, ebx copia o conteúdo de ebx para eax. A instrução mov eax, 5 coloca o valor 5 no registrador eax.
E como eu imprimo na tela?
Imprimir, ler, esperar e outros são feitos através de interrupções, que são como chamadas ao sistema operacional. No modo protegido, apenas uma interrupção é permitida: int 80h.
NÃO confundir com assembler, o "compilador" da linguagem assembly.
As diferentes funções da int80h são acessadas colocando-se diferentes valores nos registradores. Por exemplo:
Para ler, é preciso colocar o valor 3 no registrador eax, 0 (stdin) no registrador ebx, um endereço de memória no registrador ecx e um número máximo de bytes a serem lidos no registrador edx. Para mais interrupções, veja http://syscalls.kernelgrok.com/
• db: Define byte
• dw: Define word (2 bytes/16 bits)
• dd: Define doubleword (4 bytes/32 bits)
• dq: Define quadword (8 bytes/64 bits)
• equ: Funciona como se fosse um define
• $: endereço atual
A pilha
Para driblar a falta de memória com a limitação dos registradores, é possível usar a instrução push para guardar um valor na pilha e a função pop para recuperar o valor dela. É interessante notar que a pilha segue a política LIFO.
section .data
hello: db 'Hello world!', 10
hellolen: equ $-hello
section .text
global _start
_start:
mov eax, 4 ; chamada: write
mov ebx, 1 ; fd = 1 (stdout)
mov ecx, hello ; string
mov edx, hellolen ; comprimento da string
int 80h ; chamada de sistema
mov eax, 1 ; chamada: exit
mov ebx, 0 ; valor de retorno
int 80h ; chamada de sistema
Hello World
JEITO CLASSICO:Modo Protegido: 1. Baixe o pacote NASM ; 2. Salve o programa com a extensão .s; 3. Abra o terminal e vá até a pasta onde você salvou o arquivo; 4. Execute os seguintes comandos :
nasm -f elf nome.s
ld -s -o nome nome.o
./nome
Como rodar o NASM
Loops
Depois de instruçoes aritmeticas ou da instrucao cmp (compare), voce pode usar as instrucoes jz (pule se zero), je (pule se igual), jne (pule se nao igual), jge (pule se maior ou igual), etc. para voltar a etiquetas (labels) anteriores no codigo. Por exemplo,
inicio: mov ebx, 5
mov eax, 5
cmp eax, ebx
jz inicio.
Pula pra o começo infinitamente
JEITO FACIL: http://cin.ufpe.br/~emm2/nasm-executer_install.sh salve o arquivo como .asm e digite no terminal nasm-executer nome.asm
Full transcript