416691 key = dword ptr 4 416691 len = dword ptr 8 416691 initial_seed = dword ptr 0Ch 416691 416691 mov eax, [esp+0Ch] ; поместим в eax initial_seed 416695 xor ecx, ecx ; обнулим ecx 416697 cmp [esp+len], ecx ; сравним длину с 0 41669B not eax ; инвертируем initial_seed 41669D jbe short get_hash_end ; переход, если длина меньше или равна 0 41669F push esi 4166A0 get_hash_loop: 4166A0 mov edx, [esp+4+key] ; в edx - адрес переданного ключа 4166A4 movzx esi, al ; в esi - младший байт initial_seed 4166A7 movzx edx, byte ptr [ecx+edx] ; в edx - очередной байт ключа 4166AB xor edx, esi 4166AD shr eax, 8 ; сдвигаем initial_seed вправо на 8 бит 4166B0 mov edx, array[edx*4] ; в edx - dword по адресу array + edx*4 4166B7 xor eax, edx ; формируем новый initial_seed 4166B9 inc ecx ; накинем счётчик 4166BA cmp ecx, [esp+4+len] ; счётчик равен длине ? 4166BE jb short get_hash_loop ; если меньше - следующая итерация 4166C0 pop esi 4166C1 get_hash_end: 4166C1 not eax ; перед возвратом ещё раз инвертируем initial_seed ; он и есть hash-code - результат функции 4166C3 retn