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 en ASM sous Delphi


Sujet :

Assembleur

  1. #1
    Inactif  

    Inscrit en
    Juillet 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 46
    Points : 135
    Points
    135
    Par défaut Division en ASM sous Delphi
    Voilaje fais mais premier pas en ASM sous Delphi
    Je cherche à faire une division de long et de recuperer à la fois le resultat de la division et le reste (modulo)
    Je passe donc en parametre le nombre à diviser, le diviseur et je voudrait avoir le dividende et le rest
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Procedure DivModInt(Divise,Diviseur:longint;VAR Dividende,Reste:Longint);
    ASm
            PUSH    EBX
            MOV    EBX,EDX
            MOV    EDX,EAX
            CDQ
            IDIV    BX
            MOV    EBX,Reste
            MOV    [ECX],AX
            MOV    [EBX],DX
            POP    EBX
    end;

    J'ai essaye avec une valeur fixe et cela semblait marcher mais
    Mais cela ne va pas tres bien lorsque je fais une boucle pour faire varie mes parametre
    long i,R,S
    for(i=10;i<1000;i++)
    DivModInt(i,10,R,S)
    Quelle brillante erreur ai-je commis?
    JKohn

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 944
    Points : 59 432
    Points
    59 432
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Lorsque tu fais (donc un diviseur 16 bits), le dividende doit implicitement se trouver dans le couple dx:ax. Après l'opération, le reste se trouve dans dx et le quotient dans ax.

    Dans ton programme, tu passes comme paramètre un diviseur 32 bits (LongInt). Tu dois donc plutôt utiliser ebx comme diviseur, ce qui entraîne que ton dividende se trouve dans le couple edx:eax et, après l'opération, que le reste se trouve dans edx et le quotient se trouve dans eax.

    Je pense donc que tu devrais avoir quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mov eax,Divise
    cdq
    mov ebx,Diviseur
    idiv ebx
    mov Dividende,eax
    mov Reste,edx
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

Discussions similaires

  1. Corba sous Delphi et ORB alternatif
    Par Inpriser dans le forum CORBA
    Réponses: 4
    Dernier message: 18/08/2003, 18h42
  2. retrouver les compsants FASTNET sous Delphi 7
    Par fandor7 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/06/2003, 18h11
  3. Comment créér une collection sous Delphi
    Par PsyKroPack dans le forum Langage
    Réponses: 6
    Dernier message: 11/02/2003, 13h20
  4. calcul sous delphi
    Par djedje-08 dans le forum Langage
    Réponses: 5
    Dernier message: 08/02/2003, 17h39
  5. Réponses: 4
    Dernier message: 27/03/2002, 11h03

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