Transcript Chapter 1
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