1

2 つの異なる float 配列の平均を取得する方法について、現在本当に混乱しています。これまでのところ、1 つの配列を行う方法は理解していますが、2 番目の配列については手がかりがありません。なぜかとても単純だと思ったのですが、2 番目の配列はもう少し複雑です。

cpp は次のとおりです。

#include <iostream>

using namespace std;

extern "C" double Average (int, double []);

void main ()
{
    double Array1 [10] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.0};
    double Array2 [11] = {-1.1, -2.2, -3.3, -4.4, -5.5, -6.6, -7.7, -8.8, -9.9, -10.0, -11.0};

    cout << "Average of Array1 is " << Average (10, Array1) << endl;
    cout << "Average of Array2 is " << Average (11, Array2) << endl;
}

私のコード:

 .386

 .model flat

  public    _Average

 .data

 .code

 _Average proc

    finit

    mov ecx, [esp + 4]      ; get the number of elements
    mov ebx, [esp + 8]      ; get the address of the array

    fld     REAL8 PTR [ebx]
    fadd    REAL8 PTR [ebx + 8]
    fadd    REAL8 PTR [ebx + 16]
    fadd    REAL8 PTR [ebx + 24]
    fadd    REAL8 PTR [ebx + 32]
    fadd    REAL8 PTR [ebx + 40]
    fadd    REAL8 PTR [ebx + 48]
    fadd    REAL8 PTR [ebx + 56]
    fadd    REAL8 PTR [ebx + 64]
    fadd    REAL8 PTR [ebx + 72]

    fdiv    REAL8 PTR [ebx + 72]
    ret
    _Average endp

    end
4

1 に答える 1

0

これはうまくいくはずです:

_Average proc
  finit
  mov ecx, [esp + 4]      ; get the number of elements
  mov ebx, [esp + 8]      ; get the address of the array
  fldz
  jecxz   noelems
nextelem:
  fadd    REAL8 PTR [ebx]
  add     ebx, 8
  loop    nextelem
  fidiv   [esp + 4]
noelems:
  ret
_Average endp
于 2013-11-08T11:01:29.423 に答える