Baixe o app para aproveitar ainda mais
Prévia do material em texto
RESUMINHO DA MALDADE Multiplicação e Divisão Multiplicação - Para realizar a multiplicação são necessários dois operandos, um multiplicando e um multiplicador para gerar um operando produto. - Se o número de bits do multiplicando é (n) e do multiplicador é (m), o número de bits do produto final n+m (ignorando bits de sinal). Além disso, a multiplicação também precisa tratar a ocorrência de overflow. Arquitetura de um Multiplicador - Devido ao aumento de complexidade, nem todas as arquiteturas suportam, ao nível do hardware, a capacidade para efetuar operações aritméticas de multiplicação e divisão. - No caso do MIPS, essas operações são asseguradas pela arquitetura, através de uma unidade especial de multiplicação de inteiros. - Observamos que uma multiplicação que envolva dois operandos de n bits necessita de um espaço de armazenamento, para o resultado, de 2*n bits. - Logo, no caso do MIPS, o resultado deverá ser armazenado com 64 bits, o que determina a existência de registradores especiais para esse mesmo armazenamento. - Para o armazenamento do multiplicador e do resultado final, os arquitetos do MIPS incluíram um par de registradores especiais designados, respectivamente, por HI e LO (de uso específico da unidade de multiplicação de inteiros): O HI armazena os 32 bits mais significativos do resultado. O LO armazena, inicialmente, o multiplicador e, após a execução da operação, os 32 bits menos significativos do resultado. - A transferência do multiplicador para o registrador LO é efetuada automaticamente (por hardware) no início da execução da operação. - Esta arquitetura de multiplicação é útil apenas para a realização de operações de multiplicação unsigned. - A arquitetura que utiliza o algoritmo de Booth é adequada para a realização de operações de multiplicação signed em que os operandos estão codificados em complemento a dois. Divisão - No algoritmo da divisão são utilizados dois operandos, o dividendo e o divisor, e produzidos dois resultados o quociente e o resto. A relação entre os componentes da divisão pode ser expressa da seguinte forma: dividendo = quociente x divisor + resto, onde o resto é sempre menor que o divisor. - Às vezes, os programas usam a divisão simplesmente para obter o resto, ignorando o quociente. Além disso, é necessário que seja detectada a divisão por zero, que é matematicamente inválida. - Para o armazenamento do resto e do resultado final, também se usa os registradores especiais designados, respectivamente, por HI e LO. O HI armazena o resto. O LO armazena o quociente. Ponto Flutuante - A aritmética computacional que manipula os números binários em notação científica normalizada (apenas um dígito à esquerda da vírgula) é denominada de aritmética de ponto flutuante. 1000,0000001 = 1,0000000001 . 2³ - A normalização apresenta 3 vantagens: Simplificação na entrega de dados que incluem números ponto flutuante (pf); Simplificação dos algoritmos da aritmética em pf; Aumento da precisão dos números que podem ser armazenados na word. - Números em pf no MIPS têm o formato abaixo: S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM - Sendo S(Sinal) = 1 bit, E(Expoente) = 8 bits e M(Mantissa) = 23 bits. - Tendo E 8 bits e M 23 bits, é possível representar frações (na base 10) tão pequenas como 2,0 * 10-38 e nº tão grandes como (na base 10) 2,0 x 1038. Ainda assim pode ocorrer overflow na aritmética em pf. - O overflow significa que o expoente é tão grande que não pode ser representado com 8 bits. - Se uma fração é pequena demais para ser representada, significa que um expoente negativo não pode ser representado em 8 bits. Essa situação denomina-se underflow. - Para reduzir a possibilidade de ocorrer underflow ou overflow, existe a aritmética em pf de dupla precisão, que permite representar números de 2,0 x 10-308 até 2,0 x 10308. - No MIPS nº em pf de dupla precisão ocupam 2 words e têm 1 bit para sinal, 11 bits para E, 52 bits para F. - A representação: S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM Busca facilitar operação realizadas pelo hardware. Sinal no campo mais significativo: permite testes rápidos para ‘maior que’, ‘menor que’ e ‘igual a zero’. Expoente antes da Mantissa: permite uma ordenação simples, pois números com expoentes maiores são maiores que números que tem expoente menor (números de mesmo sinal). - Números pf não utilizam complemento a dois. Expoentes negativos - Chamada Notação Desviada, onde o desvio é um número subtraído para se ter o número real. - IEEE 754 usa desvio de 127 (28/2, descontado o 0) para precisão simples. - Subtrair 127 do campo Expoente para se ter o valor real do expoente. - Exemplo: O expoente -1 no padrão IEEE 754 seria representado como: -1 + 127 = 126 = 01111110. E o expoente +1: +1 +127 = 128 = 10000000. Operações Aritméticas em Ponto Flutuante Adição em ponto flutuante (análogo para a subtração) N = 1,11 x 20 + 1,00 x 2-2 1) Iguale os expoentes com o maior. N = 1,11 x 20 + 0,01 x 20 2) Some as mantissas mantendo os expoentes. N = (1,11 + 0,01) x 20= 10,00 x 20 3) Normalize o resultado. N = 10,00 x 20 = 1,000 x 2¹ Multiplicação em ponto flutuante N = (1.11 x 20) x (1.01 x 2-2) 1) Somar os expoentes com bias dos dois números. Expr = 0+(-2)[0+127] + [-2+127][127+125] - 127 = [125] (= -2) 2) Multiplicar as mantissas. Mr = 1.11 x 1.01 = 10.0011 3) Normalizar o produto se necessário, deslocando à direita e incrementando o expoente. N = 10.0011 x 2125 = 1.00011x 2126 Divisão em ponto flutuante N = (1.001 x 20) / (1.1 x 2-2) 1) Subtrair os expoentes (com o bias). Expr = 0-(-2)[0+127] - [-2+127][127-125] + 127 = [129] (= 2) 2) Dividir as mantissas. Mr = 1.001 / 1.1 = 0.11 3) Normalizar o produto se necessário. N = 0.11 x 2129 = 1.1 x 2128 Arredondamento As técnicas mais comuns no processo de arredondamento do resultado (o qual introduz um erro) são: Truncar Arredondar Arredondar para o par (ímpar) mais próximo Linguagem de Máquina (MIPS) - Instruções e classes de instruções Instruções de processamento (aritméticas e lógicas) Instruções de transferência de informação (carga) Instruções de controle de fluxo de execução (desvio) Representação das Instruções - Soma: add $t0, $s0, $s1 # Soma $s0 com $s1 e armazena em $t0 addu # Instrução add unsigned (sem sinal) - Subtração: Sub $t0, $s0, $s1 # Subtrai $s1 de $s0 e armazena em $t0 subu # Instrução sub unsigned (sem sinal) - Multiplicação e Divisão: mult $2, $3 # Multiplicador $3, multiplicando $2 multu $2, $3 # Multiplicação unsigned div $2, $3 # Dividendo $3, divisor $2 divu $2, $3 # Divisão unsigned ◦ mfhi $reg # move from hi - Copia HI para $reg ◦ mflo $reg # move from lo - Copia LO para $reg ◦ mthi $reg # move to hi - Copia $reg para HI ◦ mtlo $reg # move to lo - Copia $reg para LO Instruções de controle do fluxo da execução - branch equal: desvia o fluxo para o label se Rsrc1 == Rsrc2 (beq): beq Rsrc1, Rsrc2, label - branch not equal: desvia o fluxo para o label se Rsrc1 != Rsrc2 (bne): bne Rsrc1, Rsrc2, label - jump: permite um salto na seqüência de instruções independente de nenhuma condição j label # vai para label Instruções lógicas - A instrução set less then (slt) compara 2 registradores e armazena em um terceiro registrador: 1 (se < que) 0 (se > ou igual) slt $8, $19, $20 # armazena 1 em $8 se $19 < $20 Instruções lógicas (bit a bit) sll Rdst, Rsrc, k # Rdst = Rsrc << k srl Rdst, Rsrc, k # Rdst = Rsrc >> k Endereçamento imediato lw $5, 0 ($6)# Ler constante p/ o registo $5 addi $3, $5, 4 # $3 = $5 + 4 addiu (add immediate unsigned) slti $2, $12, 16 # $2 = 1 se $12 < 16 & $2 = 0 se $12 16 sltiu (slt immediate unsigned) Instruções Podemos agrupar as diversas instruções em três grandes grupos definidos pela sua funcionalidade: ◦ Instruções R-type: Instruções que representam somente registradores ◦ Instruções I-type: Instruções que representam registradores e uma constante ◦ Instruções J-type: Instruções que representam somente a constante Instruções R-type. Os campos das instruções R-Type recebem os seguintes nomes e quantidades de bits: op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits onde: op: operação; rs: 1º registrador contendo o primeiro operando fonte; rt: 2º registrador contendo o segundo operando fonte; rd: registrador destino; shamt: quantidade de bits a serem deslocados (shift amount – para instruções sll / srl); funct: função, seleciona uma variação especifica da operação apontada no campo op. Instruções I-type. Para instruções I-Type os campos rd, shamt e funct ficam fundidos em um único campo de 16 bits (campo endereço – address) que representará a constante envolvida - imediato. Representação: op rs rt address 6 bits 5 bits 5 bits 16 bits Onde: op: operação; rs: 1º registrador contendo o primeiro operando fonte; rt: 2º registrador contendo o segundo operando fonte; address: constante; Instruções J-type. As intruções J-type usam um formato diferente dos dois anteriores. op endereço 6 bits 26 bits onde: op: código da operação; endereço: usado para o cálculo do endereço.
Compartilhar