Endereçamento

Propaganda
Capítulo 4
João Lourenço
[email protected]
Faculdade de Ciências e Tecnologia
Universidade Nova de Lisboa
2007-2008
O nível ISA
(Instruction Set Architecture)
Adaptado dos transparentes das autoras do livro “The Essentials of Computer Organization and Architecture”
Objectivos
  Compreender os factores envolvidos no
desenho do nível ISA (Instruction Set
Architecture)
  Conhecer o formato das instruções,
operandos e diferentes modos de
endereçamento
  Diferenciar e reconhecer os processadores
little- e big-endian
2
Generalidades sobre o nível ISA [1]
  O nível ISA faz a interface entre o programador e
o hardware
  Estudar o conjunto de instruções implica estudar
a arquitectura e funcionamento do CPU, pois
estão interligados
  A arquitectura do computador está, em geral,
escondida do programador (que usa uma
linguagem de programação de alto nível)
  Em abstracto, o programador não deveria ter em
consideração a arquitectura
3
Generalidades sobre o nível ISA [2]
  A linguagem de programação alto nível é
transformada para um formato intermédio
comum (ISA)
  O construtor do hardware constrói o
hardware que executa as instruções ISA
directamente e de uma forma eficiente
  Para desenhos equivalentes, ISAs diferentes
podem ter implicações de até 25% no
desempenho
4
Inerface entre o compilador e o HW
Programa
em C++
Programa
em Fortran
Compilador
de C++
Compilador
de Fortran
Nível ISA
O programa ISA é
executado pelo
microprograma
ou pelo hardware
Hardware
5
Perspectiva geral do nível ISA [1]
  Propriedades
  O compilador produz código ISA
  O compilador precisa de conhecer a arquitectura
do microprocessador
•  Modelo de memória, registos disponíveis, …
6
Perspectiva geral do nível ISA [2]
  Modelos de memória
  Os bytes estão agrupados em palavras (4-bytes,
8-bytes, etc.)
  Endereçável ao byte ou à palavra 16/32/64-bit
  Normalmente as palavras estão alinhadas em
endereços múltiplos do tamanho da palavra
  Muitos processadores têm um espaço de
endereçamento linear único para código e dados,
alguns (poucos) têm “espaços” separados
7
Perspectiva geral do nível ISA [3]
  Registos
  Os registos são visíveis no nível ISA
  Usados para controlar a execução, guardar
valores temporários, etc…
  Alguns registos são internos e não estão visíveis
no nível ISA
  Divididos em 2 categorias: específicos (PC, SP,
Flags) e generalistas (R1, R2)
8
Nível ISA: instruções
  Cada instrução contém 3 componentes
básicos
  Código da operação: especifica a operação a
ser executada (expressa como um código
binário)
  Referência aos operandos fonte: referência
aos dados fonte a serem manipulados pela
instrução
  Referência para o destino: referência ao
“local” onde deverá ser guardado o resultado
da operação
9
Tipos de dados [1]
 As instruções esperam os seus dados
num formato particular, e.g.,
 Números em vírgula flutuante em precisão
simples ou dupla?
 De acordo com IEEE754?
 Processamento de inteiros:
 Os inteiros são sempre com sinal?
 Ou suporta inteiros sem sinal?
10
Tipos de dados [2]
  Suporte de números em vírgula flutuante:
  Usa a norma IEEE754?
  Suporta precisão simples e precisão dupla?
  Tem suporte hardware para processamento
de números em VF, ou faz por software?
  Suporte de outros tipos não numéricos:
  Caracteres? Booleanos? Apontadores?
11
Formato das instruções
Formato genérico
Opcode
Operando 1
Operando 2
…
Operando N
Opcode
Opcode
Endereço
Opcode
Endereço 1
Opcode
Endereço 1
Endereço 2
Opcode
Endereço 1
Endereço 2
Endereço 3
12
Formato das instruções: critérios
  Possibilidade de adicionar novas instruções
no futuro
  A eficiência do nível ISA está muito
dependente da tecnologia usada
  Instruções pequenas e regulares
(semelhantes) são melhores que longas e/ou
irregulares
  O formato das instruções necessita de
suportar todas as operações desejadas
  Tamanho do(s) campo(s) de endereçamento
nas instruções
13
Endereçamento [1]
  O Opcode é importante, mas uma parte
considerável da instrução é usada para
especificar onde estão os operandos e onde
guardar o resultado
  Uma instrução aritmética típica tem 3
endereços: dois operandos e um resultado
  Para reduzir o espaço ocupado pela
especificação dos endereços:
  Estes podem estar implícitos na instrução
  São total ou parcialmente registos
14
Endereçamento [2]
  Para um CPU com 32 registos generalistas,
apenas necessitamos de 5-bits para identificar
cada operando
  Os operandos estão total ou parcialmente
implícitos:
  Instruções de 3 endereços
  Instruções de 2 endereços
  Instruções de 1 endereço
  Instruções sem endereços (CPUs baseados
numa pilha, e.g., JVM)
15
Endereçamento [3]
Opcode
Endereço 1
Endereço 2
Endereço 3
  Instruções de 3 endereços:
  Tanto os operandos como o destino estão explícitos
na instrução
•  A instrução tem uma semântica do tipo: X = Y + Z
  Os operandos/endereços podem referenciar
directamente a memória
•  Limitações quanto à velocidade da memória vs.
velocidade do processador
•  Implicações devido ao tamanho (opcode + 3 endereços de
memória)
  Os operandos/endereços podem referenciar registos
•  Reduz consideravelmente o tamanho total da instrução
16
Endereçamento [4]
Opcode
Endereço 1
Endereço 2
 Instruções de 2 endereços:
 Um dos endereços é, simultaneamente,
fonte e destino
•  A instrução tem uma semântica do tipo:
X=X+Y
 É um formato muito comum (e.g., Intel)
17
Endereçamento [5]
Opcode
Endereço 1
 Instruções de 1 endereço
 Dois dos endereços estão implícitos na
instrução
•  A instrução tem uma semântica do tipo:
Acc = Acc + X
 É um formato usado no MARIE
18
Endereçamento [6]
Opcode
  Instruções de 0 endereços
  Todos os endereços estão implícitos na
instrução
•  Exemplo: TBA (Transfer register B to A)
  Instruções baseadas em pilha (0 endereços)
  Todas as operações são baseadas no uso de
uma pilha (em memória) que contém os
operandos e é, simultaneamente, o destino
  Interacção com a pilha usando operações
19
Endereçamento [7]
 Exemplo:
Y = (A-B) / (C+D*E)
3 address
2 address
1 address
SUB
MUL
ADD
DIV
MOV
SUB
MOV
MUL
ADD
DIV
LOAD
MUL
ADD
STORE
LOAD
SUB
DIV
STORE
Y, A, B
T, D, E
T, T, C
Y, Y, T
Y, A
Y, B
T, D
T, E
T, C
Y, T
D
E
C
Y
A
B
Y
Y
20
Formato das instruções: exemplo [1]
21
Formato das instruções: exemplo [2]
22
Modos de endereçamento:
Directo [1]
  O campo de endereço contém o endereço de memória
onde se encontra o operando
  Endereço Efectivo (EA) = campo de endereço (A)
  e.g. ADD A
  Adiciona o conteúdo da célula de memória A ao acumulador
  Obtém o operando na posição de memória A
  Uma única referência a memória para aceder aos dados
  Não necessita de cálculos adicionais para determina o EA
  O número de localizações que podem ser usadas para
guardar o endereço efectivo é 2k, onde k é o tamanho do
campo endereço na instrução (A)
23
Modos de endereçamento:
Directo [2]
Instrução
Opcode
Endereço A
Memória
Operando
A-1
A
A+1
A+2
A+3
A+4
24
Modos de endereçamento:
Indirecto [1]
  O campo de endereço na instrução especifica a
localização em memória que contém o
endereço dos dados
  São necessários dois acessos à memória
•  O primeiro para obter o endereço efectivo
•  O segundo para obter o operando
  Âmbito do EA é 2n , onde n é o tamanho (bits)
da palavra de memória
  O número de localizações que podem ser
usadas para guardar o endereço efectivo é 2k,
onde k é o tamanho do campo endereço na
instrução
25
Modos de endereçamento:
Indirecto [2]
Instrução
Opcode
Endereço A
Memória
Apontador operando
Operando
A-1
A
A+1
A+2
A+3
A+4
26
Modos de endereçamento:
Por registo [1]
  Endereçamento por registo: como o endereçamento directo,
mas o campo endereço na instrução especifica um registo
Instrução
Opcode
(Endereço do) Registo Rn
Registos
Operando
•  Não acede à memória
•  Execução muito rápida
•  Espaço de endereçamento
muito limitado
•  Múltiplos registos melhoram
o desempenho
Rn-1
Rn
Rn+1
Rn+2
Rn+3
Rn+4
27
Modos de endereçamento:
Indirecto por registo [1]
  Endereçamento indirecto por registo: como o endereçamento
indirecto, mas o campo de endereço na instrução especifica
um registo que contém o endereço efectivo
Instrução
Opcode
(Endereço do) Registo Rn
Registos
Rn-1
Rn
Rn+1
Rn+2
Rn+3
Rn+4
Grande espaço de endereçamento
Menos um acesso à memória que
com endereçamento indirecto
Memória
Apontador operando
Operando
A-1
A
A+1
A+2
A+3
A+4
28
Modos de endereçamento:
Indexado [1]
  EA = A + (R); A instrução contém dois endereços:
  A = endereço base; R = registo que contém o deslocamento em
relação ao endereço base
Instrução
Opcode
Registo R
Memória
Registos
Rn-1
Rn
Rn+1
Rn+2
Rn+3
Rn+4
Índice / deslocamento
Endereço A
+
Operando
A-1
A
A+1
A+2
A+3
A+4
29
Modos de endereçamento:
Imediato [1]
Instrução
Opcode
Operando
  O campo de endereço contém o operando
  Não faz referências adicionais à memória
30
Modos de endereçamento:
Exemplo
 Qual o valor presente no acumulador
para cada um destes modos ?
Instrução : LOAD 800
800
900
1000
700
31
Tipo de instruções
 As instruções disponíveis têm as
seguintes categorias:
 Transferências de dados
 Aritméticas
 Booleanas
 Manipulação de bits
 I/O
 Controlo de execução
 Especializadas
Consegue
pensar em
exemplos?
32
Arquitecturas little- e big-endian [1]
  Refere-se à ordenação dos grupos de bytes
em memória
  e.g., se tivermos um inteiro com 4 bytes para
colocar na posição de memória Ma e
seguintes, como fazemos?
B3
B2
B1
B0
Big Endian
Ma-1
Little Endian
B3
Ma
B0
B2
Ma+1
B1
B1
Ma+2
B2
B0
Ma+3
B3
Ma+4
Ma+5
33
Arquitecturas little- e big-endian [2]
  Big endian:
  Little endian:
  As instruções assembly
para operar sobre um
  O sinal do número
número com 1, 2, 4 ou
mais bytes assume que
pode ser determinado
têm o byte menos
analisando o byte
significativo sempre no
com deslocamento 0
deslocamento 0
  É mais natural
  Facilita a
compatibilidade
8/16/32 bits
34
Notas finais
 As instruções podem ter tamanho fixo ou
variável
 Existem vários modos de
endereçamento:
o  Imediato (Immediate) o  Indirecto por registo
(Register Indirect)
o  Directo (Direct)
o  Por registo (Register) o  Indexado (Indexed)
o  Pilha (Stack)
o  Indirecto (Indirect)
38
Download