IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Random en Assembleur [FAQ]


Sujet :

Assembleur

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Random en Assembleur
    Voila, je voulais savoir si dans les instructions intel x86 il y en avait une qui donnait un chiffre au hasard ( randon ) car je fait un p'tit jeu en asm mais j'ai besoin du hasard.
    merci.

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Eeeeettttt.... NON !

    Le hasard n'est pas géré pas le processeur. Il faut se créer soi-même un pseudo-hasard.

    Je te conseille de faire une recherche avec l'utilitaire de ce forum. Le sujet à déjà été abordé en profondeur.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Hello

    Juste pour dire que Hdd34 utilise pseudo_hasard, et qu'il a tout à fait raison. En effet, programmer un véritable random est chose très compliquée...voire impossible.

    A+

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    En voici une très courte.
    Regarde si elle te satisfait.
    Il y en a d'autres...............
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    ;===============================
    ; Nombre aléatoire de 0 a nbr-1
    ;===============================
     
    ;Section Data
    ;---------------
     
    nrandm      dd  0
    randsp      dd  0
     
    ;Section Code appel de la routine
    ;--------------------------------------
    pushad
    mov  ecx,Nombre maximum a delivrer 
    call randm     ; sortie = [nrandm] = nombre aleatoire compris entre
                   ; 0 et le nombre demandé - 1
    popad
     
    ;Routine
    ;--------
    randm:
          mov  ebx,[randsp]
          mov  eax,214013h
          imul ebx
          add  eax,2531011h
          mov  [randsp],eax
          mov  edx,0
          div  ecx
          mov  [nrandm],edx
          ret
    Amicalement.........Gges

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    merci pour le code mais...

    randsp dd 0

    lui la, il faut le modifier non? parceque si il reset a zero... cela va rien faire.
    En plus je n'ai pas bien compris comment il fonctionne.


    J'ai vu l'autre sujet qui parle de ca mais ne m'apporte pas grand chose en reponse.Deplus il parle surtout du hasard fait avec le timer et comme c'est dit, c'est lent.
    Moi je voudrai un vrai random qui soit rapide et qui (en option) n'utilise pas le timer.

    Je sais que j'en demmande beaucoup, mais c'est toujours mieu d'avoir un hasard presque vrai !!

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Si tu prends la peine d'analyser la routine tu verras que la variable sera initialisée la deuxième fois.
    Tu n'as pas fait d'essais ?
    Essaie pour voir.....
    je peux te dire que ça marche......je l'utilise.
    Pour des routines plus complexes regarde sur le Web
    Amicalement.....Gges

  7. #7
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Il y a plusieurs bout de codes qui n'utilisent pas le timer. Regarde-les !

    Si maintenant, c'est l'algorithme en lui-même qu'il te faut, alors regarde sur le Net, tu auras peut-être ça. Mais j'en doûte.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    euh...je ne sais pas gerer les nombre a virgule en assembleur, si vous pouviez m'expliquer vite fait svp!!!

  9. #9
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Vite fait, c'est un grand mot...
    Tu connais l'asm CPU. Et bien pour les nombres à virgules, c'est l'assembleur... FPU.

    Je te conseille de te trouver un tutoriel sur le sujet, ça évitera les oublis permanents.

    Toutes les instructions FPU commencent par la lettre "f". On utilise une pile spéciale, la pile FPU, contenant, si je ne me trompe, 8 éléments, de st(0) à st(7). Pour effectuer des calculs, on empile les paramètres, et on effectue.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  10. #10
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    en fait ce que voulait dire funx a propos de l'initialisation (j'arrive peut-etre un peu tard... les vacances), c'est que ca genere toujours la meme suite ! Il faut juste pour cela utiliser le timer a l'initialisation, et dans ce cas, la suite est (quasiment) unique. Dans ce cas alors, vu que l'initialisation ne se fait qu'une fois on va beaucoup plus vite.

    Rq: pour accelerer encore, on peut virer la division et utiliser des masques.

Discussions similaires

  1. Tableaux et random en assembleur 8086
    Par samlk dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 04/06/2011, 10h03
  2. Tutoriels, F.A.Q : la rubrique Assembleur de Developpez.com
    Par Alcatîz dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/06/2007, 19h14
  3. Fonction Random en Assembleur
    Par chidi dans le forum Assembleur
    Réponses: 5
    Dernier message: 21/05/2004, 10h16
  4. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 19h25
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo