Você está na página 1de 138

Sistemas Processadores e Perifricos

Aula 4 - Reviso
Prof. Frank Sill Torres DELT Escola de Engenharia UFMG

Adaptado a partir dos Slides de Organizao de Computadores 2006/02 do professor Leandro Galvo DCC/UFAM - galvao@dcc.ufam.edu.br pelo Prof. Ricardo de Oliveira Duarte

Instrues MIPS :: Suporte a Procedimentos

$a0 $a1 $a2 $a3

$4 $5 $6 $7

Procedimento

$2 $3

$v0 $v1

Instrues MIPS :: Suporte a Procedimentos

Passos para a execuo:


1. O programa coloca os parmetros em um lugar onde o procedimento chamado possa acess-los 2. O programa transfere o controle para o procedimento 3. O procedimento acessa os valores necessrios realizao de sua tarefa 4. O procedimento executa sua tarefa, gerando valores 5. O procedimento (chamado) coloca os valores gerados em um lugar onde o programa (chamador) pode acess-los 6. O procedimento transfere o controle de volta para o ponto do programa que o chamou
3

Instrues MIPS :: Suporte a Procedimentos

Jump and link (jal)


Salta

para o endereo especificado, salvando o endereo da prxima instruo em $ra


jal label #desvia para o endereo indicado #por label. $ra PC + 4

Jump register (jr)


Desvio

incondicional para endereo guardado em $ra


#desvia para o endereo da #memria guardado em $ra
4

jr

$ra

Pilha
Texto Dados estticos Dados dinmicos

Pilha
5

Suporte a Procedimentos :: Procedimentos Aninhados


No precisam ser preservados pelo chamador Se usados, o chamador precisa salvar seus valores e depois restaur-los

Instrues MIPS :: Suporte a Procedimentos :: Resumo

Instrues MIPS :: Transferncia de dados

MIPS oferece instrues para mover bytes, halfwords e doublewords:


Load Store Load Store Load Store

byte: byte: halfword: halfword: doubleword: doubleword:

lb sb lh sh ld sd
8

Pseudo-instrues

So instrues fornecidas por um montador mas no implementadas pelo hardware MIPS O montador as aceita como instrues comuns, mas as traduzem para instrues equivalentes em linguagem de mquina Facilitam o trabalho do programador por oferecer um conjunto mais rico de instrues que aquele implementado em hardware, sem complicar este
9

Sistemas Processadores e Perifricos Aula 5 - Aritmtica Computacional (cap.3)


Prof. Frank Sill Torres DELT Escola de Engenharia UFMG
Adaptado a partir dos Slides de Organizao de Computadores 2006/02 do professor Leandro Galvo DCC/UFAM - galvao@dcc.ufam.edu.br e do Prof. Ricardo de Oliveira Duarte (DELT/UFMG)

10

10

Representao de nmeros Notao de ponto fixo (inteiros) Notao de ponto flutuante (real)

11

Representao de nmero de ponto fixo Temos somente os algarismos 0 e 1 para representar todos os nmeros inteiros Inteiros positivos so transformados em binrio:
41 = 0010 1001 1 = 0000 0001 64 = 0100 0000
12

Representao de nmero de ponto fixo Essa representao de nmeros inteiros em binrio direta e no se preocupa com sinal, nem com formatao dos bits

13

Representao de nmero de ponto fixo Como representar inteiros negativos? Opo natural:
Alocar um bit para guardar o sinal do nmero Opo conhecida como magnitude de sinal

14

Ponto fixo :: Magnitude de sinal


Bit mais esquerda representa o sinal:
0 positivo 1 negativo

Exemplos:
+18 = 0001 0010 -18 = 1001 0010

Problemas
Duas representaes de zero (+0 e -0) Deve-se tomar cuidado com o bit de sinal nas operaes aritmticas
15

Ponto fixo :: Complemento de dois


Nmero negativo assim obtido:
Inverte-se os bits do nmero positivo equivalente: Soma-se 1 ao nmero invertido:
(-5)dec: 1010 + 1 1011 (5)dec : 0101 1010

Mais Exemplos:
+2 +1 +0 -1 -2 = = = = = 0000 0000 0000 1111 1111 0010 0001 0000 1111 1110
16

Ponto fixo :: Complemento de dois


Para encontrar um nmero positivo a partir do seu oposto, procede-se da mesma forma:
Inverte-se os bits do nmero negativo equivalente:
(-2)dec : 1110 0001

Soma-se 1 ao nmero invertido:


(2)dec: 0001 + 1 0010

17

Ponto fixo :: Complemento de dois


1111 1110 1101 1100 1011 1010 1001 2 3 4 5 6 7 8 1000 + 7 0111
18

0000 0

0001 +1 + 2 + 3 + 4 + 5 + 6 0110 0101 0010 0011 0100

Ponto fixo :: Complemento de dois Benefcios:


Uma representao do nmero zero Facilita-se o trabalho aritmtico: a subtrao transformada em duas operaes conhecidas adio e inverso

19

Ponto fixo :: Complemento de dois


32 bits

maxint

minint

20

Ponto fixo :: Extenso de sinal


Converso de um nmero de k bits em um nmero com mais de k bits:
Exemplo: o campo imediato de 16 bits dever ser convertido para 32 bits antes de ser somado a um registrador de 32 bits em addi Os bits acrescentados esquerda no devem alterar o valor, nem o sinal do nmero

21

Ponto fixo :: Extenso de sinal


Simplesmente replica-se o bit de sinal para a esquerda at completar os novos bits:
Nmeros positivos tm infinitos zeros esquerda Nmeros negativos tm infinitos uns esquerda

22

Ponto fixo :: Extenso de sinal :: Exemplo


-4dec (16 bits) para 32 bits: 1111 1111 1111 1100 1111 1111 1111 1111 1111 1111 1111 1100
bin

bin

23

Ponto fixo :: Comparao


MIPS suporta comparao com e sem sinal
Com sinal:
Set on less than (slt) Set on less than immediate (slti)

Sem sinal
Set on less than unsigned (sltu) Set on less than immediate unsigned (sltiu)

Comparaes sem sinal so geralmente usadas para manipular endereos de memria


24

Ponto fixo :: Comparao


Instrues interpretam o tipo de representao
$s0 = 1111 1111 1111 1111 1111 1111 1111 1100bin $s1 = 0011 1011 1001 1010 1000 1010 0000 0000bin

slt

$t0, $s0, $s1

# comparao COM sinal

$t0: -4dec < 1 000 000 000dec? $t0 = 1


25

Ponto fixo :: Comparao


Instrues interpretam o tipo de representao
$s0 = 1111 1111 1111 1111 1111 1111 1111 1100bin $s1 = 0011 1011 1001 1010 1000 1010 0000 0000bin

sltu $t3, $s0, $s1

# comparao SEM sinal

$t3: 4 294 967 292dec < 1 000 000 000dec? $t3 = 0


26

Operaes com ponto fixo


Adio:
Dgitos so somados bit a bit, da direita para a esquerda Carries (vai-um) so passados para o prximo dgito esquerda

Subtrao:
Nega-se o subtraendo e soma-se um (complemento de 2) Soma-se o resultado anterior com o diminuendo

27

Operaes com ponto fixo :: Overflow


Situao anormal que ocorre quando o resultado de uma operao no pode ser representado com um dada quantidade de bits Na arquitetura MIPS o limite 32 bits Tratamento de overflow depende do compilador e do sistema operacional

28

Operaes com ponto fixo :: Overflow


Em MIPS, algumas instrues aritmticas geram

excees quando ocorre overflow

O endereo da instruo que gerou overflow salvo em um registrador especial: EPC (Exception Program Counter)

29

Operaes com ponto fixo :: Overflow


A execuo desviada para um endereo prdefinido onde uma rotina apropriada executada O Sistema Operacional (SO) decide o que fazer:
Execuo pode abortar Execuo pode continuar aps uma ao corretiva

30

Operaes com ponto fixo :: Overflow Adio:


Quando os sinais dos operando so iguais, pode ocorrer overflow

Subtrao:
Quando os sinais dos operando so diferentes, pode ocorrer overflow

31

Operaes com ponto fixo :: Overflow O projetista de computador precisa oferecer uma maneira de:
Reconhecer overflow em alguns casos Ignorar overflow em outros casos (endereamento de memria, por exemplo)

32

Operaes com ponto fixo :: Overflow Soluo MIPS:


Causam excees no overflow:
Adio (add) Adio imediata (addi) Subtrao (sub)

No causam excees no overflow:


Adio sem sinal (addu) Adio imediata sem sinal (addiu) Subtrao sem sinal (subu)
33

Operaes com ponto fixo :: Formato de instrues MIPS


add addi $t0, $s1, $s2 $t0, $s1, 123 # $t0 $s1 + $s2 # $t0 $s1 + 123

sub

$t0, $s1, $s2

# $t0 $s1 - $s2

addu addiu

$t0, $s1, $s2 $t0, $s1, 123

# $t0 $s1 + $s2 # $t0 $s1 + 123


34

Operaes com ponto fixo :: Multiplicao

0010 0 0111 111 0010 0010 0010 + 0000 0001110

(multiplicando) (multiplicador)

(produto)

35

Operaes com ponto fixo :: Multiplicao


Mais complexa do que a adio, pois envolve:
Deslocamentos Adio

de bits do produto > de bits dos operandos

m bits no multiplicando n bits no multiplicador

(m+n) bits no produto

36

Operaes com ponto fixo :: Multiplicao Algoritmo (esboo):


1. Se bit da posio i do multiplicador for 1: desloca-se o multiplicando em i posies 2. Se bit do multiplicador for 0, coloca-se 0 3. Somar acumulativamente os produtos parciais

Nmeros negativos
converta e multiplique
37

Operaes com ponto fixo :: Multiplicao Algoritmo (1a. verso em hardware):


1. Carregar operandos em registradores 2. Carregar registrador-produto com zero 3. Se bit mais direita do multiplicador for 1: Prod = Prod + Multiplicando 4. Se bit mais direita do multiplicador for 0: sem operao 5. Deslocar multiplicando esquerda 6. Deslocar multiplicador direita 7. Voltar ao passo 3 at 32 repeties

38

Incio

Mdr0 = 1

1. Mdr0 ?

Mdr0 = 0

Multiplicao de inteiros 1a. verso


1a. P P + Mnd

2. Mnd << 1 bit 3. Mdr >> 1 bit

Multiplicando Multiplicador Produto

Mnd Mdr P

repet 32 Fim

< 32

39

Operaes com ponto fixo :: Multiplicao

40

Operaes com ponto fixo :: Multiplicao


Verso 2: O multiplicador inicia na metade direita do produto
Multiplicando 32 bits

Largura s 32 bits!

ALU 32 bits

Produto 64 bits

Shift right Escrever

Teste de controle

41

Incio

Mdr0 = 1

1. Mdr0 ?

Mdr0 = 0

Multiplicao de inteiros 2a. verso


1a. P[esq] P[esq] + Mnd

2. P >> 1 bit 3. Mdr >> 1 bit

Multiplicando Multiplicador Produto

Mnd Mdr P

repet 32 Fim

< 32

42

Operaes com ponto fixo :: Multiplicao no MIPS


Multiplicao com sinal
mult $s1, $s2 # $s1 * $s2

Multiplicao sem sinal


multu $s1, $s2 # $s1 * $s2

Onde colocado o resultado?


43

Operaes com ponto fixo :: Multiplicao no MIPS Produto (64 bits) colocado em um par de registradores de 32 bits:
Hi armazena a parte mais significativa Lo armazena a parte menos significativa

No gera exceo de overflow

44

Operaes com ponto fixo :: Multiplicao no MIPS Duas instrues movem o produto dos registradores HI/LO para registradores de propsito geral:
Move from HI
mfhi $s1 # $s1 HI

Move from LO
mflo $t3 # $t3 LO

45

Operaes com ponto fixo :: Multiplicao no MIPS Para mover dados para os registradores HI/LO utilizam-se as seguintes instrues:
Move to HI
mthi $s1 # HI $s1

Move to LO
mtlo $t3 # LO $t3

46

Operaes com ponto fixo :: Multiplicao no MIPS


O assembler MIPS oferece a pseudo-instruo mul e a verso imediata muli que colocam diretamente os 32 Bits menos significantes do produto no registrador de destino desejado:
mul muli Rdest, Rsrc1, Rsrc2 Rdest, Rsrc1, valor

Exemplos:
mul muli $t0, $s1, $s2 $t0, $s1, 123 # t0 $s1 * $s2 # t0 $s1 * 123
47

Operaes com ponto fixo :: Multiplicao no MIPS


O assembler MIPS oferece mais duas pseudoinstrues para multiplicao:
Multiplicao com deteco de overflow:
mulo Rdest, Rsrc1, Src2

Multiplicao sem sinal (com overflow)


mulou Rdest, Rsrc1, Src2

48

Operaes com ponto fixo :: Diviso

Dividendo

10010011 -1011 00111 0 -1011 0011 11 -1011 100

1011 00001101

Divisor Quociente

Resto

49

Operaes com ponto fixo :: Diviso


Divisor
Deslocar direita 64 bits

Quociente
64-bit ALU Deslocar esquerda 32 bits

Resto
64 bits

Escrever

Teste de controle

50

Inicio Resto = Dividendo, n = 0 1) Resto = Resto Divisor, n++ Resto >= 0 Resto < 0

Teste do Resto

2a) Quociente << 1, Quociente[0] =1

2b) Resto = Resto + Divisor, Quociente << 1, Quociente[0] = 0

3) Divisor >> 1

No n = 33 Sim Pronto
51

Operaes com ponto fixo :: Diviso: Passo a passo


Vamos fazer: 13 / 2 usando 4 bits Dividendo: 1101 Divisor: 0010 Registradores do Resto e Divisor tero 8 bits Registrador do Quociente ter 4 bits No incio a parte menos significativa do Registrador Resto conter o dividendo e os 4 bits mais significativos do registrador Divisor, o valor inicial do divisor
No Iterao Resto (inclu dividendo) Divisor Resto menos o Divisor Quociente Teste do algoritmo

1 2 3 4 5

0000 1101 0000 1101 0000 1101 0000 0101 0000 0001

0010 0000 0001 0000 0000 1000 0000 0100 0000 0010

1110 1101 1111 1101 0000 0101 0000 0001 1111 1111

0000 0000 0001 0011 0110

negativo negativo positivo positivo negativo


52

Operaes com ponto fixo :: Diviso

Divisor

Largura s 32 bits!
32 bits

32-bit ALU

Quociente Shift left 32 bits Resto 64 bits Shift left Write Teste de controle

53

54

Operaes com ponto fixo :: Diviso Diviso com sinal


div $s1, $s2 # $s1 / $s2

Diviso sem sinal


divu $s1, $s2 # $s1 / $s2

55

Operaes com ponto fixo :: Diviso no MIPS Resultado da diviso colocado no par de registradores HI/LO:
Hi armazena o resto Lo armazena o quociente

No gera exceo de overflow Deve-se verificar se o divisor zero, caso contrrio o resultado indefinido
56

Operaes com ponto fixo :: Diviso no MIPS


O assembler MIPS tambm oferece uma pseudoinstruo para obter o quociente:
div Rdest, Rsrc1, Rsrc2

Exemplo:
div $t0, $s1, $s2 # t0 $s1 / $s2

57

Operaes com ponto fixo :: Diviso no MIPS


Pseudo-instruo MIPS para obter o resto:
rem Rdest, Rsrc1, Rsrc2

Exemplo:
rem $t0, $s1, $s2 # t0 $s1 % $s2

58

Operaes com ponto fixo :: Diviso no MIPS


Para operar nmeros sem sinal:
divu Rdest, Rsrc1, Rsrc2

Para forar a instruo real de diviso:


div $0, Rsrc1, Rsrc2

59

Ponto flutuante (Padro IEEE 754) Um nmero real pode ser representado no seguinte formato:

(-1)s m Be
s m B e sinal significando (mantissa) base expoente
60

Ponto flutuante (Padro IEEE 754) :: Sinal O bit mais esquerda guarda o sinal do nmero:
bit = 0 nmero positivo bit = 1 nmero negativo No h notao de complemento a 2

61

Ponto flutuante (Padro IEEE 754) :: Frao


O significando representado na forma normalizada (base binria): 1.xxxxx E no na forma cientfica: 0.1xxxx Nessa forma, o significando composto por:
Algarismo 1 Ponto de separao Frao
62

Ponto flutuante (Padro IEEE 754) :: Frao


O algarismo 1 e o ponto de numerao no precisam ser armazenados, pois so os mesmos para todos os nmeros reais representados Caso a frao possua menos bits que o esperado, zeros devem ser colocados direita, pois no tm significncia
23 bits frao = 1,110011 11001100000000000000000 frao
63

Ponto flutuante (Padro IEEE 754) :: Base A base B implcita (binria) e no precisa ser guardada, pois a mesma para todos os nmeros representados

64

Ponto flutuante (Padro IEEE 754) :: Expoente O expoente representado na notao deslocada, ou excesso de N Maior expoente representvel: 2n-1
Representado por: 11...11

Menor expoente representvel: -(2n-1 - 1)


Representado por: 00...00
65

Ponto flutuante (Padro IEEE 754) :: Notao deslocada


Decimal +4 +3 +2 +1 0 -1 -2 -3 -4 Complemento de dois -011 010 001 000 111 110 101 100 Notao deslocada 111 110 101 100 011 010 001 000 -66

Ponto flutuante (Padro IEEE 754) :: Notao deslocada


Representao do valor zero: 01...11 Representao do valor um: 10...00 Demais valores: somar ao zero Vantagem: facilita a comparao de expoentes entre nmeros de mesmo sinal

67

Ponto flutuante O formato de preciso simples (float) ocupa 32 bits


1 bit sinal 8 bits exponente 23 bits frao

68

Ponto flutuante O formato de preciso dupla (double) ocupa 64 bits


1 bit sinal 11 bits exponente 52 bits frao

69

Ponto flutuante Exemplo: (11)bin = +1,5 21

1 bit 0 sinal

8 bits 1000 0000 exponente

23 bits 1000 0000 0000 0000 0000 000 frao

70

Ponto flutuante Mais exemplos:

71

Ponto flutuante
Overflow: ocorre quando o expoente muito grande para ser representado no campo expoente Underflow: ocorre quando o expoente muito pequeno (= pequena frao) para ser representado no campo expoente

72

Ponto flutuante Ponto fixo


Inteiros representados

-231

231 - 1

overflow negativo

nmeros representados

underflow negativo

underflow positivo

nmeros representados

overflow positivo

- (2 - 2-23) 2128

- 2-127

2-127

(2 - 2-23) 2128
73

Densidade de nmeros de ponto flutuante


Nmeros representados em ponto flutuante no so igualmente espaados, tal como na notao de ponto fixo Alguns clculos podem produzir resultados que no so exatos e tenham de ser arredondados para a notao mais prxima

74

Ponto flutuante :: Zero


Como o zero representado em ponto flutuante?
0 sinal 00000000 exponente + 0 1 sinal 00000000 exponente - 0
75

0000000000000000000000 frao

0000000000000000000000 frao

Ponto flutuante :: Infinito


Notao especial para representar eventos incomuns:
permite que os programas possam manipul-los sem que sejam interrompidos
0 sinal 11111111 exponente 0000000000000000000000 frao

1 sinal

11111111 exponente

0000000000000000000000 frao

-
76

Ponto flutuante :: NaN Not a Number


uma representao do resultado de operaes invlidas, tais como:
0/0 - / 0 x, x < 0
x sinal 11111111 exponente xxx...xx 0 frao

77

Ponto flutuante :: Nmeros desnormalizados


Servem para lidar com casos de underflow Quando o expoente muito pequeno para ser representado em 8 bits (menor que -127) o nmero deslocado direita at que o expoente seja igual a -127 Representao sem 1 em frente do ponto da frao Nmero = (-1)s 0.f 2-126
x sinal 00000000 exponente xxx...xx 0 frao
78

Ponto flutuante :: Nmeros desnormalizados

79

Ponto flutuante :: Codificao


Precisosimples Exponente 0 0 1254 255 255 Frao 0 Nozero Qualquer coisa 0 Nozero Precisodupla Exponente 0 0 12046 2047 2047 Frao 0 Nozero Qualquer coisa 0 No zero Objeto representado 0 nmero desnormalizado nmeroponto flutuante infinito NaN (Not aNumber)

80

Operaes com ponto flutuante Adio e subtrao:


Ambos operandos precisam ter o mesmo expoente

Diviso e multiplicao:
So mais simples de serem calculadas

81

Operaes com ponto flutuante :: Adio e subtrao

X SX 2

EX

Y SY 2

EY EX

X Y SX 2
2
EX

SY 2
SY 2

EY

EY E X

82

Operaes com ponto flutuante :: Multiplicao

X SX 2 EY Y SY 2

EX

X Y S X 2

EX

S X S Y 2

SY 2

EY

E X EY

83

Operaes com ponto flutuante :: Diviso

X SX 2 EY Y SY 2

EX

X SX 2 S X E X EY 2 EY Y SY 2 SY
EX
84

O que vocs aprenderam hoje? Ponto fixo


Representao Operaes Overflow

Ponto flutuante
Definio Bsicos das operaes

85

Questes
Convertaoseguintenmerodecimalparaonmero binrioempontoflutuante(formatoIEEE754,preciso simples):2,5*212dec Sinal:1 2,5*212dec=1,25*213 dec Exponente:01111111bin +13dec=10000000bin +12dec =10001100 bin Frao:0,25dec =22dec =,01bin
1 bit 1 sinal 8 bits 1000 1100 exponente 23 bits 0100 0000 0000 0000 0000 000 frao
86

Questes
# Suponha que os valores das variveis u, # v, x, e y estejam armazenados em # $s0, $s1, $s2 e $s3

main() { int u, v; unsigned int x, y; if (x < y) { u = u v; } }

sltu $t0, $s2,$s3 beq $t0,$zero,fim sub $s0,$s0,$s1 fim: nop

87

Apndice A

PREFIXOS DO SISTEMA INTERNACIONAL DE MEDIDAS


88

Prefixos do Sistema Internacional de Medidas Sistema Internacional de Medidas: SI


Padroniza unidades de medidas e seus prefixos

Dois grandes grupos de prefixos:


Mltiplos de 10 Submltiplos de 10

89

Prefixos do Sistema Internacional de Medidas


Prefixo kilo mega giga tera peta exa zetta yotta Smbolo k M G T P E Z Y Potncia de 10 103 106 109 1012 1015 1018 1021 1024
90

Prefixos do Sistema Internacional de Medidas


Prefixo mili micro nano pico femto atto zepto yocto Smbolo m n p f a z y Potncia de 10 10-3 10-6 10-9 10-12 10-15 10-18 10-21 10-24
91

Prefixos do Sistema Internacional de Medidas


Costuma-se utilizar os mesmos prefixos das potncias de 10 como aproximao de potncias de 2 A converso feita de seguinte forma:
n 10 3 n 3 10

10 2
n

ou

2 10
n
9 10 3

Exemplo:

5GB 5 10 B 5 2
9

B 5 2 B
30
92

Prefixos do Sistema Internacional de Medidas


Quando representa uma aproximao de 210, o prefixo kilo escrito como Kilo, ou seja, com a inicial maiscula Dessa forma, quando tratamos com potncias de 2, temos:
Prefixos maisculos: mltiplos de 2 Prefixos minsculos: submltiplos de 2

93

Prefixos do Sistema Internacional de Medidas :: Correspondncia entre potncias de 10 e de 2


Prefixo Smbolo Potncia de 10 Potncia de 2

kilo mega giga tera peta exa zetta yotta

K M G T P E Z Y

103 106 109 1012 1015 1018 1021 1024

210 220 230 240 250 260 270 280


94

Prefixos da IEC
Em 1998, a IEC (International Electrotechnical Commission) aprovou novos prefixos especialmente dedicados a potncias de 2 Dessa forma: 5 gigabytes (GB) deveriam significar exatamente 5 109 bytes 5 gibibytes (GiB) deveriam significar exatamente 5 230 bytes

Tal conveno ainda no foi amplamente


adotada no meio cientfico
95

Prefixos da IEC
Prefixo kibi mebi gibi tebi pebi exbi Smbolo Ki Mi Gi Ti Pi Ei
Prefixo de potncia de 10 + bi (binrio)
96

Potncia de 2 210 220 230 240 250 260

Prefixos do Sistema Internacional de Medidas Mais informaes:


Francois Cardarelli. Encyclopaedia of Scientific Units, Weights and Measures. Editora Springer, 2003. Wikipedia

97

Apndice B

OPERAO COM PONTO FLUTUANTE


98

Operaes com ponto flutuante Adio e subtrao:


Ambos operandos precisam ter o mesmo expoente

Diviso e multiplicao:
So mais simples de serem calculadas

99

Operaes com ponto flutuante Podem produzir uma das seguintes condies:
Overflow de expoente Underflow de expoente Underflow de significando Overflow de significando

100

Operaes com ponto flutuante :: Overflow de expoente


O valor do expoente positivo excede o maior valor possvel (128 para preciso simples):
s sinal 11111111 expoente fffffffffffffffffffffff frao

2
s sinal 1 00000000 expoente fffffffffffffffffffffff frao
101

Operaes com ponto flutuante :: Underflow de expoente


O valor do expoente negativo menor que o mnimo possvel (-127 para preciso simples):
s sinal 00000000 expoente fffffffffffffffffffffff frao

2-1
s sinal ????! expoente fffffffffffffffffffffff frao
102

Operaes com ponto flutuante :: Underflow de significando


No processo de alinhamento de significandos, dgitos podem sumir na extremidade direita Ocasiona arredondamento
s exp 11001110001111000011011

exp + 2

00110011100011110000110

11

103

Operaes com ponto flutuante :: Overflow de significando


Adio de dois significandos pode resultar em um carry (vai um) no bit mais significativo Pode ser resolvido com realinhamento
s s s exp exp exp 1

11001110000000000000000 11001110000000000000000 10011100000000000000000

exp - 1

11001110000000000000000
104

Operaes com ponto flutuante :: Adio e subtrao

X SX 2

EX

Y SY 2

EY EX

X Y SX 2
2
EX

SY 2
SY 2

EY

EY E X

105

Operaes com ponto flutuante :: Adio e subtrao Quatro passos:


1. 2. 3. 4. Verificao de parcela zero Alinhamento de significandos Adio Normalizao do resultado

106

Operaes com ponto flutuante :: Adio e subtrao Verificao de parcela zero.


Se a operao for subtrao, troca-se o sinal do subtraendo Se um dos dois operandos for zero, o outro retornado como resultado

107

Operaes com ponto flutuante :: Adio e subtrao Alinhamento de significandos.


Manipular operandos de forma a igualar seus expoentes O menor nmero deslocado:
Frao deslocada um bit para direita Soma-se um ao valor do expoente

Processo repete-se at que:


Expoentes se igualem Significando chegue a zero
108

Operaes com ponto flutuante :: Adio e subtrao Adio.


Executa-se adio, observando-se a diferena de sinais Pode ocorrer overflow no significando Nesse caso, o significando deve ser deslocado direita e o expoente incrementado em um Se houver overflow do expoente, este erro deve ser retornado
109

Operaes com ponto flutuante :: Adio e subtrao Normalizao do resultado.


Consiste no deslocamento esquerda dos dgitos da frao, de forma que o bit mais significativo seja diferente de zero Cada deslocamento implica em um decremento do expoente, o que pode ocasionar um underflow Resultado deve ser arredondado antes de ser retornado

110

Operaes com ponto flutuante :: Adio e subtrao :: Resumo

Z=XY
111

Operaes com ponto flutuante :: Adio e subtrao no hardware


Muitos computadores dedicam o hardware para executar operaes de ponto flutuante em menos tempo. Um exemplo de implementao de adio de ponto flutuante em hardware mostrado a seguir:

112

Operaes com ponto flutuante :: Adio e subtrao no hardware


1. Expoente de um operando subtrado do outro usando a ALU pequena 2. Essa diferena controla trs MUX:
seletor de maior expoente significando do nmero menor significando do nmero maior

3. Significando do menor nmero deslocado para direita


113

Operaes com ponto flutuante :: Adio e subtrao no hardware


4. Significandos so somados na ALU grande 5. Normalizao:
soma deslocada para direita ou esquerda expoente incrementado ou decrementado

6. Arredondamento

114

115

Operaes com ponto flutuante :: Multiplicao

X SX 2 EY Y SY 2

EX

X Y S X 2

EX

S X S Y 2

SY 2

EY

E X EY

116

Operaes com ponto flutuante :: Multiplicao


Verificao de zero.
Caso um dos operando seja zero, o resultado zero.

Adio dos expoentes.


Como os expoentes esto na notao de excesso de N, a soma resulta em excesso de 2N. Portanto, o bias N deve ser subtrado. Se houver overflow ou underflow de expoente, a operao termina.

117

Operaes com ponto flutuante :: Multiplicao


Multiplicao dos operandos.
Realizada da mesma forma que para inteiros. Teremos o dobro de bits representando a frao. Os bits extras devero ser arredondados.

Normalizao do resultado.
Realizada da mesma forma que na adio. Pode resultar em underflow ou overflow.

Arredondamento.
118

Operaes com ponto flutuante :: Multiplicao :: Resumo

Z=XY
119

Operaes com ponto flutuante :: Diviso

X SX 2 EY Y SY 2

EX

X SX 2 S X E X EY 2 EY Y SY 2 SY
EX
120

Operaes com ponto flutuante :: Diviso


Verificao de zero.
Se o dividendo for zero, o resultado zero. Se o divisor for zero, reportado erro ou o resultado definido como infinito.

Subtrao dos expoentes.


Como os expoentes esto na notao de excesso de N, a subtrao elimina o excesso de N. Portanto, o bias N deve ser adicionado de volta. Se houver overflow ou underflow de expoente, a operao termina.
121

Operaes com ponto flutuante :: Diviso Diviso dos operandos.


Realizada da mesma forma que para inteiros.

Normalizao do resultado.
Realizada da mesma forma que na adio. Pode resultar em underflow ou overflow.

Arredondamento.
122

Operaes com ponto flutuante :: Diviso :: Resumo

Z=XY
123

Operaes com ponto flutuante :: Bits de guarda


O comprimento do operando da parte fracionria na ALU geralmente maior que o especificado no padro IEEE 754. Os bits a mais so conhecidos como bits de guarda, e so colocados direita da frao. Sua funo evitar perda de preciso.

124

Operaes com ponto flutuante :: Bits de guarda


Sejam dois nmeros de valores muito prximos: X = 1.000.....00 21 Y = 1.111.....11 20 Subtrao sem uso de bits de guarda: X = 1.000.....00 - Y = 0.111.....111 Z = 0.000.....01 = 1.000.....00 21 21 21 2-22
125

Operaes com ponto flutuante :: Bits de guarda


Subtrao com uso de bits de guarda: X = 1.000.....00 0000 - Y = 0.111.....11 1000 Z = 0.000.....00 1000 = 1.000.....00 0000 21 21 21 2-23

126

Operaes com ponto flutuante :: Arredondamento


Se os bits extras so maiores que 10...00, somase 1 ao ltimo bit representativo (arredonda-se para cima) Se os bits extras so menores que 10...00, mantm-se o ltimo bit representativo (arredonda-se para baixo) Se os bits extras so iguais a 10...00:
Arredonda-se para cima, se o ltimo bit = 1 Arredonda-se para baixo, se o ltimo bit = 0
127

Operaes com ponto flutuante no MIPS


O MIPS possui um co-processador especial para manipular operaes de ponto flutuante Esse co-processador possui outros 32 registradores de 32 bits para armazenar nmeros de ponto flutuante (f0-f31) Possui operaes aritmticas e de load/store especiais
128

Operaes com ponto flutuante no MIPS


Cada registrador armazena um ponto flutuante de preciso simples Cada par de registradores par/mpar armazena um ponto flutuante de preciso dupla

129

Operaes com ponto flutuante no MIPS


f0 f1 f2 f3 f4 ... f28 f29 f30 f31 preciso dupla
130

preciso simples

preciso dupla

preciso simples

Operaes com ponto flutuante no MIPS


Preciso simples:
add.s sub.s mul.s div.s

Preciso dupla:
add.d sub.d mul.d div.d
131

Operaes com ponto flutuante no MIPS


Instrues de transferncia de dados: Carrega ponto flutuante de preciso dupla (double) no registrador fdest:
l.d fdest, address

Move o ponto flutuante de preciso simples do registrador fs para o registrador fd


mov.s fd, fs
132

Operaes com ponto flutuante no MIPS :: Diretivas


Duas novas diretivas:
.float .double 1.0, 1.234, 1.9876543, 5.0

Mesmo para nmeros exatos, o ponto e zero so necessrios

133

Operaes com ponto flutuante no MIPS :: Diretivas


H possibilidade de uso da diretiva .word, mas os nmeros informados devero estar na notao IEEE 754:
.word 0x41400000, 0x41500000,

.float

12.0, 13.0,

134

Operaes com ponto flutuante no MIPS :: Exemplo


Operaes com matrizes quadradas de 32 32 Endereos base armazenados em $a0, $a1 e $a2 Contadores esto em $s0, $s1, $s2
void mm (double x[][], double y[][], double z[][]) { int i, j, k; for (i=0; i!=32; i=i+1) for (j=0; j!=32; j=j+1) for (k=0; k!=32; k=k+1) x[i][j] = x[i][j] + y[i][k] * z[k][j]; }
135

Operaes com ponto flutuante no MIPS :: Exemplo


Inicializar as variveis do loop mm: ... li $t1, 32 # $t1 li $s0, 0 # i = L1: li $s1, 0 # j = L2: li $s2, 0 # k =

= 32 0; reseta 1o. loop 0; reseta 2o. loop 0; reseta 3o. loop

Para buscar x[i][j], pule i linhas (i*32) e some j sll $t2, $s0, 5 # $t2 = i * 25 addu $t2, $t2, $s1 # $t2 = i * 25 + j Obter endereo em bytes (double ocupa 8 bytes) e carregar x[i][j] sll $t2, $t2, 3 # multiplica por 8 addu $t2, $a0, $t2 # somar ao end. base l.d $f4, 0($t2) # $f4 = x[i][j]
136

Operaes com ponto flutuante no MIPS :: Exemplo


Mesmo que antes, mas carregar z[k][j] em $f16 L3: sll $t0, $s2, 5 # $t0 = k * 25 addu $t0, $t0, $s1 # $t0 = k * 25 + j sll $t0, $t0, 3 # multiplica por 8 addu $t0, $a2, $t0 # somar ao end. base l.d $f16, 0($t0) # $f16 = z[k][j] Mesmo que antes, mas carregar y[i][k] em $f18 sll $t0, $s0, 5 # $t0 = i * 25 addu $t0, $t0, $s2 # $t0 = i * 25 + k sll $t0, $t0, 3 # multiplica por 8 addu $t0, $a1, $t0 # somar ao end. base l.d $f18, 0 ($t0) # $f18 = y[i][k] Resumo: $f4: x[i][j], $f16: z[k][j], $f18: y[i][k]
137

Operaes com ponto flutuante no MIPS :: Exemplo


Somar y*z em x mul.d $f16, $f18, $f16 # y[][]*z[][] add.d $f4, $f4, $f16 # x[][]+ y*z Incrementar k; se chegar ao fim do loop interno, guardar x addiu $s2, $s2, 1 # k = k + 1 bne $s2, $t1, L3 # if(k!=32) goto L3 s.d $f4, 0($t2) # x[i][j] = $f4 Incrementar j; produto de uma linha de x por uma coluna de y addiu $s1, $s1, 1 # j = j + 1 bne $s1, $t1, L2 # if(j!=32) goto L2 Incrementar i; se chegar ao fim do loop externo, retornar addiu $s0, $s0, 1 # i = i + 1 bne $s0, $t1, L1 # if(i!=32) goto L1 jr $ra
138

Você também pode gostar