This is a satisfactory, though home-made 32-bit pseudo-randomizer. It churns integers but scales them to return floats -1.0 to +1.0. To return 32bit integer ranges, omit the float scaler and return the raw integer value in eax instead.
function Rnd() as float
Static As float f, d=1/0x7fffffff
fild dword [esp]
fmul dword d
fstp dword f
You are probably familiar with this one from the web, based on mul overflows into edx.
The 2 inputs are the lower and upper range limits:
function irnd(int z1, z2) as int
mov Seed,edx 'store new seed
mul edx 'multiply eax by edx