该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
暂且不论效率高低, LZ先看看VC的反汇编代码:
这个是LZ核心代码所涉及到的全部反汇编代码:
a=(long)sqrt(b/5);
00401046 mov eax,dword ptr [ebp-8]
00401049 cdq
0040104A mov ecx,5
0040104F idiv eax,ecx
00401051 mov dword ptr [ebp-0Ch],eax
00401054 fild dword ptr [ebp-0Ch]
00401057 sub esp,8
0040105A fstp qword ptr [esp]
0040105D call _sqrt (00401104)
00401062 add esp,8
00401065 call __ftol (00401378)
0040106A mov dword ptr [ebp-4],eax
if((a+1)*a*5+2*a<=b)a++;
0040106D mov edx,dword ptr [ebp-4]
00401070 add edx,1
00401073 imul edx,dword ptr [ebp-4]
00401077 imul edx,edx,5
0040107A mov eax,dword ptr [ebp-4]
0040107D lea ecx,[edx+eax*2]
00401080 cmp ecx,dword ptr [ebp-8]
00401083 jg main+7Eh (0040108e)
00401085 mov edx,dword ptr [ebp-4]
00401088 add edx,1
0040108B mov dword ptr [ebp-4],edx
_sqrt:
00401104 lea edx,[esp+4]
00401108 call __fload_withFB (004017a5)->
0040110D push edx
0040110E wait
0040110F fnstcw word ptr [esp]
00401112 mov eax,dword ptr [esp+0Ch]
00401116 je _sqrt+65h (00401169)
00401118 cmp word ptr [esp],offset _sqrt+18h (0040111c)
0040111E je _sqrt+21h (00401125)
00401120 call __load_CW (00401775)->
00401125 test eax,80000000h
0040112A jne _sqrt+47h (0040114b)
0040112C fsqrt
0040112E cmp dword ptr [___fastflag (0042bb18)],0
00401135 jne __fast_exit (004017fe)
0040113B mov edx,5
00401140 lea ecx,[___xt_z+104h (0042aa30)]
00401146 jmp __math_exit (0040180b)
0040114B test eax,7FF00000h
00401150 jne _sqrt+7Ah (0040117e)
00401152 test eax,0FFFFFh
00401157 jne _sqrt+7Ah (0040117e)
00401159 cmp dword ptr [esp+8],0
0040115E jne _sqrt+7Ah (0040117e)
00401160 jmp _sqrt+2Ah (0040112e)
00401162 call __convertTOStoQNaN (0040178c)
00401167 jmp _sqrt+87h (0040118b)
00401169 test eax,0FFFFFh
0040116E jne _sqrt+5Eh (00401162)
00401170 cmp dword ptr [esp+8],0
00401175 jne _sqrt+5Eh (00401162)
00401177 and eax,80000000h
0040117C je _sqrt+2Ah (0040112e)
0040117E fstp st(0)
00401180 fld tbyte ptr [__indefinite (0042aa60)]
00401186 mov eax,1
0040118B cmp dword ptr [___fastflag (0042bb18)],0
00401192 jne __fast_exit (004017fe)
00401198 mov edx,5
0040119D lea ecx,[___xt_z+104h (0042aa30)]
004011A3 call __startOneArgErrorHandling (00401717)
004011A8 pop edx
004011A9 ret
__fload_withFB:
004017A5 mov eax,dword ptr [edx+4]
004017A8 and eax,7FF00000h
004017AD cmp eax,7FF00000h
004017B2 je __fload_withFB+12h (004017b7)
004017B4 fld qword ptr [edx]
004017B6 ret
004017B7 mov eax,dword ptr [edx+4]
004017BA sub esp,0Ah
004017BD or eax,7FFF0000h
004017C2 mov dword ptr [esp+6],eax
004017C6 mov eax,dword ptr [edx+4]
004017C9 mov ecx,dword ptr [edx]
004017CB shld eax,ecx,0Bh
004017CF shl ecx,0Bh
004017D2 mov dword ptr [esp+4],eax
004017D6 mov dword ptr [esp],ecx
004017D9 fld tbyte ptr [esp]
004017DC add esp,0Ah
004017DF test eax,0
004017E4 mov eax,dword ptr [edx+4]
004017E7 ret
__load_CW:
00401775 mov edx,dword ptr [esp+4]
00401779 and edx,300h
0040177F or edx,7Fh
00401782 mov word ptr [esp+6],dx
00401787 fldcw word ptr [esp+6]
0040178B ret
__startOneArgErrorHandling:
00401717 push ebp
00401718 mov ebp,esp
0040171A add esp,0E0h
0040171D mov dword ptr [ebp-20h],eax
00401720 fstp qword ptr [ebp-8]
00401723 mov dword ptr [ebp-1Ch],ecx
00401726 mov eax,dword ptr [ebp+10h]
00401729 mov ecx,dword ptr [ebp+14h]
0040172C mov dword ptr [ebp-18h],eax
0040172F mov dword ptr [ebp-14h],ecx
00401732 lea eax,[ebp+8]
00401735 lea ecx,[ebp-20h]
00401738 push eax
00401739 push ecx
0040173A push edx
0040173B call __87except (004064d0)
00401740 add esp,0Ch
00401743 fld qword ptr [ebp-8]
00401746 cmp word ptr [ebp+8],offset __startOneArgErrorHandling+33h (0040174a)
0040174C je __startOneArgErrorHandling+3Ah (00401751)
0040174E fldcw word ptr [ebp+8]
00401751 leave
00401752 ret
__convertTOStoQNaN:
0040178C test eax,80000h
00401791 je __convertTOStoQNaN+0Dh (00401799)
00401793 mov eax,7
00401798 ret
00401799 fadd qword ptr [string "The value of ESP was not properl"...+0ECh (00428160)]
0040179F mov eax,1
004017A4 ret
__ftol:
00401378 push ebp
00401379 mov ebp,esp
0040137B add esp,0F4h
0040137E wait
0040137F fnstcw word ptr [ebp-2]
00401382 wait
00401383 mov ax,word ptr [ebp-2]
00401387 or ah,0Ch
0040138A mov word ptr [ebp-4],ax
0040138E fldcw word ptr [ebp-4]
00401391 fistp qword ptr [ebp-0Ch]
00401394 fldcw word ptr [ebp-2]
00401397 mov eax,dword ptr [ebp-0Ch]
0040139A mov edx,dword ptr [ebp-8]
0040139D leave
0040139E ret