Capítulo 2

Propaganda
Organização e Projetos de Computadores
Capítulo 2
Hennessy • Patterson
1
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Instruções
•
•
Linguagem da máquina
Vamos trabalhar com a arquitetura do conjunto de instruções MIPS
(Microprocessor without interlocked pipeline stages –
Microprocessador sem estágios interligados de pipeline )
– Semelhante a outras arquiteturas desenvolvidas desde a década de
1980
– Quase 100 milhões de processadores MIPS fabricados em 2002
– Usada pela NEC, Nintendo, Cisco, Silicon Graphics, Sony...
Hennessy • Patterson
2
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Aritmética MIPS
Todas as instruções possuem três operandos
• A ordem do operando é fixa (destino primeiro)
•
Exemplo:
Código C:
Código MIPS:
a=b+c
add a, b, c
(falaremos sobre registradores em breve)
“O número natural de operandos para uma operação como adição
é três... Exigir que cada instrução tenha exatamente três
operandos, nem mais nem menos, está de acordo com a filosofia
de manter o hardware simples.”
Hennessy • Patterson
3
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Aritmética MIPS
• Princípio de projeto: A simplicidade favorece a
regularidade.
• É claro que isso complica algumas coisas...
Código C:
Código MIPS:
a = b + c + d;
add a, b, c
add a, a, d
• Os operandos precisam ser registradores, apenas 32
registradores fornecidos
• Cada registrador contém 32 bits
• Princípio de projeto: Quanto menor, melhor. Por quê?
Hennessy • Patterson
4
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Registradores versus memória
• Os operandos das instruções aritméticas precisam ser
registradores — Apenas 32 registradores fornecidos
• O compilador associa variáveis com registradores
• E quanto aos programas com muitas variáveis?
Entrada
Controle
Memória
Caminho de
dados
Saída
Processador
E/S
Hennessy • Patterson
5
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Organização da memória
• Vista como um array grande e unidimensional, com um
endereço.
• Um endereço de memória é um índice para o array.
• “Endereçamento de byte” significa que o índice aponta
para um byte da memória.
8 bits de dados
8 bits de dados
8 bits de dados
8 bits de dados
8 bits de dados
8 bits de dados
8 bits de dados
Hennessy • Patterson
6
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Organização da memória
• Os bytes são bons, mas a maioria dos itens de dados
usam “words” maiores
• Para o MIPS, uma word possui 32 bits ou 4 bytes.
32 bits de dados
32 bits de dados
Os registradores armazenam 32 bits de dados
32 bits de dados
32 bits de dados
232 bytes com endereços de byte de 0 a 232 - 1
230 words com endereços de byte 0, 4, 8, ... 232 - 4
As words são alinhadas
Por exemplo, quais são os 2 bits menos significativos de um
endereço de word?
Hennessy • Patterson
7
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Instruções
• Instruções load e store
• Exemplo:
A[12] = h + A[8];
Código C:
Código MIPS: lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)
$s3 contém o endereço
base do array A[]
$s2 contém h
Resultado armazenado em A[12]
• É possível se referir aos registradores por nome (por
exemplo, $s2, $t2) em vez do número
• A instrução store word tem o destino por último
• Lembre-se de que os operandos são registradores,
não memória!
Não podemos escrever: add 48($s3), $s2, 32($s3)
Hennessy • Patterson
8
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Até agora, aprendemos:
• MIPS
- carga de words mas endereçamento de bytes
- aritmética apenas em registradores
• Instrução
Significado
add $s1, $s2, $s3
sub $s1, $s2, $s3
lw $s1, 100($s2)
sw $s1, 100($s2)
Hennessy • Patterson
$s1 = $s2 + $s3
$s1 = $s2 – $s3
$s1 = Memory[$s2+100]
Memory[$s2+100] = $s1
9
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Linguagem de máquina
Instruções, como registradores e words de dados, também
possuem 32 bits de tamanho
– Exemplo: add $t1, $s1, $s2
– Registradores têm números, $t1=9, $s1=17, $s2=18
• Formato da instrução:
•
•
•
•
•
•
•
op = operação básica da instrução, tradicionalmente denominada opcode.
rs = registrador do primeiro operando de origem.
rt = registrador do segundo operando de origem.
rd = registrador do operando de destino.
shamt = shift amount;
funct = função (variante específica de uma operação).
Hennessy • Patterson
10
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Linguagem de máquina
Pense nas instruções load-word e store-word
- O que o princípio da regularidade nos levaria a fazer?
- Novo princípio: Um bom projeto exige comprometimento
• Introduza um novo tipo de formato de instrução
- Tipo I para instruções de transferência de dados
- Outro formato era o tipo R para o registrador
• Exemplo: lw $t0, 32($s2)
23
18
9
32
op
rs
rt
número de 16 bits
Qual é o compromisso?
Hennessy • Patterson
11
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Nosso primeiro exemplo
•
Você pode descobrir o código?
swap(int v[], int k);
{ int temp;
temp = v[k]
v[k] = v[k+1];
v[k+1] = temp;
}
Hennessy • Patterson
swap:
12
muli $2, $5, 4
add $2, $4, $2
lw $15, 0($2)
lw $16, 4($2)
sw $16, 0($2)
sw $15, 4($2)
jr $31
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Conceito do programa armazenado
•
•
Instruções são bits
Programas são armazenados na memória para serem lidos ou
escritos exatamente como os dados
Memória para dados, programas,
compiladores, editores etc.
Processador
Memória
• Ciclo de execução e busca
• As instruções são buscadas e colocadas em um registrador
especial
• Os bits no registrador “controlam” as ações subseqüentes
• Busca a próxima instrução e continua
Hennessy • Patterson
13
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Controle
• Instruções de tomada de decisão
– Altera o fluxo de controle
– Por exemplo, mudar a “próxima” instrução a ser executada
• Instruções de desvio condicionais do MIPS:
bne $t0, $t1, Label
beq $t0, $t1, Label
• Exemplo: if (i==j) h = i + j;
bne $s0, $s1, Label
add $s3, $s0, $s1
Label: ....
Hennessy • Patterson
14
$s0 contém i
$s1 contém j
$s3 contém h
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Controle
• Instruções de desvio incondicionais do MIPS:
j label
$s3 contém h
$s4 contém i
$s5 contém j
• Exemplo:
beq $s4, $s5, Lab1
add $s3, $s4, $s5
j Lab2
Lab1: sub $s3, $s4, $s5
Lab2: ...
if (i!=j)
h=i+j;
else
h=i-j;
• Você pode construir um “loop for” simples?
Hennessy • Patterson
15
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Até agora:
•
•
Instrução
Significado
add $s1,$s2,$s3
sub $s1,$s2,$s3
lw $s1,100($s2)
sw $s1,100($s2)
bne $s4,$s5,L
beq $s4,$s5,L
j Label
$s1 = $s2 + $s3
$s1 = $s2 – $s3
$s1 = Memory[$s2+100]
Memory[$s2+100] = $s1
Próxima Instrução está em L se $s4 ≠ $s5
Próxima Instrução está em L se $s4 = $s5
Próxima Instrução está em L
Formatos:
R
op
rs
rt
rd
I
op
rs
rt
endereço de 16 bits
J
op
endereço de 26 bits
Hennessy • Patterson
16
shamt
funct
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Fluxo de controle
•
Temos: beq e bne; e branch-if-less-than?
•
Nova instrução: slt
if
slt $t0, $s1, $s2
$s1 < $s2 then
$t0 = 1
else
$t0 = 0
•
Podemos usar essa instrução para construir "blt $s1, $s2,
Label“ e então estruturas de controle gerais
•
Note que o assembler precisa de um registrador para fazer isso
- Existe uma política das convenções de uso para registradores
Hennessy • Patterson
17
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Política das convenções de uso
Nome
$zero
Uso
Número do
registrador
0
O valor constante 0
$v0-$v1
02-03
Valores para resultados e
avaliação de expressões
$a0-$a3
04-07
Argumentos
$t0-$t7
08-15
Temporários
$s0-$s7
16-23
Valores salvos
$t8-$t9
24-25
Mais temporários
$gp
28
Ponteiro global
$sp
29
Ponteiro de pilha
$fp
30
Ponteiro de quadro
$ra
31
Endereço de retorno
Registrador 1 ($at) reservado para o assembler, 26-27 para o sistema operacional
Hennessy • Patterson
18
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Constantes
Constantes pequenas são usadas muito freqüentemente (50% dos
operandos)
Por exemplo:
A = A + 5;
B = B + 1;
C = C - 18;
• Soluções? Por que não?
– Coloque “constantes típicas” na memória e carregue-as.
– Crie registradores “hard-wired” (como $zero) para constantes
como um.
• Instruções MIPS:
•
•
Princípio de projeto: Agilizar o caso comum.
Hennessy • Patterson
19
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
E quanto às constantes maiores?
•
•
Gostaríamos de ser capazes de carregar uma constante de 32 bits
em um registrador
Precisamos usar duas instruções; nova instrução “load upper
immediate”:
preenchido com zeros
•
Depois, precisamos acertar os bits de ordem inferior, por exemplo:
Hennessy • Patterson
20
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Visão geral do MIPS
• Instruções simples, todas com 32 bits
• Muito estruturado, nenhuma conteúdo desnecessário
• Apenas três formatos de instrução
R
op
rs
rt
I
op
rs
rt
J
op
rd
shamt
funct
endereço de 16 bits
endereço de 26 bits
• Nos baseamos no compilador para obter desempenho
— Quais são os objetivos do compilador?
• Ajudamos o compilador onde podemos
Hennessy • Patterson
21
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Endereços em desvios e jumps
•
Instruções:
bne $t4,$t5,Label
beq $t4,$t5,Label
j Label
•
A próxima instrução está em Label se $t4 ≠ $t5
A próxima instrução está em Label se $t4 = $t5
A próxima instrução está em Label
Formatos:
I
op
J
op
rs
rt
endereço de 16 bits
endereço de 26 bits
Os endereços não são de 32 bits
— Como manipular isso com instruções load e store?
Hennessy • Patterson
22
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Endereços em desvios
• Instruções:
bne $t4,$t5,Label
A próxima instrução está em Label se $t4 ≠ $t5
beq $t4,$t5,Label
A próxima instrução está em Label se $t4 = $t5
• Formatos:
I
•
op
rs
rt
endereço de 16 bits
Poderíamos especificar um registrador (como lw e sw) e
acrescentá-lo ao endereço
– Use o registrador de endereço de instrução (PC = contador do
programa)
– A maioria dos desvios é local (princípio da localidade)
•
As instruções jump usam apenas bits de ordem superior do PC
– Limites de endereço de 256 MB:
Hennessy • Patterson
23
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Resumindo:
Operandos MIPS
Nome
Exemplo
Comentários
32 registradores
$s0-$s7,
$t0-$t9,$zero,
$a0-$a3, $v0-$v1,
$gp, $fp, $sp,
$ra, $at
Locais rápidos para dados. No
MIPS, os dados precisam estar em
registradores para a realização de
operações aritméticas. O
registrador MIPS $zero sempre é
igual a 0. O registrador $at é
reservado para o assembler tratar
de constantes grandes.
Hennessy • Patterson
24
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Resumindo: (Cont.)
Assembly do MIPS
Categoria
Instrução
Exemplo
Significado
Comentários
Aritmética
add
add $s1,$s2,$s3
$s1 = $s2 + $s3
Três operandos; dados nos registradores
subtract
sub $s1,$s2,$s3
$s1 = $s2- $s3
Três operandos; dados nos registradores
add immediate
addi
$s1=$s2 + 100
Usada para somar constantes
$s1,$s2,10
0
Transferência
de dados
Desvio
condicional
Desvio
incondicional
load word
lw $s1,100($s2)
$s1 = Memória[$s2 + 100]
Dados da memória para o registrador
store word
sw $s1,100($s2)
Memória[$s2 + 100] = $s1
Dados do registrador para a memória
load byte
lb $s1,100($s2)
$s1 = Memória[$s2 + 100]
Byte da memória para registrador
store byte
sb $s1,100($s2)
Memória[$s2+100] = $s1
Byte de um registrador para memória
load upper immed.
lui $s1,100
$s1 = 100 * 216
Carrega constante nos 16 bits mais altos
branch on equal
beq $s1,$s2,25
if ($s1 == $s2) go to PC + 4 + 100
Testa igualdade; desvio relativo ao PC
branch on not equal
bne $s1,$s2,25
if ($s1 != $s2) go to PC + 4 + 100
Testa desigualdade; relativo ao PC
set on less than
slt $s1,$s2,$s3
if ($s2 < $s3) $s1 = 1; else $s1 = 0
Compara menor que; usado com beq, bne
set less than
immediate
slti$s1,$s2,100
if ($s2 < 100) $s1 = 1; else $s1 = 0
Compara menor que constante
jump
j 2500
go to 10000
Desvia para endereço de destino
jump register
jr $ra
go to $ra
Para switch e retorno de procedimento
jump and link
jal 2500
$ra = PC + 4. go to 10000
Para chamada de procedimento
Hennessy • Patterson
25
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Arquiteturas alternativas
• Alternativa de projeto:
- Forneça operações mais poderosas
- O objetivo é reduzir o número de instruções executadas
- O risco é um tempo de ciclo mais lento e/ou uma CPI mais alta
-“O caminho em direção à complexidade da
operação é, portanto, repleto de perigos. Para evitar
esses problemas, os projetistas passaram para
instruções mais simples. A Seção 2.17 demonstra as
armadilhas da complexidade.”
• Vejamos (brevemente) o IA-32
Hennessy • Patterson
26
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
IA-32
•
1978: O Intel 8086 é anunciado (arquitetura de 16 bits)
•
1980: O co-processador de ponto flutuante Intel 8087 é acrescentado
•
1982: O 80286 aumenta o espaço de endereçamento para 24 bits; mais instruções
•
1985: O 80386 estende para 32 bits; novos modos de endereçamento
•
1989-1995: O 80486, Pentium e Pentium Pro acrescentam algumas instruções
(especialmente projetadas para um maior desempenho)
•
1997: 57 novas instruções “MMX” são acrescentadas; Pentium II
•
1999: O Pentium III acrescenta outras 70 instruções (SSE)
•
2001: Outras 144 instruções (SSE2)
•
2003: A AMD estende a arquitetura para aumentar o espaço de endereço para 64 bits;
estende todos os registradores para 64 bits, além de outras mudanças (AMD64)
•
2004: A Intel se rende e abraça o AMD64 (o chama EM64T) e inclui mais extensões de
mídia
•
Essa história ilustra o impacto das “algemas douradas” da compatibilidade “adicionando
novos recursos da mesma forma que se coloca roupas em uma sacola”, uma arquitetura
“difícil de explicar e impossível de amar”.
Hennessy • Patterson
27
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Visão geral do IA-32
Complexidade:
– Instruções de 1 a 17 bytes de tamanho
– Um operando precisa agir como origem e destino
– Um operando pode vir da memória
– Modos de endereçamento complexos, por exemplo, “índice base
ou escalado com deslocamento de 8 ou 32 bits”
• Felizmente:
– As instruções mais usadas não são difíceis de construir
– Os compiladores evitam as partes da arquitetura que são lentas
•
“O que o 80x86 perde em estilo é compensado na quantidade,
tornando-o belo, do ponto de vista apropriado”
Hennessy • Patterson
28
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Registradores e endereçamento
de dados do IA-32
•
Registradores no subconjunto de 32 bits que surgiram com o 80386
Hennessy • Patterson
29
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Instruções típicas do IA-32
•
Quatro tipos principais de instruções de inteiro:
– Movimento de dados, incluindo move, push, pop
– Aritmética e lógica (registrador de destino ou memória)
– Fluxo de controle (uso de códigos de condição/flags)
– Instruções de string, incluindo movimento e comparação de strings
Hennessy • Patterson
30
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Resumo
• A complexidade da instrução é apenas uma variável
– Instrução mais baixa versus CPI (Cycles Per Instruction)
mais alta / Velocidade de relógio mais baixa
• Princípios de projeto:
– Simplicidade favorece a regularidade
– Menor é melhor
– Bom projeto exige comprometimento
– Agilizar o caso comum
• Arquitetura do conjunto de instruções
– Uma abstração muito importante!
Hennessy • Patterson
31
©2005 Elsevier Editora Ltda
Download