Ho modificato la funzione asm, ora non mi dà più quell'errore però nel confronto tra il valore 1 che si trova in %ecx e (cifra) mi riconosce quest'ultima sempre maggiore di 1 saltando così all'etichetta "err"...help me...

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)
      movl $10, %ebx
      movl $1, %ecx
  
  inizio:
      xorl %edx, %edx
      addl (n2), %eax
      divl %ebx
      movl %edx, (cifra)
      
      cmpl %ecx, (cifra)
      jg err

      xorl %eax, %eax
      movl (cifra), %eax
      mull (peso)
      addl %eax, (n10)
      
      xorl %eax, %eax
      movl $2, %eax
      mull (peso)
      addl %eax, (peso)
      
      xorl %eax, %eax
      movl (n2), %eax
      divl %ebx
      movl %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