Transbordamento

Transbordamento

por Eduardo Hiramoto -
Número de respostas: 2

É possível eu estar tendo um problema de transbordamento no meu algoritmo:

- ele usa div e mul, sempre com operadores do tipo EAX, EBX...

Quando o numero tem valores pequenos ele faz corretamente a soma dos digitos elevado

pelo número de dígitos.

Porém, dependendo do tamanho do número o resultado dá errado. Me parece que sempre

que tenho uma potência que dá mais de 8 ou 9 bits em representação binária ele dá erro.

Alguns resultados:

entrada : saida

153 =153 (ok)

2000 = 16

116 = 218 (ok)

117 = 89

 

 

 

 

Em resposta à Eduardo Hiramoto

Re: Transbordamento

por Kelly Rosa Braghetto -

Oi, Eduardo.

Se você está trabalhando sempre com o registradores de 32 bits (EAX, EBX,...), não era para haver transbordamento nos exemplos que você mencionou (que são números pequenos).

O problema deve ser outro... você conferiu se está considerando a influência do EDX nas divisões envolvendo divisores de 32 bits (como descrito no post do Renato, aqui neste fórum mesmo)?

Se o problema também não for esse, por favor, me envie um e-mail com mais detalhes sobre o seu código. Aí poderei tentar ajudá-lo de forma mais efetiva.

 

Kelly

Em resposta à Eduardo Hiramoto

Re: Transbordamento

por Eduardo Hiramoto -

Segue resposta da professora, para quem tiver o mesmo problema:

Embora o código de saída passado para a chamada ao sistema sys_exit é um número inteiro de 4 bytes (na arquitetura de 32 bits), o terminal considera que os códigos de saída da execução de programas são números entre 0 e 255 (ou seja, de apenas 1 byte).
Quando você testa o seu programa para o número 117, o valor que ele retorna é 345. Mas o "echo $?"  mostra 89 pelo seguinte motivo:
-  345 em binário de 4 bytes é o número: 00000000 00000000 00000001 01011001 .
Como o exit status no terminal é um byte só, então o echo mostra o byte menos significativo de 345, ou seja: 01011001 .  Esse número binário corresponde a 89 em decimal.