Escolar Documentos
Profissional Documentos
Cultura Documentos
Representao de Programas
Computadores executam cdigo de mquina
sequncias de bytes que codificam operaes
O compilador gcc gera como sada do passo de compilao um programa em linguagem de montagem
entrada para o passo de montagem (assembler)
Linguagem de Montagem
Muito prxima linguagem de mquina Instrues de mquina executam operaes bem simples
operaes aritmticas/lgicas transferncia de dados entre memria e registradores controle do fluxo de execuo (desvios, chamadas de funo)
EFLAGS
Estado da CPU
PC: endereo da prxima instruo Registradores:
valores inteiros, endereos
Memria plana
array de bytes endereveis contm cdigo, dados e pilha pilha usada para suporte a chamada de procedimentos
5
Programa em assembly
.data nums: .int
$0, %ebx $nums, %ecx $4, %ebx L2 (%ecx), %eax $1, %ebx $4, %ecx L1
ret
Registradores
A CPU IA32 tem 8 registradores de 32 bits
valores inteiros e endereos (ponteiros) funcionam como memria de acesso muito rpido (esto dentro da CPU)
31 15 7
Modos de Endereamento
Diversas instrues tem um ou mais operandos
contedo da memria, registrador, constante como especificar os operandos? movl fonte, destino modo imediato (constante): movl $0,%eax modo registrador: movl %ecx, %eax modo indireto: movl (%ecx), %eax modo base-deslocamento: movl 8(%ebp), %eax mov var, %eaxabsoluto
ATENO no existe o conceito de varivel
modo absoluto:
var um endereo de memria! movl var, %eax automaticamente move o valor referenciado (*var em C) 8 movl $var, %eax move o endereo var para %eax
Modos de Endereamento
Movimento de dados sempre CPU memria Nunca dois operandos na memria !!!
Alocao de Dados
Assembler do gcc permite alocao de dados globais de vrios tipos
- geralmente na seo de dados (.data)
Exemplos:
vet: .byte 48, 0x30, '0' s1: .string resultado igual a %d\n i: .int 1000
11
Grupos de Instrues
Movimentao de dados Aritmtica inteira Instrues lgicas Instrues de controle de fluxo Instrues de ponto flutuante
12
Movimentao de Dados
mov [l,w,b] fonte, destino Exemplos:
movl movl movl movw movb $0x4050, %eax %ebx, 4(%ecx) (%edx), %eax %bx, %ax $-17, (%ecx)
Constante Registrador Reg Mem Reg Mem Memria Reg
13
Exemplos de Extenso
Se %dx = 0xCD00
movswl %dx, %eax movzwl %dx, %eax %eax = FFFFCD00 %eax = 0000CD00
Se %dh = 0xCD
movsbw %dh, %ax movzbw %dh, %ax movsbl %dh, %eax movzbl %dh, %eax %ax = FFCD %ax = 00CD %eax = FFFFFFCD %eax = 000000CD
15
eax = ~eax (*eax) = ~(*eax) (inteiro de 32 bits) (*eax) = ~(*eax) (inteiro de 8 bits)
17
Operaes de Deslocamento
Deslocamento (shift) de 0 a 31 bits
valor imediato ou contedo de %cl shift para a direita pode ser aritmtico ou lgico
shll $2, %eax shll %cl, %eax shrl shrl sarl sarl $1, %eax %cl %eax $1, %eax %cl, %eax eax = eax << 2 eax = eax << cl eax = eax >> 1 eax = eax >> cl eax = eax >> 1 eax = eax >> cl (lgico) (lgico) (aritmtico) (aritmtico)
18