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 :

Division : partie haute et partie basse


Sujet :

Assembleur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut Division : partie haute et partie basse
    Bonjour à tous,

    J'ai un petit souci avec un algo.
    j'ai une variable dans mon registre eax (que je connais)
    puis une fonction imul avec la variable que je cherche
    le tout donne un résultat de cette forme XXXXXXX 00000001

    comment je peux exprimer la variable qui se multiplie à eax
    en fonction du reste ?
    merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    voici un algo qui teste toutes les valeurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    xor ebx,ebx ; vide ebx
    ;mov edx,593D7Fh
    temperature:
    mov eax,593D7Fh ;met une variable dans eax
    imul eax,ebx ; multiplie par ebx
    inc ebx ;incremente ebx
    cmp eax,00000001h ;compare jusqu'à trouver 1 dans eax
    jnz temperature ;test une autre valeur de ebx
    dec ebx ;decremente avant de l'afficher
    call DumpRegs ;affiches les registres
    le problème c'est que c'est beaucoup trop long comme ça
    5 secondes sur mon athlon

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    comment je peux exprimer la variable qui se multiplie à eax
    en fonction du reste ?

    J'ai bô relire et regarder le bout de code je n'arrive pas à saisir (j'ai l'unique qui lâche de temps en temps )... multiplication/reste ?

    Pourrais-tu nous donner un peu plus de contexte et de précisions (IMUL ou IDIV j'arrive à douter entre : Titre - reste - et contenu du post...).

    Au début, à cause du titre j'ai compris :
    X/MaVarconnue = quotient | reste -> déduire X à partir de reste ?

    merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    en admettant que eax=5848447 (d)
    ceci:

    4294967296.x + 1 = y
    _______________
    5848447

    est equivalent à cela:

    5848447.y - 1 = x
    ____________
    4294967296

    ce que je veux c'est avoir x et y entiers pour n'importe qu'elle valeur donnée à eax
    en gros, résoudre l'équation pour que x ET y soit entiers, merci.

  5. #5
    Inactif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 160
    Points
    160
    Par défaut
    La valeur (4294967296) 1 0000 0000 hex est une constante donc ?

    Si oui, elle est donc de format QWORD et peux donc être aussi représentée comme une valeur DWORD 0000 0001 qui serait le MSDW de ton QWORD et .x serait la partie décimale de ton QWORD sur un LSDW (ouf ) ? MSDW (Partie e) LSDW(partie d)

    Donc, de la virgule fixe en QWORD ?

    Est-ce bien cela (ça clarifierait le problème de résolution et permettrait d'opter pour la meilleure stratégie) ?

    Cependant, 5848447 dans eax (précédée de d) signifie que dans la première expression eax est utilisé en tant que partie décimale du diviseur (je ne vois pas de .)?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    non le point est le signe de multiplication
    4294967296 est bien constante
    eax = 5848447

    on m'a conseiller d'utiliser les équations diophantiennes avec l'algorithme d'Euclid ou la méthode de Bézout
    mais je ne comprend pas tout

    il faut résoudre dans Z (entiers)
    4294967296 x - 5848447 y = 1 , {x,y},Integers

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 26
    Dernier message: 06/10/2014, 15h17
  2. Réponses: 23
    Dernier message: 08/04/2014, 17h56
  3. Réponses: 0
    Dernier message: 18/11/2013, 20h49
  4. Réponses: 0
    Dernier message: 18/11/2013, 20h46
  5. diviser la page en # parties
    Par Logic_613 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/11/2012, 22h16

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