Aula 26 - Rodrigo Hausen

Propaganda
Organização de Computadores
Aula 25
Conjunto de Instruções:
Modos de Endereçamento e Formatos
Rodrigo Hausen
11 de novembro de 2011
http://cuco.pro.br/ach2034
Rodrigo Hausen - OCD
1/26
Apresentação
1. Bases Teóricas
●
2. Organização de computadores
– ...
– 2.4. Sistema de Memórias
– 2.5. Subsistema de Entrada/Saída (I/O)
– 2.6. Conjunto de Instruções
●
●
Aula de hoje: Stallings (5a. Edição), Capítulo 10
Rodrigo Hausen - OCD
2/26
Modos de Endereçamento
●
Como podemos nos referir a um operando em uma
instrução?
– Imediato
– Direto (na memória)
– Indireto (na memória)
– Em registrador
– Indireto em registrador
– Por deslocamento: relativo, registrador-base, indexado
– Pilha
Rodrigo Hausen - OCD
3/26
Modos de Endereçamento:
Endereçamento Imediato
Operando é parte da instrução
●
Operando substitui o campo de endereço
●
p. ex. ADD 5
– Some 5 ao conteúdo do acumulador
●
5 é o operando
●
Nenhuma referência à memória para obter dado
●
Vantagem: Rápido
●
Desvantagem: Tamanho do operando limitado pelo
tamanho do campo de endereço
●
Instrução
opcode
Rodrigo Hausen - OCD
operando
4/26
Modos de Endereçamento:
Endereçamento Direto
Campo de endereço contém endereço do operando
●
Endereço Efetivo (EA) = campo de endereço (A)
●
ex. ADD A
– Some conteúdo da posição A ao acumulador
– Busca na memória, no endereço A, pelo operando
●
Vantagens:
– Requer apenas um acesso à memória para acessar dado
– Nenhum cálculo adicional para encontrar EA
●
Desvantagem: Espaço de endereçamento limitado
●
Rodrigo Hausen - OCD
5/26
Modos de Endereçamento:
Diagrama: Endereçamento Direto
Instrução
A
...
end.
Memória
...
opcode
A-2
A-1
A
Operando
A+1
Rodrigo Hausen - OCD
...
...
A+2
6/26
Modos de Endereçamento:
Endereçamento Indireto
Posição de memória indicada pelo campo de endereço
contém o endereço do (é ponteiro para) operando
●
end. efetivo EA = ponteiro para endereço [A]
1. Acesse endereço A
2. Acesse endereço apontado por conteúdo de A, denotado [A]
●
3. Obtenha o operando
●
ex. ADD [A]
– Adicione o conteúdo da posição apontada pelo conteúdo
do endereço A ao acumulador
Rodrigo Hausen - OCD
7/26
Modos de Endereçamento:
Diagrama: Endereçamento Indireto
Instrução
opcode
A
...
Memória
...
end.
A
X
X
...
...
A+1
operando
Rodrigo Hausen - OCD
...
...
X+1
8/26
Modos de Endereçamento:
Endereçamento Indireto
●
Pode ser em múltiplos níveis (aninhado ou em cascata):
– EA = [ … [ [A] ] … ]
(para casa: desenhar diagrama)
–
●
Endereçamento indireto 1 nível é comum, com mais de 1 é
raro
Vantagem:
– Grande espaço de endereçamento
●
●
2n , onde n é o número de bits da palavra
Desvantagens:
– Múltiplos acessos à memória para obter operando
ADD [A] - requer 2 acessos para obter operando
Portanto, mais lento
●
–
Rodrigo Hausen - OCD
9/26
Modos de Endereçamento:
Em Registrador
Operando em registrador indicado no campo de endereço
●
EA = R
●
Desvantagem: número limitado de registradores (espaço
de endereçamento extremamente limitado)
●
Vantagens:
– Necessita de campo de endereço muito menor
– Instruções mais curtas
– Busca de instrução mais rápida
– Nenhuma busca à memória para obter operando,
portanto execução muito rápida
●
Neste modo, maior quantidade de registradores implica
melhor desempenho
– requer uso parcimonioso dos registradores
●
Rodrigo Hausen - OCD
10/26
Modos de Endereçamento:
Operando em Registrador
Instrução
opcode
Ri
Registradores
R1
...
R2
Operando
...
Ri
Rn
Rodrigo Hausen - OCD
11/26
Modos de Endereçamento:
Indireto Em Registrador
Operando está na posição de memória apontada pelo
conteúdo do registrador R
●
EA = [R]
●
Vantagens:
– grande espaço de endereçamento (2n)
– requer 1 acesso de memória a menos para busca de
operando do que endereçamento indireto simples
●
Rodrigo Hausen - OCD
12/26
Modos de Endereçamento:
Diag: Indireto em Registrador
Instrução
opcode
Registradores
R1
...
...
X
operando
X+1
...
X
...
...
Rodrigo Hausen - OCD
Memória
1
...
Rn
end.
0
R2
Ri
Ri
13/26
Modos de Endereçamento:
Por Deslocamento
●
●
●
Operando está no endereço A adicionado a um
deslocamento contido em um registrador
EA = A + [R]
Campo de endereço contém dois valores:
– A = endereço de memória
– R = registrador que contém o deslocamento
– um dos campos pode estar implícito
Rodrigo Hausen - OCD
14/26
Modos de Endereçamento:
Diagrama: por Deslocamento
Instrução
opcode
Ri
A
Registradores
end.
R1
0
...
...
+
X+A
operando
Rodrigo Hausen - OCD
...
Rn
...
...
X
...
1
R2
Ri
Memória
15/26
Modos de Endereçamento:
Por Deslocamento
●
Versões do endereçamento por deslocamento:
1. endereçamento relativo:
deslocamento tomado implicitamente a partir do PC:
EA = A + [PC]
●
ou seja, obtenha o operando A posições a patir da
instrução corrente
●
explora conceito de localidade espacial: se a maioria das
referências à memória são próximas, economiza bits no
campo de endereço da instrução
●
Rodrigo Hausen - OCD
16/26
Modos de Endereçamento:
Por Deslocamento
●
Versões do endereçamento por deslocamento:
2. endereçamento via registrador-base:
deslocamento tomado implicitamente a partir de um
registrador de deslocamento
●
registradores de segmento CS (code segment), DS (data
segment) e SS (stack segment) em IA-32
●
Modo real IA-32: segmento 20 bits (16 bits deslocados 4
posições para direita), endereço 16 bits. Exemplo:
– Se CS = 3FA2 e PC = 2100, o endereço efetivo da
instrução a ser buscada na memória será
3FA20 = [CS]
+ 2100 = [PC]
41B20 = [CS:PC] = endereço efetivo
– memória máxima acessível no modo real: FFFF0 +
FFFF + 1 = 10FFF0 = 1114096 bytes ≈ 1,06 MB 17/26
Rodrigo Hausen - OCD
●
Modos de Endereçamento:
Por Deslocamento
●
Versões do endereçamento por deslocamento:
3. endereçamento indexado:
mantém A fixo, varia o conteúdo de R
EA = A + [R]
●
útil para acessar vetores
A ← endereço do primeiro elemento do vetor
R←0
enquanto [R] < n
acessa vetor[R]
R ← [R]
●
Rodrigo Hausen - OCD
18/26
Modos de Endereçamento:
Pilha
Operando(s) está(ão) no topo da pilha (implicitamente)
●
Ex.: ADD (retira as duas palavras do topo da pilha, soma
e coloca o resultado no novo topo da pilha)
●
Necessário manter um apontador para o topo da pilha.
Geralmente, apontador fica em um registrador chamado
SP (stack pointer).
●
Pilha geralmente cresce “para cima”
– instrução push X decrementa SP e coloca operando X na
pilha
– pop X retira da pilha, colocando no operando X, e
incrementa SP
●
IA-32: esp (stack pointer, 32 bits), ebp (base pointer,
base da pilha, 32 bits)
●
Rodrigo Hausen - OCD
19/26
Formatos de Instrução
●
●
●
Organização dos bits em uma instrução
Inclui opcode
Inclui operandos (implícitos ou explícitos)
Rodrigo Hausen - OCD
20/26
Formatos de Instrução
Organização dos bits em uma instrução
●
Inclui opcode
●
Inclui operandos (implícitos ou explícitos)
●
Operando explícito é referenciado usando-se um dos
métodos de endereçamento descritos anteriormente.
– métodos de endereçamento diferentes podem ser
determinados por opcodes diferentes ou por bits
específicos dentro do campo de endereçamento da
instrução
●
Rodrigo Hausen - OCD
21/26
Formatos de Instrução
Organização dos bits em uma instrução
●
Inclui opcode
●
Inclui operandos (implícitos ou explícitos)
●
Operando explícito é referenciado usando-se um dos
métodos de endereçamento descritos anteriormente.
– métodos de endereçamento diferentes podem ser
determinados por opcodes diferentes ou por bits
específicos dentro do campo de endereçamento da
instrução
●
Na maioria dos casos, é usado mais de um formato de
instrução (no IAS era um formato único)
– p. ex. comprimento do opcode pode variar para instruções
distintas de uma mesma arquitetura!
●
Rodrigo Hausen - OCD
22/26
Tamanho de Instrução
●
●
É afetado por, e afeta:
– Tamanho da memória
– Organização da memória
– Estrutura dos barramentos
– Complexidade da CPU
– Velocidade da CPU (instruções por segundo)
Buscamos um compromisso entre um repertório de
instruções poderoso e economia de espaço
– mais instruções e mais modos de endereçamento,
consequentemente mais opcodes, que implica que campo
de opcode de cada instrução precisará de mais bits.
Rodrigo Hausen - OCD
23/26
Alocação de Bits
●
O número de bits em uma instrução é afetado por:
– Quantidade de modos de endereçamento
– Número de operandos
– Operando em registrador versus operando na memória
quanto menos registradores, menos bits necessários para
identificar cada um
Número de conjuntos de registradores
●
dividir registradores em conjuntos especializados, opcode
determina implicitamente o banco usado
Alcance do endereçamento (quantos endereços?)
Granularidade no endereçamento
●
endereçamento por byte? endereçamento por palavra
maior que um byte?
●
–
–
–
Rodrigo Hausen - OCD
24/26
Formato de Instrução IA-32
Bytes
Rodrigo Hausen - OCD
25/26
Para Casa
Pensar: na IA-32, a memória é endereçada por byte. Como
a palavra de 32 bits AABBCCDD é armazenada na
memória? Outras arquiteturas, com endereçamento
também por byte, armazenam de um jeito diferente. Como?
(Apêndice 9B: Little Endian, Big Endian, Bi-Endian)
●
Ler capítulos 9 e 10 (inclusive os seus apêndices)
●
Para mais informações sobre segmentação na IA-32:
– http://en.wikipedia.org/wiki/X86_memory_segmentation
– http://en.wikipedia.org/wiki/Real_mode
– http://en.wikipedia.org/wiki/Protected_mode
●
Para mais informações sobre o conjunto de instruções da
IA-32:
●
http://pdos.csail.mit.edu/6.828/2011/readings/i386/c17.htm
●
Fazer os exercícios propostos no site
Rodrigo Hausen - OCD
26/26
Download