скалярное произведение двух массивов, реализуя функцию:
int conv(int *a, int *b, int len);
такой код:
push ebp
mov ebp, esp ; Стандартный пролог
push esi ; Сохраняем esi
push edi ; Сохраняемedi
mov edi, dword[ebp+8] ; Извлекаем со стека первый параметр a
mov esi, dword[ebp+12] ;Извлекаем со стека второй параметр b
mov ecx, dword[ebp+16] ;Извлекаем со стека третий параметр len
mov eax, 0 ; В eax будем накапливать скалярное произведение
.l:
mov edx, dword [edi+4*ecx-4]
imul edx, dword [esi+4*ecx-4]
add eax, edx
loop .l
pop edi; Восстанавливаем сохраненный регистр edi
pop esi; Восстанавливаем сохраненный регистр esi
mov esp, ebp; Стандартный эпилог
pop ebp
ret
т.е здесь как я понял умножаются два массива поячеечно, и затем к произведению каждых двух ячеек просто прибавляется значение одной из ячеек в данном случае ячейки "a" Результат накапливается в eax.
Как я вычитал в интернете Скалярное произведение векторов это произведение векторов на косинус угла между ними а тут просто прибавление какое-то зачем тогда этот пример назвали так?
Читай
О, Спасибо!
Это очень интересно, но меня пока просто интересовало понятие "скалярное" т.е чем обычное произведение отличается от скалярного?
Скалярное -- значит может быть выражено как число.
Обсуждают сегодня