Quantcast
Channel: Ru.Board
Viewing all articles
Browse latest Browse all 1003802

Assembler (2082) / Вопросы по программированию на Ассемблере

$
0
0
netfil:
Всем привет, имеется программа, умножающая матрицу на вектор:

Код:

{$APPTYPE CONSOLE}
const
n = 8; // столбцов
m = 8; // строк

var
a: array[1..n,1..m] of smallint; // матрица
c: array[1..m] of smallint; // вектор
d,e: array[1..m] of integer; // результат
i,j: integer;
begin
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(128);

for i:=1 to m do
c[i]:=random(128);

for i:=1 to n do
begin
d[i]:=0;
for j:=1 to m do
inc(d[i],a[i,j]*c[j]);
end;

asm
mov eax,(m*n-m)*2
mov ecx,n
@1:pxor mm0,mm0
mov edx,m*2
@2:movq mm1,qword[a+eax+edx-8]
pmaddwd mm1,qword[c+edx-8]
paddd mm0,mm1
sub edx,8
jnz @2
phaddd mm0,mm0
movd dword[e+ecx*4-4],mm0
sub eax,m*2
loop @1
end;

writeln('pascal':6,' ','asm':6);
for i:=1 to m do
writeln(d[i]:6,' : ',e[i]:6);
readln;
end.

ассемблерная вставка в ней написана с использованием SSE3 инструкций;
был бы очень признателен если кто-нибудь помог переписать ее под SSE1 инструкции.

Viewing all articles
Browse latest Browse all 1003802

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>