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.