Introdução à Computação

 

Exercício-Programa 1 - 2a. parte:

Soma em ponto flutuante no HIPO-II

O problema a ser solucionado é, dados dois numeros em notação científica, achar o resultado da soma 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

+3190

LER mant1

01

+3191

LER exp1

02

+3192

LER mant2

03

+3193

LER exp2

04

+1191

CEA exp1

05

+2293

SUB exp2

06

+1294

CAE dif

07

+5445

DNE inverte

08

+1194

inverteu:

CEA dif

09

+2298

SUB quatro

10

+5370

DPZ imp

11

+1194

loop1:

CEA dif

12

+5519

DNZ exp_OK

13

+2196

SOM menos_um

14

+1294

CAE dif

15

+1192

CEA m2

16

+6200

ADD

17

+1292

CAE mant2

18

+5111

DES loop1

19

+1190

exp_OK:

CEA mant1

20

+2192

SOM mant2

21

+1295

CAE aux

22

+6200

ADD

23

+1290

CAE mant1

24

+6200

ADD

25

+6200

ADD

26

+6200

ADD

27

+5273

DPO corrige

28

+5473

DNE corrige

29

+1195

CEA aux

30

+1290

CAE mant1

31

+5460

loop2:

DNE loop_N

32

+5163

DES loop_P

33

+5000

loop3

: NOP

34

+1191

CEA exp1

35

+2196

SOM menos_um

36

+1291

CAE exp1

37

+1190

CEA mant1

38

+6100

ADE

39

+1290

CAE mant1

40

+5131

DES loop2

45

+2396

inverte:

MUL menos_um

46

+1294

CAE dif

47

+1190

CEA mant1

48

+1295

CAE aux

49

+1192

CEA mant2

50

+1290

CAE mant1

51

+1195

CEA aux

52

+1292

CAE mant2

53

+1191

CEA exp1

54

+1295

CAE aux

55

+1193

CEA exp2

56

+1291

CAE exp1

57

+1195

CEA aux

58

+1293

CAE exp2

59

+5108

DES inverteu

60

+2197

SOM mil

61

+5570

DNZ imp

62

+5133

DES loop2

63

+2297

SUB mil

64

+5370

DPZ imp

65

+5133

DES loop2

70

+4190

imp:

IMP mant1

71

+4191

IMP exp1

72

+7000

PAR

73

+1191

corige:

CEA exp1

74

+2296

SUB menos_um

75

+1291

CAE exp1

76

+5170

DES imp

90

-

mant1:

91

-

exp1:

92

-

mant2:

93

-

exp2:

94

-

dif:

95

-

aux:

96

-0001

menos_um:

97

+1000

mil:

98

+0004

quatro:

 

Consideremos dois números cuja soma queremos saber, 5.875x1054 e 1.234x1056 por exemplo. Para realizarmos a soma desses dois numeros, devemos transformá-los de forma que ambos estejam com o mesmo expoente na base de dez (isso equivale a dizer que vírgula está debaixo de vírgula). No HIPO-II essa alteração seria dada da seguinte forma:

 

mantissa do menor numero

expoente

0000 5876

0054

0000 0587

0055

0000 0058

0056

 

Agora que os expoentes se igualaram, basta somar-mos o conteúdo do acumulador com a mantissa do maior número:

0000 0058 + 0000 1234 = 0000 1292

A mantissa da resposta é o número que está no acumulador, sendo que o expoente final é aquele do maior número

Note que se a diferença entre os expoentes dos dois números for maior ou igual a 4, a resposta será o maior número, uma vez que o outro número é muito pequeno para ser somado ao maior.

Outra observação importante é que em certos casos o resultado da soma terá 5 dígitos significativos. Nesses casos, basta deslocar os dígitos do acumulador uma posição à direita, pegar os 4 digitos menos significativos do acumulador (que será a solucao procurada) e somar 1 ao expoente do maior número (que será o expoente da resposta).