c语言ErrorHandling用法,一个小题目,比谁的算法更好

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

暂且不论效率高低, 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值