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:
Funzione "converti" in asm che esegue il ciclo while: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; }
vi ringrazio per l'aiutocodice:.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![]()

Rispondi quotando