Author: Lance Perkins
Date: 10:43:06 08/23/04
So, Paul, take a hike (just kidding).
Since some were asking how exe files are disassembled, here's something for all
of us.
Google for any disassmbler. I found this one:
http://cyber.chongju.ac.kr/~sangcho/disasm.html
Run this:
dsassm02.exe ELChinito_325.exe >elchinito.lst
Warning, the resulting LST file is huge.
Since this is a different disassembler from the one used by Paul, the labels are
different, but its the same assembly code. The display convention is also
different. For example, here, -1 is displayed as -00000001. In that of Paul, it
is FFFFFFFFh. Its the same thing of course.
Here is the relevant output. I've added the corresponding Crafty code (see
Crafry v8.12; the actual source used by the cloner maybe from an older version).
If this is a quiz from one of Bob's classes, I'd be happy to be a student.
So go ahead. Do it yourself, and see that Bob and Paul are correct all along.
--------------------------------------------------------------------------
; This code calls EvaluateMate - it is just a portion of Evaluate
:00424FA7 8B1520354B00 mov edx, dword[004B3520]
:00424FAD A1F8344B00 mov eax, dword[004B34F8]
:00424FB2 8B0D24354B00 mov ecx, dword[004B3524]
:00424FB8 0BC2 or eax, edx
:00424FBA 0FBE15A1354B00 movsx edx, byte[004B35A1]
:00424FC1 A3F0424B00 mov dword[004B42F0], eax
:00424FC6 A1FC344B00 mov eax, dword[004B34FC]
:00424FCB 0BC1 or eax, ecx
:00424FCD 0FBE0DA5354B00 movsx ecx, byte[004B35A5]
:00424FD4 03CA add ecx, edx
:00424FD6 A3F4424B00 mov dword[004B42F4], eax
:00424FDB 755B jne 00425038
int ms=EvaluateMate(tree);
:00424FDD E89E530000 call 0042A380
if (ms == 99999) break; // the infamous 99999 bug
:00424FE2 3D9F860100 cmp eax, 0001869F
:00424FE7 744F je 00425038
score+=ms;
:00424FE9 03D8 add ebx, eax
if (score>DrawScore(1) && drawn_ending==-1)
:00424FEB A1E41B4400 mov eax, dword[00441BE4]
:00424FF0 3BD8 cmp ebx, eax
:00424FF2 7E1A jle 0042500E
:00424FF4 83FEFF cmp esi, -00000001
:00424FF7 7513 jne 0042500C
return(DrawScore(wtm));
:00424FF9 8B450C mov eax, dword[ebp+0C]
:00424FFC 50 push eax
:00424FFD E85EFDFFFF call 00424D60
:00425002 83C404 add esp, 00000004
:00425005 5F pop edi
:00425006 5E pop esi
:00425007 5B pop ebx
:00425008 8BE5 mov esp, ebp
:0042500A 5D pop ebp
:0042500B C3 ret
---------
:0042500C 3BD8 cmp ebx, eax
---------
:0042500E 7D18 jge 00425028
:00425010 83FEFE cmp esi, -00000002
:00425013 7513 jne 00425028
:00425015 8B4D0C mov ecx, dword[ebp+0C]
:00425018 51 push ecx
:00425019 E842FDFFFF call 00424D60
:0042501E 83C404 add esp, 00000004
:00425021 5F pop edi
:00425022 5E pop esi
:00425023 5B pop ebx
:00425024 8BE5 mov esp, ebp
:00425026 5D pop ebp
:00425027 C3 ret
etc. etc. etc...
--------------------------------------------------------------------------
; This is EvaluateMate
if ((TotalBlackPieces==0) && (TotalWhitePieces==6) &&
(!WhitePawns) && (!BlackPawns) && WhiteBishops && WhiteKnights) {
((TotalBlackPieces==0) test
:0042A380 8A0DA2354B00 mov cl, byte[004B35A2]
:0042A386 84C9 test cl, cl
:0042A388 A1E41B4400 mov eax, dword[00441BE4]
:0042A38D 8A155D354B00 mov dl, byte[004B355D]
:0042A393 53 push ebx
:0042A394 56 push esi
:0042A395 57 push edi
:0042A396 0F858A000000 jne 0042A426
(TotalWhitePieces==6) test
:0042A39C 803D9E354B0006 cmp byte[004B359E], 06
:0042A3A3 0F85FE000000 jne 0042A4A7
(!WhitePawns) test
:0042A3A9 8B0DF8344B00 mov ecx, dword[004B34F8]
:0042A3AF 0B0DFC344B00 or ecx, dword[004B34FC]
:0042A3B5 0F85EC000000 jne 0042A4A7
(!BlackPawns)
:0042A3BB 8B0D20354B00 mov ecx, dword[004B3520]
:0042A3C1 0B0D24354B00 or ecx, dword[004B3524]
:0042A3C7 0F85DA000000 jne 0042A4A7
WhiteBishops test
:0042A3CD 8B0D08354B00 mov ecx, dword[004B3508]
:0042A3D3 8B350C354B00 mov esi, dword[004B350C]
:0042A3D9 8BF9 mov edi, ecx
:0042A3DB 0BFE or edi, esi
:0042A3DD 0F84C4000000 je 0042A4A7
WhiteKnights test
:0042A3E3 8B3D00354B00 mov edi, dword[004B3500]
:0042A3E9 0B3D04354B00 or edi, dword[004B3504]
:0042A3EF 0F84B2000000 je 0042A4A7
:0042A3F5 A140AD4600 mov eax, dword[0046AD40]
:0042A3FA 23C1 and eax, ecx
:0042A3FC 8B0D44AD4600 mov ecx, dword[0046AD44]
:0042A402 23CE and ecx, esi
:0042A404 0BC1 or eax, ecx
:0042A406 740F je 0042A417
:0042A408 0FBEC2 movsx eax, dl
:0042A40B 0FBE8038C74300 movsx eax, byte[eax+0043C738]
:0042A412 E990000000 jmp 0042A4A7
---------
:0042A417 0FBECA movsx ecx, dl
:0042A41A 0FBE81B8C64300 movsx eax, byte[ecx+0043C6B8]
:0042A421 E981000000 jmp 0042A4A7
---------
:0042A426 80F906 cmp cl, 06
:0042A429 757C jne 0042A4A7
:0042A42B 8A0D9E354B00 mov cl, byte[004B359E]
:0042A431 84C9 test cl, cl
:0042A433 7572 jne 0042A4A7
:0042A435 8B0DF8344B00 mov ecx, dword[004B34F8]
:0042A43B 0B0DFC344B00 or ecx, dword[004B34FC]
:0042A441 7564 jne 0042A4A7
:0042A443 8B0D20354B00 mov ecx, dword[004B3520]
:0042A449 0B0D24354B00 or ecx, dword[004B3524]
:0042A44F 7556 jne 0042A4A7
:0042A451 8B0D30354B00 mov ecx, dword[004B3530]
:0042A457 8B3534354B00 mov esi, dword[004B3534]
:0042A45D 8BF9 mov edi, ecx
:0042A45F 0BFE or edi, esi
:0042A461 7444 je 0042A4A7
:0042A463 8B3D28354B00 mov edi, dword[004B3528]
:0042A469 0B3D2C354B00 or edi, dword[004B352C]
:0042A46F 7436 je 0042A4A7
:0042A471 8B1D40AD4600 mov ebx, dword[0046AD40]
:0042A477 8B3D44AD4600 mov edi, dword[0046AD44]
:0042A47D 23CB and ecx, ebx
:0042A47F 23F7 and esi, edi
:0042A481 8BC1 mov eax, ecx
:0042A483 0BC6 or eax, esi
:0042A485 7410 je 0042A497
:0042A487 0FBE055C354B00 movsx eax, byte[004B355C]
:0042A48E 0FBE8038C74300 movsx eax, byte[eax+0043C738]
:0042A495 EB0E jmp 0042A4A5
---------
:0042A497 0FBE0D5C354B00 movsx ecx, byte[004B355C]
:0042A49E 0FBE81B8C64300 movsx eax, byte[ecx+0043C6B8]
---------
:0042A4A5 F7D8 neg eax
---------
:0042A4A7 85C0 test eax, eax
:0042A4A9 0F859E000000 jne 0042A54D
:0042A4AF 8B0D58354B00 mov ecx, dword[004B3558]
:0042A4B5 85C9 test ecx, ecx
:0042A4B7 7E4D jle 0042A506
:0042A4B9 0FBE3D5C354B00 movsx edi, byte[004B355C]
:0042A4C0 0FBECA movsx ecx, dl
:0042A4C3 0FBE99F8C64300 movsx ebx, byte[ecx+0043C6F8]
:0042A4CA 8BD1 mov edx, ecx
:0042A4CC 83E207 and edx, 00000007
:0042A4CF 8BC7 mov eax, edi
:0042A4D1 83E007 and eax, 00000007
:0042A4D4 2BC2 sub eax, edx
:0042A4D6 99 cdq
:0042A4D7 8BF0 mov esi, eax
:0042A4D9 33F2 xor esi, edx
:0042A4DB 8BC7 mov eax, edi
:0042A4DD C1F803 sar eax, 03
:0042A4E0 C1F903 sar ecx, 03
:0042A4E3 2BC1 sub eax, ecx
:0042A4E5 2BF2 sub esi, edx
:0042A4E7 99 cdq
:0042A4E8 33C2 xor eax, edx
:0042A4EA 2BC2 sub eax, edx
:0042A4EC 3BF0 cmp esi, eax
:0042A4EE 7E02 jle 0042A4F2
:0042A4F0 8BC6 mov eax, esi
---------
:0042A4F2 B903000000 mov ecx, 00000003
:0042A4F7 2BC8 sub ecx, eax
:0042A4F9 8D0449 lea eax, dword[ecx+2*ecx]
:0042A4FC 5F pop edi
:0042A4FD 8D0C18 lea ecx, dword[eax+ebx]
:0042A500 5E pop esi
:0042A501 8D0481 lea eax, dword[ecx+4*eax]
:0042A504 5B pop ebx
:0042A505 C3 ret
---------
:0042A506 7D45 jge 0042A54D
:0042A508 0FBE3D5C354B00 movsx edi, byte[004B355C]
:0042A50F 0FBE9FF8C64300 movsx ebx, byte[edi+0043C6F8]
:0042A516 0FBEF2 movsx esi, dl
:0042A519 8BD6 mov edx, esi
:0042A51B 83E207 and edx, 00000007
:0042A51E 8BC7 mov eax, edi
:0042A520 83E007 and eax, 00000007
:0042A523 2BC2 sub eax, edx
:0042A525 99 cdq
:0042A526 8BC8 mov ecx, eax
:0042A528 33CA xor ecx, edx
:0042A52A 8BC7 mov eax, edi
:0042A52C C1F803 sar eax, 03
:0042A52F C1FE03 sar esi, 03
:0042A532 2BC6 sub eax, esi
:0042A534 2BCA sub ecx, edx
:0042A536 99 cdq
:0042A537 33C2 xor eax, edx
:0042A539 2BC2 sub eax, edx
:0042A53B F7DB neg ebx
:0042A53D 3BC8 cmp ecx, eax
:0042A53F 7E02 jle 0042A543
:0042A541 8BC1 mov eax, ecx
---------
:0042A543 8D4440F7 lea eax, dword[eax+2*eax-09]
:0042A547 8D0C18 lea ecx, dword[eax+ebx]
:0042A54A 8D0481 lea eax, dword[ecx+4*eax]
---------
:0042A54D 5F pop edi
:0042A54E 5E pop esi
:0042A54F 5B pop ebx
:0042A550 C3 ret
This page took 0.02 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.