assembly x86

26
Assembly x86

Upload: ross

Post on 19-Jan-2016

58 views

Category:

Documents


4 download

DESCRIPTION

Assembly x86. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Assembly x86

Assembly x86

Page 2: Assembly x86

Oque é assembly?

Assembly ou linguagem de montagem é uma notação legível por humanos para o código

de máquina que uma arquitetura de computador específica usa. A linguagem de

máquina, que é um mero padrão de bits, torna-se legível pela substituição dos valores

em bruto por símbolos chamados mnemónicos.

Ex.: MOV AL, 61h

Page 3: Assembly x86

Assembly x86

Conjunto de instruções de baixo nível tanto para arquiteturas de processadores Intel (Intel 8088 e 8086), como para não Intel

(5x86 da AMD).

Page 4: Assembly x86

Sintaxe

2 tipos principais, algumas diferenças

-Ordem dos parâmetros

.Intel: mov ax, 03d00h

.AT&T: mov 03d00h, ax

Page 5: Assembly x86

Registradores

Usados para guardar os dados binários.

CS

SS

DS

ES

EIP

EFLAGS

16-bit Segment Registers

EAX

EBX

ECX

EDX

32-bit General-Purpose Registers

FS

GS

EBP

ESP

ESI

EDI

Page 6: Assembly x86

Registradores

Page 7: Assembly x86

Registradores Especiais

Alguns de uso especial: EAX – acumulador (automaticamente usado para divisao e multiplicação)

ECX – contador de loop (instrução LOOP)

ESP – stack pointer (não deve ser usado para OP aritmeticas e transferir dados)

ESI, EDI – index registers (para instruções de transferencia de memoria rapidas)

EBP – extended frame pointer (pilha)

EIP – Ponteiro para instruções

Page 8: Assembly x86

Registradores Flag EFLAGSCada flag tem só 1 bit (set/clear)

Carry (CF)-Out of range (sem sinal)

Overflow(OF)

-Out of range (com sinal) Sign (SF)

-Resultado negativo Zero (ZF)

-Resultado é zero Auxiliary Carry (AF)

- Parity (PF)

-Verifica paridade

Page 9: Assembly x86

Pilha

Todas as arquiteturas x86 usam uma pilha como uma área de armazenamento temporário em memória RAM, que permite ao

processador armazenar e recuperar rapidamente os dados na memória.

O topo da pilha atual é apontada pelo registrador ESP. A pilha "cresce" para baixo.

Instruções PUSH e POP

Page 10: Assembly x86

Pilha

As principais funcionalidades da pilha são:

- Preservar valores de registradores em funções

- Preservar dados da memória - Transferir dados sem usar registradores

- Reverter a ordem de dados- Chamar outras funções e depois retornar

- Passar parâmetros para funções

Page 11: Assembly x86

Tipos de Dados

Byte, Word e Dword são blocos de dados básicos. O processador trabalha com o

tamanho de dados adequados para executar as instruções

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

bytes

Page 12: Assembly x86

Tipos de Dados

BYTE, SBYTE 8-bit unsigned integer; 8-bit signed integer

WORD, SWORD 16-bit unsigned & signed integer

DWORD, SDWORD 32-bit unsigned & signed integer

QWORD 64-bit integer

TBYTE 80-bit integer

Page 13: Assembly x86

Tipos de Dados

REAL8 8-byte IEEE long real

REAL10 10-byte IEEE extended real

REAL4 4-byte IEEE short real

? Indefinido

Page 14: Assembly x86

Definindo Dados

Inteiros

Ex: 30d, 6Ah, 42, 42o, 1101bHexadecimal começando com letra: 0A5h

Char e Strings

str1 BYTE "Enter your name",0str2 BYTE 'Error: halting program',0str3 BYTE 'A','E','I','O','U'

Page 15: Assembly x86

Operador DUP

Usa-se DUP para alocar uma matriz ou string.

Contador e argumentos devem ser constantes ou expressões constantes.

var1 BYTE 20 DUP(0) ; 20 bytes, all zero

var2 BYTE 20 DUP(?) ; 20 bytes, ; uninitialized

var3 BYTE 4 DUP("STACK") ; 20 bytes:

;"STACKSTACKSTACKSTACK"

var4 BYTE 10,3 DUP(0),20

Page 16: Assembly x86

Instruções

Transformado em codigo de maquina pelo assembler (TASM) Membro do instruction set IA-32.

4 partes:

Label: - Mnemônicos - Operandos - ;Comentários

Page 17: Assembly x86

Instruções

MNEMÔNICOS

Exemplos: MOV, ADD, SUB, MUL, INC, DEC

OPERANDOS

Constante (immediate value), 96 Registradores, eax

Memória (rótulo de dados), count

NUMERO DE DADOS stc ; set Carry flag inc ax ; add 1 to ax mov count, bx; move BX to count

Page 18: Assembly x86

Instruções

DIRETIVAS

Comandos reconhecidos pelo Assembler Parte da sintaxe do assembler Usado para declarar codigo, area de dados, modo de seleção de

memoria, Procedures. etc. Case insensitive

Diferentes assemblers, diferentes diretivas NASM != TASM, por exemplo

Ex: .data .code PROC struc

Page 19: Assembly x86

Interrupções

Por hardware, exception (ñ-controlada)..

Interrupções pelo software são usadas para system calls (sub-rotinas). Muito úteis

INT 21h ; muito usada

Se AH = 3E , fecha o arquivo

Parametros geralmente são requeridos CX,BX,AL.

Page 20: Assembly x86

Instruções

Várias outras intruções:

JMP / LOOP ...: Usados para desvios.

AND / NOR / OR ...: Operações booleanas nivel bit

SZF / STC / STD ... : Setar flags

CMP, CALL, PUSH, POP, etc..

Page 21: Assembly x86

Endereçamento

Três tipos básicos de operandos:

Immediate – um inteiro constante (8, 16, or 32 bits)

Valor codificado ja na instrução

Registradores – nome do registrador

Memoria – Referencia a um local na memoria (label)

Page 22: Assembly x86

Comentarios

; Não vou nem comentar

Page 23: Assembly x86

Código Assembly

TITLE Add and Subtract (AddSub.asm)

; Este programa soma e subtrai inteiros de 32-bits.

INCLUDE Irvine32.inc.codemain PROCmov eax,10000h ; EAX = 10000hadd eax,40000h ; EAX = 50000hsub eax,20000h ; EAX = 30000hcall DumpRegs ; display exit

main ENDPEND main

Page 24: Assembly x86

Exemplo - LinuxSECTION .DATA

hello: db 'Hello world!',10helloLen: equ $-hello

SECTION .TEXTGLOBAL _START

_START:

; Write 'Hello world!' to the screenmov eax,4 ; 'write' system callmov ebx,1 ; file descriptor 1 = screenmov ecx,hello ; string to writemov edx,helloLen ; length of string to writeint 80h ; call the kernel

; Terminate programmov eax,1 ; 'exit' system callmov ebx,0 ; exit with error code 0int 80h ; call the kernel

Page 25: Assembly x86

Exemplo - DOSDOSSEG.MODEL LARGE.STACK 200h

.DATAhello db 'Hello world!',10,13,'$'helloLen db 14

.CODEASSUME CS:@CODE, DS:@DATA

START:mov ax,@datamov ds,ax

; Write 'Hello world!' to the screenmov ah,09h ; 'print' DOS servicemov dx,offset hello ; string to writeint 21h ; call DOS service; Terminate programmov ah,4Ch ; 'exit' DOS servicemov ax,0 ; exit with error code 0int 21h ; call DOS service

END START

Page 26: Assembly x86

Paramos por aqui (...)