Как умножить две матрицы размера при использовании встроенной сборки в C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как умножить две матрицы размера при использовании встроенной сборки в C++

Сообщение Anonymous »


I wrote this code in C++ with inline assembly _asm for square matrix multiplication.

#include using namespace std; int main() {     int n = 2;     int A[2][2] = { {1, 2}, {3, 4} };     int B[2][2] = { {5, 6}, {7, 8} };     int C[2][2] = { {0, 0}, {0, 0} };     _asm {         mov ecx, n         lea esi, A         lea edi, B         lea edx, C         outer_loop :             push ecx             mov ecx, n             inner_loop :                 push ecx                 mov eax, [esi] ; load A[k]                 mov ebx, [edi] ; load B[k][j]                 imul eax, ebx ; compute A[k] * B[k][j]                 add [edx], eax ; accumulate result in C[j]                 add esi, 4 ; increment A pointer                 add edi, 4 ; increment B pointer                 add edx, 4 ; increment C pointer                 pop ecx                 loop inner_loop ; repeat for all k             add esi, 400 ; jump to next row of A             sub esi, ecx ; adjust A pointer             mov eax, ecx             imul eax, 4             sub eax, n             imul eax, 4             lea edi, [edi + eax] ; jump to next column of B             pop ecx             loop outer_loop ; repeat for all i     }     cout

Источник: https://stackoverflow.com/questions/780 ... embly-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»