📄 x86nt32.asm
字号:
TITLE bn_mulw.c .386P.model FLATPUBLIC _bn_mul_add_word_TEXT SEGMENT; File bn_mulw.c_bn_mul_add_word PROC NEAR push ebp push ebx push esi push edi mov edi,DWORD PTR 20[esp] ; r mov ebx,DWORD PTR 24[esp] ; a mov ecx,DWORD PTR 32[esp] ; w xor esi,esi ; c=0 mov ebp,DWORD PTR 28[esp] ; num shr ebp,2 ; num/4 jz $L666$L546: ; Round one mov eax,DWORD PTR [ebx] ; edx:eax = *a * w mul ecx add eax,DWORD PTR [edi] ; *r+=ax adc edx,0 add eax,esi ; edx:eax += c adc edx,0 mov DWORD PTR [edi],eax ; *r+=ax mov esi,edx ; c = overflow ; Round two mov eax,DWORD PTR 4[ebx] ; edx:eax = *a * w mul ecx add eax,DWORD PTR 4[edi] ; *r+=ax adc edx,0 add eax,esi ; edx:eax += c adc edx,0 mov DWORD PTR 4[edi],eax ; *r+=ax mov esi,edx ; c = overflow ; Round three mov eax,DWORD PTR 8[ebx] ; edx:eax = *a * w mul ecx add eax,DWORD PTR 8[edi] ; *r+=ax adc edx,0 add eax,esi ; edx:eax += c adc edx,0 mov DWORD PTR 8[edi],eax ; *r+=ax mov esi,edx ; c = overflow ; Round four mov eax,DWORD PTR 12[ebx] ; edx:eax = *a * w mul ecx add eax,DWORD PTR 12[edi] ; *r+=ax adc edx,0 add eax,esi ; edx:eax += c adc edx,0 mov DWORD PTR 12[edi],eax ; *r+=ax mov esi,edx ; c = overflow add ebx,16 add edi,16 dec ebp jz $L666 jmp $L546$L666: mov ebp,DWORD PTR 28[esp] ; num and ebp,3 ; num%4 jz $L547 ; Round one mov eax,DWORD PTR [ebx] ; edx:eax = *a * w mul ecx add eax,DWORD PTR [edi] ; *r+=ax adc edx,0 add eax,esi ; edx:eax += c adc edx,0 mov DWORD PTR [edi],eax ; *r+=ax mov esi,edx ; c = overflow dec ebp jz $L547 ; Round two mov eax,DWORD PTR 4[ebx] ; edx:eax = *a * w mul ecx add eax,DWORD PTR 4[edi] ; *r+=ax adc edx,0 add eax,esi ; edx:eax += c adc edx,0 mov DWORD PTR 4[edi],eax ; *r+=ax mov esi,edx ; c = overflow dec ebp jz $L547 ; Round three mov eax,DWORD PTR 8[ebx] ; edx:eax = *a * w mul ecx add eax,DWORD PTR 8[edi] ; *r+=ax adc edx,0 add eax,esi ; edx:eax += c adc edx,0 mov DWORD PTR 8[edi],eax ; *r+=ax mov esi,edx ; c = overflow$L547: mov eax,esi pop edi pop esi pop ebx pop ebp ret_bn_mul_add_word ENDP_TEXT ENDSPUBLIC _bn_mul_word_TEXT SEGMENT_bn_mul_word PROC NEAR push ebp push ebx push esi push edi mov edi,DWORD PTR 20[esp] ; r mov ebx,DWORD PTR 24[esp] ; a mov ebp,DWORD PTR 28[esp] ; num mov ecx,DWORD PTR 32[esp] ; w xor esi,esi ; c=0 shr ebp,2 ; num/4 jz $L266$L593: ; Round one mov eax,DWORD PTR [ebx] ; edx:eax= w * *a mul ecx add eax,esi ; edx:eax+=c adc edx,0 mov DWORD PTR [edi],eax ; *r=eax mov esi,edx ; c=edx ; Round two mov eax,DWORD PTR 4[ebx] ; edx:eax= w * *a mul ecx add eax,esi ; edx:eax+=c adc edx,0 mov DWORD PTR 4[edi],eax ; *r=eax mov esi,edx ; c=edx ; Round three mov eax,DWORD PTR 8[ebx] ; edx:eax= w * *a mul ecx add eax,esi ; edx:eax+=c adc edx,0 mov DWORD PTR 8[edi],eax ; *r=eax mov esi,edx ; c=edx ; Round four mov eax,DWORD PTR 12[ebx] ; edx:eax= w * *a mul ecx add eax,esi ; edx:eax+=c adc edx,0 mov DWORD PTR 12[edi],eax ; *r=eax mov esi,edx ; c=edx add ebx,16 add edi,16 dec ebp jz $L266 jmp $L593$L266: mov ebp,DWORD PTR 28[esp] ; num and ebp,3 jz $L601 ; Round one mov eax,DWORD PTR [ebx] ; edx:eax= w * *a mul ecx add eax,esi ; edx:eax+=c adc edx,0 mov DWORD PTR [edi],eax ; *r=eax mov esi,edx ; c=edx dec ebp jz $L601 ; Round two mov eax,DWORD PTR 4[ebx] ; edx:eax= w * *a mul ecx add eax,esi ; edx:eax+=c adc edx,0 mov DWORD PTR 4[edi],eax ; *r=eax mov esi,edx ; c=edx dec ebp jz $L601 ; Round three mov eax,DWORD PTR 8[ebx] ; edx:eax= w * *a mul ecx add eax,esi ; edx:eax+=c adc edx,0 mov DWORD PTR 8[edi],eax ; *r=eax mov esi,edx ; c=edx$L601: mov eax,esi pop edi pop esi pop ebx pop ebp ret_bn_mul_word ENDP_TEXT ENDSPUBLIC _bn_sqr_words_TEXT SEGMENT_bn_sqr_words PROC NEAR push ebx push esi push edi mov esi,DWORD PTR 16[esp] ; r mov edi,DWORD PTR 20[esp] ; a mov ebx,DWORD PTR 24[esp] ; num shr ebx,2 ; num/4 jz $L111$L640: ; Round 1 mov eax, DWORD PTR [edi] mul eax ; *a * *a mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],edx ; Round 2 mov eax, DWORD PTR 4[edi] mul eax ; *a * *a mov DWORD PTR 8[esi],eax mov DWORD PTR 12[esi],edx ; Round 3 mov eax, DWORD PTR 8[edi] mul eax ; *a * *a mov DWORD PTR 16[esi],eax mov DWORD PTR 20[esi],edx ; Round 4 mov eax, DWORD PTR 12[edi] mul eax ; *a * *a mov DWORD PTR 24[esi],eax mov DWORD PTR 28[esi],edx add edi,16 add esi,32 dec ebx jz $L111 jmp $L640$L111: mov ebx,DWORD PTR 24[esp] ; num and ebx,3 ; num%3 jz $L645 ; Round 1 mov eax, DWORD PTR [edi] mul eax ; *a * *a mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],edx dec ebx jz $L645 ; Round 2 mov eax, DWORD PTR 4[edi] mul eax ; *a * *a mov DWORD PTR 8[esi],eax mov DWORD PTR 12[esi],edx dec ebx jz $L645 ; Round 3 mov eax, DWORD PTR 8[edi] mul eax ; *a * *a mov DWORD PTR 16[esi],eax mov DWORD PTR 20[esi],edx$L645: pop edi pop esi pop ebx ret_bn_sqr_words ENDP_TEXT ENDSPUBLIC _bn_div64_TEXT SEGMENT_bn_div64 PROC NEAR mov edx, DWORD PTR 4[esp] mov eax, DWORD PTR 8[esp] div DWORD PTR 12[esp] ret_bn_div64 ENDP_TEXT ENDSEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -