180 likes | 285 Views
Arquitetura de Computadores I. Ponto Flutuante - MIPS -. Padronizar . É simples trocar dados que incluem números em ponto flutuante; Simplifica os algoritmos de aritmética de ponto flutuante saber que os números sempre estarão nesta forma;
E N D
Arquitetura de ComputadoresI Ponto Flutuante - MIPS - -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Padronizar • É simples trocar dados que incluem números em ponto flutuante; • Simplifica os algoritmos de aritmética de ponto flutuante saber que os números sempre estarão nesta forma; • Aumenta a precisão de números que podem ser armazenados em uma palavra, já que os 0’s desnecessários da frente são substituídos por números reais à direita do ponto decimal (,). -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Ponto Flutuante: Padronização • IEEE 754 floatting point standard • (-1)s x F x 2e • Representação de float (precisão simples) • Representação de double (precisão dupla) -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Padronização • Representação de números negativos usando notação em excesso • Notação “excesso”: N é o número de bits do valor em questão. Ex. 1111, N = 4 • Para realizar uma conversão na representação “excesso”, fazer: 2^N-1 + número. Ex: convertendo 5, 2^3 + 5 = 1101 (1101 = +5). Convertendo -3, 2^3 + -3 = 1010 (1010 = -3). • Polarização (ou bias) • Bias é um caso especial da representação “excesso”, onde o “número mágico” é escolhido pelo usuário (ex. IEEE-754 float utiliza bias=127). -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Exercício • 1) Mostre a representação em P.F. do número -0,75 (10) • 2) Mostre a representação decimal deste número: 1-10000001-010000..... -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Resposta exercício 1 • Convertendo para Binário o número; • devemos formatar o número; • remover o primeiro 1; • Aqui temos o expoente (1), e a parte significativa 0,1; • Até aqui sabemos que: o bit de sinal é 1 e que a parte significativa é: 100000.... -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Resposta exercício 1 cont. • Vamos calcular o expoente; • Lembramos que Ex=Número-polarização; • -1=Número-127; • Número = 126; • Número = 01111110; • Resposta: -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Resposta Exercício 2 • Como o bit de sinal é 1, sabemos que o número é negativo; • Vamos pegar a parte significativa do número: 0,01; • Vamos somar um (1) para respeitarmos a formatação: 1+0,25 = 1,25; • Aqui nós temos a parte significativa do número: 1,25. -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Resposta do exercício 2 cont. • Vamos ver o expoente, lembrando que Ex=Número-polarização; • Ex=10000001-01111111; • Ex=129-127; • Ex=2; • Agora vamos juntar os dados: • -1,25x22 = -1,25x4 = -5; • Resposta: -5 -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Coisas que devemos saber! • Para programar com números com precisão de ponto flutuante, devemos usar o co-processador de ponto flutuante do MIPS; • O co-processador possui seus próprios registradores (32), de 32 bits; • Existem instruções específicas para números de precisão simples (32 bits) e para números de precisão dupla (64 bits). • Quando trabalhamos com números de precisão dupla, ocupamos dois registradores; • Para precisão dupla devemos sempre utilizar registradores de “índice” ($fn) par. -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa Exemplo Float data msg1: .asciiz "Exemplo de uso de float no spim.\nEntre com um valor: " .text .globl main main: li $2, 4 # print string (syscall code 4) la $4, msg1 syscall -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa exemplo Float cont. li $2, 6 # read float (syscall code 6, returns #value read in $f0) syscall mov.s $f2, $f0 # $f2 = $f0 add.s $f2, $f2, $f0 -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa exemplo Float cont. li $2, 2 # print float (syscall code 2) mov.s $f12, $f2 # $f12 has value to be #printed syscall li $2, 10 # exit (syscall code 10) syscall -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa Exemplo Double .data msg1: .asciiz "\n\nf = ( g + h ) - ( i + j )\n" msg2: .asciiz "\nEntre com o valor de g: \n" msg3: .asciiz "\nEntre com o valor de h: \n" msg4: .asciiz "\nEntre com o valor de i: \n" msg5: .asciiz "\nEntre com o valor de j: \n" msg6: .asciiz "\nO valor de f é: " .text .globl main -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa Exemplo cont. main: li $2, 4 #service 4: print_str la $4, msg1 syscall la $4, msg2 syscall li $2, 7 #service 7: read_double syscall #$2 receives input mov.d $f4, $f0 #$f4 receives value of variable g -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa Exemplo cont. li $2, 4 la $4, msg3 syscall li $2, 7 syscall mov.d $f6, $f0 #$f6 receives value of variable h li $2, 4 la $4, msg4 syscall -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa Exemplo cont. li $2, 7 syscall mov.d $f8, $f0 #$f8 receives value of variable i li $2, 4 la $4, msg5 syscall li $2, 7 syscall mov.d $f10, $f0 #$f10 receives value of variable j -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I
Programa Exemplo add.d $f20, $f4, $f6 add.d $f22, $f8, $f10 sub.d $f2, $f20, $f22 li $2, 4 la $4, msg6 syscall li $2, 3 #service 3: print_double mov.d $f12, $f2 syscall li $2, 10 #service 10: exit syscall -Breda, Bortoluzzi, Luz – Arquitetura de Computadores I