在装配中平均浮动值

时间:2010-11-29 20:47:40

标签: assembly

我必须得到平均值。在C ++中,因为我没有传递数组的长度 我不知道如何除以它。

以下是我在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

2 个答案:

答案 0 :(得分:1)

然后传递长度。或者,因为它是一个长度为6的固定大小的数组,所以假设它是6。

答案 1 :(得分:0)

你已经知道它长了六个元素,因为你将它用作循环计数(在ecx中)并且它在原型中指定。唯一的选择是传递另一个带有长度的参数(正如你在纯C ++中必须做的那样)。

您还需要使用fild代替fld来加载long,因为它不是浮点变量,而是将REAL4 PTR更改为{{ 1}}。或者,将DWORD PTR更改为long。 (另一种方法是将float更改为long,但这会更改数据类型的大小,这需要进行更多修改。)