2010-11-29 10 views
0

Je dois obtenir la moyenne. En C++ puisque je ne le passe pas la longueur du tableau je ne sais pas comment le diviser par ça.Calcul de la valeur flottante moyenne dans l'assemblage

Voilà comment je passe mes valeurs en C++

extern "C" double Average (long [6]); 

     _Average proc 


     finit 
     mov ecx, 6 ; number of elements 
     mov ebx, [esp + 4] ; address of the array 
     fldz 

    L1: 
     fld REAL4 PTR [ebx] ; get elements of array 
     fadd 
     add ebx, 4 

     loop L1 
     fdiv DWORD PTR [esp + 4] 

     fwait 

     ret 

     _Average endp 

Répondre

1

Passez ensuite la longueur. Ou, puisqu'il s'agit d'un tableau de longueur fixe 6, supposons qu'il est 6.

+0

je peux apporter des modifications du code C++ – justbrianr

+0

je voulais dire ne peut pas – justbrianr

+1

autre qu'une déclaration, il n'y a pas de code C++ partout. Que voulez-vous dire exactement? –

0

Vous savez déjà qu'il s'agit de six éléments de longueur, puisque vous utilisez cela comme nombre de boucles (en ecx) et il est spécifié dans Le Prototype. La seule alternative est de passer un autre paramètre avec la longueur (comme vous le feriez en C++ pur).

Vous devez également utiliser fild au lieu de fld pour charger un long, car il est pas une variable à virgule flottante, ainsi que le changement REAL4 PTR-DWORD PTR. Vous pouvez également remplacer long par float. (Une autre alternative est en train de changer long-double, bien que cela change la taille du type de données qui nécessitera plus de modifications.)

+0

puisque c'est une question de devoirs Je ne suis pas censé faire de changements en C++ – justbrianr

+0

Zooba J'ai fait les changements que vous recommandez, mais je ne reçois toujours pas la bonne moyenne. J'ai changé fld en fild, changé REAL4 en DWORD. pouvez-vous me montrer comment devrait ressembler mon fdiv. J'ai une autre question, faut-il encore utiliser fldz si j'utilise fdiv au lieu de fidiv. – justbrianr

+0

ok tout cela fonctionne maintenant, ouf! – justbrianr