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