|
|

楼主 |
发表于 2005-11-26 22:17:00
|
显示全部楼层
Re:想不通,矩形碰撞计算的效率问题
这是反汇编的结果
A
Public Function TestPoint(ByRef inP As SEPoint) As Boolean
00000000 55 push ebp
00000001 8B EC mov ebp,esp
00000003 83 EC 10 sub esp,10h
00000006 57 push edi
00000007 56 push esi
00000008 53 push ebx
00000009 8B F1 mov esi,ecx
0000000b 8B FA mov edi,edx
0000000d 33 DB xor ebx,ebx
0000000f 90 nop
Return inP.X < Loca.X + ValWidth AndAlso inP.X > Loca.X - ValWidth AndAlso _
inP.Y < Loca.Y + ValHeight AndAlso inP.Y > Loca.Y - ValHeight
00000010 D9 07 fld dword ptr [edi]
00000012 D9 06 fld dword ptr [esi]
00000014 D8 46 0C fadd dword ptr [esi+0Ch]
00000017 DF F1 fcomip st,st(1)
00000019 DD D8 fstp st(0)
0000001b 7A 33 jp 00000050
0000001d 76 31 jbe 00000050
0000001f D9 07 fld dword ptr [edi]
00000021 D9 06 fld dword ptr [esi]
00000023 D8 66 0C fsub dword ptr [esi+0Ch]
00000026 DF F1 fcomip st,st(1)
00000028 DD D8 fstp st(0)
0000002a 7A 24 jp 00000050
0000002c 73 22 jae 00000050
0000002e D9 47 04 fld dword ptr [edi+4]
00000031 D9 46 04 fld dword ptr [esi+4]
00000034 D8 46 08 fadd dword ptr [esi+8]
00000037 DF F1 fcomip st,st(1)
00000039 DD D8 fstp st(0)
0000003b 7A 13 jp 00000050
0000003d 76 11 jbe 00000050
0000003f D9 47 04 fld dword ptr [edi+4]
00000042 D9 46 04 fld dword ptr [esi+4]
00000045 D8 66 08 fsub dword ptr [esi+8]
00000048 DF F1 fcomip st,st(1)
0000004a DD D8 fstp st(0)
0000004c 7A 02 jp 00000050
0000004e 72 09 jb 00000059
00000050 C7 45 F0 00 00 00 00 mov dword ptr [ebp-10h],0
00000057 EB 07 jmp 00000060
00000059 C7 45 F0 01 00 00 00 mov dword ptr [ebp-10h],1
00000060 0F B6 45 F0 movzx eax,byte ptr [ebp-10h]
00000064 8B D8 mov ebx,eax
00000066 EB 00 jmp 00000068
End Function
00000068 8B C3 mov eax,ebx
0000006a 5B pop ebx
0000006b 5E pop esi
0000006c 5F pop edi
0000006d 8B E5 mov esp,ebp
0000006f 5D pop ebp
00000070 C3 ret
B
Public Function TestPoint(ByRef inP As SEPoint) As Boolean
00000000 55 push ebp
00000001 8B EC mov ebp,esp
00000003 83 EC 18 sub esp,18h
00000006 57 push edi
00000007 56 push esi
00000008 53 push ebx
00000009 8B F1 mov esi,ecx
0000000b 8B FA mov edi,edx
0000000d 33 DB xor ebx,ebx
0000000f 90 nop
Return Abs(inP.X - Loca.X) < ValWidth AndAlso Abs(inP.Y - Loca.Y) < ValHeight
00000010 D9 07 fld dword ptr [edi]
00000012 D8 26 fsub dword ptr [esi]
00000014 D9 E1 fabs
00000016 D9 5D F0 fstp dword ptr [ebp-10h]
00000019 D9 45 F0 fld dword ptr [ebp-10h]
0000001c D9 46 0C fld dword ptr [esi+0Ch]
0000001f DF F1 fcomip st,st(1)
00000021 DD D8 fstp st(0)
00000023 7A 1B jp 00000040
00000025 76 19 jbe 00000040
00000027 D9 47 04 fld dword ptr [edi+4]
0000002a D8 66 04 fsub dword ptr [esi+4]
0000002d D9 E1 fabs
0000002f D9 5D E8 fstp dword ptr [ebp-18h]
00000032 D9 45 E8 fld dword ptr [ebp-18h]
00000035 D9 46 08 fld dword ptr [esi+8]
00000038 DF F1 fcomip st,st(1)
0000003a DD D8 fstp st(0)
0000003c 7A 02 jp 00000040
0000003e 77 09 ja 00000049
00000040 C7 45 EC 00 00 00 00 mov dword ptr [ebp-14h],0
00000047 EB 07 jmp 00000050
00000049 C7 45 EC 01 00 00 00 mov dword ptr [ebp-14h],1
00000050 0F B6 45 EC movzx eax,byte ptr [ebp-14h]
00000054 8B D8 mov ebx,eax
00000056 EB 00 jmp 00000058
End Function
00000058 8B C3 mov eax,ebx
0000005a 5B pop ebx
0000005b 5E pop esi
0000005c 5F pop edi
0000005d 8B E5 mov esp,ebp
0000005f 5D pop ebp
00000060 C3 ret
|
|