Preview only show first 10 pages with watermark. For full document please download

Arquitetura De Computadores

Arquitetura

   EMBED

  • Rating

  • Date

    December 2018
  • Size

    363.4KB
  • Views

    3,270
  • Categories


Share

Transcript

Aritmética Computacional – Aula 01 Professor: André Luis Meneses Silva E-mail: [email protected] orgearq20091.wordpress.com Agenda       Números com sinal e sem sinal Adição e Subtração Multiplicação Divisão Representação de ponto flutuante. Overflow Introdução  Objetivos desta aula    Descrever como os números negativos são representados. Mostrar o que acontece se uma operação cria um número muito maior do que poderia ser representado Mostrar como são implementadas as operações aritméticas Revisão  Conversão base qualquer para decimal   Fórmula geral  Nb = an.bn + .... + a2.b2 + a1.b1 + a0.b0 1 0 1 1 0 12 = 1x25 0x24 1x23 1x22 0x21 1x20 = = = = = = 32 0 8 4 0 1 4510 Revisão   Conversão decimal para qualquer base. 4276810 para hexaecimal     42768 (divisão inteira) 16 = 2673 2673 (divisão inteira) 16 = 167 167 (divisão inteira) 16 = 10 10 (divisão inteira) 16 = 0 R: 0 R: 1 R: 7 R: 10 0xA710 Revisão   Conversão decimal para qualquer base 6810 para binário        68 (divisão inteira) 2 = 34 34 (divisão inteira) 2 = 17 17 (divisão inteira) 2 = 8 8 (divisão inteira) 2 = 4 4 (divisão inteira) 2 = 2 2 (divisão inteira) 2 = 1 1 (divisão inteira) 2 = 0 R: 0 R: 0 R: 1 R: 0 R: 0 R: 0 R: 1 10001002 Revisão  Conversões entre as bases 2, 8 e 16    São mais simples Como 23 = 8, separando os bits de um número binário em grupos de tres bits  10.101.0012 = 28 . 58 . 18 = 2518 Como 24 = 16, separando os bits de um número binário em grupos de quatro bits  110.1010.11012 = 616. A16 . D16 = 6AD16 Revisão  Porque os números hexadecimais são tão importantes   Simplifica a representação do número.  4276810 = A71016 = 10100111000100002 Sistemas computacionais baseiam-se em aritmética binária.  Conversão trivial. Números com Sinal e sem Sinal  Existem algumas abordagens para representar números positivos e negativos em um sistema computacional.  Veremos 3 diferentes abordagens:  Sinal e Magnitude.  Complemento de 1.  Complemento de 2. Números com Sinal e sem Sinal  Sinal e magnitude.   O número binário possui um bit específico para tratamento do sinal.  Este bit é o primeiro bit. Quando 1 negativo, quando 0 positivo Os demais bits representam o número. Números com Sinal e sem Sinal  Para encontrar o valor decimal:  Descartar primeiro bit (sinal) Os demais bits, aplica-se conversão binário decimal (visto anteriormente).  011 = 1 * 21 +1 * 20 = + 3  111 = 1 * 21 +1 * 20 = - 3  Números com Sinal e sem Sinal  Sinal e Magnitude  Problemas:  0 positivo e 0 negativo.  Implementação em hardware mais complicada.  Operações aritméticas se tornam mais complicadas. Números com Sinal e sem Sinal  Complemento de 1.   Melhoria da representação de sinal e magnitude. Utilizado ainda em alguns sistemas computacionais. Utiliza 1 bit para indicar o sinal Números com Sinal e sem Sinal  Para encontrar o valor decimal:  Descartar primeiro bit (sinal) Quando positivo, procedimento não altera Quando negativo, deve-se negar o valor  011 = 1 * 21 +1 * 20 = + 3  111 = 0 * 21 +0 * 20   =-0 Números com Sinal e sem Sinal  Qual o valor de 1000 0111 em decimal, caso esteja usando complemento de 1? Números com Sinal e sem Sinal  Complemento de 1   Ainda possui 0 positivo e 0 negativo Também problemático para algumas operações aritméticas Números com Sinal e sem Sinal  Complemento de 2    Melhoria da representação de complemento de 1, mais utilizada nos sistemas computacionais atuais. Utiliza 1 bit para indicar o sinal Exemplos: Números com Sinal e sem Sinal  Para encontrar o valor decimal:  Descartar primeiro bit (sinal) Quando positivo, procedimento não altera Quando negativo, deve-se negar o valor e somar 1  011 = 1 * 21 +1 * 20 = + 3  111 = 0 * 21 +0 * 20 + 1 = - 1   Números com Sinal e sem Sinal  Qual o valor de 1000 0111 em decimal, caso esteja usando complemento de 2? Números com Sinal e sem Sinal  Complemento de 2   Só possui 0 (como positivo) Facilita as operações aritméticas (veremos isso nos próximos slides) Números com Sinal e sem Sinal    Processadores dão suporte a instruções com sinal ou sem sinal. Em instruções sem sinal, o bit de sinal será considerado como valor significativo Muitas das instruções que vimos para o Mips, possui uma instrução correspondente para fazer a avaliação de números sem levar em conta o sinal.  Exemplos  sltu, sltiu, addu, subu, etc. Números com sinal e sem sinal  Simplificações da notação complemento de 2.   Teste de limites de um vetor Soma/Subtração. Teste de limites de um vetor  Seja o seguinte código java   If (0 <= k && k <= tamanho) Em assembly MIPS, ficaria assim: sltu $t0, $a1, $t2 # $a1 = k e $t2 = tamanho beq $t0, $zero, IndiceForaDosLimites  Porque isso funciona? Números com Sinal e sem Sinal  Se k for um número negativo, pela notação complemento de 2 ele será maior que qualquer número positivo (se desconsiderarmos o sinal). Números com Sinal e sem Sinal  Adição e Subtração    São as operações aritméticas mais simples para os processadores. As operações funcionam da mesmo forma que aprendemos na escola, só que agora, com números binários. Exemplos: Números com Sinal e sem Sinal  Adição e Subtração    São as operações aritméticas mais simples para os processadores. As operações funciona da mesmo forma que aprendemos na escola, só que agora, com números binários. Exemplos: 1101 0001 0001 Números com Sinal e sem Sinal  Adição e Subtração   A notação complemento de 2 facilita estas tarefas. A seguinte subtração 7 – 6 pode ser feita das seguintes formas:  Forma tradicional Números com Sinal e sem Sinal  Adição e Subtração   A notação complemento de 2 facilita estas tarefas. A seguinte subtração 7 – 6 pode ser feita das seguintes formas:  Complemento de 2 (como uma soma). Será que o mips possui sub? Overflow  Observem que no último caso tivemos um pequeno problema:    A soma resultou em um valor que não pode ser representado em 32 bits. Quando isso acontece, dizemos que ocorreu overflow. Para os casos, como do exemplo acima, o overflow não teria maiores problemas, visto que podemos descartar o dígito 33 sem quaisquer problemas. Detectando Overflow   Operações aritméticas estão sujeitas a overflow. O quadro a seguir ilustram casos de oveflow: Operação A B Overflow A+B ≥0 ≥0 ? A+B <0 <0 ? A–B ≥0 <0 ? A–B <0 ≥0 ? Detectando Overflow   Operações aritméticas estão sujeitas a overflow. O quadro a seguir ilustram casos de oveflow: Operação A B Overflow A+B ≥0 ≥0 <0 A+B <0 <0 ≥0 A–B ≥0 <0 <0 A–B <0 ≥0 ≥0 Pode ocorrer overflow se B for 0? Pode ocorrer overflow se A for 0? Detectando Overflow  Seja o seguinte código: public class ClasseTeste { public static void main(String args[]){ int i = -2147483648; int j = 0; System.out.println(j - i); } } Qual será a saída? Efeitos do overflow  Se o bit extra gerado for necessário, pode acontecer uma interrupção, (exceção):   Ao detectar a interrupção, controle saltará para um endereço predefinido para tratamento de interrupção. O endereço interrompido é salvo para uma possível retomada.  No caso do MIPS, o endereço de retorno é salvo no registrador EPC (Exception program counter). Efeitos do overflow   Linguagem de programação, bem como a finalidade da aplicação pode influir para forma do tratamento. Instruções (unsigned) não passa por detector de overflow.  addu, addiu, subu. Referências  Hennessy e Patterson  Capítulo 3.