#include <stdio.h> #define n 8 // столбцов #define m 8 // строк __int16 a[n][m]= {{1,2,3,4,5,6,7,8}, {2,3,4,5,6,7,8,1}, {3,4,5,6,7,8,1,2}, {4,5,6,7,8,1,2,3}, {5,6,7,8,1,2,3,4}, {6,7,8,1,2,3,4,5}, {7,8,1,2,3,4,5,6}, {8,1,2,3,4,5,6,7}, }; // матрица __int16 c[m]= {-9,-8,-7,-6,-5,-4,-3,-2}; // вектор __int32 d[m], e[m]; // результат int i,j; main(){ for( i=0; i<n; i++) for( j=0; j<m;j++) ;//a[i][j]=rand()/512; for( i=0; i<m; i++) ;//c[i]=rand()/512; for( i=0; i<n; i++){ d[i]=0; for( j=0; j<m; j++) d[i]+=a[i][j]*c[j]; }// for __asm{ emms mov eax,(n*m-n)*2 // two byte per __int16? mov ecx,n l1: pxor mm0,mm0 mov edx,m*2 l2: movq mm1,[a+eax+edx-8] pmaddwd mm1,[c+edx-8] paddd mm0,mm1 sub edx,8 jnz l2 phaddd mm0,mm0 movd [e+ecx*4-4],mm0 sub eax,m*2 loop l1 }// asm printf("\npascal\t\tasm\n"); for( i=0; i<m; i++) printf("%d\t\t%d\n", d[i],e[i]); } |