07/06/10 8:29
il-david
Buongiorno a tutti voi,
ho elaborato una funzione asm, per un progetto universitario, che prendendo in input i tre coefficienti a,b,c dell'equazione di secondo grado colcolando poi le radici. La funzione è esterna ad un main.c che non posto ma che chiede solo di inserire i tre coefficienti.
Una volta calcolato il discriminante però esso risulta sempre minore di 0 e quindi si sposta sull'etichetta "noreali". La parte del discriminante maggiore di 0 la devo ancora elaborare. Vi ringrazio anticipatemente per l'aiuto.
ho elaborato una funzione asm, per un progetto universitario, che prendendo in input i tre coefficienti a,b,c dell'equazione di secondo grado colcolando poi le radici. La funzione è esterna ad un main.c che non posto ma che chiede solo di inserire i tre coefficienti.
Una volta calcolato il discriminante però esso risulta sempre minore di 0 e quindi si sposta sull'etichetta "noreali". La parte del discriminante maggiore di 0 la devo ancora elaborare. Vi ringrazio anticipatemente per l'aiuto.
/*----g2eqsolutions.s----*/ .bss x1: .float 0 x2: .float 0 .data psoluzione: .string "\nIl valore della x1 è : %.2f" ssoluzione: .string "\nIl valore della x2 è : %.2f" csoluzioni: .string "\nLe soluzioni sono : +/- %.2f" nsoluzione: .string "\nNessun valore di x" d: .float 0 # discriminante h: .float 0 i: .int 0 .text .globl g2eqsolutions g2eqsolutions: pushl %ebp movl %esp, %ebp movl 12(%ebp), %ebx # coefficiente b in ebx xorl %eax, %eax addl %ebx, %ebx movl , %ecx ciclo: # calcolo quadrato di b addl %ecx, %eax addl , %ecx cmpl %ecx, %ebx jg ciclo movl %eax, (d) # b*b in d xorl %ebx, %ebx movl 8(%ebp), %ebx # coefficiente a in ebx movl 16(%ebp), %edx # coefficiente c in edx movl %ebx, %eax mull %edx movl , %ebx mull %ebx # calcolo 4*a*c subl %eax, (d) # d=(b*b)-4*a*c cmpl Buongiorno a tutti voi,
ho elaborato una funzione asm, per un progetto universitario, che prendendo in input i tre coefficienti a,b,c dell'equazione di secondo grado colcolando poi le radici. La funzione è esterna ad un main.c che non posto ma che chiede solo di inserire i tre coefficienti.
Una volta calcolato il discriminante però esso risulta sempre minore di 0 e quindi si sposta sull'etichetta "noreali". La parte del discriminante maggiore di 0 la devo ancora elaborare. Vi ringrazio anticipatemente per l'aiuto.
/*----g2eqsolutions.s----*/ .bss x1: .float 0 x2: .float 0 .data psoluzione: .string "\nIl valore della x1 è : %.2f" ssoluzione: .string "\nIl valore della x2 è : %.2f" csoluzioni: .string "\nLe soluzioni sono : +/- %.2f" nsoluzione: .string "\nNessun valore di x" d: .float 0 # discriminante h: .float 0 i: .int 0 .text .globl g2eqsolutions g2eqsolutions: pushl %ebp movl %esp, %ebp movl 12(%ebp), %ebx # coefficiente b in ebx xorl %eax, %eax addl %ebx, %ebx movl , %ecx ciclo: # calcolo quadrato di b addl %ecx, %eax addl , %ecx cmpl %ecx, %ebx jg ciclo movl %eax, (d) # b*b in d xorl %ebx, %ebx movl 8(%ebp), %ebx # coefficiente a in ebx movl 16(%ebp), %edx # coefficiente c in edx movl %ebx, %eax mull %edx movl , %ebx mull %ebx # calcolo 4*a*c subl %eax, (d) # d=(b*b)-4*a*c cmpl {parsed_message}, (d) je realicoincidenti # d=0 radici reali e coincidenti jl noreali # d<0 nessuna radice reale noreali: pushl $nsoluzione call printf addl , %esp popl %ebp ret realicoincidenti: xorl %eax, %eax movl 8(%ebp), %eax xorl %ebx, %ebx movl , %ebx mull %ebx xorl %ebx, %ebx movl %eax, %ebx movl 12(%ebp), %eax divl %ebx # calcolo b/(2*a) movl %eax, (x1) pushl (x1) pushl $csoluzioni call printf addl , %esp popl %ebp ret, (d) je realicoincidenti # d=0 radici reali e coincidenti jl noreali # d<0 nessuna radice reale noreali: pushl $nsoluzione call printf addl , %esp popl %ebp ret realicoincidenti: xorl %eax, %eax movl 8(%ebp), %eax xorl %ebx, %ebx movl , %ebx mull %ebx xorl %ebx, %ebx movl %eax, %ebx movl 12(%ebp), %eax divl %ebx # calcolo b/(2*a) movl %eax, (x1) pushl (x1) pushl $csoluzioni call printf addl , %esp popl %ebp ret
aaa