l2-unlegits/docs/exploring_c_prng.cpp
alexey.min 043d61633e Docs
2012-02-06 09:14:22 +00:00

39 lines
888 B
C++

void __cdecl srand( unsigned int seed )
{
_getptd()->_holdrand = (unsigned long)seed;
}
int __cdecl rand( void )
{
_ptiddata ptd = _getptd();
return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff );
}
public rand
rand proc near
call sub_77C29F25 // _getptd()?
mov ecx, [eax+14h] // offset of _holdrand?
imul ecx, 343FDh // 214013
add ecx, 269EC3h // 2531011
mov [eax+14h], ecx
mov eax, ecx
shr eax, 10h // >> 16
and eax, 7FFFh
retn
rand endp
public srand
srand proc near
arg_0= dword ptr 8
mov edi, edi // 3 lines - BP-based frame
push ebp
mov ebp, esp
call sub_77C29F25 // _getptd()?
mov ecx, [ebp+arg_0] // ecx = seed (argument 0)
mov [eax+14h], ecx // _getptd()->_holdrand = seed
pop ebp
retn
srand endp