Search code examples
assemblyx86-16microprocessors

How to generate a random number in 8086 assembly?


I want to know if there a routine or an instruction to generate a random number using assembly on 8086. any help will be appreciated.


Solution

  • The most common way is to use the timestamp. In 32 bit mode it can be done by rdtsc instruction, in 16 bit mode: by using function 0 of BIOS interrupt 1A.

    Because it's a timestamp, avoid using it frequently (because of lack of proper dispersion), and use it as seed for an pseudo-random number generator. When you need just one random value, you can use the timestamp directly.

    Usually a simple pseudo-random number generator is enough:

    static int seed = now();
    seed = (seed * LARGE_PRIME1) % LARGE_PRIME2;
    

    And there is also wiki