📄 bn-win32n.asm
字号:
mov ecx, DWORD [8+esi] mov edx, DWORD [8+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [8+ebx], ecx ; Round 3 mov ecx, DWORD [12+esi] mov edx, DWORD [12+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [12+ebx], ecx ; Round 4 mov ecx, DWORD [16+esi] mov edx, DWORD [16+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [16+ebx], ecx ; Round 5 mov ecx, DWORD [20+esi] mov edx, DWORD [20+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [20+ebx], ecx ; Round 6 mov ecx, DWORD [24+esi] mov edx, DWORD [24+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [24+ebx], ecx ; Round 7 mov ecx, DWORD [28+esi] mov edx, DWORD [28+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [28+ebx], ecx ; add esi, 32 add edi, 32 add ebx, 32 sub ebp, 8 jnz NEAR L018aw_loopL017aw_finish: mov ebp, DWORD [32+esp] and ebp, 7 jz NEAR L019aw_end ; Tail Round 0 mov ecx, DWORD [esi] mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx add esi, 4 add edi, 4 add ebx, 4 dec ebp jz NEAR L019aw_end ; Tail Round 1 mov ecx, DWORD [esi] mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx add esi, 4 add edi, 4 add ebx, 4 dec ebp jz NEAR L019aw_end ; Tail Round 2 mov ecx, DWORD [esi] mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx add esi, 4 add edi, 4 add ebx, 4 dec ebp jz NEAR L019aw_end ; Tail Round 3 mov ecx, DWORD [esi] mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx add esi, 4 add edi, 4 add ebx, 4 dec ebp jz NEAR L019aw_end ; Tail Round 4 mov ecx, DWORD [esi] mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx add esi, 4 add edi, 4 add ebx, 4 dec ebp jz NEAR L019aw_end ; Tail Round 5 mov ecx, DWORD [esi] mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx add esi, 4 add edi, 4 add ebx, 4 dec ebp jz NEAR L019aw_end ; Tail Round 6 mov ecx, DWORD [esi] mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx add esi, 4 add edi, 4 add ebx, 4L019aw_end: cmp DWORD [36+esp], 0 je NEAR L020pw_end mov ebp, DWORD [36+esp] cmp ebp, 0 je NEAR L020pw_end jge NEAR L021pw_pos ; pw_neg mov edx, 0 sub edx, ebp mov ebp, edx and ebp, 4294967288 jz NEAR L022pw_neg_finishL023pw_neg_loop: ; dl<0 Round 0 mov ecx, 0 mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [ebx], ecx ; dl<0 Round 1 mov ecx, 0 mov edx, DWORD [4+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [4+ebx], ecx ; dl<0 Round 2 mov ecx, 0 mov edx, DWORD [8+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [8+ebx], ecx ; dl<0 Round 3 mov ecx, 0 mov edx, DWORD [12+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [12+ebx], ecx ; dl<0 Round 4 mov ecx, 0 mov edx, DWORD [16+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [16+ebx], ecx ; dl<0 Round 5 mov ecx, 0 mov edx, DWORD [20+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [20+ebx], ecx ; dl<0 Round 6 mov ecx, 0 mov edx, DWORD [24+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [24+ebx], ecx ; dl<0 Round 7 mov ecx, 0 mov edx, DWORD [28+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [28+ebx], ecx ; add edi, 32 add ebx, 32 sub ebp, 8 jnz NEAR L023pw_neg_loopL022pw_neg_finish: mov edx, DWORD [36+esp] mov ebp, 0 sub ebp, edx and ebp, 7 jz NEAR L020pw_end ; dl<0 Tail Round 0 mov ecx, 0 mov edx, DWORD [edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 dec ebp mov DWORD [ebx], ecx jz NEAR L020pw_end ; dl<0 Tail Round 1 mov ecx, 0 mov edx, DWORD [4+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 dec ebp mov DWORD [4+ebx], ecx jz NEAR L020pw_end ; dl<0 Tail Round 2 mov ecx, 0 mov edx, DWORD [8+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 dec ebp mov DWORD [8+ebx], ecx jz NEAR L020pw_end ; dl<0 Tail Round 3 mov ecx, 0 mov edx, DWORD [12+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 dec ebp mov DWORD [12+ebx], ecx jz NEAR L020pw_end ; dl<0 Tail Round 4 mov ecx, 0 mov edx, DWORD [16+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 dec ebp mov DWORD [16+ebx], ecx jz NEAR L020pw_end ; dl<0 Tail Round 5 mov ecx, 0 mov edx, DWORD [20+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 dec ebp mov DWORD [20+ebx], ecx jz NEAR L020pw_end ; dl<0 Tail Round 6 mov ecx, 0 mov edx, DWORD [24+edi] sub ecx, eax mov eax, 0 adc eax, eax sub ecx, edx adc eax, 0 mov DWORD [24+ebx], ecx jmp L020pw_endL021pw_pos: and ebp, 4294967288 jz NEAR L024pw_pos_finishL025pw_pos_loop: ; dl>0 Round 0 mov ecx, DWORD [esi] sub ecx, eax mov DWORD [ebx], ecx jnc NEAR L026pw_nc0 ; dl>0 Round 1 mov ecx, DWORD [4+esi] sub ecx, eax mov DWORD [4+ebx], ecx jnc NEAR L027pw_nc1 ; dl>0 Round 2 mov ecx, DWORD [8+esi] sub ecx, eax mov DWORD [8+ebx], ecx jnc NEAR L028pw_nc2 ; dl>0 Round 3 mov ecx, DWORD [12+esi] sub ecx, eax mov DWORD [12+ebx], ecx jnc NEAR L029pw_nc3 ; dl>0 Round 4 mov ecx, DWORD [16+esi] sub ecx, eax mov DWORD [16+ebx], ecx jnc NEAR L030pw_nc4 ; dl>0 Round 5 mov ecx, DWORD [20+esi] sub ecx, eax mov DWORD [20+ebx], ecx jnc NEAR L031pw_nc5 ; dl>0 Round 6 mov ecx, DWORD [24+esi] sub ecx, eax mov DWORD [24+ebx], ecx jnc NEAR L032pw_nc6 ; dl>0 Round 7 mov ecx, DWORD [28+esi] sub ecx, eax mov DWORD [28+ebx], ecx jnc NEAR L033pw_nc7 ; add esi, 32 add ebx, 32 sub ebp, 8 jnz NEAR L025pw_pos_loopL024pw_pos_finish: mov ebp, DWORD [36+esp] and ebp, 7 jz NEAR L020pw_end ; dl>0 Tail Round 0 mov ecx, DWORD [esi] sub ecx, eax mov DWORD [ebx], ecx jnc NEAR L034pw_tail_nc0 dec ebp jz NEAR L020pw_end ; dl>0 Tail Round 1 mov ecx, DWORD [4+esi] sub ecx, eax mov DWORD [4+ebx], ecx jnc NEAR L035pw_tail_nc1 dec ebp jz NEAR L020pw_end ; dl>0 Tail Round 2 mov ecx, DWORD [8+esi] sub ecx, eax mov DWORD [8+ebx], ecx jnc NEAR L036pw_tail_nc2 dec ebp jz NEAR L020pw_end ; dl>0 Tail Round 3 mov ecx, DWORD [12+esi] sub ecx, eax mov DWORD [12+ebx], ecx jnc NEAR L037pw_tail_nc3 dec ebp jz NEAR L020pw_end ; dl>0 Tail Round 4 mov ecx, DWORD [16+esi] sub ecx, eax mov DWORD [16+ebx], ecx jnc NEAR L038pw_tail_nc4 dec ebp jz NEAR L020pw_end ; dl>0 Tail Round 5 mov ecx, DWORD [20+esi] sub ecx, eax mov DWORD [20+ebx], ecx jnc NEAR L039pw_tail_nc5 dec ebp jz NEAR L020pw_end ; dl>0 Tail Round 6 mov ecx, DWORD [24+esi] sub ecx, eax mov DWORD [24+ebx], ecx jnc NEAR L040pw_tail_nc6 mov eax, 1 jmp L020pw_endL041pw_nc_loop: mov ecx, DWORD [esi] mov DWORD [ebx], ecxL026pw_nc0: mov ecx, DWORD [4+esi] mov DWORD [4+ebx], ecxL027pw_nc1: mov ecx, DWORD [8+esi] mov DWORD [8+ebx], ecxL028pw_nc2: mov ecx, DWORD [12+esi] mov DWORD [12+ebx], ecxL029pw_nc3: mov ecx, DWORD [16+esi] mov DWORD [16+ebx], ecxL030pw_nc4: mov ecx, DWORD [20+esi] mov DWORD [20+ebx], ecxL031pw_nc5: mov ecx, DWORD [24+esi] mov DWORD [24+ebx], ecxL032pw_nc6: mov ecx, DWORD [28+esi] mov DWORD [28+ebx], ecxL033pw_nc7: ; add esi, 32 add ebx, 32 sub ebp, 8 jnz NEAR L041pw_nc_loop mov ebp, DWORD [36+esp] and ebp, 7 jz NEAR L042pw_nc_end mov ecx, DWORD [esi] mov DWORD [ebx], ecxL034pw_tail_nc0: dec ebp jz NEAR L042pw_nc_end mov ecx, DWORD [4+esi] mov DWORD [4+ebx], ecxL035pw_tail_nc1: dec ebp jz NEAR L042pw_nc_end mov ecx, DWORD [8+esi] mov DWORD [8+ebx], ecxL036pw_tail_nc2: dec ebp jz NEAR L042pw_nc_end mov ecx, DWORD [12+esi] mov DWORD [12+ebx], ecxL037pw_tail_nc3: dec ebp jz NEAR L042pw_nc_end mov ecx, DWORD [16+esi] mov DWORD [16+ebx], ecxL038pw_tail_nc4: dec ebp jz NEAR L042pw_nc_end mov ecx, DWORD [20+esi] mov DWORD [20+ebx], ecxL039pw_tail_nc5: dec ebp jz NEAR L042pw_nc_end mov ecx, DWORD [24+esi] mov DWORD [24+ebx], ecxL040pw_tail_nc6:L042pw_nc_end: mov eax, 0L020pw_end: pop edi pop esi pop ebx pop ebp ret ; Don't even think of reading this code ; It was automatically generated by co-586.pl ; Which is a perl program used to generate the x86 assember for ; any of ELF, a.out, COFF, Win32, ... ; eric <eaycryptsoft.com> ;global _bn_mul_comba8_bn_mul_comba8: push esi mov esi, DWORD [12+esp] push edi mov edi, DWORD [20+esp] push ebp push ebx xor ebx, ebx mov eax, DWORD [esi] xor ecx, ecx mov edx, DWORD [edi] ; ################## Calculate word 0 xor ebp, ebp ; mul a[0]*b[0] mul edx add ebx, eax mov eax, DWORD [20+esp] adc ecx, edx mov edx, DWORD [edi] adc ebp, 0 mov DWORD [eax], ebx mov eax, DWORD [4+esi] ; saved r[0] ; ################## Calculate word 1 xor ebx, ebx ; mul a[1]*b[0] mul edx add ecx, eax mov eax, DWORD [esi] adc ebp, edx mov edx, DWORD [4+edi] adc ebx, 0 ; mul a[0]*b[1] mul edx add ecx, eax mov eax, DWORD [20+esp] adc ebp, edx mov edx, DWORD [edi] adc ebx, 0 mov DWORD [4+eax], ecx mov eax, DWORD [8+esi] ; saved r[1] ; ################## Calculate word 2 xor ecx, ecx ; mul a[2]*b[0] mul edx add ebp, eax mov eax, DWORD [4+esi] adc ebx, edx mov edx, DWORD [4+edi] adc ecx, 0 ; mul a[1]*b[1] mul edx add ebp, eax mov eax, DWORD [esi] adc ebx, edx mov edx, DWORD [8+edi] adc ecx, 0 ; mul a[0]*b[2] mul edx add ebp, eax mov eax, DWORD [20+esp] adc ebx, edx mov edx, DWORD [edi] adc ecx, 0 mov DWORD [8+eax], ebp mov eax, DWORD [12+esi] ; saved r[2] ; ################## Calculate word 3 xor ebp, ebp ; mul a[3]*b[0] mul edx add ebx, eax mov eax, DWORD [8+esi] adc ecx, edx mov edx, DWORD [4+edi] adc ebp, 0 ; mul a[2]*b[1] mul edx add ebx, eax mov eax, DWORD [4+esi] adc ecx, edx mov edx, DWORD [8+edi] adc ebp, 0 ; mul a[1]*b[2] mul edx add ebx, eax mov eax, DWORD [esi] adc ecx, edx mov edx, DWORD [12+edi] adc ebp, 0 ; mul a[0]*b[3] mul edx add ebx, eax mov eax, DWORD [20+esp] adc ecx, edx mov edx, DWORD [edi] adc ebp, 0 mov DWORD [12+eax], ebx mov eax, DWORD [16+esi] ; saved r[3] ; ################## Calculate word 4 xor ebx, ebx ; mul a[4]*b[0] mul edx add ecx, eax mov eax, DWORD [12+esi] adc ebp, edx mov edx, DWORD [4+edi] adc ebx, 0 ; mul a[3]*b[1] mul edx add ecx, eax mov eax, DWORD [8+esi] adc ebp, edx mov edx, DWORD [8+edi] adc ebx, 0 ; mul a[2]*b[2] mul edx add ecx, eax mov eax, DWORD [4+esi] adc ebp, edx mov edx, DWORD [12+edi] adc ebx, 0 ; mul a[1]*b[3] mul edx add ecx, eax mov eax, DWORD [esi] adc ebp, edx mov edx, DWORD [16+edi] adc ebx, 0 ; mul a[0]*b[4] mul edx add ecx, eax mov eax, DWORD [20+esp] adc ebp, edx mov edx, DWORD [edi] adc ebx, 0 mov DWORD [16+eax], ecx mov eax, DWORD [20+esi] ; saved r[4] ; ################## Calculate word 5 xor ecx, ecx ; mul a[5]*b[0] mul edx add ebp, eax mov eax, DWORD [16+esi] adc ebx, edx mov edx, DWORD [4+edi] adc ecx, 0 ; mul a[4]*b[1] mul edx add ebp, eax mov eax, DWORD [12+esi] adc ebx, edx mov edx, DWORD [8+edi] adc ecx, 0 ; mul a[3]*b[2] mul edx add ebp, eax mov eax, DWORD [8+esi] adc ebx, edx mov edx, DWORD [12+edi] adc ecx, 0 ; mul a[2]*b[3] mul edx add ebp, eax mov eax, DWORD [4+esi] adc ebx, edx mov edx, DWORD [16+edi] adc ecx, 0 ; mul a[1]*b[4] mul edx add ebp, eax mov eax, DWORD [esi] adc ebx, edx mov edx, DWORD [20+edi] adc ecx, 0 ; mul a[0]*b[5] mul edx add ebp, eax mov eax, DWORD [20+esp] adc ebx, edx mov edx, DWORD [edi] adc ecx, 0 mov DWORD [20+eax], ebp mov eax, DWORD [24+esi] ; saved r[5] ; ################## Calculate word 6 xor ebp, ebp ; mul a[6]*b[0] mul edx add ebx, eax mov eax, DWORD [20+esi] adc ecx, edx mov edx, DWORD [4+edi] adc ebp, 0 ; mul a[5]*b[1] mul edx add ebx, eax mov eax, DWORD [16+esi] adc ecx, edx mov edx, DWORD [8+edi] adc ebp, 0 ; mul a[4]*b[2] mul edx add ebx, eax mov eax, DWORD [12+esi] adc ecx, edx mov edx, DWORD [12+edi] adc ebp, 0 ; mul a[3]*b[3] mul edx add ebx, eax mov eax, DWORD [8+esi] adc ecx, edx mov edx, DWORD [16+edi] adc ebp, 0 ; mul a[2]*b[4] mul edx add ebx, eax mov eax, DWORD [4+esi] adc ecx, edx mov edx, DWORD [20+edi] adc ebp, 0 ; mul a[1]*b[5] mul edx add ebx, eax mov eax, DWORD [esi] adc ecx, edx mov edx, DWORD [24+edi] adc ebp, 0 ; mul a[0]*b[6] mul edx add ebx, eax mov eax, DWORD [20+esp] adc ecx, edx mov edx, DWORD [edi] adc ebp, 0 mov DWORD [24+eax], ebx mov eax, DWORD [28+esi] ; saved r[6] ; ################## Calculate word 7 xor ebx, ebx ; mul a[7]*b[0] mul edx add ecx, eax mov eax, DWORD [24+esi] adc ebp, edx mov edx, DWORD [4+edi] adc ebx, 0 ; mul a[6]*b[1] mul edx add ecx, eax mov eax, DWORD [20+esi] adc ebp, edx mov edx, DWORD [8+edi] adc ebx, 0 ; mul a[5]*b[2] mul edx add ecx, eax mov eax, DWORD [16+esi] adc ebp, edx mov edx, DWORD [12+edi] adc ebx, 0 ; mul a[4]*b[3] mul edx add ecx, eax mov eax, DWORD [12+esi] adc ebp, edx mov edx, DWORD [16+edi] adc ebx, 0 ; mul a[3]*b[4] mul edx add ecx, eax mov eax, DWORD [8+esi] adc ebp, edx mov edx, DWORD [20+edi] adc ebx, 0 ; mul a[2]*b[5] mul edx add ecx, eax mov eax, DWORD [4+esi] adc ebp, edx mov edx, DWORD [24+edi] adc ebx, 0 ; mul a[1]*b[6] mul edx add ecx, eax mov eax, DWORD [esi] adc ebp, edx mov edx, DWORD [28+edi] adc ebx, 0 ; mul a[0]*b[7] mul edx add ecx, eax mov eax, DWORD [20+esp] adc ebp, edx mov edx, DWORD [4+edi] adc ebx, 0 mov DWORD [28+eax], ecx mov eax, DWORD [28+esi] ; saved r[7] ; ################## Calculate word 8 xor ecx, ecx ; mul a[7]*b[1] mul edx add ebp, eax mov eax, DWORD [24+esi] adc ebx, edx mov edx, DWORD [8+edi] adc ecx, 0 ; mul a[6]*b[2] mul edx add ebp, eax mov eax, DWORD [20+esi] adc ebx, edx mov edx, DWORD [12+edi] adc ecx, 0 ; mul a[5]*b[3] mul edx add ebp, eax mov eax, DWORD [16+esi] adc ebx, edx mov edx, DWORD [16+edi] adc ecx, 0 ; mul a[4]*b[4] mul edx add ebp, eax mov eax, DWORD [12+esi] adc ebx, edx mov edx, DWORD [20+edi] adc ecx, 0 ; mul a[3]*b[5] mul edx add ebp, eax mov eax, DWORD [8+esi] adc ebx, edx mov edx, DWORD [24+edi] adc ecx, 0 ; mul a[2]*b[6] mul edx add ebp, eax mov eax, DWORD [4+esi] adc ebx, edx mov edx, DWORD [28+edi] adc ecx, 0 ; mul a[1]*b[7] mul edx add ebp, eax mov eax, DWORD [20+esp] adc ebx, edx mov edx, DWORD [8+edi] adc ecx, 0 mov DWORD [32+eax], ebp mov eax, DWORD [28+esi] ; saved r[8] ; ################## Calculate word 9 xor ebp, ebp ; mul a[7]*b[2] mul edx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -