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 cec50c7..44c7ea1 100644 Binary files a/sha-256.dll and b/sha-256.dll differ diff --git a/Книга1.2.xlsm b/Книга1.2.xlsm index 52e7fbc..55c879d 100644 Binary files a/Книга1.2.xlsm and b/Книга1.2.xlsm differ