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