Author: Gerd Isenberg
Date: 10:47:53 08/23/04
Dear Mr. Hunter, some questions about the // comments in the El Chinito assembly. Are these symbols from the executable, mapping those ip-addresses? Or did you insert them manually with crafty source in mind?. Using constants like 999999 is quite common, doing some switch case too. A return of 1 may be return TRUE for instance. GetMove data structures and pattern may also likely the same. Puplishing open source code implies sharing of data structures, like arrays of moves and how to do some bookholding. The source code might be quiet different and independently developed with similar data structures, solving a _standard_ pattern, getting a move out of an array of moves with different states, _and_ compiler may produce similar assembly for that. Such "standard" code like NextMove is IMHO not sufficent to proof El Chinito as Crafty clone. Did i missed something? BTW. Is it legal to disassembly others executables? Gerd // NextMove() from ElChinito 3.25 // ------------------------------- Fun42f9a0 :: ; proc near // NextMove() sub esp , 0Ch push ebx push ebp mov ebp , dword ptr [ esp + 24 ] push esi push edi lea edi , dword ptr [ ebp + 2 * ebp ] shl edi , 02h mov eax , dword ptr [ edi + 04B35C8h ] dec eax cmp eax , 09h mov dword ptr [ esp + 20 ] , edi ja Label43009e jmp dword ptr [ 4 * eax + 04300D8h ] // case HASH_MOVE: mov dword ptr [ edi + 04B35C8h ] , 02h mov eax , dword ptr [ 4 * ebp + 04B47A8h ] test eax , eax je Label42fa1c push eax mov dword ptr [ 4 * ebp + 04B46A4h ] , eax mov eax , dword ptr [ esp + 40 ] push eax push ebp call Fun4308d0 // call ValidMove() add esp , 0Ch test eax , eax je Label42fa09 pop edi pop esi pop ebp mov eax , 01h // return (HASH_MOVE); pop ebx add esp , 0Ch ret Label42fa09 :: push ebp pushd 0440558h pushd 080h call Fun405030 add esp , 0Ch // case GENERATE_CAPTURE_MOVES: Label42fa1c :: mov edx , dword ptr [ esp + 36 ] mov dword ptr [ edi + 04B35C8h ] , 03h mov ecx , dword ptr [ 4 * ebp + 04B48A8h ] push ecx push edx push ebp call Fun4144a0 mov dword ptr [ 4 * ebp + 04B48ACh ] , eax mov dword ptr [ edi + 04B35CCh ] , 00h mov eax , dword ptr [ 4 * ebp + 04B47A8h ] add esp , 0Ch test eax , eax je Label42fc0d mov ecx , dword ptr [ 4 * ebp + 04B48A8h ] cmp ecx , dword ptr [ 4 * ebp + 04B48ACh ] mov dword ptr [ esp + 16 ] , ecx mov esi , 04BDEFCh jnb Label42fd3c Label42fa79 :: mov eax , dword ptr [ecx] cmp eax , dword ptr [ 4 * ebp + 04B47A8h ] jne Label42faa0 mov dword ptr [esi] , 0FFF0BDC1h // *sortv = -999999; mov dword ptr [ecx] , 00h // *movep = 0; mov dword ptr [ 4 * ebp + 04B47A8h ] , 00h // tree->hash_move[ply] = 0; jmp Label42fb50 Label42faa0 :: mov edx , dword ptr [ esp + 36 ] mov ecx , eax sar ecx , 06h and ecx , 03Fh test edx , edx je Label42fb72 and ecx , 0FFFFh mov dl , byte ptr [ ecx + 04BF860h ] test dl , dl mov dword ptr [ esp + 24 ] , ecx mov ecx , eax je Label42fbe5 mov ebp , dword ptr [ esp + 24 ] xor ebx , ebx mov bl , byte ptr [ ebp + 04BFD00h ] sar ecx , 0Ch and ecx , 07h movsx edi ,word ptr [ 2 * ecx + 043EA70h ] and edx , 0FFh sub ebx , edi mov edi , dword ptr [ 4 * ecx + 043C7D4h ] shl edx , 08h add ebx , edx mov edx , dword ptr [ 4 * ebx + 06741C0h ] sub edx , edi jns Label42fb24 movsx ecx ,word ptr [ 2 * ecx + 043EA80h ] sar eax , 0Fh and eax , 07h mov eax , dword ptr [ 4 * eax + 043C7D4h ] add eax , ecx add eax , edx mov dword ptr [esi] , eax jmp Label42fb3d Label42fb24 :: movsx ecx ,word ptr [ 2 * ecx + 043EA80h ] sar eax , 0Fh and eax , 07h mov edx , dword ptr [ 4 * eax + 043C7D4h ] add edx , ecx mov dword ptr [esi] , edx Label42fb3d :: cmp dword ptr [esi] , 00h mov edi , dword ptr [ esp + 20 ] jl Label42fb4c inc dword ptr [ edi + 04B35CCh ] Label42fb4c :: mov ebp , dword ptr [ esp + 32 ] Label42fb50 :: mov ecx , dword ptr [ esp + 16 ] mov eax , dword ptr [ 4 * ebp + 04B48ACh ] add ecx , 04h add esi , 04h cmp ecx , eax mov dword ptr [ esp + 16 ] , ecx jb Label42fa79 jmp Label42fd3c Label42fb72 :: and ecx , 0FFFFh mov dl , byte ptr [ ecx + 04BFD00h ] test dl , dl mov dword ptr [ esp + 24 ] , ecx mov ecx , eax je Label42fbe5 mov ebp , dword ptr [ esp + 24 ] xor ebx , ebx mov bl , byte ptr [ ebp + 04BF860h ] sar ecx , 0Ch and ecx , 07h movsx edi ,word ptr [ 2 * ecx + 043EA70h ] and edx , 0FFh sub ebx , edi mov edi , dword ptr [ 4 * ecx + 043C7D4h ] shl edx , 08h add ebx , edx mov edx , dword ptr [ 4 * ebx + 06741C0h ] sub edx , edi jns Label42fb24 movsx ecx ,word ptr [ 2 * ecx + 043EA80h ] sar eax , 0Fh and eax , 07h mov eax , dword ptr [ 4 * eax + 043C7D4h ] add eax , ecx add eax , edx mov dword ptr [esi] , eax jmp Label42fb3d Label42fbe5 :: sar ecx , 0Ch and ecx , 07h movsx edx ,word ptr [ 2 * ecx + 043EA80h ] sar eax , 0Fh and eax , 07h add edx , dword ptr [ 4 * eax + 043C7D4h ] mov dword ptr [esi] , edx inc dword ptr [ edi + 04B35CCh ] jmp Label42fb50 Label42fc0d :: mov eax , dword ptr [ 4 * ebp + 04B48A8h ] cmp eax , dword ptr [ 4 * ebp + 04B48ACh ] mov ebx , 04BDEFCh mov dword ptr [ esp + 16 ] , eax mov dword ptr [ esp + 32 ] , ebx jnb Label42fd3c Label42fc2e :: mov eax , dword ptr [ esp + 16 ] mov eax , dword ptr [eax] mov edx , dword ptr [ esp + 36 ] mov ecx , eax sar ecx , 06h and ecx , 03Fh test edx , edx mov esi , ecx je Label42fc6c and esi , 0FFFFh mov dl , byte ptr [ esi + 04BF860h ] test dl , dl mov ecx , eax je Label42fcf8 sar ecx , 0Ch and ecx , 07h xor ebx , ebx mov bl , byte ptr [ esi + 04BFD00h ] jmp Label42fc8c Label42fc6c :: and esi , 0FFFFh mov dl , byte ptr [ esi + 04BFD00h ] test dl , dl mov ecx , eax je Label42fcf8 sar ecx , 0Ch and ecx , 07h xor ebx , ebx mov bl , byte ptr [ esi + 04BF860h ] Label42fc8c :: movsx esi ,word ptr [ 2 * ecx + 043EA70h ] and edx , 0FFh sub ebx , esi mov esi , dword ptr [ 4 * ecx + 043C7D4h ] shl edx , 08h add ebx , edx mov edx , dword ptr [ 4 * ebx + 06741C0h ] sub edx , esi jns Label42fcd4 movsx ecx ,word ptr [ 2 * ecx + 043EA80h ] mov ebx , dword ptr [ esp + 32 ] sar eax , 0Fh and eax , 07h mov eax , dword ptr [ 4 * eax + 043C7D4h ] add eax , ecx add eax , edx mov dword ptr [ebx] , eax jmp Label42fcf1 Label42fcd4 :: movsx ecx ,word ptr [ 2 * ecx + 043EA80h ] mov ebx , dword ptr [ esp + 32 ] sar eax , 0Fh and eax , 07h mov edx , dword ptr [ 4 * eax + 043C7D4h ] add edx , ecx mov dword ptr [ebx] , edx Label42fcf1 :: cmp dword ptr [ebx] , 00h jl Label42fd1b jmp Label42fd15 Label42fcf8 :: sar ecx , 0Ch and ecx , 07h movsx edx ,word ptr [ 2 * ecx + 043EA80h ] sar eax , 0Fh and eax , 07h add edx , dword ptr [ 4 * eax + 043C7D4h ] mov dword ptr [ebx] , edx Label42fd15 :: inc dword ptr [ edi + 04B35CCh ] Label42fd1b :: mov eax , dword ptr [ esp + 16 ] mov ecx , dword ptr [ 4 * ebp + 04B48ACh ] add eax , 04h add ebx , 04h cmp eax , ecx mov dword ptr [ esp + 16 ] , eax mov dword ptr [ esp + 32 ] , ebx jb Label42fc2e Label42fd3c :: mov eax , dword ptr [ 4 * ebp + 04B48A8h ] lea edx , dword ptr [ eax + 4 ] mov eax , dword ptr [ 4 * ebp + 04B48ACh ] cmp edx , eax mov dword ptr [ esp + 16 ] , eax jnb Label42fdc3 lea eax , dword ptr [ edx - 4 ] mov esi , 04BDF00h mov dword ptr [ esp + 24 ] , eax Label42fd61 :: mov ecx , dword ptr [edx] cmp eax , dword ptr [ 4 * ebp + 04B48A8h ] mov dword ptr [ esp + 20 ] , ecx mov ecx , dword ptr [esi] mov dword ptr [ esp + 32 ] , ecx lea ecx , dword ptr [ esi - 4 ] jb Label42fd9c Label42fd79 :: mov ebx , dword ptr [ esp + 32 ] cmp dword ptr [ecx] , ebx jnl Label42fd9c mov ebx , dword ptr [ecx] mov dword ptr [ ecx + 4 ] , ebx mov ebx , dword ptr [eax] mov dword ptr [ eax + 4 ] , ebx mov ebx , dword ptr [ 4 * ebp + 04B48A8h ] sub eax , 04h sub ecx , 04h cmp eax , ebx jnb Label42fd79 Label42fd9c :: mov ebx , dword ptr [ esp + 20 ] mov dword ptr [ eax + 4 ] , ebx mov eax , dword ptr [ esp + 32 ] mov dword ptr [ ecx + 4 ] , eax mov eax , dword ptr [ esp + 24 ] mov ecx , dword ptr [ esp + 16 ] add edx , 04h add eax , 04h add esi , 04h cmp edx , ecx mov dword ptr [ esp + 24 ] , eax jb Label42fd61 Label42fdc3 :: mov ecx , dword ptr [ 4 * ebp + 04B48A8h ] mov dword ptr [ edi + 04B35D0h ] , ecx mov eax , dword ptr [ edi + 04B35CCh ] test eax , eax je Label42fde3 mov byte ptr [ ebp + 04962C0h ] , 01h jmp Label42fdea Label42fde3 :: mov byte ptr [ ebp + 04962C0h ] , 00h // case CAPTURE_MOVES: Label42fdea :: mov eax , dword ptr [ edi + 04B35CCh ] test eax , eax je Label42fe3d mov edx , dword ptr [ edi + 04B35D0h ] mov eax , dword ptr [edx] mov dword ptr [ 4 * ebp + 04B46A4h ] , eax mov ecx , dword ptr [ edi + 04B35D0h ] mov dword ptr [ecx] , 00h mov edx , dword ptr [ edi + 04B35D0h ] mov eax , 04h add edx , eax mov dword ptr [ edi + 04B35D0h ] , edx dec dword ptr [ edi + 04B35CCh ] jne Label42fe30 mov dword ptr [ edi + 04B35C8h ] , eax Label42fe30 :: pop edi pop esi pop ebp mov eax , 03h // return (CAPTURE_MOVES); pop ebx add esp , 0Ch ret Label42fe3d :: mov dword ptr [ edi + 04B35C8h ] , 04h // case KILLER_MOVE_1: mov eax , dword ptr [ 8 * ebp + 04B8CF4h ] cmp dword ptr [ 4 * ebp + 04B47A8h ] , eax je Label42fe8f mov ebx , dword ptr [ esp + 36 ] push eax push ebx push ebp call Fun4308d0 add esp , 0Ch test eax , eax je Label42fe93 mov edx , dword ptr [ 8 * ebp + 04B8CF4h ] mov dword ptr [ 4 * ebp + 04B46A4h ] , edx mov dword ptr [ edi + 04B35C8h ] , 05h // tree->next_status[ply].phase = KILLER_MOVE_2; pop edi pop esi pop ebp mov eax , 04h // return (KILLER_MOVE_1); pop ebx add esp , 0Ch ret Label42fe8f :: mov ebx , dword ptr [ esp + 36 ] // case KILLER_MOVE_2: Label42fe93 :: mov eax , dword ptr [ 8 * ebp + 04B8CF8h ] cmp dword ptr [ 4 * ebp + 04B47A8h ] , eax je Label42fed7 push eax push ebx push ebp call Fun4308d0 add esp , 0Ch test eax , eax je Label42fed7 mov eax , dword ptr [ 8 * ebp + 04B8CF8h ] mov dword ptr [ 4 * ebp + 04B46A4h ] , eax mov dword ptr [ edi + 04B35C8h ] , 06h pop edi pop esi pop ebp mov eax , 05h pop ebx add esp , 0Ch ret Label42fed7 :: mov dword ptr [ edi + 04B35C8h ] , 06h jmp Label42fee7 mov ebx , dword ptr [ esp + 36 ] Label42fee7 :: // case GENERATE_ALL_MOVES: mov ecx , dword ptr [ 4 * ebp + 04B48ACh ] push ecx push ebx push ebp call Fun416260 mov dword ptr [ 4 * ebp + 04B48ACh ] , eax add esp , 0Ch mov dword ptr [ edi + 04B35C8h ] , 08h jmp Label42ff10 mov ebx , dword ptr [ esp + 36 ] Label42ff10 :: mov dword ptr [ edi + 04B35CCh ] , 01h lea eax , dword ptr [ 4 * ebp + 04B48A8h ] mov dword ptr [ edi + 04B35C8h ] , 09h mov ecx , dword ptr [eax] mov dword ptr [ esp + 32 ] , eax mov eax , dword ptr [ 4 * ebp + 04B48ACh ] xor esi , esi xor edx , edx cmp ecx , eax jnb Label43005c Label42ff44 :: mov eax , dword ptr [ecx] test eax , eax je Label42ff8e cmp eax , dword ptr [ 4 * ebp + 04B47A8h ] je Label42ff88 cmp eax , dword ptr [ 8 * ebp + 04B8CF4h ] je Label42ff88 cmp eax , dword ptr [ 8 * ebp + 04B8CF8h ] je Label42ff88 and eax , 0FFFh test ebx , ebx je Label42ff77 mov eax , dword ptr [ 4 * eax + 06CD1E0h ] jmp Label42ff7e Label42ff77 :: mov eax , dword ptr [ 4 * eax + 06C4760h ] Label42ff7e :: cmp eax , esi jle Label42ff8e mov esi , eax mov edx , ecx jmp Label42ff8e Label42ff88 :: mov dword ptr [ecx] , 00h Label42ff8e :: mov eax , dword ptr [ 4 * ebp + 04B48ACh ] add ecx , 04h cmp ecx , eax jb Label42ff44 test edx , edx je Label43005c mov eax , dword ptr [edx] pop edi mov dword ptr [ 4 * ebp + 04B46A4h ] , eax pop esi pop ebp mov dword ptr [edx] , 00h mov eax , 08h pop ebx add esp , 0Ch ret mov ecx , dword ptr [ 4 * ebp + 04B48A8h ] mov ebx , dword ptr [ 4 * ebp + 04B48ACh ] lea eax , dword ptr [ 4 * ebp + 04B48A8h ] xor esi , esi xor edx , edx cmp ecx , ebx mov dword ptr [ esp + 32 ] , eax jnb Label43005c Label42ffe1 :: mov eax , dword ptr [ecx] test eax , eax je Label43000b and eax , 0FFFh cmp dword ptr [ esp + 36 ] , 00h je Label42fffc mov eax , dword ptr [ 4 * eax + 06CD1E0h ] jmp Label430003 Label42fffc :: mov eax , dword ptr [ 4 * eax + 06C4760h ] Label430003 :: cmp eax , esi jle Label43000b mov esi , eax mov edx , ecx Label43000b :: add ecx , 04h cmp ecx , ebx jb Label42ffe1 test esi , esi je Label43005c mov ecx , dword ptr [edx] mov dword ptr [ 4 * ebp + 04B46A4h ] , ecx mov dword ptr [edx] , 00h mov ecx , dword ptr [ edi + 04B35CCh ] inc ecx mov eax , ecx cmp eax , 03h mov dword ptr [ edi + 04B35CCh ] , ecx jle Label43004f mov edx , dword ptr [ esp + 32 ] mov dword ptr [ edi + 04B35C8h ] , 0Ah // tree->next_status[ply].phase = REMAINING_MOVES; mov eax , dword ptr [edx] mov dword ptr [ edi + 04B35D0h ] , eax Label43004f :: pop edi pop esi pop ebp mov eax , 09h // return (HISTORY_MOVES_2); pop ebx add esp , 0Ch ret Label43005c :: // (label) remaining_moves: mov ecx , dword ptr [ esp + 32 ] mov dword ptr [ edi + 04B35C8h ] , 0Ah mov edx , dword ptr [ecx] mov dword ptr [ edi + 04B35D0h ] , edx mov eax , dword ptr [ edi + 04B35D0h ] cmp eax , dword ptr [ 4 * ebp + 04B48ACh ] jnb Label43009e Label430081 :: mov eax , dword ptr [ edi + 04B35D0h ] cmp dword ptr [eax] , 00h jne Label4300a8 add eax , 04h mov dword ptr [ edi + 04B35D0h ] , eax cmp eax , dword ptr [ 4 * ebp + 04B48ACh ] jb Label430081 Label43009e :: pop edi pop esi pop ebp xor eax , eax pop ebx add esp , 0Ch ret Label4300a8 :: mov ecx , dword ptr [ edi + 04B35D0h ] mov edx , dword ptr [ecx] mov dword ptr [ 4 * ebp + 04B46A4h ] , edx mov eax , dword ptr [ edi + 04B35D0h ] mov dword ptr [eax] , 00h add dword ptr [ edi + 04B35D0h ] , 04h pop edi pop esi pop ebp mov eax , 0Ah pop ebx add esp , 0Ch ret
This page took 0.01 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.