Linguagem de Montagem Uma introdução à Programação Assembly do PC Slides baseados em material associado ao livro Introduction to Assembly Language Programming, Sivarama Dandamudi 1
A Visão do Usuário sobre o Computador Depende do grau de abstração provido pelos níveis inferiores Vamos considerar uma hierarquia de 6 níveis Os níveis superiores protegem o usuário dos detalhes de baixo nível Os 2 níveis superiores são independentes do sistema Os outros 4 níveis são dependentes do sistema As linguagens de máquina e assembly são específicas de um determinado processador Existe uma correspondência de um-para-um entre uma linguagem de máquina e a linguagem assembly 2
A Visão do Usuário sobre o Computador (cont.) 3
O que é uma Linguagem Assembly (LA)? Linguagem de baixo nível Cada instrução executa uma tarefa de muito mais baixo nível quando comparada a uma instrução de linguagem de alto nível Correspondência um-para-um entre LA e LM Para a maioria das instruções da linguagens assembly, existe uma instrução equivalente em linguagem de máquina O Assembler (Montador) traduz de LA para LM Diretamente influenciada pelo conjunto de instruções e pela arquitetura do processador (CPU) 4
O que é uma Linguagem Assembly? (cont.) Alguns exemplos de instruções LA inc result mov class_size,45 and mask1,128 add marks,10 Algumas observações: Comandos em LA não são muito legíveis Mnemônicos são usados para indicar os comandos inc para incremento, mov para copiar Instruções LA são de baixo nível Instruções como mov A, B não podem ser usadas 5
O que é uma Linguagem Assembly? (cont.) Algumas instruções de Ling. de Alto Nível podem ser expressas diretamente em LA 6
O que é uma Linguagem Assembly? (cont.) Mas a maioria das instruções LAN requer mais que uma instrução LA 7
O que é uma Linguagem Assembly? (cont.) A legibilidade da LA é superior a da LM Instruções em LM são sequências de 1 s e 0 s 8
Vantagens das Linguagens de Alto Nível O desenvolvimento de programas é mais rápido Instruções em alto nível Poucas instruções para codificar A manutenção de programas é mais fácil Os programas são portáveis Contêm poucos ou nenhum detalhe dependente de máquina Podem ser usados em diferentes tipos de máquina O compilador traduz para a LM Programas em LA não são portáveis 9
Por que programar em LA? Duas razões principais: Eficiência Menor espaço Menor tempo de execução Acessibilidade aos recursos de hardware Eficiência no espaço Código assembly tende a ser compacto Eficiência no tempo Código assembly tende a executar mais rápido Apenas código assembly bem escrito executa mais rápido É fácil escrever código assembly que executa mais lento que o seu correspondente em ling. alto nível 10
Aplicações típicas Necessidade de acesso direto ao hardware Aplicações do sistema Compiladores, linkers, montadores Interfaces de rede, device drivers Partes do próprio Sistema Operacional Necessidade de software compacto Não é tanto uma necessidade atual Software para PDA e computadores de bolso Necessidade de eficiência na execução Bibliotecas gráficas Sistemas em tempo real Sistemas de controle de processos 11
Por que aprender LA? Algumas aplicações requerem código assembly Tecnicamente apenas uma parte do software é escrita em assembly normalmente associado a uma linguagem também eficiente como C LA pode ser usada como uma ferramenta para aprender Organização de Computadores Vários conceitos complexos da Computação passam a ser compreendidos a partir de uma abordagem prática Satisfação pessoal em aprender algo inerentemente útil e complexo 12
Desempenho: C versus LA Considerando o algoritmo Bubble Sort Tamanho do código executável Versão em C: 50.256 bytes Versão Assembly: 50.208 bytes Ganho desprezível Tamanho do código fonte: Versão em C: 1.340 bytes Versão em Assembly: 1.851 bytes Demonstra o baixo nível da programação Assembly 13
Desempenho: C versus LA (cont.) 14