Buongiorno a tutti,
ho provato a creare questo programma per la conversione da binario a decimale, ma all'esecuzione mi compare "Floating point exception" :
Programma in C:
codice:
#include <stdio.h>
int main(void)
{
int n, n2; /* n2, numero binario */
int cifra;
int n10 = 0; /* valore in base 10 */
int peso = 1; /* peso della cifra */
printf("Inserire il numero in base 2: ");
scanf("%u", &n);
n2 = n;
while (n2 > 0)
{
cifra = n2 % 10; /* LSB, cifra a destra */
/* controllo che la cifra appartenga alla base */
if (cifra > 1)
printf("Numero non in base 2!\n");
n10 = n10 + cifra * peso;
peso = peso * 2;
/* scarta la cifra piu` a destra */
n2 = n2 / 10;
}
printf("(%u)_2 = (%u)_10\n", n, n10);
return 0;
}
Funzione "converti" in asm che esegue il ciclo while:
codice:
.data
errore: .string "Numero non in base 2!\n"
out: .string "Il valore richiesto è (%d)_10\n"
n2: .int 0
cifra: .int 0
n10: .int 0
peso: .int 1
.text
.globl converti
converti:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %ebx
movl %ebx, (n2)
inizio:
xorl %ebx, %ebx
movl (n2), %eax
movl $10, %ebx
divl %ebx
movl %edx, (cifra)
cmpl $1, (cifra)
jg err
xorl %eax, %eax
movl (peso), %eax
mull (cifra)
addl %eax, (n10)
xorl %eax, %eax
movl $2, %eax
mull (peso)
addl %eax, (peso)
xorl %eax, %eax
movl (n2), %eax
movl $10, %ebx
divl %ebx
addl %eax, (n2)
xorl %eax, %eax
cmpl (n2), %eax
jl inizio
jg risultato
err:
pushl $errore
call printf
addl $4, %esp
jmp fine
risultato:
pushl (n10)
pushl $out
call printf
addl $8, %esp
popl %ebp
ret
fine:
popl %ebp
ret
vi ringrazio per l'aiuto