From 967d1f6a606aac34722e7c0627135b1996e49d58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B0=D1=81=20=D0=9C=D0=B8=D1=85=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=20WindowsDesktop?= Date: Fri, 20 Aug 2021 21:58:45 +0300 Subject: [PATCH] Beta v0.1 --- sha-256.asm | 4673 ++++++++++++++++++++++++++++++++++++++++++++++++- sha-256.dll | Bin 9216 -> 22528 bytes Книга1.2.xlsm | Bin 51152 -> 51628 bytes 3 files changed, 4670 insertions(+), 3 deletions(-) diff --git a/sha-256.asm b/sha-256.asm index b18d721..a1e710a 100644 --- a/sha-256.asm +++ b/sha-256.asm @@ -226,9 +226,10 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C ;Счётчик цикла=0? cycleCheck: mov eax,cyclesInSegment + cycleCheck1: cmp eax,0 je exithash - ;Беру очередной блок 64B В XMM0-XMM4 + ;Нет. Беру очередной блок 64B В XMM0-XMM4 mov rax,CF_Addr movdqu XMM0,XMMWORD PTR [rax] movdqu XMM1,XMMWORD PTR [rax+16] @@ -236,12 +237,38 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C 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] @@ -249,6 +276,47 @@ Sha256 proc CF_Addr:QWORD,CF_FullSize:QWORD,CF_CurrSize:QWORD,CF_digests:QWORD,C 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+4 + mov R14,myRnSAVE+8 + mov R15,myRnSAVE+12 ret Sha256 Endp ;Инициализация хэш функции, ввод исходных значений @@ -2276,6 +2344,4605 @@ CompCycle proc; Цикл сжатия. Вынес в отдельную проц 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 \ No newline at end of file diff --git a/sha-256.dll b/sha-256.dll index cec50c76daf502ce0a2a3a4ce79ff1231fe5b401..44c7ea1018d8b2aa1098a502d220abb9503b84de 100644 GIT binary patch delta 2279 zcmbW2e`r%z6vyv-OY4GdU+mH!&ZbGz)^*OtYBp`%=IVUWWLDioK_P8Zu(cvx!-!A@ z+J~WFi5(5szh=cC*nfr)?4*pXTZ)3KKcMJ8l_CiG$1pZ4xCts4zxO@!)N=Zd56(UJ ze(t&7dvkNRNAqh*X?Uh|v+qG0Ks$e_g8Ly;qx3r-k#F&QZ2!iT(T&m8q zfmHDCbCNt=V?W)vQ9+>>hIicH%m`$n_oc`(Z)$Kr3?O|E zE`92;(t9a{P2nfP!mCQJPZRBqVbShQh_+Qt3fGwuZO^o5kK7aO(fO9x`DUzZiCs{2 zcge52i59r2%X|H?NB-!QXyB!%tgx1(!LO-UzL}!ea5U)N z61uldU5TWPUs18WnJNxJ=WD)#tBojwq{_xVjnm3|MuH&OJz zMvB&xv}=PNJ12D0rtaDG6rK5uqRUA7&8K?o6QTRq)Qx&6`o}to{=b%@9)o6u?sHT3 zV1pjJfF{;Z^p1z1O0l3mC7f#NQk7$ubIMAfp61$WnvZ`%@}kTtgCmil&u=)~;twpU zrE&0MGMd*>Sh@C*fsxG6zHOdeT7);Qq~m*QX+BzGa3nSKXHEUP)ik#+!neE0ch za44I3t^DOOB9ZQI@h482*Dt~kR2uO}Z|Io$t($J*n5mk^mRH%^C#lPN#Fe9YYOCK$JjY% Go8=`jINXW= delta 631 zcmZqJz}Vn1;f7fD6!}C3DEPpjq`=L@C&M5$@trYaz+@#xa~=Z*h6bQ?i6H}n#^i~N z%B%uF5t+$>Ogbz;hQLHcX(7Fm)QS?In)i}GLI8-RCck1-<^)PJFafdLWHBarP6r^1 z1&9?k+cBMCWHM!*%)=7Tug}2nTBZ3HLn)_6ujo7d$yF?B;y^LSogia;dRYU291r7@ z|3%&9CvRuj#AL`gIh*wZqs-(OHVN)TMxbPG>wB=!N-gItOXChGGrZ7|%tC^(J<0C?wpvH$=8 diff --git a/Книга1.2.xlsm b/Книга1.2.xlsm index 52e7fbc4930c17ed2d51d7a276c1ce89baaf37c2..55c879d89b0935d4bf16da01e6f5cf6bdc1eb284 100644 GIT binary patch delta 27250 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
    ? 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 delta 26812 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