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
- 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:
Código C:
Código MIPS:
A[12] = h + A[8];
lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)
• Pode 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
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;
}
swap:
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
Hennessy • Patterson
9
©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
$s1 = $s2 + $s3
sub $s1, $s2, $s3
$s1 = $s2 – $s3
lw $s1, 100($s2)
$s1 =
Memory[$s2+100]
sw $s1, 100($s2)
Memory[$s2+100] =
$s1
Hennessy • Patterson
10
©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:
Você sabe o significado dos nomes de campo?
Hennessy • Patterson
11
©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
12
©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
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Controle
• Instruções de desvio incondicionais do MIPS:
j label
• Exemplo:
if (i!=j)
h=i+j;
else
h=i-j;
beq $s4, $s5, Lab1
add $s3, $s4, $s5
j Lab2
Lab1: sub $s3, $s4, $s5
Lab2: ...
• 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
Next instr. is at Label if $s4 ≠ $s5
Next instr. is at Label if $s4 = $s5
Next instr. is at Label
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:
if $s1 < $s2 then
$t0 = 1
slt $t0, $s1, $s2
else
$t0 = 0
• Podemos usar essa instrução para construir "blt $s1, $s2,
Label“ - agora podemos construir 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
Número do
registrador
0
Uso
O valor constante 0
$v0-$v1
02/mar
Valores para resultados e
avaliação de expressões
$a0-$a3
04/jul
Argumentos
$t0-$t7
ago/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
Pointeiro 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. Que formato?
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
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”:
lui $t0, 1010101010101010
1010101010101010
•
preenchido com zeros
0000000000000000
Depois, precisamos acertar os bits de ordem inferior, por exemplo:
Hennessy • Patterson
21
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Linguagem assembly versus linguagem
de máquina
•
O assembly fornece uma representação simbólica conveniente
- muito mais fácil do que escrever números
- por exemplo, destino primeiro
• A linguagem de máquina é realidade subjacente
- por exemplo, o destino não é mais o primeiro
• O assembly pode fornecer “pseudo-instruções”
- por exemplo, “move $t0, $t1” existe apenas no assembly
- seria mais bem implementada usando “add $t0,$t1,$zero”
• Ao considerar o desempenho, você deve contar as instruções
reais
Hennessy • Patterson
22
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Outras questões
•
Abordadas em seu laboratório de programação de linguagem
assembly:
- suporte para procedimentos
- linkers, carregadores, layout da memória
- pilhas, quadros, recursão
- manipulação de strings e ponteiros
- interrupções e exceções
- chamadas de sistema e convenções
• Veremos alguns desses mais adiante
• Estudaremos as otimizações de compilador quando chegarmos no
Capítulo 4.
Hennessy • Patterson
23
©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 bagagem desnecessária
• 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
24
©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
25
©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
26
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Resumindo:
Operandos MIPS
Nome
32 registradores
Exemplo
$s0-$s7, $t0-$t9,
$zero, $a0-$a3,
$v0-$v1, $gp, $fp,
$sp, $ra, $at
Hennessy • Patterson
Comentários
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.
27
©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
28
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Hennessy • Patterson
29
©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
30
©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
31
©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”
• Graça salvadora:
- 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
32
©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
33
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Restrições de registrador do IA-32
Hennessy • Patterson
34
©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
35
©2005 Elsevier Editora Ltda
Organização e Projetos de Computadores
Formatos de instruções IA-32
• Formatos típicos: (observe os diferentes tamanhos)
Hennessy • Patterson
36
©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 mais alta /
velocidade de clock 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
37
©2005 Elsevier Editora Ltda
Download

Respostas Capitulo 2 - trabalhos