2013-11-08 4 views
1

На самом деле на самом деле путают прямо сейчас, как получить среднее значение из двух разных массивов с плавающей запятой. Пока я понимаю, как сделать один массив, но для второго массива у меня нет подсказки. По какой-то причине я думал, что это довольно просто, но второй массив немного сложнее.Среднее число плавающих чисел Сборка

Вот каст:

#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 
+2

Вы должны использовать ECX в качестве счетчика цикла и выполнить FADD внутри цикла , Вам также необходимо разделить количество элементов и убедиться, что оно не равно нулю. –

+1

Почему бы не реализовать Среднее значение в C++ во-первых, получить сборку с помощью '-S' -устройства g ++, а затем изменить его по своему усмотрению? –

ответ

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 
Смежные вопросы