Programação em Assembly Introdução e Revisão Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores
Roteiro Por que estudar Assembly? Representação de dados Sistema decimal Sistema binário Sistema hexadecimal Organização dos dados Organização de Dados Organização de Sistemas Livro texto: The Art of Assembly Language
Introdução É AssemblY e não AssemblER! Linguagem de programação de baixo nível Cada instrução é convertida diretamente em linguagem de máquina Cada arquitetura possui um conjunto de instruções IA32 – Intel 1985 X86 – 32 bits IA32-EM64T ou IA32-AMD64 – AMD 2002 X86-64 – 64 bits
Por que estudar Assembly? Assembly é difícil de aprender Assembly é difícil de ler e entender Assembly é difícil de manter Programar em assembly consome muito tempo Os compiladores atuais dispensam a necessidade do assembly As máquina atuais são rápidas e não precisamos mais do assembly Se você precisa de mais velocidade, escolha um algoritmo mais rápido Memória não é mais o problema Assembly não é portável
Por que estuar assembly? Velocidade Programas escritos e assembly são geralmente mais rápidos Espaço de memória Programas em assembly consomem menos memória Possibilidades de programação Você pode fazer coisas em assembly que são difíceis ou impossíveis de fazer em outras linguagens Conhecimento Quem conhece assembly programa melhor em outras linguagens
Representação de dados Sistema decimal Sistema binário Sistema hexadecimal Organização dos dados
Sistema Decimal Qual o significado de um valor decimal? Exemplo: 123 (1x10^2) + (2x10^1) + (3x10^0) = E com casas decimais? Exemplo: 123,45 (1x10^2) + (2x10^1) + (3x10^0) + (4 x 10^-1) + (5 x 10^-2) = ,4 + 0,05 = 123,45
Sistema Binário Computadores utilizam níveis de voltagem para representar dados 0v e +5v -> 0 e 1 O sistema binário é análogo ao decimal Sistema decimal tem 10 digitos (0 a 9) Sistema binário tem 2 dígitos (0 e 1) Quanto é em decimal? (1x2^6) + (1x2^5) + (1x2^4) + (1x2^3) + (0x2^2) + (1x2^1) + (1x2^0) = 123
Sistema Binário Conversão decimal-binário Exemplo: converter 123 para binário 123/2 = 61resta 1 61/2 = 30 resta 1 30/2= 15resta 0 15/2= 7resta 1 7/2= 3resta 1 3/2= 1resta 1 1/2= 0resta = b
Sistema Hexadecimal Por que hexadecimais? Binários são muito longos pra escrever Converter decimal para binário é muito custoso Mas computadores “pensam” em binário! Hexadecimais são compactos e fáceis de converter para binário A base hexadecimal é 16 (4 bits : 2^4) Como só existem 10 dígitos (0-9) completa-se com as letras de A-F 0000 = = = = = = = = = = = A 1011 = B 1100 = C 1101 = D 1110 = E 1111 = F
Sistema Hexadecimal Conversão hexadecimal -> decimal Exemplo: 1234h = ?d dígitos hexadecimais numeração potência de 1616^3 16^2 16^1 16^0 (1 x 16^3) + (2 x 16^2) + (3 x 16^1) + (4 x 16^0) = = 4660 decimal Conversão hexadecimal binário Exemplo: ABCDh = ?b hexadecimal A B C D binário
Organização de Dados Bit Nibble Byte Word Double word
Bit Menor unidade de dados Pode representar 2 valores distintos 0 ou 1 Verdadeiro ou falso Azul ou vermelho Feminino ou masculino 400 ou 300 etc.
Nibble Conjunto de 4 bits Interessante para hexadecimais Todo dígito hexadecimal pode ser representado por um nibble
Byte Conjunto de 8 bits Menor item de dados endereçável no 80x86 Cada byte comporta 2 nibbles
Word Uma palavra de 16 bits
Double word Palavra de 32 bits
Operações aritméticas 9h + 1h = 10h? 10h - 1h = 9h? Seu cérebro só pensa decimal!!! 1. Converta hex ou bin para decimal 2. Faça os cálculos 3. Converta o resultado para hex ou bin Ou: use uma calculadora!!
Deslocamentos Left Shift Multiplicação pela base Acrescenta-se zeros na direita Descarta-se os bits da esquerda Right Shift Divisão pela base Acrescenta-se zeros na esquerda Descarta-se os bits da direita 1234 SHL 1 = SHR 1 = 123?
Rotações Left rotate Right rotate
Caracteres ASCII 4 grupos 0 a 31 – Caracteres de controle 32 a 63 – pontuação, caracteres especiais e dígitos 0-9 Espaço: 20h Dígitos 0-9: 30h ao 39h 64 a 95 – letras maísculas e alguns símbolos 96 a 127 – letras minúsculas e alguns símbolos Bit 6Bit 5Grupo 0 0Caracteres de controle 0 1Dígitos e caracteres de pontuação 1 0Maiúsculos e especiais 1 1Minúsculos e especiais
Caracteres ASCII Relação Hexadecimal CaractDecimalHexa h h h h h h h h h h Bit 5 – diferencia maiúsculas e minúsculas
Organização de Sistemas Componentes básicos do sistema Arquitetura de John Von Newmann CPU Memória Dispositivos E/S
O barramento do Sistema Conjunto de fios entre os componentes no sistema pelos quais passam sinais elétricos São três: barramento de endereços barramento de dados barramento de controle.
Barramento de Dados Utilizados para transportar dados entre os componentes do computador Nos sistemas 80x86 o barramento de dados contém 8, 16, 32 ou 64 linhas 8086, 80186, e 80386SX – 16 bits 80386DX, e Pentium (Pro) – 32 bits
Barramento de Endereços Utilizado para indicar qual endereço (de memória ou de E/S) será utilizado O número de bits define o tamanho da memória endereçável e de posições de E/S Processador SX 80386DX Barramento 20 bits 24 bits 32 bits Memória endereçável 1 Megabyte 16 Megabytes 4 Gibabytes
Barramento de Controle Controla como o processador se comunica com o restante do sistema Por exemplo: Indicação de leitura ou escrita Memória ou dispositivo de E/S
A memória do Computador O que exatamente é uma posição de memória? Escrita: Memory[125] := 0;Leitura: CPU := Memory[125]
Temporização Em computadores reais as operações não ocorrem instantaneamente Certas operações precisam ser executadas em ordem I := J; I := I * 5 + 2; As CPUs do 80x86 utilizam um sinal alternado chamado clock do sistema
O clock do sistema Gerencia toda a sincronização dentro de um computador É um sinal elétrico no barramento de controle que fica alternando entre zero e um de acordo com uma determinada taxa cíclica Freqüência de clock: freqüência com que o clock alterna entre zero e um Período ou Ciclo de clock: tempo que ele leva para alternar de zero para um e voltar para zero Ex.: cicla a 66 milhões de Hertz - 66 MHz.
Estados de Espera É um ciclo de clock extra para dar a algum dispositivo o tempo para completar uma operação Exemplo: de 50 MHz tem um período do clock de 20 ns necessitamos de uma memória de 20 ns decodificadores e buffers lógicos consomem tempo Memórias rápidas são muito caras Solução: cache
Memória Cache Programas tendem a acessar as mesmas posições de memória repetidamente localidade temporal de referência localidade espacial de referência for i := 0 to 10 do A[i] := 0; A cache não é perfeita Em caso de erro, busca- se na memória principal Cache secundária aumenta acertos