Files
SHA256/sha-256.asm
2026-03-04 21:05:17 +03:00

6953 lines
169 KiB
NASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
OPTION DOTNAME
include includes\temphls.inc
include includes\win64.inc
include includes\user32.inc
includelib includes\user32.lib
OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef
.data
AppName: ;DLL Skeleton
dw 0044h,004ch,004ch,0020h,0053h,006bh,0065h,006ch,0065h,0074h,006fh,006eh,0000h
HelloMsg: ;Вызвана функция TestHello
dw 0412h,044bh,0437h,0432h,0430h,043dh,0430h,0020h,0444h,0443h,043dh,043ah,0446h,0438h,044fh,0020h,0054h,0065h,0073h,0074h,0048h,0065h,006ch,006ch,006fh,0000h
LoadMsg: ;DLL Загружена
dw 0044h,004ch,004ch,0020h,0417h,0430h,0433h,0440h,0443h,0436h,0435h,043dh,0430h,0000h
UnloadMsg: ;DLL выгружена
dw 0044h,004ch,004ch,0020h,0432h,044bh,0433h,0440h,0443h,0436h,0435h,043dh,0430h,0000h
SHAMsg: ;"SHA256 Запущена!"
dw 0053h,0048h,0041h,0032h,0035h,0036h,0020h,0417h,0430h,043fh,0443h,0449h,0435h,043dh,0430h,0021h,0000h
DllAtata: ;Неожиданно прилетел DLL_THREAD_ATTACH
dw 041dh,0435h,043eh,0436h,0438h,0434h,0430h,043dh,043dh,043eh,0020h,043fh,0440h,0438h,043bh,0435h,0442h,0435h,043bh,0020h,0044h,004ch,004ch,005fh,0054h,0048h,0052h,0045h,0041h,0044h,005fh,0041h,0054h,0054h,0041h,0043h,0048h,0000h
prime2nums: ;Простые числа от 2 до 311
dw 02h,03h,05h,07h,0Bh,0Dh,11h,13h,17h,1Dh,1Fh,25h,29h,2Bh,2Fh,35h,3Bh,3Dh,43h,47h,49h,4Fh,53h,59h
dw 61h,65h,67h,6Bh,6Dh,71h,7Fh,83h,89h,8Bh,95h,97h,9Dh,0A3h,0A7h,0ADh,0B3h,0B5h,0BFh,0C1h,0C5h,0C7h,0D3h,0DFh
dw 0E3h,0E5h,0E9h,0EFh,0F1h,0FBh,101h,107h,10Dh,10Fh,115h,119h,11Bh,125h,133h,137h
DllDetata: ;Неожиданно прилетел DLL_PROCESS_DETACH
dw 041dh,0435h,043eh,0436h,0438h,0434h,0430h,043dh,043dh,043eh,0020h,043fh,0440h,0438h,043bh,0435h,0442h,0435h,\
043bh,0020h,0044h,004ch,004ch,005fh,0050h,0052h,004fh,0043h,0045h,0053h,0053h,005fh,0044h,0045h,0054h,0041h,0043h,0048h,0000h
prime_nums: ; 8 байт с простыми числами от 2 до 19
db 8 dup (0)
align 16
k_konst dd 64 dup (0) ;64 32-битных значения инициированных первыми 32 битами дробной части кубических корней от 2 о 311
align 16
my3sqrt REAL8 0.3333333333333333333333333333
;xmminst dq 12232434,13342342342
.code
DllMain proc hInstDLL:QWORD, reason:QWORD, unused:QWORD
;push rbp
;mov rbp,rsp
;sub rsp,28h
.if edx==DLL_PROCESS_ATTACH ;Обрабатываю событие вызова DLL
call _isAvxSupported
pshufd xmm0,xmm0,10010011b ;Перераспределяет 32-битные qword'ы в xmm согласно битовой маске: 2 бита, числа от 0-3 сообщают
pshufd xmm0,xmm0,10010011b ;слева направо новое расположение qword'ов в регистре XMM. Например: 3-2-1-0 -> 2-1-0-3(10010011b)
pshufd xmm0,xmm0,10010011b
pshufd xmm0,xmm0,10010011b
mov eax,001020304h ;вычисляю Σ0
xor rcx,rcx
ror eax,2
xor ecx,eax
ror eax,11
xor ecx,eax
ror eax,9
xor ecx,eax
;вычисляю ключ
mov eax,001020304h
xor eax,ecx
mov edx,eax ; в EDX - ключ
mov eax,001020304h
xor eax,edx
;смотрю, подходит ли он для других чисел
mov eax,005040304h ;вычисляю Σ0
xor rcx,rcx
ror eax,2
xor ecx,eax
ror eax,11
xor ecx,eax
ror eax,9
xor ecx,eax
;Подставляю ключ из первого примера
mov eax,005040304h
xor eax,edx
lea rdx,LoadMsg ;Указатель на сообщение "DLL загружена"
.elseif edx==DLL_PROCESS_DETACH ;Обрабатываю событие закрытия DLL
lea rdx,UnloadMsg ;Указатель на сообщение "DLL выгружена"
.elseif edx==DLL_THREAD_ATTACH ;Обрабатываю событие создания треда в вызывающем процессе
;(ох и попило крови это событие: не обрабатывал, а по-умолчанию падало на другой обработчик)
;lea rdx,DllAtata ;Указатель на сообщение "неожиданно прилетел DLL_THREAD_ATTACH"
;add rsp,28h ;восстанавливаю вершину стека
xor rax,rax ;возвращаю ноль
ret ;Выхожу
.elseif edx==DLL_THREAD_DETACH ;Обрабатываю событие закрытия треда в вызывающем процессе
;lea rdx,DllDetata ;Указатель на сообщение "Неожиданно прилетел DLL_PROCESS_DETACH"
;add rsp,28h ;восстанавливаю вершину стека
xor rax,rax ;возвращаю ноль
ret ;Выхожу
.endif
mov r9d,MB_OK ;
jmp exit
DllMain Endp
TestHello proc
;sub rsp,28h
lea rdx,HelloMsg
mov r9d,MB_OK + MB_ICONERROR
exit:: lea r8,AppName
xor rcx,rcx
call MessageBoxW
;mov rsp,rbp
;pop rbp
;add rsp,28h
mov rax,TRUE
leave
ret
TestHello endp
; Sha256 - хэш-Функция. Возвращаемое значение: NULL в случае успеха, CF_digests заполняется хэш-суммой.
;1-CF_Addr-Адрес хешируемого объекта:QWORD
;2-CF_FullSize-его полный размер:QWORD
;3-CF_CurrSize-Размер отрезка:QWORD
;4-CF_digests-адрес 8 байт хэша (если ноль, то это первый отрезок):QWORD
;5-CF_Last-последний ли он?:QWORD
align 16
Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,CF_Last:QWORD
LOCAL myXMMSAVE[10]:xmmword ;локальная область для сохранения/восстановления регистров XMM6-XMM15 (неизменяемые)
LOCAL myRnSAVE[4]:QWORD ;локальная область для сохранения/восстановления регистров R12-R15 (неизменяемые)
LOCAL myBuff2Hash[8]:DWORD ;локальная область, куда будут перекинуты данные для хэширования
LOCAL lastblock[32]:DWORD ;32 двойных слова (1024 бит) - место для одного или двух блоков дописанного кончания файла (блока)
LOCAL lastblocksize:DWORD ;тут интересен только последний бит: 0-переполнения не было, окончание 512 бит; 1-переполнение было, окончание 1024 бита
LOCAL myOffset2End:QWORD ;локальная переменная для сохранения смещения до последнего байта хэшируемого отрезка
LOCAL cyclesInSegment:DWORD ;локальная переменная для сохранения количества циклов перебора отрезка. Перебирается весь отрезок кроме "хвоста"
LOCAL endingOfSegment:DWORD ;локальная переменная для сохранения размера хвоста файла<=64,который необходимо закончить по SHA-256
;Сохраняю входные данные
mov CF_Addr,rcx ;Сохраняю адрес объекта
mov CF_FullSize,rdx ;Сохраняю его полный размер
mov CF_CurrSize,r8 ;Сохраняю размер данного отрезка
mov CF_digests,r9 ;Адрес хэша
;mov rax,[rbp+32]
;mov CF_Last,rax ;Сохреняю флаг, последний-ли отрезок
;Сохраняю в выровненную локальную область 10 XMM Регистров с XMM6-XMM15, r12-r15.
movdqu myXMMSAVE,XMM6
movdqu myXMMSAVE+16,XMM7
movdqu myXMMSAVE+32,XMM8
movdqu myXMMSAVE+48,XMM9
movdqu myXMMSAVE+64,XMM10
movdqu myXMMSAVE+80,XMM11
movdqu myXMMSAVE+96,XMM12
movdqu myXMMSAVE+112,XMM13
movdqu myXMMSAVE+128,XMM14
movdqu myXMMSAVE+144,XMM15
mov myRnSAVE,r12
mov myRnSAVE+8,r13
mov myRnSAVE+16,r14
mov myRnSAVE+24,r15
;если хэш по предложенному адресу = 0, запускаем Sha256Init
mov rax,qword ptr [r9]
add r9,8
or rax,qword ptr [r9]
add r9,8
or rax,qword ptr [r9]
add r9,8
or rax,qword ptr [r9]
test rax,rax
jnz Inithash
mov rcx,CF_digests
call Sha256Init
Inithash: ;Инициирую R12D-r15D (ХЭШ)
mov rax,CF_digests
mov r12,QWORD PTR [rax]
;bswap r12 ;привожу в прямой порядок байт r12
mov r13,QWORD PTR [rax+8]
;bswap r13 ;привожу в прямой порядок байт r13
mov r14,QWORD PTR [rax+16]
;bswap r14 ;привожу в прямой порядок байт r14
mov r15,QWORD PTR [rax+24]
;bswap r15 ;привожу в прямой порядок байт r15
;Является ли массив последним?
mov rax,CF_Last
cmp rax,1 ;1-блок является последним
jnz cycleCheck
;Да. Копирую окончание массива в локальную область. Заканчиваю блок
mov lastblocksize,0 ; инициирцю lastblocksize. 0, значит - переполнения не было и дописанный "хвост" будет умещён в 1 блок
mov rax,CF_FullSize ; В rax=полный размер файла
xor rdx,rdx ; Обнуляю RDX т.к. он участвукт в расчётах
mov rbx,CF_CurrSize ; в rbx=размер отрезка
div rbx ; делю по модулю rax/rbx
mov myOffset2End,rdx ; в rdx теперь смещение до конца файла в отрезке
mov rax,rdx ; сохраняю rdx для следующего деления
xor rdx,rdx ; Обнуляю RDX т.к. он участвукт в расчётах
mov rbx,64 ; в rbx=64-х байтный отрезок, размер хешированя sha256
div rbx ; делю по модулю rax/rbx
mov cyclesInSegment,eax ;в rax теперь количество ЦЕЛЫХ отрезков по 64 байта в массиве
mov endingOfSegment,edx ;в rdx теперь остаток от деления по модулю 64 (отрезок,<64 байта,который необходимо закончить по SHA-256 )
mov rax,CF_Addr ;--------------------------------------|
add rax,myOffset2End;Получаю адрес начала "хвоста" массива-|
sub rax,rdx ;--------------------------------------|
cmp rdx,56 ;сравниваю "хвост" с 56 (448)
jb endingofsegment1 ;Переходим, если меньше
mov lastblocksize,1 ;сообщаю, что произойдёт переполнение и блока будет 2 (1024 бита)
endingofsegment1: ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
lea rcx,lastblock ;rcx - указатель ┃
test rdx,rdx
jz end_endingofsegment2
endingofsegment2: ; ┃
mov bl,[rax] ; перебрасываю хвост в локальную область ┃
mov [rcx],bl ; оптимизировать!!! наверняка - жуткий тормоз!!! ┃
inc rax ; ┃
inc rcx ; ┃
dec rdx ; ┃
jnz endingofsegment2;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
end_endingofsegment2:
mov BYTE ptr [rcx],128 ;дописываю 1 и 7 бит
mov edx,endingOfSegment
inc rdx ;в rdx - длинна хвоста + 8 бит
cmp lastblocksize,1 ;далее разный расчёт в зависимости от того было ли переполнение или нет.
je endingofsegment3 ;если переполнение было, то посылаем на endingofsegment3
mov rcx,56
sub rcx,rdx ;в rcx количество байт, необходимых для дописания нулей до значения 56 (448 бит)
jmp endingofsegment4
endingofsegment3:
mov rcx,120
sub rcx,rdx ;в rcx количество байт, необходимых для дописания нулей до значения 120 (960 бит)
endingofsegment4:
lea rax,lastblock
add rax,rdx ;в rax следующий байт за дописанным 10000000
loop_endingofsegment: ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
cmp rcx,0 ; ┃
je end_loop_endingofsegment ; ┃
mov BYTE PTR [rax],0 ;заполняю нулями до кратного 56 или 120 байт ┃
inc rax ; ┃
dec rcx ; ┃
jmp loop_endingofsegment ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
end_loop_endingofsegment: ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
mov rbx,CF_FullSize ; ┃
shl rbx,3 ;дописываю в конец 8 байт размера файла ┃
bswap rbx ; ┃
mov QWORD PTR [rax],rbx ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
;Счётчик цикла=0?
cycleCheck:
mov eax,cyclesInSegment
cycleCheck1:
cmp eax,0
je exithash
;Нет. Беру очередной блок 64B В XMM0-XMM4
mov rax,CF_Addr
movdqu XMM0,XMMWORD PTR [rax]
movdqu XMM1,XMMWORD PTR [rax+16]
movdqu XMM2,XMMWORD PTR [rax+32]
movdqu XMM3,XMMWORD PTR [rax+48]
;Готовлю очередь сообщений W в регистрах XMM0-XMM15 от младшего слова к старшему, от 0 до 15
call Wt ;
;Хэширую их
call CompCycle
;добавляю к хэш
mov rax,CF_digests
add [rax],R12D ; h0=h0+a
shr r12,32
add [rax+4],R12D; h1=h1+b
; R13
add [rax+8],R13D; h2=h2+c
shr r13,32
add [rax+12],R13D; h3=h3+d
; R14
add [rax+16],R14D; h4=h4+e
shr r14,32
add [rax+20],R14D; h5=h5+f
; R15
add [rax+24],R15D; h6=h6+g
shr r15,32
add [rax+28],R15D; h7=h7+h
;Изменяю счётчики
mov eax,DWORD PTR CF_Addr
add eax,64
mov DWORD PTR CF_Addr,eax
mov eax,cyclesInSegment
dec eax
mov cyclesInSegment,eax
jmp cycleCheck1 ;вовторяю цикл
;Да. Беру окончание массива (64 или 128 байт), хэширую их
exithash:
;Беру очередной блок 64B В XMM0-XMM4
lea rax,lastblock
exithash1:
movdqu XMM0,XMMWORD PTR [rax]
movdqu XMM1,XMMWORD PTR [rax+16]
movdqu XMM2,XMMWORD PTR [rax+32]
movdqu XMM3,XMMWORD PTR [rax+48]
call Wt ;
;Хэширую их
call CompCycle
;добавляю к хэш
; R12
mov rax,CF_digests
add [rax],R12D ; h0=h0+a
shr r12,32
add [rax+4],R12D; h1=h1+b
; R13
add [rax+8],R13D; h2=h2+c
shr r13,32
add [rax+12],R13D; h3=h3+d
; R14
add [rax+16],R14D; h4=h4+e
shr r14,32
add [rax+20],R14D; h5=h5+f
; R15
add [rax+24],R15D; h6=h6+g
shr r15,32
add [rax+28],R15D; h7=h7+h
mov ebx,lastblocksize
and ebx,1 ;Выделяю последний бит. Если 1, то запускаю хэш хвоста, если 0 - хвоста не было.
je exithash2
xor eax,eax
mov lastblocksize,eax ;обнуляю бит пеерполнения, сообщая, что этот блок последний
lea rax,lastblock+64
jmp exithash1 ;Хеширую остаток
exithash2:
;восстанавливаю регистры и выхожу
movdqu XMM6,myXMMSAVE
movdqu XMM7,myXMMSAVE+16
movdqu XMM8,myXMMSAVE+32
movdqu XMM9,myXMMSAVE+48
movdqu XMM10,myXMMSAVE+64
movdqu XMM11,myXMMSAVE+80
movdqu XMM12,myXMMSAVE+96
movdqu XMM13,myXMMSAVE+112
movdqu XMM14,myXMMSAVE+128
movdqu XMM15,myXMMSAVE+144
mov R12,myRnSAVE
mov R13,myRnSAVE+8
mov R14,myRnSAVE+16
mov R15,myRnSAVE+24
xor eax,eax ; NULL (0) = success
ret
Sha256 Endp
;Инициализация хэш функции, ввод исходных значений
Sha256Init proc;__fastcall
LOCAL myInt64:QWORD ;Число для преобразования
LOCAL squareRoot:QWORD ;Корень
LOCAL delitel:QWORD ;делитель (равен 1 для извлечения дробной части числа)
LOCAL mnoz:QWORD;множитель для выведение целого числа
LOCAL myxmmword:XMMWORD
;push rbp ;пролог, для того что бы по rbp-n \
;mov rbp,rsp ;\обращаться к локальным переменным
;sub rsp,4*8 ;создаю стековый фрйм, нахуя он нужен в душе не ябу(((
lea rdx,prime_nums ;в RDX массив простых чисел
mov r8,rcx ;в R8 - адрес инициализированного хэша переданного вызывающей процедурой
mov rcx,8 ;в RCX количество повторений цикла. Для процессора нет разницы, обращаться к DL или к RDX, поэтому снижаю расходы приводя всё к единому размеру
mov rax,1373893702338282242 ;8 простых чисел от 2 до 19-ти, прекрасно ложатся в 16 байт 64-битного регистра. Поэтому сунул их в один регистр
mov QWORD PTR [rdx],rax ; инициализирую простые числа от 2 до 19
loop1:
finit
mov al, BYTE PTR [rdx] ;беру текущее простое число
and rax,255
mov myInt64,rax
mov delitel,1 ;делитель 1 нужен для отсечения целой части, при делениии на 1 по модулю
mov rax,4294967296 ;множитель 2^32, нужен...\
mov QWORD PTR mnoz,rax ;...для сдвига дробной части на 32 бита
fild QWORD PTR mnoz ; сохраняю всё в стек FPU
fild QWORD PTR delitel
fild QWORD PTR myInt64
fsqrt ;извлекаю корень
fprem ;делю на 1 по модулю
fmul ST,ST(2) ;сдвигаю на 32
fisttp qword ptr squareRoot ;сохраняю для проверки
mov eax,dword ptr squareRoot ;сохраняю результат в хеше
mov dword ptr [r8],eax
add r8,4;сдвигаю указатель на хэш
inc rdx ;сдвигаю указатель на простое число
dec rcx
jnz loop1 ;цикл
; Далее, инициализирую константы (k) кубическим корнем ряда первых 64 простых числел от 2 до 311
lea rdx,prime2nums ;в RDX адресс массива простых числел
forxmm0: ;Заполняю регистр XMM0 значениями 4-х корней
mov r8,64 ;счётчик цикла
lea r9,k_konst ;указатель на буфер k_konst
loopxmm0:
mov cx, word ptr [rdx]; беру текущее простое число
and rcx,65535 ;обнуляю остальные биты
call z3sqrt ;вызываю процедуру рассчёта дробной части от кубического корня от числа в rcx
mov dword ptr [r9],eax ;сохраняю результат в буфер
add rdx,2 ;сдвигаю указатель на простое число
add r9,4 ;сдвигаю указатель на буфер k_konst
dec r8 ;уменьшаю счётчик
jnz loopxmm0 ;цикл
ret
Sha256Init Endp
_isAvxSupported: ; extern "C" int isAvxSupported()
xor eax, eax
cpuid
cmp eax, 1 ; Поддерживает ли CPUID параметр eax = 1?
jb not_supported
mov eax, 1
cpuid
and ecx, 018000000h ; Проверяем, что установлены биты 27 (ОС использует XSAVE/XRSTOR)
cmp ecx, 018000000h ; и 28 (поддержка AVX процессором)
jne not_supported
xor ecx, ecx ; Номер регистра XFEATURE_ENABLED_MASK/XCR0 есть 0
xgetbv ; Регистр XFEATURE_ENABLED_MASK теперь в edx:eax
and eax, 110b
cmp eax, 110b ; Убеждаемся, что ОС сохраняет AVX регистры при переключении контекста
jne not_supported
mov eax, 1
ret
not_supported:
xor eax, eax
ret
z3sqrt proc ;вынес вычисление кубического корня в процедуру. На входе, в rcx - простое число, на выходе, в rax 32 бита остатка.
LOCAL myInt64:QWORD ;локальная переменная для хранения простого числа
LOCAL delitel:QWORD ;делитель (равен 1 для извлечения дробной части числа)
LOCAL mnoz:QWORD;множитель для выведение целого числа
LOCAL result:QWORD ;результат
LOCAL regCR:word ;ячейка для сохренения регистра CR (FPU)
mov myInt64,rcx ;сохраняю в переменную
mov delitel,1 ;единица для деления по модулю
mov rax,4294967296 ;множитель 2^32, нужен...\
mov QWORD PTR mnoz,rax ;...для сдвига дробной части на 32 бита
finit
fstcw regCR ;сохраняю регистр CR (FPU), для изменения значения бита округления
or word ptr regCR,3072 ;включаю 10 и 11 биты, сообщающие, что нужно округлять до нуля (в сторону нуля)
fldcw regCR ;записываю изменённые значения в регистра CR
fild QWORD PTR mnoz ; сохраняю всё в стек FPU
fild QWORD PTR delitel
fld QWORD PTR my3sqrt ;загружаю 1/3
fild QWORD PTR myInt64 ;текущее простое число
FYL2X ;получаю LN(x)
fld ST(0) ;Создаем еще одну копию LN(x)
frndint ;Округляем
fsubr st(0),st(1) ;ST(1)=z, ST(0)=z-trunc(z)
f2xm1 ;ST(1)=z, ST(0)=2**(z-trunc(z))-1
fld1
faddp ;ST(1)=z, ST(0)=2**(z-trunc(z))
fscale ;ST(1)=z, ST(0)=(2**trunc(z))*(2**(z-trunc(z)))=2**t
fxch st(1)
fstp st ;Результат остается на вершине стека ST(0)
fprem ;делю на 1 по модулю
fmul ST,ST(2) ;сдвигаю на 32
fisttp qword ptr result ;сохраняю результат
mov rax,result
ret
z3sqrt endp
Wt proc; вынес в отдельную процедуру заполнение Wt. На выходе - заполненные XMM регистры
xorps xmm4,xmm4 ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
xorps xmm5,xmm5 ; ┃
xorps xmm6,xmm6 ; ┃
xorps xmm7,xmm7 ; ┃
xorps xmm8,xmm8 ; ┃
xorps xmm9,xmm9 ; ┃
xorps xmm10,xmm10 ;инициирую xmm регистры нулями ┃
xorps xmm11,xmm11 ; ┃
xorps xmm12,xmm12 ; ┃
xorps xmm13,xmm13 ; ┃
xorps xmm14,xmm14 ; ┃
xorps xmm15,xmm15 ;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
;W16--------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm0,xmm0,00111001b ;-15. 1-е слово двигается на младшую позицию XMM
movd eax,xmm0
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm3,xmm3,01001110b ;-2. 14-е слово двигается на младшую позицию XMM
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,xmm3
bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm0,xmm0,10010011b ;-16. 0-е слово двигается на младшую позицию XMM
xor rdx,rdx
movd eax,xmm0
bswap eax
add edx,eax
add edx,ecx
pshufd xmm2,xmm2,00111001b ;-7. 9-е слово двигается на младшую позицию XMM
movd eax,xmm2
bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm4,xmm4,11100100b ;16-е слово двигается на младшую позицию XMM
;bswap edx
movd xmm4,edx
;movd eax,xmm4;проверяю, как хранить данные в xmm/
;W17---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm0,xmm0,01001110b ;-15. 2-е слово двигается на младшую позицию XMM
movd eax,xmm0
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm3,XMM3,00111001b ;-2. 15-е слово двигается на младшую позицию
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM3
bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm0,xmm0,10010011b ;-16. 1-е слово двигается на младшую позицию XMM
xor rdx,rdx
movd eax,xmm0
bswap eax
add edx,eax
add edx,ecx
pshufd xmm2,xmm2,00111001b ;-7. 10-е слово двигается на младшую позицию XMM
movd eax,xmm2
bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm4,xmm4,00111001b ;17-е слово двигается на младшую позицию XMM
;bswap edx
movd xmm15,edx
orpd xmm4,xmm15
;W18---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm0,xmm0,01001110b ;-15. 2-е слово двигается на младшую позицию XMM
movd eax,xmm0
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm4,xmm4,10010011b ;-2. 15-е слово двигается на младшую позицию
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM4
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm0,xmm0,10010011b ;-16. 1-е слово двигается на младшую позицию XMM
xor rdx,rdx
movd eax,xmm0
bswap eax
add edx,eax
add edx,ecx
pshufd xmm2,xmm2,00111001b ;-7. 10-е слово двигается на младшую позицию XMM
movd eax,xmm2
bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm4,xmm4,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm4,xmm15
;W19---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
;pshufd xmm0,xmm0,01001110b ;-15.
movd eax,xmm1
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm4,xmm4,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM4
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm0,xmm0,00111001b ;-16.
xor rdx,rdx
movd eax,xmm0
bswap eax
add edx,eax
add edx,ecx
pshufd XMM3,XMM3,00111001b ;-7.
movd eax,XMM3
bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm4,xmm4,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm4,xmm15
;W20---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm1,xmm1,00111001b ;-15.
movd eax,xmm1
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm4,xmm4,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM4
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm1,xmm1,10010011b ;-16.
xor rdx,rdx
movd eax,xmm1
bswap eax
add edx,eax
add edx,ecx
pshufd XMM3,XMM3,00111001b ;-7.
movd eax,XMM3
bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm4,xmm4,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm5,xmm15
;W21---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm1,xmm1,01001110b ;-15.
movd eax,xmm1
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm4,xmm4,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM4
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm1,xmm1,10010011b ;-16.
xor rdx,rdx
movd eax,xmm1
bswap eax
add edx,eax
add edx,ecx
pshufd XMM3,XMM3,00111001b ;-7.
movd eax,XMM3
bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm5,xmm5,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm5,xmm15
;W22---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm1,xmm1,01001110b ;-15.
movd eax,xmm1
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm5,xmm5,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM5
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm1,xmm1,10010011b ;-16.
xor rdx,rdx
movd eax,xmm1
bswap eax
add edx,eax
add edx,ecx
pshufd XMM3,XMM3,00111001b ;-7.
movd eax,XMM3
bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm5,xmm5,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm5,xmm15
;W23---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm2,xmm2,00111001b ;-15.
movd eax,xmm2
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm5,xmm5,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM5
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm1,xmm1,00111001b ;-16.
xor rdx,rdx
movd eax,xmm1
bswap eax
add edx,eax
add edx,ecx
pshufd XMM4,XMM4,00111001b ;-7.
movd eax,XMM4
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm5,xmm5,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm5,xmm15
;W24---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm2,xmm2,00111001b ;-15.
movd eax,xmm2
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm5,xmm5,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM5
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm2,xmm2,10010011b ;-16.
xor rdx,rdx
movd eax,xmm2
bswap eax
add edx,eax
add edx,ecx
pshufd XMM4,XMM4,00111001b ;-7.
movd eax,XMM4
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm5,xmm5,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm6,xmm15
;W25---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm2,xmm2,01001110b ;-15.
movd eax,xmm2
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm5,xmm5,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM5
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm2,xmm2,10010011b ;-16.
xor rdx,rdx
movd eax,xmm2
bswap eax
add edx,eax
add edx,ecx
pshufd XMM4,XMM4,00111001b ;-7.
movd eax,XMM4
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm6,xmm6,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm6,xmm15
;W26---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm2,xmm2,01001110b ;-15.
movd eax,xmm2
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm6,xmm6,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM6
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm2,xmm2,10010011b ;-16.
xor rdx,rdx
movd eax,xmm2
bswap eax
add edx,eax
add edx,ecx
pshufd XMM4,XMM4,00111001b ;-7.
movd eax,XMM4
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm6,xmm6,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm6,xmm15
;W27---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm3,xmm3,00111001b ;-15.
movd eax,xmm3
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm6,xmm6,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM6
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm2,xmm2,00111001b ;-16.
xor rdx,rdx
movd eax,xmm2
bswap eax
add edx,eax
add edx,ecx
pshufd XMM5,XMM5,00111001b ;-7.
movd eax,XMM5
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm6,xmm6,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm6,xmm15
;W28---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm3,xmm3,00111001b ;-15.
movd eax,xmm3
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm6,xmm6,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM6
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm3,xmm3,10010011b ;-16.
xor rdx,rdx
movd eax,xmm3
bswap eax
add edx,eax
add edx,ecx
pshufd XMM5,XMM5,00111001b ;-7.
movd eax,XMM5
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm6,xmm6,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm7,xmm15
;W29---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm3,xmm3,01001110b ;-15.
movd eax,xmm3
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm6,xmm6,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM6
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm3,xmm3,10010011b ;-16.
xor rdx,rdx
movd eax,xmm3
bswap eax
add edx,eax
add edx,ecx
pshufd XMM5,XMM5,00111001b ;-7.
movd eax,XMM5
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm7,xmm7,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm7,xmm15
;W30---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm3,xmm3,01001110b ;-15.
movd eax,xmm3
bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm7,xmm7,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM7
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm3,xmm3,10010011b ;-16.
xor rdx,rdx
movd eax,xmm3
bswap eax
add edx,eax
add edx,ecx
pshufd XMM5,XMM5,00111001b ;-7.
movd eax,XMM5
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm7,xmm7,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm7,xmm15
;W31---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm4,xmm4,00111001b ;-15.
movd eax,xmm4
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm7,xmm7,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM7
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm3,xmm3,00111001b ;-16.
xor rdx,rdx
movd eax,xmm3
bswap eax
add edx,eax
add edx,ecx
pshufd XMM6,XMM6,00111001b ;-7.
movd eax,XMM6
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm7,xmm7,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm7,xmm15
;W32---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm4,xmm4,00111001b ;-15.
movd eax,xmm4
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm7,xmm7,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM7
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm4,xmm4,10010011b ;-16.
xor rdx,rdx
movd eax,xmm4
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM6,XMM6,00111001b ;-7.
movd eax,XMM6
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm6,xmm6,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm8,xmm15
;W33---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm4,xmm4,01001110b ;-15.
movd eax,xmm4
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm7,xmm7,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM7
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm4,xmm4,10010011b ;-16.
xor rdx,rdx
movd eax,xmm4
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM6,XMM6,00111001b ;-7.
movd eax,XMM6
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm8,xmm8,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm8,xmm15
;W34---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm4,xmm4,01001110b ;-15.
movd eax,xmm4
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm8,xmm8,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM8
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm4,xmm4,10010011b ;-16.
xor rdx,rdx
movd eax,xmm4
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM6,XMM6,00111001b ;-7.
movd eax,XMM6
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm8,xmm8,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm8,xmm15
;W35---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm5,xmm5,00111001b ;-15.
movd eax,xmm5
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm8,xmm8,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM8
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm4,xmm4,00111001b ;-16.
xor rdx,rdx
movd eax,xmm4
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM7,XMM7,00111001b ;-7.
movd eax,XMM7
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm8,xmm8,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm8,xmm15
;W36---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm5,xmm5,00111001b ;-15.
movd eax,xmm5
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm8,xmm8,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM8
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm5,xmm5,10010011b ;-16.
xor rdx,rdx
movd eax,xmm5
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM7,XMM7,00111001b ;-7.
movd eax,XMM7
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm9,xmm9,11100100b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm9,xmm15
;W37---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm5,xmm5,01001110b ;-15.
movd eax,xmm5
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm8,xmm8,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM8
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm5,xmm5,10010011b ;-16.
xor rdx,rdx
movd eax,xmm5
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM7,XMM7,00111001b ;-7.
movd eax,XMM7
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm9,xmm9,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm9,xmm15
;W38---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm5,xmm5,01001110b ;-15.
movd eax,xmm5
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm9,xmm9,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM9
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm5,xmm5,10010011b ;-16.
xor rdx,rdx
movd eax,xmm5
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM7,XMM7,00111001b ;-7.
movd eax,XMM7
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm9,xmm9,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm9,xmm15
;W39---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm6,xmm6,00111001b ;-15.
movd eax,xmm6
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm9,xmm9,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM9
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm5,xmm5,00111001b ;-16.
xor rdx,rdx
movd eax,xmm5
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM8,XMM8,00111001b ;-7.
movd eax,XMM8
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm9,xmm9,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm9,xmm15
;W40---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm6,xmm6,00111001b ;-15.
movd eax,xmm6
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm9,xmm9,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM9
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm6,xmm6,10010011b ;-16.
xor rdx,rdx
movd eax,xmm6
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM8,XMM8,00111001b ;-7.
movd eax,XMM8
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm10,xmm10,11100100b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm10,xmm15
;W41---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm6,xmm6,01001110b ;-15.
movd eax,xmm6
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm9,xmm9,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM9
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm6,xmm6,10010011b ;-16.
xor rdx,rdx
movd eax,xmm6
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM8,XMM8,00111001b ;-7.
movd eax,XMM8
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm10,xmm10,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm10,xmm15
;W42---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm6,xmm6,01001110b ;-15.
movd eax,xmm6
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm10,xmm10,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM10
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm6,xmm6,10010011b ;-16.
xor rdx,rdx
movd eax,xmm6
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM8,XMM8,00111001b ;-7.
movd eax,XMM8
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm10,xmm10,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm10,xmm15
;W43---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm7,xmm7,00111001b ;-15.
movd eax,xmm7
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm10,xmm10,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM10
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm6,xmm6,00111001b ;-16.
xor rdx,rdx
movd eax,xmm6
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM9,XMM9,00111001b ;-7.
movd eax,XMM9
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm10,xmm10,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm10,xmm15
;W44---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm7,xmm7,00111001b ;-15.
movd eax,xmm7
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm10,xmm10,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM10
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm7,xmm7,10010011b ;-16.
xor rdx,rdx
movd eax,xmm7
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM9,XMM9,00111001b ;-7.
movd eax,XMM9
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm11,xmm11,11100100b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm11,xmm15
;W45---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm7,xmm7,01001110b ;-15.
movd eax,xmm7
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm10,xmm10,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM10
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm7,xmm7,10010011b ;-16.
xor rdx,rdx
movd eax,xmm7
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM9,XMM9,00111001b ;-7.
movd eax,XMM9
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm11,xmm11,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm11,xmm15
;W46---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm7,xmm7,01001110b ;-15.
movd eax,xmm7
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm11,xmm11,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM11
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm7,xmm7,10010011b ;-16.
xor rdx,rdx
movd eax,xmm7
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM9,XMM9,00111001b ;-7.
movd eax,XMM9
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm11,xmm11,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm11,xmm15
;W47---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm8,xmm8,00111001b ;-15.
movd eax,xmm8
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm11,xmm11,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM11
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm7,xmm7,00111001b ;-16.
xor rdx,rdx
movd eax,xmm7
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM10,XMM10,00111001b ;-7.
movd eax,XMM10
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm11,xmm11,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm11,xmm15
;W48---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm8,xmm8,00111001b ;-15.
movd eax,xmm8
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm11,xmm11,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM11
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm8,xmm8,10010011b ;-16.
xor rdx,rdx
movd eax,xmm8
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM10,XMM10,00111001b ;-7.
movd eax,XMM10
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm12,xmm12,11100100b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm12,xmm15
;W49---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm8,xmm8,01001110b ;-15.
movd eax,xmm8
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm11,xmm11,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM11
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm8,xmm8,10010011b ;-16.
xor rdx,rdx
movd eax,xmm8
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM10,XMM10,00111001b ;-7.
movd eax,XMM10
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm12,xmm12,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm12,xmm15
;W50---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm8,xmm8,01001110b ;-15.
movd eax,xmm8
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm12,xmm12,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM12
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm8,xmm8,10010011b ;-16.
xor rdx,rdx
movd eax,xmm8
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM10,XMM10,00111001b ;-7.
movd eax,XMM10
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm12,xmm12,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm12,xmm15
;W51---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm9,xmm9,00111001b ;-15.
movd eax,xmm9
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm12,xmm12,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM12
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm8,xmm8,00111001b ;-16.
xor rdx,rdx
movd eax,xmm8
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM11,XMM11,00111001b ;-7.
movd eax,XMM11
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm12,xmm12,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm12,xmm15
;W52---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm9,xmm9,00111001b ;-15.
movd eax,xmm9
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm12,xmm12,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM12
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm9,xmm9,10010011b ;-16.
xor rdx,rdx
movd eax,xmm9
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM11,XMM11,00111001b ;-7.
movd eax,XMM11
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm13,xmm13,11100100b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm13,xmm15
;W53---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm9,xmm9,01001110b ;-15.
movd eax,xmm9
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm12,xmm12,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM12
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm9,xmm9,10010011b ;-16.
xor rdx,rdx
movd eax,xmm9
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM11,XMM11,00111001b ;-7.
movd eax,XMM11
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm13,xmm13,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm13,xmm15
;W54---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm9,xmm9,01001110b ;-15.
movd eax,xmm9
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm13,xmm13,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM13
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm9,xmm9,10010011b ;-16.
xor rdx,rdx
movd eax,xmm9
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM11,XMM11,00111001b ;-7.
movd eax,XMM11
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm13,xmm13,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm13,xmm15
;W55---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm10,xmm10,00111001b ;-15.
movd eax,xmm10
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm13,xmm13,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM13
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm9,xmm9,00111001b ;-16.
xor rdx,rdx
movd eax,xmm9
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM12,XMM12,00111001b ;-7.
movd eax,XMM12
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm13,xmm13,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm13,xmm15
;W56---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm10,xmm10,00111001b ;-15.
movd eax,xmm10
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm13,xmm13,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM13
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm10,xmm10,10010011b ;-16.
xor rdx,rdx
movd eax,xmm10
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM12,XMM12,00111001b ;-7.
movd eax,XMM12
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm14,xmm14,11100100b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm14,xmm15
;W57---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm10,xmm10,01001110b ;-15.
movd eax,xmm10
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm13,xmm13,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM13
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm10,xmm10,10010011b ;-16.
xor rdx,rdx
movd eax,xmm10
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM12,XMM12,00111001b ;-7.
movd eax,XMM12
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm14,xmm14,00111001b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm14,xmm15
;W58---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm10,xmm10,01001110b ;-15.
movd eax,xmm10
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm14,xmm14,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM14
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm10,xmm10,10010011b ;-16.
xor rdx,rdx
movd eax,xmm10
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM12,XMM12,00111001b ;-7.
movd eax,XMM12
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm14,xmm14,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm14,xmm15
;W59---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm11,xmm11,00111001b ;-15.
movd eax,xmm11
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm14,xmm14,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM14
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm10,xmm10,00111001b ;-16.
xor rdx,rdx
movd eax,xmm10
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM13,XMM13,00111001b ;-7.
movd eax,XMM13
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm14,xmm14,01001110b ;-0 (Rec)
;bswap edx
movd xmm15,edx
orpd xmm14,xmm15
;W60---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm11,xmm11,00111001b ;-15.
movd eax,xmm11
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm14,xmm14,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM14
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm11,xmm11,10010011b ;-16.
xor rdx,rdx
movd eax,xmm11
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM13,XMM13,00111001b ;-7.
movd eax,XMM13
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
;pshufd xmm15,xmm15,11100100b ;-0 (Rec)
;bswap edx
movd xmm15,edx
;W61---------------------------------------------------------------------------
sub rsp,16
movdqu [rsp],xmm0; сохраняю в стеке XMM0, чтобы он заменил XMM15
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm11,xmm11,01001110b ;-15.
movd eax,xmm11
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm14,xmm14,00111001b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM14
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm11,xmm11,10010011b ;-16.
xor rdx,rdx
movd eax,xmm11
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM13,XMM13,00111001b ;-7.
movd eax,XMM13
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm15,xmm15,00111001b ;-0 (Rec)
;bswap edx
movd xmm0,edx
orpd xmm15,xmm0
;W62---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm11,xmm11,01001110b ;-15.
movd eax,xmm11
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm15,xmm15,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM15
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm11,xmm11,10010011b ;-16.
xor rdx,rdx
movd eax,xmm11
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM13,XMM13,00111001b ;-7.
movd eax,XMM13
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm15,xmm15,01001110b ;-0 (Rec)
;bswap edx
movd xmm0,edx
orpd xmm15,xmm0
;W63---------------------------------------------------------------------------
xor rcx,rcx ;в ecx будет xor трёх вращений
pshufd xmm12,xmm12,00111001b ;-15.
movd eax,xmm12
;bswap eax
ror eax,7
xor ecx,eax
ror eax,11
xor ecx,eax
rol eax,15
and eax,1fffffffh
xor ecx,eax ; S0
pshufd xmm15,xmm15,10010011b ;-2.
xor rbx,rbx ;в ebx будет xor трёх вращений
movd eax,XMM15
;bswap eax
ror eax,17
xor ebx,eax
ror eax,2
xor ebx,eax
rol eax,9
and eax,3fffffh
xor ebx,eax ;S1
pshufd xmm11,xmm11,00111001b ;-16.
xor rdx,rdx
movd eax,xmm11
;bswap eax
add edx,eax
add edx,ecx
pshufd XMM14,XMM14,00111001b ;-7.
movd eax,XMM14
;bswap eax
add edx,eax
add edx,ebx ;w[i]=w[i-16]+s0+w[i-7]+s1
pshufd xmm15,xmm15,01001110b ;-0 (Rec)
;bswap edx
movd XMM0,edx
orpd xmm15,xmm0
movdqu XMM0,[rsp]
add rsp,16
ret
Wt Endp
CompCycle proc; Цикл сжатия. Вынес в отдельную процедуру
; на входе: R12-R15 текущий хэш
; XMM0 - XMM15 - Wt
;i=0
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst
pshufd XMM0,XMM0,00111001b
movd ebx,XMM0
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=1
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+1*4
pshufd XMM0,XMM0,00111001b
movd ebx,XMM0
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=2
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+2*4
pshufd XMM0,XMM0,00111001b
movd ebx,XMM0
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=3
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+3*4
pshufd XMM0,XMM0,00111001b
movd ebx,XMM0
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=4
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+4*4
pshufd XMM1,XMM1,00111001b
movd ebx,XMM1
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=5
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+5*4
pshufd XMM1,XMM1,00111001b
movd ebx,XMM1
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=6
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+6*4
pshufd XMM1,XMM1,00111001b
movd ebx,XMM1
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=7
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+7*4
pshufd XMM1,XMM1,00111001b
movd ebx,XMM1
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=8
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+8*4
pshufd XMM2,XMM2,00111001b
movd ebx,XMM2
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=9
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+9*4
pshufd XMM2,XMM2,00111001b
movd ebx,XMM2
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=10
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+10*4
pshufd XMM2,XMM2,00111001b
movd ebx,XMM2
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=11
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+11*4
pshufd XMM2,XMM2,00111001b
movd ebx,XMM2
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=12
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+12*4
pshufd XMM3,XMM3,00111001b
movd ebx,XMM3
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=13
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+13*4
pshufd XMM3,XMM3,00111001b
movd ebx,XMM3
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=14
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+14*4
pshufd XMM3,XMM3,00111001b
movd ebx,XMM3
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=15
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+15*4
pshufd XMM3,XMM3,00111001b
movd ebx,XMM3
bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=16
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+16*4
pshufd XMM4,XMM4,00111001b
movd ebx,XMM4
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=17
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+17*4
pshufd XMM4,XMM4,00111001b
movd ebx,XMM4
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=18
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+18*4
pshufd XMM4,XMM4,00111001b
movd ebx,XMM4
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=19
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+19*4
pshufd XMM4,XMM4,00111001b
movd ebx,XMM4
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=20
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+20*4
pshufd XMM5,XMM5,00111001b
movd ebx,XMM5
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=21
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+21*4
pshufd XMM5,XMM5,00111001b
movd ebx,XMM5
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=22
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+22*4
pshufd XMM5,XMM5,00111001b
movd ebx,XMM5
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=23
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+23*4
pshufd XMM5,XMM5,00111001b
movd ebx,XMM5
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=24
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+24*4
pshufd XMM6,XMM6,00111001b
movd ebx,XMM6
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=25
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+25*4
pshufd XMM6,XMM6,00111001b
movd ebx,XMM6
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=26
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+26*4
pshufd XMM6,XMM6,00111001b
movd ebx,XMM6
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=27
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+27*4
pshufd XMM6,XMM6,00111001b
movd ebx,XMM6
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=28
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+28*4
pshufd XMM7,XMM7,00111001b
movd ebx,XMM7
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=29
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+29*4
pshufd XMM7,XMM7,00111001b
movd ebx,XMM7
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=30
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+30*4
pshufd XMM7,XMM7,00111001b
movd ebx,XMM7
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=31
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+31*4
pshufd XMM7,XMM7,00111001b
movd ebx,XMM7
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=32
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+32*4
pshufd XMM8,XMM8,00111001b
movd ebx,XMM8
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=33
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+33*4
pshufd XMM8,XMM8,00111001b
movd ebx,XMM8
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=34
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+34*4
pshufd XMM8,XMM8,00111001b
movd ebx,XMM8
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=35
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+35*4
pshufd XMM8,XMM8,00111001b
movd ebx,XMM8
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=36
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+36*4
pshufd XMM9,XMM9,00111001b
movd ebx,XMM9
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=37
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+37*4
pshufd XMM9,XMM9,00111001b
movd ebx,XMM9
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=38
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+38*4
pshufd XMM9,XMM9,00111001b
movd ebx,XMM9
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=39
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+39*4
pshufd XMM9,XMM9,00111001b
movd ebx,XMM9
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=40
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+40*4
pshufd XMM10,XMM10,00111001b
movd ebx,XMM10
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=41
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+41*4
pshufd XMM10,XMM10,00111001b
movd ebx,XMM10
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=42
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+42*4
pshufd XMM10,XMM10,00111001b
movd ebx,XMM10
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=43
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+43*4
pshufd XMM10,XMM10,00111001b
movd ebx,XMM10
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=44
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+44*4
pshufd XMM11,XMM11,00111001b
movd ebx,XMM11
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=45
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+45*4
pshufd XMM11,XMM11,00111001b
movd ebx,XMM11
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=46
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+46*4
pshufd XMM11,XMM11,00111001b
movd ebx,XMM11
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=47
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+47*4
pshufd XMM11,XMM11,00111001b
movd ebx,XMM11
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=48
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+48*4
;pshufd XMM12,XMM12,00111001b
movd ebx,XMM12
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=49
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+49*4
pshufd XMM12,XMM12,00111001b
movd ebx,XMM12
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=50
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+50*4
pshufd XMM12,XMM12,00111001b
movd ebx,XMM12
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=51
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+51*4
pshufd XMM12,XMM12,00111001b
movd ebx,XMM12
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=52
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+52*4
pshufd XMM13,XMM13,00111001b
movd ebx,XMM13
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=53
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+53*4
pshufd XMM13,XMM13,00111001b
movd ebx,XMM13
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=54
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+54*4
pshufd XMM13,XMM13,00111001b
movd ebx,XMM13
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=55
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+55*4
pshufd XMM13,XMM13,00111001b
movd ebx,XMM13
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=56
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+56*4
;pshufd XMM14,XMM14,00111001b
movd ebx,XMM14
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=57
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+57*4
pshufd XMM14,XMM14,00111001b
movd ebx,XMM14
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=58
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+58*4
pshufd XMM14,XMM14,00111001b
movd ebx,XMM14
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=59
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+59*4
pshufd XMM14,XMM14,00111001b
movd ebx,XMM14
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=60
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+60*4
pshufd XMM15,XMM15,00111001b
movd ebx,XMM15
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=61
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+61*4
pshufd XMM15,XMM15,00111001b
movd ebx,XMM15
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=62
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+62*4
pshufd XMM15,XMM15,00111001b
movd ebx,XMM15
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
;i=63
;Инициирую значениа a,b,c,d,e,f,g,h (копирую r12-r15 в r8-r11)__________________________________________
mov r8,r12
mov r9,r13
mov r10,r14
mov r11,r15
rol r12,32 ;B=A
shl r13,32 ;D=C
rol r14,32 ;F=E
shl r15,32 ;H=G
mov eax,r12d
or r13,rax ;C=B
mov eax,r14d
or r15,rax ;G=F
mov rax,0ffffffffh
shl rax,32
and r12,rax ;A=null
and r14,rax ;E=null
;Ma
mov eax,r8d ;eax=A
mov rbx,r8
shr rbx,32 ;ebx=B
mov rcx,r13
shr rcx,32 ;ecx=C
and eax,ebx ;A and B
and ebx,ecx ;B and C
mov edx,r8d ;edx=A
and edx,ecx ;A and C
or eax,ebx ;(A and B) or (B and C)
or edx,eax ;(A and C) or ((A and B) or (B and C))
;edx=Ma
;Ch
mov eax,r10d;eax=E
and eax,r15d;eax=p1=(E and F)
mov ebx,r10d;ebx=E
xor ebx,0ffffffffh ;ebx=p2=(E xor 0ffffffffh)
mov rcx,r15
shr rcx,32 ;ecx=G
and ecx,ebx ;ecx=p3=(p2 and G)
or ecx,eax
;ecx=Ch
;Σо
ror r8d,2 ;a rightrotate 2
mov eax,r8d
ror r8d,11 ;a rightrotate 13:
xor eax,r8d
ror r8d,9 ;a rightrotate 22:
xor r8d,eax
;r8d=Σо
;Σ1
ror r10d,6 ;a rightrotate 6
mov eax,r10d
ror r10d,5 ;a rightrotate 11:
xor eax,r10d
ror r10d,14 ;a rightrotate 22:
xor r10d,eax
;r10d=Σ1
;T1
mov eax,k_konst+63*4
pshufd XMM15,XMM15,00111001b
movd ebx,XMM15
;bswap ebx
add eax,ebx ;Wt+kn
add eax,ecx ;Wt+kn+Ch
add eax,r10d ;Wt+kn+Ch+Σ1
shr r11,32 ;r11d=H
add r11d,eax ;Wt+kn+Ch+Σ1+h
shr r9,32 ;r9d=D
add r9d,r11d ;D+T1
or r14,r9 ;E=D+T1
add r11d,r8d ;T1+Σо
add r11d,edx ;T1+Σо+Ma
or r12,r11 ;A=T1+T2
ret
CompCycle Endp
end