Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-01-28 19:46:50 ЛС | профиль | цитата
Netspirit писал(а):

Не, ну это дополнительная задача, которую я лично не решу.

Предубеждение, мне кажется.
Ничего военного, на самом деле:
function Sigma0(x: Int64): Int64; assembler;
asm
push ebx
mov eax,[ebp+08h]
mov edx,[ebp+0Ch]
shrd [ebp+08h],edx,28
shrd [ebp+0Ch],eax,28
mov ecx,eax
mov ebx,edx
shld eax,ebx,30
shld edx,ecx,30
mov ecx,eax
mov ebx,edx
shrd ebx,eax,5
shrd ecx,edx,5
xor eax,ecx
xor edx,ebx
xor eax,[ebp+08h]
xor edx,[ebp+0Ch]
pop ebx
// Result := (ror64(x, 28) xor ror64(x, 34) xor ror64(x, 39));
end;

function Sigma1(x: Int64): Int64; assembler;
asm
push ebx
mov eax,[ebp+08h]
mov edx,[ebp+0Ch]
shrd [ebp+08h],edx,14
shrd [ebp+0Ch],eax,14
mov ecx,eax
mov ebx,edx
shrd eax,ebx,18
shrd edx,ecx,18
mov ecx,eax
mov ebx,edx
shrd ebx,eax,23
shrd ecx,edx,23
xor eax,ecx
xor edx,ebx
xor eax,[ebp+08h]
xor edx,[ebp+0Ch]
pop ebx
// Result := (ror64(x, 14) xor ror64(x, 18) xor ror64(x, 41));
end;

function Gamma0(x: Int64): Int64; assembler;
asm
push ebx
mov eax,[ebp+08h]
mov edx,[ebp+0Ch]
shrd [ebp+08h],edx,1
shrd [ebp+0Ch],eax,1
mov ecx,eax
mov ebx,edx
shrd ebx,eax,8
shrd ecx,edx,8
shrd eax,edx,7
shr edx,7
xor eax,ecx
xor edx,ebx
xor eax,[ebp+08h]
xor edx,[ebp+0Ch]
pop ebx
// Result := (ror64(x, 1) xor ror64(x, 8) xor (x shr 7));
end;

function Gamma1(x: Int64): Int64; assembler;
asm
push ebx
mov eax,[ebp+08h]
mov edx,[ebp+0Ch]
shrd [ebp+08h],edx,19
shrd [ebp+0Ch],eax,19
mov ecx,eax
mov ebx,edx
shld ebx,eax,3
shld ecx,edx,3
shrd eax,edx,6
shr edx,6
xor eax,ecx
xor edx,ebx
xor eax,[ebp+08h]
xor edx,[ebp+0Ch]
pop ebx
// Result := (ror64(x, 19) xor ror64(x, 61) xor (x shr 6));
end;

--- Добавлено в 2017-01-28 19:49:56

Не моя тема...
Проверял только на примере от ТС
карма: 9

0
Редактировалось 3 раз(а), последний 2017-02-02 20:21:21