Você está na página 1de 49

Organização Básica de

computadores e linguagem de
montagem

Prof. Edson Borin

2o Semestre de 2011
Regras do Curso

http://www.ic.unicamp.br/~edson/disciplinas/mc404/2011-2s/
Porque Aprender Linguagem de Montagem

•Permite compreender o funcionamento de uma CPU


Porque Aprender Linguagem de Montagem

•Permite compreender o funcionamento de uma CPU

•Utilizado na:
•Programação de máquinas baseadas em micro-
controladores.
Porque Aprender Linguagem de Montagem

•Permite compreender o funcionamento de uma CPU

•Utilizado na:
•Programação de máquinas baseadas em micro-
controladores.
•Programação de sistemas embarcados (embedded systems)
Porque Aprender Linguagem de Montagem

•Permite compreender o funcionamento de uma CPU

•Utilizado na:
•Programação de máquinas baseadas em micro-
controladores.
•Programação de sistemas embarcados (embedded systems)
•Programaçao de trechos críticos (tempo e/ou memória)
Porque Aprender Linguagem de Montagem

•Permite compreender o funcionamento de uma CPU

•Utilizado na:
•Programação de máquinas baseadas em micro-
controladores.
•Programação de sistemas embarcados (embedded systems)
•Programaçao de trechos críticos (tempo e/ou memória)
•Acesso a recursos não disponíveis em alto nível
Porque Aprender Linguagem de Montagem

•Permite compreender o funcionamento de uma CPU

•Utilizado na:
•Programação de máquinas baseadas em micro-
controladores.
•Programação de sistemas embarcados (embedded systems)
•Programaçao de trechos críticos (tempo e/ou memória)
•Acesso a recursos não disponíveis em alto nível

•OBS.: A linguagem de montagem é absolutamente ligada ao


hardware, depende de cada máquina específica
(diferentemente das linguagens de alto nível)
Conceitos Básicos
Conceitos Básicos: Processadores

•Máquinas para manipular informações (ou dados)

Dados de Saída, ou dados


Processador
Entrada processados
Conceitos Básicos: Processadores

•Máquinas para manipular informações (ou dados)

Programa

Dados de Saída, ou dados


Processador
Entrada processados
Conceitos Básicos: Linguagens de Programação

•Máquinas para manipular informações (ou dados)


Programa fonte
C/C++/Java
Pascal/etc...
Compilador (gcc, ...)
Linguagem de Montagem

Montador (as, ...)

Linguagem de Máquina

Dados de Processador Saída, ou dados


Entrada processados
Conceitos Básicos: Linguagens de Programação

Ling. de alto nível (Java, ...)


Programa fonte Laços, variáveis, objetos, ...
Independente de máquina

Ling. de baixo nível


Linguagem de Sequência de instruções,
Montagem registradores, posições de memória, ...
Dependente de máquina

Linguagem de
Código binário (0s e 1s)
Máquina
Conceitos Básicos: Representando Informações

•Como representar as informações em um processador?


•Associando-as a uma grandeza física que possamos gerar,
manipular, armazenar, ler, etc...
•Exemplos de grandezas: comprimento, posição angular,
força, pressão, fluxo, tensão, corrente, etc...
Conceitos Básicos: Representando Informações

•Máq. Analógicas x Máq. Digitais


•Analógicas: Informação associada a uma grandeza contínua
•Digitais: Informação associada a uma grandeza discreta
•Máq. Digitais:
•Normalmente um pequeno conjunto de faixa de valores
(ex. 2 faixas), da grandeza escolhida para representar a
informação, distintos e facilmente controláveis e
dintinguíveis. Ex: Faixas de tensão.
•A informação é representada por números, na forma
digitalizada, isto é, representada por dígitos: Ex: 10, 1001,
145, 80EA2, etc...
Conceitos Básicos: Representando Informações

•A quantidade de dígitos distintos define a base numérica:


•Ex: Base 2 => 2 dígitos distintos (0 e 1)
•Utiliza-se tantos componentes digitais quantos necessários
para representar a informação desejada.
•Ex:Para representar os valores de 0 a 1000, usando base 2
são necessários 10 componentes digitais - são necessários
1001 combinações diferentes dos estados dos componentes
digitais.
•Símbolos normalmente usados para representação dos
números:
•Base até 10: algarismos arábicos (0 1 2 ... 9)
•Base maior do que 10: acrescenta-se letras,
•Ex Hexadecimal (Base 16): 0 1 2 3 4 5 6 7 8 9 A B C D E F
Conceitos Básicos: BITs e BYTEs

•Bit = BInary digiT = vale sempre 0 ou 1. Elemento básico de


informação
Conceitos Básicos: BITs e BYTEs

•Bit = BInary digiT = vale sempre 0 ou 1. Elemento básico de


informação
•Byte = 8 bits processados em paralelo (ao mesmo tempo)
•Word (Palavra) = n bytes
•Tamanho da palavra depende do processador em questão.
•Double word = 2 words
•Nibble = 4 bits (útil para BCD)
Conceitos Básicos: BITs e BYTEs

•Bit = BInary digiT = vale sempre 0 ou 1. Elemento básico de


informação
•Byte = 8 bits processados em paralelo (ao mesmo tempo)
•Word (Palavra) = n bytes
•Tamanho da palavra depende do processador em questão.
•Double word = 2 words
•Nibble = 4 bits (útil para BCD)
•Posição dos bits:
1 byte 1 word (de 16 bits)
7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

01011010 01011010 01011010


high byte low byte
Conceitos Básicos: Representação de Números
•Representação binária de números não sinalizados
n-1
Qualquer número em qualquer base => N = Σ di x basei
i=0
a) Base 10 (Decimal)
230910 = 2x103 + 3x102 + 0x101 + 9x100


= 2000 + 300 + 0 + 9
Conceitos Básicos: Representação de Números
•Representação binária de números não sinalizados
n-1
Qualquer número em qualquer base => N = Σ di x basei
i=0
a) Base 10 (Decimal)
230910 = 2x103 + 3x102 + 0x101 + 9x100


= 2000 + 300 + 0 + 9

Exercício:

b) Base 2 (Binária)
101001112
=
...
Conceitos Básicos: Representação de Números
•Representação binária de números não sinalizados
n-1
Qualquer número em qualquer base => N = Σ di x basei
i=0
a) Base 10 (Decimal)
230910 = 2x103 + 3x102 + 0x101 + 9x100


= 2000 + 300 + 0 + 9

Exercício:

b) Base 2 (Binária)
101001112
= 1x27 + 0x26 + 1x25 + 0x24 + 0x23 + 1x22 + 1x21 + 1x20



= 128 + 0 + 32 + 0+ 0 + 4 + 2 + 1

= 16710 (Solução)
Conceitos Básicos: Representação de Números
•Representação binária de números não sinalizados
n-1
Qualquer número em qualquer base => N = Σ di x basei
i=0
a) Base 10 (Decimal)
230910 = 2x103 + 3x102 + 0x101 + 9x100


= 2000 + 300 + 0 + 9

Exercício:

b) Base 2 (Binária)
101001112
= 1x27 + 0x26 + 1x25 + 0x24 + 0x23 + 1x22 + 1x21 + 1x20



= 128 + 0 + 32 + 0+ 0 + 4 + 2 + 1

= 16710 (Solução)
7 6 5 4 3 2 1 0

MSB
(Most significant bit): bit mais significativo. 10100111
LSB
(Least significant bit): bit menos significativo.
MSB LSB
Conceitos Básicos: Representação de Números
•Representação binária de números não sinalizados
n-1
Qualquer número em qualquer base => N = Σ di x basei
i=0

Caso particulares de bases:


B = 1
- Unário - tem utilidade ?

B = 2
- Binário

B = 8
- Octal

B = 10
- Decimal

B = 16
- Hexadecimal

Dígitos hexadecimais: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Notação hexadecimal é uma forma compacta e prática para representar binários

01010111011011102 = 576E16
Conceitos Básicos: Representação de Números
•Conversão entre bases
Tipo de conversão Procedimento

Divisões sucessivas por 2 até se obter zero no quociente.


Decimal => Binário
Leitura dos dígitos binários no resto de baixo para cima.
Soma de potências de 2 cujo expoente é a posição do bit e
Binário => Decimal cujo coeficiente é o próprio bit.

Expandir cada dígito hexa em quatro dígitos binários


Hexadecimal => Binário
segundo seu valor.

Compactar cada quatro dígitos binários em um único dígito
Binário => Hexadecimal hexa segundo seu valor.

Divisões sucessivas por 16 até se obter zero no quociente.


Decimal => Hexadecimal Converter restos p/ dígitos hexadecimais.
Leitura dos dígitos de baixo para cima.

Hexadecimal => Decimal Soma de potências de 16 cujo expoente é a posição do


dígito e cujo coeficiente é o valor do próprio dígito hexa.
Conceitos Básicos: Representação de Números
•Representação binária de números sinalizados
1) Representação com sinal e magnitude
O bit mais significativo (MSB) é o sinal do número. Se for 1 o número é
negativo se for 0 o número é positivo.

Exemplo 1: 011100012

valor não sinalizado


= 0 x 27 + 1 x 26 + 1 x 25 + 1 x 24 + 0 x 23 +





0 x 22 + 0 x 21 + 1 x 20





= 64 + 32 + 16 + 1 = 11310

valor sinalizado

bit de sinal = 0 => " + " (positivo)





= 1 x 26 + 1 x 2 5 + 1 x 2 4 + 0 x 2 3 + 0 x 2 2 +





0 x 21 + 1 x 20 =





= 64 + 32 + 16 + 1 = 11310, logo = +11310
Conceitos Básicos: Representação de Números
Exemplo 2: 101100012

valor não sinalizado


= 1 x 27 + 0 x 26 + 1 x 25 + 1 x 24 + 0 x 23 +





0 x 22 + 0 x 21 + 1 x 20





= 128 + 32 + 16 + 1 = 17710

valor sinalizado

bit de sinal = 1 => " - " (negativo)





= 0 x 26 + 1 x 2 5 + 1 x 2 4 + 0 x 2 3 +





0 x 22 + 0 x 21 + 1 x 20





= 32 + 16 + 1 = 4910, logo = - 4910
Conceitos Básicos: Representação de Números
•Exemplo 3:
70FF16
= 01110000111111112

valor não sinalizado:


= 0 X 215 + 1 X 214 + . .. + 1 X 22 + 1 X 21 + 1 X 20

valor sinalizado:
bit de sinal = 0 => " + " (positivo)




= + (1 X 214 + . .. + 1 X 22 + 1 X 21 + 1 X 20)

Exemplo 4:
C77716
= 11000111011101112

valor não sinalizado:


= 1 X 215 + 1 X 214 + ... + 1 X 22 + 1 X 21 + 1 X 20

valor sinalizado:
bit de sinal = 1 => " - " (negativo)





= - (1 X 214 + ... + 1 X 22 + 1 X 21 + 1 X 20)
Conceitos Básicos: Representação de Números
•Representação binária de números sinalizados

2) Complemento de 1


- X = (2n - 1) – X n é o número de bits utilizados na representação

3) Complemento de 2


- X = (2n) – X
n é o número de bits utilizados na representação
Conceitos Básicos: Representação de Números
•Representações possíveis de números sinalizados

• Sinal e Magnitude

Complemento de 1

Complemento de 2

000 = +0



000 = +0



000 = +0

001 = +1



001 = +1



001 = +1

010 = +2



010 = +2



010 = +2

011 = +3



011 = +3



011 = +3

100 = -0



100 = -3



100 = -4

101 = -1



101 = -2



101 = -3

110 = -2



110 = -1



110 = -2

111 = -3



111 = -0



111 = -1

• Representação em Complemento de 2 é utilizada pois temos apenas uma


representação para o zero e podemos fazer a soma e subtração com apenas
um circuito.
Conceitos Básicos: Representação de Números
• Números sinalizados de 32 bits, em Complemento de 2:

0000 0000 0000 0000 0000 0000 0000 00002 = 010


0000 0000 0000 0000 0000 0000 0000 00012 = + 110
0000 0000 0000 0000 0000 0000 0000 00102 = + 210
... maxint
0111 1111 1111 1111 1111 1111 1111 11102 = + 2,147,483,64610
0111 1111 1111 1111 1111 1111 1111 11112 = + 2,147,483,64710
1000 0000 0000 0000 0000 0000 0000 00002 = – 2,147,483,64810
1000 0000 0000 0000 0000 0000 0000 00012 = – 2,147,483,64710 minint
1000 0000 0000 0000 0000 0000 0000 00102 = – 2,147,483,64610
...
1111 1111 1111 1111 1111 1111 1111 11012 = – 310
1111 1111 1111 1111 1111 1111 1111 11102 = – 210
1111 1111 1111 1111 1111 1111 1111 11112 = – 110


Conceitos Básicos: Representação de Números
Representação em Complemento de 2 de um número:
• Partindo-se da representação do negativo do valor a ser achado, nega-se
este número (negar = inverter) e somar 1

Exemplo 1:
-5 em Complemento de 2 (usando-se 5 bits para a sua representação)
Partindo-se da representação do 510 = 001012 => (invertendo os bits) =
11010 => (somando 1) = 110112 = - 5 em Complemento de 2
Exemplo 2:
+5 em Complemento de 2 (usando-se 5 bits para a sua representação)
Partindo-se da representação do -510 = 110112 => (invertendo os bits) =
001002 => (somando 1) = 001012 = +5 em Complemento de 2
Conceitos Básicos: Representação de Números
• Conversão de números com n bits em números com mais que n bits:
– copiar o bit mais significativo (bit de sinal) nos outros bits (extensão do
sinal):

Exemplo:


0010 => 0000 0010


1010 => 1111 1010
Conceitos Básicos: Representação de Números
Operações de soma e adição binárias

• Como aprenderam no primeiro grau: (vai-um/vem-um)



0111 (7)

0111 (7)

0110 (6)

+ 0110 (6)

-0110
(6)

-0101 (5)
1101 (13)
0001 (1)
0001 (1)

• Subtração em complemento de 2 é feito como se fosse uma soma


• (A – B = A + (-B)):
– subtração usando adição de números negativos. Ex: 7 - 6 = 7 + (-6)

0111 (+7)

+ 1010 (-6)
0001 (=1)
Conceitos Básicos: Representação de Números
Overflow

• Overflow (resultado maior (menor) que a palavra do computador pode


representar):

Exemplo:
• Quando na operação abaixo ocorre e quando não ocorre overflow ???



0111 (7) ou (+7)


+ 0001 (1) ou (+1)


1000


Conceitos Básicos: Representação de Números
Detecção de Overflow

• Não existe overflow quando adicionamos um número positivo e um negativo


• Não existe overflow quando os sinais dos números são os mesmos na
subtração
• Ocorre overflow quando os valores afetam o sinal:
– Somando dois números positivos dá um número negativo
– Somando dois números negativos dá um número positivo
– Subtrai um número negativo de um positivo e dá negativo
– Subtrai um número positivo de um negativo e dá positivo

Exercício: Compute o resultado das operações abaixo e verifique se houve


overflow
• 4 + 5 em uma representação com números sinalizados de 8 bits
• 4 + 5 em uma representação com números sinalizados de 4 bits
Aula 2
Conceitos Básicos: Representação de Números
Multiplicação Binária
• Exemplo:
1010 x 101
Conceitos Básicos: Representação de Números
Multiplicação Binária
• Exemplo:
1010 x 101

Solução:



1010



x101



1010


0000


1010


110010
Conceitos Básicos: Representação de Números
Divisão Binária
• Exemplo:
1 1 0 0 1 0 / 101
Conceitos Básicos: Representação de Números
Divisão Binária
• Exemplo:
1 1 0 0 1 0 / 101
Sol uç ã o

110 010 1 01
-101 1 01 0
001 01
-101
000 0
Conceitos Básicos: Representação de Caracteres
Representação de Caracteres Alfanuméricos

• Padrão ASCII - American Standard Code for Information Interchange


também conhecido como ISO 646-1973 (international)
Usa 7 bits, (128 caracteres distintos)

• Exemplo (Tabela ASCII) 64 @ 96 ´ 48 0


65 A 97 a 49 1
66 B 98 b 50 2
67 C 99 c 51 3
68 D 100 d 52 4
69 E 101 e 53 5
70 F 102 f 54 6
71 G 103 g 55 7
72 H 104 h 56 8
73 I 105 i 57 9
Conceitos Básicos: Representação de Caracteres
Representação de Caracteres Alfanuméricos
• ASCII - American Standard Code for Information Interchange (ISO 8859-1)
Usa 7 bits, (128 caracteres distintos)
Números, pontuação e letras sem acentos (Não tem á, é, í, ç...)
Ainda é muito utilizado

•MacOSRoman - Padrão utilizado nos SOs antigos da Apple



Codificado com 8 bits

Compatível com ASCII (Os primeiros 128 caracteres são identicos ao ASCII)

•ISO Latin1

Codificação com 8 bits

ASCII aumentado, ou estendido (ASCII é compatível)

Tem caracteres para linguagens européias, inclusive o português (á, é, ç, ...)

•Unicode (múltiplos bytes)


Várias codificações: Ex: UTF-8, UTF-16 e UTF-32
UTF-8 é compatível com ASCII (Usado no Mac OS X em diante) e se tornou a
codificação dominante na Internet
28 CAPÍTULO 1. REPRESENTAÇÃO DA INFORMAÇÃO

Conceitos Básicos:
computador, pois os Representação
bytes que representam decadeia
os caracteres da Caracteres
podem ser
“empacotados”, em sequência, na memória do computador.
A Figura 1.3
Representação de mostra
Cadeiasa de
cadeia de caracteres
Caracteres (strings)‘12
na Maçãs Assadas’
memória do repre-
sentada nas codificações ISO-LATIN-1, MacOSRoman e UTF-8, com as dife-
computador:
renças destacadas
Exemplo: em cinza.
“Maçãs Assadas”

1 2 M a ç ã s A s s a d a s
... 31 32 20 4D 61 E7 E3 73 20 41 73 73 61 64 61 73 00 ...

codificação ISO-LATIN-1

1 2 M a ç ã s A s s a d a s
... 31 32 20 4D 61 8D 8B 73 20 41 73 73 61 64 61 73 00 ...

codificação MacOSRoman

1 2 M a ç ã s A s s a d a s
... 31 32 20 4D 61 C3 A7 C3 A3 73 20 41 73 73 61 64 61 73 00 ...

codificação UTF-8
Conceitos Básicos: Memória
•Memória: local do computador (hardware) onde se
armazenam temporária ou definitivamente dados (números,
caracteres e instruções)
•Posição de memória ou “endereço”: localidade física da
memória onde se encontra o dado. Endereço Conteúdo
... ...
4MB 10110101
•Organização da memória: ... ...
1048576 01001010
... ...
1765 01001101
... ...
4 01010000
3 11111111
2 11101001
1 11011010
0 01100100
Conceitos Básicos: Endianness
•Palavras (words) são representadas em bytes consecutivos na
memória.
•Endianness: define a organização das palavras na memória.
•Exemplo: Número de 32 bits (4 bytes)
102510 = 00000000 00000000 00000100 000000012




Representação


Representação
Endereço Big-Endian (MOTOROLA) Little-Endian (INTEL)




00

00000000


00000001

01

00000000


00000100

02

00000100


00000000

03

00000001


00000000
Conceitos Básicos: Ling. de Programação
Processo de tradução de um
PROGRAMA LING.
programa em linguagem ALTO NÍVEL

de alto nível para linguagem de COMPILADOR

máquina
PROGRAMA LING.
INTERMEDIÁRIA
(LING. ASSEMBLY)

MONTADOR
(ASSEMBLER)

PROGRAMA LING.
BIBLIOTECA DE
OBJETO (BINÁRIO)
FUNÇÕES DA
LINGUAGEM

LIGADOR - LINKER

PROGRAMA LING.
EXECUTÁVEL
(BINÁRIO)
Conceitos Básicos: Ling. de Programação

• Linguagem de Alto Nível – próximo ao ser humano, escrita de


forma textual.
– Ex: if (a==b) a=b+c;

• Linguagem de Montagem (Assembly) – próximo à linguagem


de máquina, escrita em códigos (mnemônicos)
– Ex: ADD AX,BX;

• Linguagem de Máquina – linguagem que o computador


consegue executar – códigos binários
– Ex: 01010001
Conceitos Básicos: Ling. de Programação

• Exemplo: C => ARM

...
ldr r1, .L2
ldr ip, [r1, #0]
void main(void) ldr r0, .L2+4
{ ldr r2, [r0, #0]
r = a + b - c; add r0, ip, r2
} ldr r1, .L2+8
ldr ip, [r1, #0]
rsb r1, ip, r0
ldr r0, .L2+12
str r1, [r0, #0]
...

Você também pode gostar