2010-11-29 9 views
0

Ich muss durchschnittlich bekommen. In C++, da ich es nicht die Länge des Arrays übergeben Ich weiß nicht, wie man es dadurch teilen.Durchschnittliche Gleitzahl in Assembly

Hier ist, wie ich meine Werte in C++ bin vorbei

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 

Antwort

1

Dann die Länge passieren. Oder, da es ein Array fester Größe von Länge 6 ist, nehmen Sie einfach an, es ist 6.

+0

ich alle Änderungen an C++ Code machen – justbrianr

+0

kann ich sagen wollte nicht – justbrianr

+1

Anders als eine Erklärung, Es gibt keinen C++ Code irgendwo. Was genau meinst du? –

0

Sie wissen bereits, dass es sechs Elemente lang ist, da Sie das als Ihre Schleifenanzahl verwenden (in ecx) und in angegeben ist der Prototyp. Die einzige Alternative besteht darin, einen anderen Parameter mit der Länge zu übergeben (wie Sie es ohnehin in reinem C++ tun müssten).

Sie müssen auch fild statt fld verwenden, um ein long zu laden, da es nicht ein Gleitkomma-Variable ist, sowie REAL4 PTR-DWORD PTR ändern. Alternativ ändern Sie long zu float. (Eine weitere Alternative ist im Wandel long-double, obwohl dies die Größe des Datentypen ändert, die mehr Änderungen erfordern.)

+0

da es eine Hausaufgabenfrage ist, sollte ich keine Änderungen in C++ machen – justbrianr

+0

Zooba Ich habe die Änderungen, die Sie empfehlen, aber ich bin immer noch nicht im richtigen Durchschnitt. Ich änderte fld zu fild, änderte REAL4 zu DWORD. kannst du mir zeigen wie mein fdiv aussehen soll. Ich habe eine andere Frage, sollte Fldz immer noch verwendet werden, wenn ich fdiv anstelle von fidiv benutze. – justbrianr

+0

Ok, alles funktioniert jetzt, Puh! – justbrianr

Verwandte Themen