Assembly Language for Intel-Based Computers, 5th Edition Kip Irvine Capítulo 1: Conceitos básicos Slides prepared by the author Revision date: June 3, 2006 (c) Pearson Education, 2006-2007. All rights reserved. You may modify and copy this slide show for your personal use, or for use in the classroom, as long as this copyright statement, the author's name, and the title are not changed. Conteúdo • • • • Boas vindas à linguagem Assembly Conceito de máquina virtual Representação dos dados Operações booleanas Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 2 Boas vindas à linguagem Assembly • Algumas questões • Aplicações da linguagem Assembly Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 3 Algumas Questões • • • • • • Por que estudar linguagem Assembly? Que base seria necessária? O que é um assembler? Que hardware/software necessito? Que tipo de programas eu posso criar? O que vou aprender? Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 4 Outras questões (cont) • Como uma linguagem assembly (AL) se relaciona a uma linguagem de máquina? • Como C++ e Java se relaciona com AL? • AL é portável? • Por que aprender AL? Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 5 Aplicações da linguagem Assembly • Alguns tipos representativos de aplicações: • • • • Aplicação comercial para uma plataforma única Driver de um dispositivo de Hardware Aplicações comerciais para plataformas múltiplas Sistemas embarcados & jogos por computador (ver painel seguinte) Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 6 Comparando ASM com linguagens de alto nível Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 7 Seção seguinte • Boas vindas à linguagem Assembly • Conceito de máquina virtual • Representação dos dados • Operações booleanas Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 8 Conceito de máquina virtual • Máquinas virtuais • Níveis específicos de máquina Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 9 Máquinas virtuais • Tanenbaum: conceito de máquina virtual • Analogia com linguagem de programação: • Cada computador tem uma linguagem de máquina nativa (linguagem L0) que roda diretamente no hardware • Uma linguagem mais humanamente amigável é usualmente construida acima da linguagem de máquina, chamada linguagem L1 • Programas escritos em L1 podem ser executados em duas formas : • Interpretação – o programa L0 interpreta e executa instruções em L1 um a um • Tradução – o programa L1 é completamente traduzido para um programa na linguagem L0, que então é executado no hardware Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 10 Traduzindo linguagens English: mostra a soma de A vezes B mais C. C++: cout << (A * B + C); Linguagem Assembly : mov eax,A mul B add eax,C call WriteInt Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Linguagem de máquina Intel : A1 00000000 F7 25 00000004 03 05 00000008 E8 00500000 Web site Examples 11 Níveis específicos de máquina High-Level Language Level 5 Assembly Language Level 4 Operating System Level 3 Instruction Set Architecture Level 2 Microarchitecture Level 1 Digital Logic Level 0 Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. (descriptions of individual levels follow . . . ) Web site Examples 12 Linguagem de alto nível • Nível 5 • Linguagens orientadas a aplicações • C++, Java, Pascal, Visual Basic . . . • Os programas são compilados para a linguagem assembly (nível 4) Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 13 Linguagem Assembly • nível 4 • Mnemônicos de instruções em correspondência um-a-um com as instruções em linguagem de máquina • Chama funções escritas no nível de sistema operacional (nível 3) • Os programas são traduzidos para a linguagem de máquina (nível 2) Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 14 Sistema operacional • Nível 3 • Fornece serviços para os programas de nível 4 • São traduzidos e executados no nível de arquitetura do conjunto de instruções (instruction set architecture) (nível 2) Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 15 Arquitetura do conjunto de instruções (Instruction Set Architecture) • Nível 2 • Também conhecido como linguagem de máquina convencional • Executado pelo programa no nível 1 (microarquitetura) Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 16 Microarquitetura • Nível 1 • Interpreta instruções de máquina convencional (nível 2) • Executado pelo hardware digital (nível 0) Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 17 Lógica Digital • • • • • Nível 0 CPU, construído de portas lógicas digitais Barramento do sistema Memória Implementada usando transistores next: Data Representation Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 18 Próxima seção • Boas vindas à linguagem Assembly • Conceito de máquina virtual • Representação dos dados • Operações booleanas Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 19 Representação dos dados • Números binários • Tradução entre binário e decimal • Adição binária • Tamanhos de armazenamento de inteiros • Inteiros Hexadecimais • Tradução entre decimal e hexadecimal • Subtração hexadecimal • Inteiros com sinal • Subtração binária • Armazenamento de caractere Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 20 Números binários • Dígitos são 1 e 0 • 1 = verdadeiro • 0 = falso • MSB – bit mais significativo • LSB – bit menos significativo MSB • Numeração de Bits: LSB 1011001010011100 15 Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site 0 Examples 21 Números binários • Cada dígito (bit) é 1 ou 0 • cada bit representa uma potência de 2: 1 1 1 1 1 1 1 1 27 26 25 24 23 22 21 20 Cada número binário é uma soma de potências de 2 Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 22 Traduzindo binário para decimal A notação posicional mostra como calcular o valor decimal de número binário: dec = (Dn-1 2n-1) + (Dn-2 2n-2) + ... + (D1 21) + (D0 20) D = dígito binário binário 00001001 = decimal 9: (1 23) + (1 20) = 9 Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 23 Tradução de decimal sem sinal para binário • Dividir repetidamente o inteiro decimal por 2. Cada resto é um dígito binário no valor traduzido: 37 = 100101 Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 24 Adição binária • Começando com o LSB, somar cada par de dígitos, incluindo o vai-um (carry) se tiver. + bit position: carry: 1 0 0 0 0 0 1 0 0 (4) 0 0 0 0 0 1 1 1 (7) 0 0 0 0 1 0 1 1 (11) 7 6 5 4 3 2 1 0 Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 25 Tamanhos de armazenamento de inteiros byte Tamanhos padrões: word doubleword quadword 8 16 32 64 Qual é o maior inteiro sem sinal que pode ser armazenado em 20 bits? Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 26 Inteiros hexadecimais Valores binários são representados em hexadecimal. Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 27 Traduzindo binário para hexadecimal • Cada dígito hexadecimal corresponde a 4 bits. • Exemplo: Traduzir o inteiro binário 000101101010011110010100 para hexadecimal: Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 28 Convertendo hexadecimal para decimal • Multiplicar cada dígito pela sua potência de 16 correspondente: dec = (D3 163) + (D2 162) + (D1 161) + (D0 160) • Hex 1234 é igual a (1 163) + (2 162) + (3 161) + (4 160), ou decimal 4,660. • Hex 3BA4 é igual a (3 163) + (11 * 162) + (10 161) + (4 160), ou decimal 15,268. Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 29 Potência de 16 Usado para calcular valores hexadecimais até 8 dígitos: Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 30 Convertendo decimal para hexadecimal decimal 422 = 1A6 hexadecimal Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 31 Adição hexadecimal • Divide a soma de dois dígitos pela base (16). O quociente se torna o valor de vai-um (carry) e o resto é o dígito da soma. 36 42 78 28 45 6D 1 1 28 58 80 6A 4B B5 21 / 16 = 1, rem 5 Habilidade importante: os programadores freqüentemente somam e subtraem os endereços de variáveis e instruções. Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 32 Subtração hexadecimal • Quando um empréstimo é requerido do dígito à esquerda, adicionar 16 (decimal) ao valor do dígito corrente: 16 + 5 = 21 -1 C6 A2 24 75 47 2E Prática: O endereço de var1 é 00400020. O endereço da variável seguinte após var1 é 0040006A. Quantos bytes são usados por var1? Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 33 Inteiros com sinal O bit mais à esquerda indica o sinal. 1 = negativo, 0 = positivo sign bit 1 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 Negative Positive Se o dígito mais à esquerda de um inteiro hexadecimal é > 7, o valor é negativo. Exemplos: 8A, C5, A2, 9D Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 34 Formando os complementos de 2 • Números negativos são armazenados em notação complemento de 2 Note que 00000001 + 11111111 = 00000000 Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 35 Subtração Binária • Quando se subtrai A – B, converte B ao seu complemento de 2 • Add A a (–B) 00001100 – 00000011 00001100 11111101 00001001 Prática: Subtrair 0101 de 1001. Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 36 Como realizar: • • • • • O complemento de 2 de um inteiro hexadecimal Conversão de binário com sinal para decimal Conversão de decimal com sinal para binário Conversão de decimal com sinal para hexadecimal Conversão de hexadecimal com sinal para decimal Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 37 Intervalos de inteiros com sinal O bit mais à esquerda é reservado para o sinal. Isso limita o intervalo: Prática: Qual é o maior valor positivo que pode ser armazenado em 20 bits? Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 38 Armazenamento de caracteres • Conjunto de caracteres • • • • Standard ASCII (0 – 127) Extended ASCII (0 – 255) ANSI (0 – 255) Unicode (0 – 65,535) • Cadeia terminada por zero • Arranjo de caracteres seguido por um byte nulo Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 39 Representação de dados numéricos • Binário puro • Pode ser calculado diretamente • Binário em ASCII • Cadeia de dígitos: "01010101" • Decimal em ASCII • Cadeia de dígitos: "65" • Hexadecimal em ASCII • Cadeia de dígitos: "9C" next: Boolean Operations Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 40 Seção seguinte • Boas vindas à linguagem Assembly • Conceito de máquina virtual • Representação dos dados • Operações booleanas Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 41 Operações Booleanas • • • • • NOT AND OR Precedência de operadores Tabela verdade Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 42 Álgebra Booleana • Baseada na lógica simbólica, projetada por George Boole • Expressões booleanas criadas de: • NOT, AND, OR Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 43 NOT • Inverte (reverte) um valor booleano • Tabela verdade para o operador booleano NOT : Digital gate diagram for NOT: NOT Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 44 AND • Tabela verdade para o operador booleano AND: Digital gate diagram for AND: AND Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 45 OR • Tabela verdade para o operador booleano OR: Digital gate diagram for OR: OR Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 46 Precedência de operadores • Exemplos mostrando a ordem das operações: Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 47 Tabela verdade (1 de 3) • Uma função booleana tem uma ou mais entradas booleanas e retorna uma única saída booleana. • Uma tabela verdade mostra todas as entradas e saídas de uma função booleana Exemplo: X Y Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 48 Tabela verdade (2 de 3) • Exemplo: X Y Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 49 Tabela verdade (3 de 3) • Exemplo: (Y S) (X S) S X mux Z Y Two-input multiplexer Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 50 Resumo • Linguagem Assembly ajuda a entender como o software é construído nos níveis mais baixos • Linguagem Assembly language tem relação um-a-um com a linguagem de máquina • Cada camada na arquitetura de computadores é uma abstração de uma máquina • Camada pode ser hardware ou software • Expressões booleanas são essenciais para o projeto do hardware e software de computadores Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 51 54 68 65 20 45 6E 64 O que esses números representam? Irvine, Kip R. Assembly Language for Intel-Based Computers 5/e, 2007. Web site Examples 52