问题
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.
回答1:
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
回答2:
There is a good answer to this exact question on Yahoo! Answers:
I suspect the point here is to learn to write assembly language. Here's the instruction set (http://www.emu8086.com/assembler_tutorial/8086_instruction_set.html) You have all the instructions you need to perform the equation you need to generate pseudo-random numbers except the 'mod' instruction, which you'll have to write a subroutine for. Pay particular attention to the limitations on the MUL and DIV instructions. "store in a separate file" isn't implicit in the instruction set. You'll have to better understand what's wanted here. "File" and "Print" are concepts related to operating system; they're forms of output in this case.
from http://answers.yahoo.com/question/index?qid=20081030112909AAmjEsp
回答3:
You might be interested in Agner Fog's pseudo random number generators (some of which are written in assembly) here.
来源:https://stackoverflow.com/questions/4376102/how-to-generate-a-random-number-in-8086-assembly