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