Introdução à Computação

 

Exercício-Programa 1:

Multiplicação em ponto flutuante no HIPO-II

O problema a ser solucionado é, dados dois números em notação científica, achar o resultado da multiplicação desses dois números e mostrar o mesmo em notação científica. No HIPO-II estaremos representando um numero em notação científica através de dois números que podem variar de 0000 a 9999, sendo o primeiro a mantissa (onde o primeiro dígito necessariamente é diferente de zero) e o segundo o expoente. Exemplo: 3,456. 10789 é representado no HIPO-II pelos números 3456 e 0789.

Uma possível solução para o problema (clique aqui para fazer o download do arquivo no formato .bin):

Endereço

Linguagem de máquina

Linguagem simbólica (de montagem)

00

+3150

LER mantissa_1

01

+3151

LER expoente_1

02

+3152

LER mantissa_2

03

+3153

LER expoente_2

04

+1150

CEA mantissa_1

05

+2352

MUL mantissa_2

06

+1256

CAE menos_sig

07

+6200

ADD

08

+6200

ADD

09

+6200

ADD

10

+6200

ADD

11

+1255

CAE mais_sig

12

+2260

SUB 999

13

+5235

DPO corrige

14

+1156

CEA menos_sig

15

+6200

ADD

16

+6200

ADD

17

+6200

ADD

18

+1256

CAE menos_sig

19

+1155

CEA mais_sig

20

+6100

ADE

21

+2156

SOM menos_sig

22

+1255

CAE mais_sig

23

+1151

CEA expoente_1

24

+2153

SOM expoente_2

25

+1257

CAE exp_final

26

+5130

DES fim

30

+4155

fim: IMP mais_sig

31

+4157

IMP exp_final

32

+7000

PAR

35

+1151

corr: CEA expoente_1

36

+2153

SOM expoente_2

37

+2161

SOM um

38

+1257

CAE exp_final

39

+5130

DES fim

50

-

mantissa_1:

51

-

expoente_1:

52

-

mantissa_2:

53

-

expoente_2:

55

-

mais_sig:

56

-

menos_sig:

57

-

exp_final:

60

+0999

999:

61

+0001

um:

Levando em conta apenas a mantisa dos números a serem multiplicados, temos que o menor resultado possível resultda da multiplicação 0000 1000 x 0000 1000 = 0100 0000 e o maior resultado possível resulta de 0000 9999 x 0000 9999 = 9999 9999. Observe que no segundo caso os quatro digitos mais significativos já são a mantissa do resultado.

Para sabermos se determinada multiplicação cai no segundo caso, o que é feito é subtrair-se 0999 dos dígitos mais significativos do resultado. Se essa subtração for estritamente positiva, os quatro digitos em questão já são a mantissa do resultado. Caso essa subtração não seja positiva, os quatro dígitos mais significativos do acumulador não estão em notação científica (pois nesse caso o primeiro dígito é nulo). Para fazermos a correção, isolamos o primeiro dígito (mais significativo) dos dígitos menos significativos, deslocamos os dígitos mais significativos uma posição para a esquerda e então somamos os dois números, o que resultará na procurada mantissa do resultado.

Com relação aos expoentes, basta repetirmos a análise já feita, desta vez considerando que a 'vírgula esteja nas mantissas':

1,000x10A x 1,000x10B = 01,00 0000x10A+B e
9,999x10C x 9,999x10D = 99,99 9999x10C+D

No segundo caso, apesar dos quatro dígitos mais significativos já serem a mantissa, a vírgula está após o segundo dígito, o que é corrigido somando-se uma unidade ao expoente da potênica de dez do resultado:

99,99 9999x10C+D Þ 9,999 9999x10C+D+1