Усреднение плавающего значения в сборке - PullRequest
0 голосов
/ 29 ноября 2010

Я должен получить среднее. В 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 ]

1 голос
/ 29 ноября 2010

Затем передайте длину. Или, поскольку это массив фиксированного размера длиной 6, предположим, что он равен 6.

0 голосов
/ 30 ноября 2010

Вы уже знаете, что это шесть элементов длиной, так как вы используете это в качестве счетчика циклов (в ecx), и это указано в прототипе.Единственная альтернатива - передать другой параметр с длиной (как в любом случае вы должны сделать в чистом C ++).

Вам также нужно использовать fild вместо fld для загрузки longпоскольку это не переменная с плавающей запятой, а также изменение REAL4 PTR на DWORD PTR.Или измените long на float.(Другой альтернативой является изменение long на double, хотя это приводит к изменению размера типа данных, что потребует дополнительных изменений.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...