Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Arquitetura e Organizac¸a˜o de Computadores Instruc¸o˜es de Ma´quina Rodrigo Porf´ırio da Silva Sacchi Bacharelado em Sistemas de Informac¸a˜o Faculdade de Cieˆncias Exatas e Tecnologias Universidade Federal da Grande Dourados 22 de maio de 2013 1 / 71 Introduc¸a˜o Conjunto de instruc¸o˜es de ma´quina de um computador: interface entre hardware e software; Dado que: Computadores sa˜o constru´ıdos com tecnologias de hardware baseadas nos mesmos princ´ıpios; Ha´ algumas poucas operac¸o˜es ba´sicas que todo computador deve oferecer; Projetistas buscam escolher instruc¸o˜es de ma´quina que: Facilitem a construc¸a˜o do hardware; Facilitem a construc¸a˜o do compilador; Maximizem o desempenho; Minimizem o custo. Linguagens de ma´quina de diferentes computadores sa˜o bastante similares; Aprendendo uma, e´ fa´cil usar outras. 2 / 71 Estudaremos Como projetar as instruc¸o˜es de ma´quina de um conjunto de instruc¸o˜es de um processador; Como definir: Formato das instruc¸o˜es; Representac¸a˜o das instruc¸o˜es; Modos de enderec¸amento; Tipos de instruc¸o˜es. Qual a relac¸a˜o entre as instruc¸o˜es de ma´quina e as linguagens de alto n´ıvel; Como instruc¸o˜es de ma´quina sa˜o representadas em uma notac¸a˜o simbo´lica (linguagem de montagem); Como instruc¸o˜es de ma´quina sa˜o representadas em bina´rio; Como conjuntos de instruc¸o˜es de ma´quina evolu´ıram historicamente. 3 / 71 Estudaremos O conjunto de instruc¸o˜es de ma´quina de um processador real: MIPS : Conjunto de instruc¸o˜es que busca a simplicidade do hardware; Conjunto de instruc¸o˜es representativo; Processador com palavra de 32 bits. Semelhante a outras arquiteturas desenvolvidas desde a de´cada de 1980; Quase 100 milho˜es de processadores MIPS fabricados em 2002; Usada pela NEC, Nintendo, Cisco, Silicon Graphics, Sony... 4 / 71 Formato das Instruc¸o˜es Uma instruc¸a˜o de ma´quina: Possui um determinado nu´mero de bits; E´ composta por campos que representam informac¸o˜es. Toda instruc¸a˜o possui um campo chamado opcode: Opcode: operation code (co´digo da operac¸a˜o); Determina que ac¸a˜o a instruc¸a˜o deve realizar. Muitas instruc¸o˜es possuem campos chamados de operandos ou enderec¸os; Especificam a localizac¸a˜o dos dados que sera˜o utilizados pela instruc¸a˜o. Exemplo: uma instruc¸a˜o que soma 2 dados, precisa especificar onde os 2 dados esta˜o e onde o resultado da soma deve ser armazenado. 5 / 71 Formato das Instruc¸o˜es Formato de uma instruc¸a˜o define: Quais campos uma instruc¸a˜o possui; Qual o significado de cada campo. Exemplos de formatos comuns de instruc¸o˜es de ma´quina: 6 / 71 Formato das Instruc¸o˜es Exemplo: add reg0, reg1, reg2 Tamanho da instruc¸a˜o: nu´mero de bits da instruc¸a˜o: Em alguns computadores, todas as instruc¸o˜es possuem o mesmo tamanho (MIPS); Em outros, existem instruc¸o˜es de tamanhos diferentes (Intel). Relac¸a˜o entre tamanho da instruc¸a˜o e tamanho da palavra do computador: Instruc¸o˜es podem ter o mesmo tamanho da palavra, ou ser menor ou maior que a palavra; Em geral tamanho da instruc¸a˜o e´ mu´ltiplo do tamanho da palavra ou vice-versa. 7 / 71 Formato das Instruc¸o˜es Exemplos: Instruc¸o˜es de tamanho fixo, igual ao tamanho da palavra: Enderec¸o MP 0 instruc¸a˜o 1 instruc¸a˜o 2 instruc¸a˜o ... ... <——————> tamanho da palavra 8 / 71 Formato das Instruc¸o˜es Exemplos: Instruc¸o˜es de tamanho fixo, menor que o tamanho da palavra: Enderec¸o MP 0 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o 1 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o 2 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o ... ... ... ... ... <——————> tamanho da palavra 9 / 71 Formato das Instruc¸o˜es Exemplos: Instruc¸o˜es de tamanho fixo, maior que o tamanho da palavra: Enderec¸o MP 0 instruc¸a˜o 1 2 instruc¸a˜o 3 4 instruc¸a˜o 5 ... ... <——————> tamanho da palavra 10 / 71 Formato das Instruc¸o˜es Exemplos: Instruc¸o˜es de tamanhos diferentes, maiores ou iguais que o tamanho da palavra: Enderec¸o MP 0 instruc¸a˜o 1 instruc¸a˜o 2 3 instruc¸a˜o 4 5 ... ... <——————> tamanho da palavra 11 / 71 Formato das Instruc¸o˜es Exemplos: Instruc¸o˜es de tamanhos diferentes, menores ou iguais que o tamanho da palavra: Enderec¸o MP 0 instruc¸a˜o instruc¸a˜o instruc¸a˜o instruc¸a˜o 1 instruc¸a˜o instruc¸a˜o 2 instruc¸a˜o 2 instruc¸a˜o instruc¸a˜o instruc¸a˜o ... ... ... ... ... <——————> tamanho da palavra 12 / 71 Formato das Instruc¸o˜es Instruc¸o˜es de ma´quina podem ser classificadas quanto ao nu´mero de operandos que elas indicam explicitamente (em seus campos operando). Em geral, as instruc¸o˜es possuem 0, 1, 2 ou 3 operandos. Instruc¸o˜es sem operandos; Instruc¸o˜es com 1 operando; Instruc¸o˜es com 2 operandos; Instruc¸o˜es com 3 operandos. 13 / 71 Formato das Instruc¸o˜es Algumas instruc¸o˜es possuem nos campos operando, enderec¸os da memo´ria principal; Outras instruc¸o˜es especificam nestes campos, registradores numerados do processador; Exemplos: Instruc¸a˜o que soma 2 palavras da memo´ria principal. Pode ter 2 operandos que indicam o enderec¸o das palavras na memo´ria; Instruc¸a˜o que soma 2 registradores. Pode ter 2 operandos que indicam os registradores. 14 / 71 Formato das Instruc¸o˜es Alguns computadores possuem instruc¸o˜es para operac¸o˜es aritme´ticas com apenas 1 operando; Operando especificado na instruc¸a˜o e´ um operando fonte; Um registrador de propo´sito espec´ıfico do processador, chamado acumulador (AC), e´ usado como o outro operando, e e´ um operando fonte e o destino da operac¸a˜o aritme´tica. 15 / 71 Formato das Instruc¸o˜es A instruc¸a˜o em geral tem o formato: Formato: opcode fonte Significado: acumulador := acumulador op fonte. Alguns computadores possuem instruc¸o˜es para operac¸o˜es aritme´ticas com 2 operandos; Um operando e´ fonte e o outro e´ fonte e destino; A instruc¸a˜o em geral tem o formato: Formato: opcode destino fonte Significado: destino := destino op fonte. 16 / 71 Formato das Instruc¸o˜es Alguns computadores possuem instruc¸o˜es para operac¸o˜es aritme´ticas com 3 operandos; 2 operandos sa˜o fontes e o outro e´ destino; A instruc¸a˜o em geral tem o formato: Formato: opcode destino fonte1 fonte2 Significado: destino := fonte 1 op fonte 2. Compromisso: tamanho das instruc¸o˜es × capacidade das instruc¸o˜es e nu´mero de instruc¸o˜es do programa. 17 / 71 Questo˜es de Projeto do Formato das Instruc¸o˜es No projeto do formato das instruc¸o˜es de um computador, alguns fatores devem ser considerados; 1 1o Fator ⇒ Tamanho da instruc¸a˜o: Instruc¸o˜es pequenas (com menos bits) sa˜o mais deseja´veis que instruc¸o˜es grandes, pois: Programas com instruc¸o˜es grandes ocupam mais espac¸o na memo´ria principal; Instruc¸o˜es, para serem executadas, precisam ser buscadas na memo´ria principal. Instruc¸o˜es grandes levam mais tempo para serem buscadas. Tempo de execuc¸a˜o e´ maior. 18 / 71 Questo˜es de Projeto do Formato das Instruc¸o˜es Continuac¸a˜o ... 1 2o Fator ⇒ Representac¸a˜o das operac¸o˜es: Deve haver espac¸o suficiente na instruc¸a˜o para representar todas as operac¸o˜es. Isto e´, o campo opcode deve ser suficiente para representar todas as diferentes operac¸o˜es; Exemplo: Computador com 2n operac¸o˜es deve ter instruc¸a˜o de pelo menos n bits, so´ para representar o campo opcode (fora os campos operandos). 19 / 71 Questo˜es de Projeto do Formato das Instruc¸o˜es Continuac¸a˜o ... 1 3o Fator ⇒ Tamanho da instruc¸a˜o e tamanho da palavra: Tamanho da instruc¸a˜o deve ser mu´ltiplo do tamanho da palavra do computador ou vice-versa; Uma instruc¸a˜o deve ocupar um nu´mero integral de palavras, ou um nu´mero integral de instruc¸o˜es deve caber em uma palavra; Se na˜o for assim, desperdic¸ara´ espac¸o nas palavras da memo´ria principal, ou tera´ instruc¸o˜es cruzando fronteiras de palavras. Tera´ que ler mais palavras que necessa´rio para buscar as instruc¸o˜es na memo´ria. Maior tempo de execuc¸a˜o. 20 / 71 Questo˜es de Projeto do Formato das Instruc¸o˜es Continuac¸a˜o ... 1 4o Fator ⇒ Nu´mero de bits dos campos operandos: Exemplo: Memo´ria principal com 216 bytes e enderec¸ada em bytes =⇒ enderec¸os de memo´ria com pelo menos 16 bits; Memo´ria principal com 216 bytes e enderec¸ada em palavras de 4 bytes (32 bits) =⇒ memo´ria tera´ 214 palavras =⇒ enderec¸os de memo´ria com pelo menos 14 bits; 1o Caso: instruc¸a˜o tem campos operandos maiores =⇒ instruc¸a˜o e´ maior =⇒ gasta mais espac¸o na memo´ria principal e tem maior tempo de execuc¸a˜o; 2o Caso: a instruc¸a˜o e´ menor (mais deseja´vel), pore´m resoluc¸a˜o da memo´ria e´ menos fina. =⇒ Para trabalhar com dados de 8 ou 16 bits, e´ necessa´rio extra´ı-los da palavra de 32 bits. Compromisso entre resoluc¸a˜o de memo´ria fina e enderec¸os curtos. 21 / 71 Operac¸o˜es e Operandos Computador deve ser capaz de realizar operac¸o˜es aritme´ticas =⇒ instruc¸o˜es aritme´ticas; Instruc¸o˜es aritme´ticas de MIPS : Realizam uma u´nica operac¸a˜o; Possuem sempre exatamente 3 operandos: 2 origens e 1 destino; Operandos devem ser apenas registradores. Hardware para um nu´mero varia´vel de operandos e´ mais complicado que hardware para um nu´mero fixo de operandos; Formato das instruc¸o˜es aritme´ticas atende filosofia de manter hardware simples; Princ´ıpio de projeto 1: Simplicidade favorece regularidade. 22 / 71 Operac¸o˜es e Operandos Operandos: Registradores sa˜o operandos; Registradores tambe´m sa˜o vis´ıveis ao programador; Processadores possuem nu´mero limitado de registradores. Operandos de MIPS : 32 registradores de 32 bits cada. Um nu´mero grande de registradores aumentaria o tempo de ciclo do clock (pois sinais eletroˆnicos demoram mais para percorrer uma distaˆncia maior); Princ´ıpio de projeto 2: Menor e´ mais ra´pido. 23 / 71 Operac¸o˜es e Operandos Observac¸o˜es: Princ´ıpios de projeto na˜o sa˜o verdades absolutas: 31 registradores podem na˜o ser mais ra´pidos que 32; Compromisso: necessidade de registradores para programas × manter ciclo do clock curto. Alguns Registradores do MIPS : $s0, $s1, $s2, ..., $s7: usados para conter valores de varia´veis do programa; $t0, $t1, $t2, ..., $t9: usados para dados tempora´rios. 24 / 71 Instruc¸o˜es Aritme´ticas do MIPS Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel: Compilador associa varia´veis do programa a registradores; Exemplo de comando em C: f = (g + h) { (i + j); Assumindo que o compilador associou f , g , h, i e j aos registradores $s0, $s1, $s2, $s3 e $s4, respectivamente. Um compilador C produziria (instruc¸o˜es de ma´quina representadas em uma notac¸a˜o simbo´lica – linguagem de montagem): add $t0, $s1, $s2 # $t0 = g + h add $t1, $s3, $s4 # $t1 = i + j sub $s0, $t0, $t1 # f = $t0 - $t1 25 / 71 Instruc¸o˜es Aritme´ticas do MIPS Programa pode possuir muito mais dados do que o nu´mero de registradores do processador; Dados do programa sa˜o mantidos na memo´ria principal; Instruc¸o˜es aritme´ticas do MIPS operam apenas com registradores; Sa˜o necessa´rias instruc¸o˜es para transferir dados entre memo´ria e registradores. 26 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS Devem fornecer o enderec¸o de memo´ria a ser acessado; Enderec¸amento de memo´ria no MIPS : Ce´lulas enderec¸a´veis da memo´ria sa˜o bytes; Enderec¸os de 32 bits =⇒ memo´ria de ate´ 232 bytes =⇒ memo´ria de ate´ 230 palavras; Restric¸a˜o de alinhamento de palavras e´ imposta; Ordenac¸a˜o big-endian de bytes na palavra; Enderec¸os das palavras sa˜o mu´ltiplos de 4. Enderec¸o da palavra e´ o enderec¸o do byte mais significativo da palavra. 27 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS Instruc¸o˜es de transfereˆncia de dados do MIPS : Enderec¸o de memo´ria a ser acessado e´ dado pela soma de uma constante e um registrador fornecidos na instruc¸a˜o; Constante: deslocamento; Registrador: registrador base. 28 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS lw registrador1, constante (registrador2) load word =⇒ lw; Leˆ palavra da memo´ria, no enderec¸o dado por constante + registrador2. Armazena palavra no registrador1. sw registrador1, constante (registrador2) store word =⇒ sw; Leˆ palavra do registrador1. Armazena palavra na memo´ria, no enderec¸o dado por constante + registrador2. 29 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel: Compilador aloca estruturas de dados (como vetores, matrizes, registros, ...) em posic¸o˜es de memo´ria; Exemplo de comando em C, onde A e´ um vetor com 100 palavras: A[9] = h + A[8]; Assumindo que o compilador associou h ao registrador $s2 e o enderec¸o inicial (enderec¸o base) do vetor A esta´ no registrador $s3; As instruc¸o˜es de linguagem de montagem correspondentes sa˜o: lw $t0, 32($s3) # $t0 = A[8] add $t0, $s2, $t0 # $t0 = h + $t0 sw $t0, 36($s3) # A[9] = $t0. 30 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS Outro exemplo de comando em C: g = h + A[i]; Assumindo que o compilador associou g , h e i aos registradores $s1, $s2 e $s4, respectivamente, e o enderec¸o base do vetor A esta´ no registrador $s3; As instruc¸o˜es de linguagem de montagem correspondentes sa˜o: add $t1, $s4, $s4 # $t1 = 2 * i add $t1, $t1, $t1 # $t1 = 4 * i add $t1, $t1, $s3 # $t1 = enderec¸o de A[i] lw $t0, 0($t1) # $t0 = A[i] add $s1, $s2, $t0 # g = h + $t0 31 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS Modos de Enderec¸amento: Formas das instruc¸o˜es de ma´quina enderec¸arem seus operandos, isto e´, indicarem onde os seus operandos esta˜o; Especificam como os bits dos campos operando devem ser interpretados para indicar onde os operandos da instruc¸a˜o esta˜o; Em uma linguagem de ma´quina, va´rios modos de enderec¸amento sa˜o oferecidos. Enderec¸amento por registrador base somado com deslocamento: Adequado para acessar elementos em vetores, matrizes e registros; Registrador conte´m enderec¸o base da estrutura de dados; Deslocamento seleciona o elemento desejado. 32 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS Nas instruc¸o˜es de transfereˆncia de dados, registrador era originalmente utilizado para conter um ı´ndice de um vetor (ou matriz) e o deslocamento continha o enderec¸o inicial da estrutura de dados; Registrador era chamado de registrador de ı´ndice; Atualmente, a memo´ria e´ muito grande, logo o enderec¸o inicial de uma estrutura de dados e´ colocado em um registrador, pois na˜o caberia no campo deslocamento da instruc¸a˜o. Programa possui muito mais varia´veis do que o nu´mero de registradores do processador; Compilador: Tenta manter varia´veis mais utilizadas nos registradores; Mante´m varia´veis restantes na memo´ria; Usa loads e stores para mover varia´veis entre registradores e memo´ria. 33 / 71 Instruc¸o˜es de Transfereˆncia de Dados no MIPS Registradores × memo´ria: Acesso a um dado na memo´ria e´ mais lento que acesso a um dado em um registrador; Dado em um registrador pode ser usado como operando por uma instruc¸a˜o aritme´tica. Logo, e´ mais u´til. Dado na memo´ria na˜o pode; Para obter um bom desempenho, compilador deve usar registradores eficientemente. 34 / 71 Arquitetura MIPS Operandos Nome Exemplo Observac¸a˜o 32 registradores $s0, $s1, ... Ra´pido acesso para dados. de 32 bits. $t0, $t1, ... Dado deve estar em registrador para realizac¸a˜o de operac¸o˜es aritme´ticas. 230 palavras Memo´ria[0], Acessada somente por instruc¸o˜es de de memo´ria Memo´ria[4], ... transfereˆncia de dados. Enderec¸ada por Memo´ria[4294967292] bytes. Enderec¸o de palavra e´ mu´ltiplo de 4. 35 / 71 Arquitetura MIPS Linguagem de Montagem Categoria Instruc¸a˜o Exemplo Significado Aritme´tica add add $s1, $s2, $s3 $s1 = $s2 + $s3 subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 Transfereˆncia load word lw $s1, 100($s2) $s1 = Memo´ria[$s2 + 100] de Dados store word sw $s1, 100($s2) Memo´ria[$s2 + 100] = $s1 36 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Computador deve poder executar diferentes instruc¸o˜es, dependendo de valores calculados; Alterar o fluxo de controle do programa, de acordo com condic¸o˜es; Instruc¸o˜es de desvio condicional (conditional branches). Instruc¸o˜es de desvio condicional do MIPS : beq register1, register2, ro´tulo branch if equal =⇒ beq; Se registrador1 = registrador2 enta˜o desvia para instruc¸a˜o cujo enderec¸o e´ representado por ro´tulo. bne register1, register2, ro´tulo branch if not equal =⇒ bne; Se registrador1 6= registrador2 enta˜o desvia para instruc¸a˜o cujo enderec¸o e´ representado por ro´tulo. 37 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel: Trecho de co´digo em C: if (i != j) f = g + h; f = f - i; Assumindo que o compilador associou f , g , h, i , j aos registradores $s0 a $s4; As instruc¸o˜es de linguagem de montagem correspondentes podem ser: beq $s3, $s4, fim if # Se i = j desvia p/ fim if add $s0, $s1, $s2 # f = g + h fim if: sub $s0, $s0, $s3 # f = f - i 38 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Instruc¸o˜es de desvio incondicional (unconditional branches): Alteram o fluxo de controle do programa, incondicionalmente. Instruc¸o˜es de desvio incondicional do MIPS : j ro´tulo jump =⇒ j ; Desvia para instruc¸a˜o cujo enderec¸o e´ representado por ro´tulo. Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel: Trecho de co´digo em C: if (i == j) f = g + h; else f = g - h; 39 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Assumindo que o compilador associou f , g , h, i , j aos registradores $s0 a $s4; As instruc¸o˜es de linguagem de montagem correspondentes podem ser: bne $s3, $s4, senao # Se i != j desvia para senao; add $s0, $s1, $s2 # f = g + h j fim if # Desvia para fim if senao: sub $s0, $s1, $s2 # f = g - h fim if: 40 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Outro trecho de co´digo em C: while (A[i] == k) i = i + j; Assumindo que o compilador associou i , j , k aos registradores $s3 a $s5 e o enderec¸o base do vetor A esta´ no registrador $s6. As instruc¸o˜es de linguagem de montagem correspondentes podem ser: loop: add $t1, $s3, $s3 # $t1 = 2*i add $t1, $t1, $t1 # $t1 = 4*i add $t1, $t1, $s6 # $t1 = enderec¸o de A[i] lw $t0, 0($t1) # $t0 = A[i] bne $t0, $s5, fim # Se A[i] != k desvia para fim add $s3, $s3, $s4 # i = i + j j loop # Desvia para loop fim: 41 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Testes mais frequentes sa˜o de igualdade e desigualdade: beq e bne; Algumas vezes e´ necessa´rio comparar se uma varia´vel e´ menor que outra. Instruc¸a˜o de comparac¸a˜o do MIPS : slt register1, register2, register3 set on less than =⇒ slt; Se register2 < register3 enta˜o register1 = 1. Sena˜o, register1 = 0. Registrador $zero possui sempre valor 0; Usando slt, beq, bne e $zero pode-se criar todas condic¸o˜es relacionais (=, 6=, <, <=, >, >=). 42 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel: Trecho de co´digo em C: if (a >= b) Assumindo que o compilador associou a e b aos registradores $s0 e $s1; As instruc¸o˜es de linguagem de montagem correspondentes podem ser: slt $t0, $s0, $s1 # Se a<b ent~ao $t0=1. Sen~ao $t0=0 bne $t0, $zero, menor # Se $t0 = 0 desvia para menor, # isto e´, se a < b desvia para menor 43 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Instruc¸o˜es slt e bne juntas sa˜o equivalentes a branch on less than; MIPS so´ possui desvios condicionais beq e bne, pois: Desvios condicionais com comparac¸o˜es de igualdade e desigualdade sa˜o os mais usados pelos programas; Outras comparac¸o˜es podem ser feitas combinando-se slt e beq ou bne; Instruc¸a˜o branch on less than na˜o e´ implementada pois e´ mais complicada =⇒ teria CPI maior ou tornaria o ciclo do clock mais longo; Comparac¸o˜es mais usadas precisam de apenas uma instruc¸a˜o =⇒ executam mais ra´pido; Comparac¸o˜es menos usadas precisam de mais de uma instruc¸a˜o, executam menos ra´pido; Princ´ıpio de projeto 4: Fac¸a o caso comum ra´pido. 44 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Instruc¸o˜es de desvio incondicional do MIPS : jr register1 jump register =⇒ jr; Desvia para instruc¸a˜o cujo enderec¸o esta´ contido no registrador register1. 45 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Relac¸a˜o entre instruc¸o˜es de ma´quina e linguagens de alto n´ıvel: Trecho de co´digo em C: switch (k) { case 0: f = i + j; break; case 1: f = g + h; break; case 2: f = g - h; break; } 46 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio Assumindo que: O compilador associou f , g , h, i , j , k aos registradores $s0 a $s5; $t2 conte´m valor igual a 3; Treˆs palavras consecutivas na memo´ria conteˆm enderec¸os correspondentes aos ro´tulos L0, L1 e L2, formando uma tabela de enderec¸os de desvio; $t4 conte´m enderec¸o inicial desta tabela na memo´ria; As instruc¸o˜es de linguagem de montagem correspondentes podem ser: 47 / 71 Instruc¸o˜es para Comparac¸a˜o e Desvio slt $t3, $s5, $zero # Se k<0 ent~ao desvia para fim bne $t3, $zero, fim slt $t3, $s5, $t2 # Se k>=3 ent~ao desvia para fim beq $t3, $zero, fim add $t1, $s5, $s5 # $t1=2∗k add $t1, $t1, $t1 # $t1=4∗k add $t1, $t1, $t4 # $t1=enderec¸o de Tabela Desvio[k] lw $t0, 0($t1) # $t0=Tabela Desvio[k] jr $t0 # Desvia para enderec¸o em $t0 L0: add $s0, $s3, $s4 # f=i+j j fim # Desvia para fim L1: add $s0, $s1, $s2 # f=g+h j fim # Desvia para fim L2: sub $s0, $s1, $s2 # f=g−h fim: 48 / 71 Representac¸a˜o das Instruc¸o˜es Bloco ba´sico: sequeˆncia de instruc¸o˜es sem desvios, exceto possivelmente no fim, e sem instruc¸o˜es destino de desvios, exceto possivelmente no in´ıcio. Linguagem de montagem 6= linguagem de ma´quina; Instruc¸o˜es de montagem: representadas em uma notac¸a˜o simbo´lica; Instruc¸o˜es de ma´quina: sequeˆncia de bits =⇒ podem ser representadas como nu´meros inteiros. 49 / 71 Representac¸a˜o das Instruc¸o˜es Cada parte de uma instruc¸a˜o de ma´quina pode ser considerada como um nu´mero individual. Instruc¸a˜o e´ formada colocando-se estes nu´meros lado a lado. Estas partes da instruc¸a˜o sa˜o os campos da instruc¸a˜o; Formato da instruc¸a˜o de ma´quina define: Quantos campos a instruc¸a˜o possui; Qual o significado de cada campo da instruc¸a˜o; Quantos bits ha´ em cada campo e quantos bits tem a instruc¸a˜o ao todo. 50 / 71 Representac¸a˜o das Instruc¸o˜es Algumas instruc¸o˜es especificam registradores, isto e´, possuem campos que indicam qual registrador deve ser utilizado; Deve haver convenc¸a˜o para mapear nomes dos registradores da linguagem de montagem em nu´meros da linguagem de ma´quina; MIPS : 32 registradores = 25 registradores =⇒ nu´mero de 5 bits representa um registrador. Problema: Algumas instruc¸o˜es podem precisar de campos pequenos, por exemplo para especificar registradores do processador. Exemplo: add $t0, $t1, $t2 3 operandos registradores =⇒ campos de 5 bits. 51 / 71 Representac¸a˜o das Instruc¸o˜es Outras instruc¸o˜es podem precisar de campos maiores, por exemplo para especificar enderec¸os da memo´ria principal; Exemplo: lw $t0, 32($t1) Dois operandos registradores e um operando deslocamento; Campo deslocamento precisa de mais bits. Conflito: ter todas as instruc¸o˜es do mesmo tamanho × ter um u´nico formato de instruc¸a˜o. Princ´ıpio de projeto 3: Um bom projeto requer bons compromissos. 52 / 71 Representac¸a˜o das Instruc¸o˜es Tamanho das instruc¸o˜es de ma´quina MIPS : Uma instruc¸a˜o possui 32 bits (uma palavra); Todas as instruc¸o˜es possuem o mesmo tamanho =⇒ Princ´ıpio de projeto 1. Formato das instruc¸o˜es de ma´quina MIPS : Treˆs formatos diferentes de instruc¸o˜es para diferentes tipos de instruc¸o˜es =⇒ Princ´ıpio de projeto 3; Va´rios formatos complica o hardware. Complexidade e´ reduzida mantendo-se formatos similares =⇒ Princ´ıpio de projeto 1. 53 / 71 Representac¸a˜o das Instruc¸o˜es Formatos das instruc¸o˜es do MIPS : Formato R (register): para instruc¸o˜es aritme´ticas (e lo´gicas e outras); Formato I (immediate): para instruc¸o˜es de transfereˆncia de dados e de desvio condicional (e instruc¸o˜es aritme´ticas e lo´gicas com dado imediato); Formato J (jump): para instruc¸o˜es de desvio incondicional. 54 / 71 Representac¸a˜o das Instruc¸o˜es Formato R: op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Formato I: op rs rt address 6 bits 5 bits 5 bits 16 bits Formato J: op address 6 bits 26 bits 55 / 71 Representac¸a˜o das Instruc¸o˜es Campos da instruc¸a˜o do MIPS : op: Operac¸a˜o ba´sica da instruc¸a˜o (opcode); rs: Primeiro operando registrador fonte; rt: Segundo operando registrador fonte; rd: Operando registrador destino; shamt: Shift amount; funct: Seleciona variac¸a˜o da operac¸a˜o determinada por op (function); address (de 16 bits): Deslocamento ou dado imediato; address (de 26 bits): Enderec¸o. Formatos sa˜o diferenciados com base no conteu´do do campo op; 56 / 71 Representac¸a˜o das Instruc¸o˜es Relac¸a˜o entre linguagem de montagem e linguagem de ma´quina do MIPS : $s0 a $s7: mapeados nos registradores 16 a 23; $t0 a $t7: mapeados nos registradores 8 a 15. Exemplo: MIPS. Em linguagem de montagem: add $t0, $s1, $s2 Em linguagem de ma´quina: Formato R. Em decimal: 0 17 18 8 0 32 op rs rt rd shamt funct $s1 $s2 $t0 Em bina´rio, como fica? 57 / 71 Representac¸a˜o das Instruc¸o˜es Exemplo: MIPS. Em linguagem de montagem: lw $t0, 32($s3) Em linguagem de ma´quina: Formato I. Em decimal: 35 19 8 32 op rs rt address $s3 $t0 Em bina´rio, como fica? 58 / 71 Representac¸a˜o das Instruc¸o˜es Instruc¸o˜es lw e sw determinam enderec¸o de um dado a ser acessado; Campo address fornece um deslocamento em bytes; lw e sw podem acessar qualquer palavra dentro de uma regia˜o de +/− 215 bytes (ou 213 palavras) a partir do enderec¸o base no registrador rs; Utilizam enderec¸amento por base ou deslocamento. 59 / 71 Representac¸a˜o das Instruc¸o˜es Exemplo: MIPS. Em linguagem de montagem: beq $s3, $s4, fim if add $s0, $s1, $s2 fim if: sub $s0, $s0, $s3 Em linguagem de ma´quina: Formato I. Em decimal: beq 4 19 20 1 add 0 17 18 16 0 32 sub 0 16 19 16 0 34 Em bina´rio, como fica? 60 / 71 Representac¸a˜o das Instruc¸o˜es Como: Instruc¸o˜es beq e bne determinam enderec¸o da instruc¸a˜o para onde desviar; e Todas as instruc¸o˜es teˆm sempre o tamanho de uma palavra; Campo address fornece um deslocamento em palavras; beq e bne podem desviar para qualquer instruc¸a˜o dentro de uma regia˜o de +/− 215 palavras (ou 215 instruc¸o˜es) a partir do enderec¸o da instruc¸a˜o seguinte a beq/bne (isto e´, a partir do enderec¸o PC + 4). Utilizam enderec¸amento relativo a PC . 61 / 71 Arquitetura MIPS Resumo 62 / 71 Arquitetura MIPS Resumo Formato das instruções Formato Campos Observação R op rs rt rd shamt funct Formato de instruções aritméticas I op rs rt address Formato de instruções de transferência de dados e de desvio condicional J op address Formato de instruções de desvio incondicional Tamanho dos campos 6 5 5 5 5 6 Todas as instruções com mesmo tamanho 63 / 71 Arquitetura MIPS Resumo Instruções de máquina Nome Formato Exemplo em linguagem de montagem Obs add R add $s1, $s2, $s3 0 18 19 17 0 32 sub R sub $s1, $s2, $s3 0 18 19 17 0 34 lw I lw $s1, 100($s2) 35 18 17 100 1 sw I lw $s1, 100($s2) 43 18 17 100 1 beq I beq $s1, $s2, rotulo 4 17 18 25 2 bne I bne $s1, $s2, rotulo 5 17 18 25 2 slt R slt $s1, $s2, $s3 0 18 19 17 0 42 j J j rotulo 2 2500 3 jr R jr $t1 0 9 0 0 0 8 64 / 71 Arquitetura MIPS Instruc¸o˜es lw e sw especificam deslocamento (campo address) em bytes; Instruc¸o˜es beq e bne especificam deslocamento (campo address) em palavras; Enderec¸amento utilizado pela instruc¸a˜o j sera´ explicado mais adiante. 65 / 71 Conclusa˜o Instruc¸o˜es sa˜o representadas como nu´meros; Instruc¸o˜es do programa sa˜o armazenadas na memo´ria para serem acessadas como nu´meros, da mesma forma que os dados do programa; Memo´ria conte´m instruc¸o˜es e dados do programa sem distinc¸a˜o; Conceito de programa armazenado (stored-program). 66 / 71 Arquiteturas Alternativas Alternativa de projeto: Fornec¸a operac¸o˜es mais poderosas, reduzindo o nu´mero de instruc¸o˜es executadas; O risco e´ um tempo de ciclo mais lento e/ou uma CPI mais alta; “O caminho em direc¸a˜o a` complexidade da operac¸a˜o e´, portanto, repleto de perigos. Para evitar esses problemas, os projetistas passaram para instruc¸o˜es mais simples.” Vejamos (brevemente) o IA-32. 67 / 71 Histo´ria do IA-32 1978: O Intel 8086 e´ anunciado (arquitetura de 16 bits); 1980: O coprocessador de ponto flutuante 8087 e´ acrescentado; 1982: O 80286 aumenta o espac¸o de enderec¸amento para 24 bits; mais instruc¸o˜es; 1985: O 80386 estende para 32 bits; novos modos de enderec¸amento; 1989-1995: O 80486, Pentium e Pentium Pro acrescentam algumas instruc¸o˜es (especialmente projetadas para um maior desempenho); 1997: 57 novas instruc¸o˜es MMX sa˜o acrescentadas; Pentium II ; 1999: O Pentium III acrescenta outras 70 instruc¸o˜es (SSE ); 2001: Outras 144 instruc¸o˜es (SSE2); 2003: A AMD estende a arquitetura para aumentar o espac¸o de enderec¸o para 64 bits; estende todos os registradores para 64 bits, ale´m de outras mudanc¸as (AMD64) 2004: A Intel se rende e abrac¸a o AMD64 (o chama EM64T ) e inclui mais extenso˜es de m´ıdia; 68 / 71 Visa˜o Geral do IA-32 Complexidade: Instruc¸o˜es de 1 a 17 bytes de tamanho; Um operando precisa agir como origem e destino; Um operando pode vir da memo´ria; Modos de enderec¸amento complexos, por exemplo, “´ındice base ou escalado com deslocamento de 8 ou 32 bits”; Grac¸a salvadora: As instruc¸o˜es mais usadas na˜o sa˜o dif´ıceis de construir; Os compiladores evitam as partes da arquitetura que sa˜o lentas; “O que o 80x86 perde em estilo e´ compensado na quantidade, tornando-o belo, do ponto de vista apropriado”. 69 / 71 Fim Fim da Apresentac¸a˜o. Obrigado – Du´vidas ??? 70 / 71 Refereˆncias I Patterson, D. A. and Hennessy, J. L. Organizac¸a˜o e Projeto de Computadores: A Interface Hardware/Software. 3a Edic¸a˜o. Rio de Janeiro, Editora Campus/Elsevier, 2005. 71 / 71
Compartilhar