Langage D'Assemblage Du Générateur De Nombres Aléatoires

Récemment, j'ai commencé à apprendre le langage d'assemblage. Pour un projet que je suis en train de travailler sur je dois faire un générateur de nombre aléatoire à l'aide de congruence linéaire. Je suis supposer avoir dans trois numéros. Une limite supérieure, limite inférieure et un certain nombre de combien de nombres aléatoires que je veux. Quant à la formule pour obtenir un nombre aléatoire je suis venu avec....

randomNumber = (graine % (haut-bas) + bas)

J'ai ensuite essayé de mettre ce code.
Je suis venu avec cette

.data
  upper BYTE 100      ;setting upper limit 100
  lower BYTE 0        ;setting lower limit 0
  number BYTE 5       ;number of random numbers

.code
call main
exit

main proc

   cls    
   mov bx,upper            ;moving upper bound into bx
   mov dx,lower            ;moving lower bound into dx
   mov ax,2914017          ;taking a random number for this trial
   mov ecx,number          ;setting the loop counter
L1:
   sub bx,dx               ;(upper-lower)
   div bx               
   add ah,dx               ;(randomNumber mod (bx) + lower

main endp

Je suis curieux de savoir comment je pourrais imprimer le nombre aléatoire à la fin de chaque itération de la boucle. Et si le code ci-dessus n'a aucun sens.

Merci d'avance!

Bienvenue sur stackoverflow !
Si c'est sur Windows puis quelques suggestions ici: stackoverflow.com/questions/1922134/...
L'impression est très spécifique à une plateforme. Où êtes-vous essayer de les assembler et de les exécuter? MS-DOS? Windows? Linux? Aussi, Cette instruction ne sera pas volée: "mov ax,2914017"-- ax est un registre 16 bits qui plafonne à 65535. eax est de 32 bits, cependant.
C'est toutes sortes de mal. Plus important encore, cette expression n'est pas de produire un nouveau lot de semences. Habituellement, vous devez multiplier et ajouter un peu de bien-choisi constantes avant de modulo. Deuxièmement, div bx divise dx:ax par bx, mais vous n'avez pas de zéro dx. Charge lower en esi ou edi. (Et il le fait avec movzx, parce qu'ils emplacements de mémoire sont octets. Vous êtes en train de charger avec word charge, de sorte mov dx, [lower] mettra 0x500 en dx.)
Il devrait être relativement simple à mettre en œuvre celle dont il est question ici: imgs.xkcd.com/comics/random_number.png

OriginalL'auteur Whiplash | 2012-04-11