Академический Документы
Профессиональный Документы
Культура Документы
text
binary
Static libraries
(.a)
Formato GAS/Gnu
lea
sub
cmp
mov
leal
subl
cmpl
movl
eax,[ecx+ecx*2]
esp,8
dword ptr [ebp-8],0
eax,dword ptr [eax*4+100h]
(%ecx,%ecx,2),%eax
$8,%esp
$0,-8(%ebp)
$0x100(,%eax,4),%eax
EFLAGS
Memria
A
L
U
PC
Endereos
Dados
Instrues
Estado da CPU
PC
Program Counter
Endereo da prxima instruo
Registradores
g
Acesso rpido a dados/endereos
Registrador EFLAGS (Cdigos de
condio)
Armazena informao sobre resultado
da ltima operao artimtica
(overflow?, zero?, negativo?)
Usados para desvios condicionais
Codigo objeto
Dados do programa
Bibliotecas
Dados do S.O.
Pilha
(Stack)
Memria plana
Array de bytes endereveis
Contm cdigo, dados e pilha
Pilha usada para gerenciar
chamada a procedimentos
Caractersticas do Assembly
Tipos de dados bsicos
integer de 1, 2, ou 4 bytes
Valores int, short, long int, char
Endereos (equivalente a untyped pointer)
Dados em ponto flutuante de 4, 8, ou 10 bytes
No existem tipos de dados complexos como arrays ou structs
Apenas bytes alocados de forma contgua na memria
Operaes primitivas
Funes aritmticas sobre o contedo de registradores ou dados
na memria
Transferncia
T
f i d
de d
dados
d ((mov)) entre
t memria
i e registradores
i t d
Carregar dado de memria para registrador
Armazenar dado em registrador para memria
Controle de fluxo de execuo
Desvios (jump) incondicionais
Desvios condicionais (dependendo de um bit em EFLAGS)
%ax
16
%edx
%ecx
%ebx
%esi
%ah
32
%eax
%al
8
%edi
%esp
O Registrador EFLAGS
Seus bits indicam a ocorrncia de eventos (bit carry) ou o
resultado da ltima operao aritmtica, p.ex. t = a+b:
OF
SF
ZF
CF
PF
...
OF (Overflow flag)=1
se houve overflow (negativo ou
positivo) de representao com sinal
SZ (Sign flag)=1
se t < 0
ZF (Zero flag)=1
se t ==0
CF (Carry flag)=1
se houve overflow de unsigned
PF (Parity flag)=1
se o byte menos significativo
possui o nmero par de bits 1
Os bits de EFLAGS so consultados por instrues de desvio condicional
Transferncia de bytes
Instruo mais frequente
movl fonte, destino
Operando fonte pode ser:
Contedo de registrador
modo registrador
Contedo de memria apontado por registrador
modo memria
Constante
modo imediato
Smbolo
modo direto
Combinaes dos anteriores
Obs:
Operando em modo memria caracterizado pelo uso de parenteses ( )
Exemplo:
movl (%ebx), %ecx
// Mem(ebx) Recx
movl
Destino
Exemplo
Equiv. em C
movl $0x4,%eax
temp = 0x4;
movl $-147,(%eax)
*p = -147;
Imed
Reg
Mem
Reg
Reg
Mem
movl %eax,%edx
temp2 = temp1;
movl %eax,(%edx)
*p = temp;
Mem
Reg
movl (%eax),%edx
temp = *p;
p;
Exemplos
Modo registrador
movl %eax, %ecx
// Reax Recx
Modo imediato
movl $Ox100, %eax
// const Reax
// Reax Mem[16+Recx ]
// Reax Mem[R
[ ecx]
Modo direto
movl table, %ebx
// Mem[table] Rebx
Sufixos
Para muitas instrues existem vrias variantes,
definidas pelo seu sufixo (e.g. movl, addl,
decl)
Sufixo indica o tamanho do operando (resultado
armazenado alinhado com o byte menos
significativo)
b = tamanho de 1 byte
movb $0, (%eax)
w = tamanho de 2 bytes
//0 Mem[Reax ]
l = tamanho de 4 bytes
movl $0, (%eax)
Grupos de Instrues
Movimento de dados
Aritmtica inteira
Instrues lgicas
Instrues de controle de fluxo
Instrues em ponto flutuante
Efeito
Dest + Src Dest
Dest Src Dest
Dest * Src Dest
Dest << Src Dest
Dest >> Src Dest
Dest >> Src Dest
Dest ^ Src Dest
Dest & Src Dest
Dest | Src Dest
aritmtico
lgico
xor bit-a-bit
and bit-a-bit
or bit-a-bit
Efeito
Ef
it
Dest +
Dest
- Dest
~ Dest
1 Dest
1 Dest
Dest
Dest
Declarao de Dados
Assembler do gcc permite declarao de
variveis
i i d
de vrios
i titipos ((na seo
d
de
dados .data).
Exemplos:
vet: .byte
48, 0b00110000, 0x30, 0
s1: .string o resultado eh de %d\n
procedimentos
Dados
1)
) Char
2) short
2) int, float
3) double
4) struct, array
5) pointer
Assembly
mem
Stack
regs
alu
Cond.
processor
Codes
1)
2)
2)
3)
4)
5)
Byte
2-byte word
4-byte word
8-byte long word
Alocao contgua de bytes
Endereo do byte inicial
Exerccio
Tentem entender...
swap:
pushl %ebp
movl %esp,%ebp
pushl %ebx
movl
movl
movl
movl
l
movl
movl
Inicializao
(ignorar)
12(%ebp),%ecx
8(%ebp),%edx
(%ecx),%eax
(%edx),%ebx
%
%eax,(%edx)
(% d )
%ebx,(%ecx)
yp
xp
movl -4(%ebp),%ebx
Finalizao
movl %ebp,%esp
(ignorar)
popl %ebp
ret