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

x86 16-bits Assembleur Discussion :

[x86 16 bits] Fonctions en Assembleur : sauvegarde/restauration des registres


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 58
    Points
    58
    Par défaut [x86 16 bits] Fonctions en Assembleur : sauvegarde/restauration des registres
    Salut
    j'apprends à créer une procédure
    et j'ai fait un code avec trois procédures
    une qui sauve les registres généraux , une seconde pour les restaurer
    puis une dernière pour sortir du programme
    est-ce que mon code est correct?

    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
    32
    33
    34
    35
    36
    37
    38
     
     
    start:
    .code
     
    call sauvreg
     
     
     ;  corps du programme
     
    call restoReg
    call fin
     
    start end
     
    fin PROC near 
     mov AX,4C00h     
     INT 21h           
     RET   
    fin ENDP 
     
    sauvreg PROC near
     push ax
     push bx
     push cx
     push dx
     
    ret
    sauvreg ENDP
     
    restoReg PROC near
     pop dx
     pop cx
     pop bx
     pop ax
     
    ret 
    restoReg ENDP
    à quel endroit est-il préférable de mettre les fonctions?
    Merci beaucoup !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 74
    Points
    74
    Par défaut
    Ben ca depend, un include est parfois utile.

    Mais pour tes fonctions, tu as des instruction pusha et popa qui sauvegardent tous les registres (AX,BX,CX,DX,SP,BP,SI et DI), et meme pushad et popad (pour les registres 32bits).

  3. #3
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Citation Envoyé par SimpleMe
    à quel endroit est-il préférable de mettre les fonctions?
    Il ne faut pas faire de telles fonctions

    Lorsque vous faites un appel de fonction (call), vous empilez l'adresse retour. Ainsi le ret de votre fonction sauvreg ne ramènera pas le pointeur d'instruction au bon endroit.

    De même, votre fonction restoReg placera dans dx et cx l'adresse de retour du call appelant, sans parler du ret qui sera aussi incorrect.
    Avant de poster, merci de consulter les règles du forum

  4. #4
    Rukia
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    à quel endroit est-il préférable de mettre les fonctions?
    c'est preférable de mettre tes fonction avant le start

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    bonjour !
    merci pour vos messages , je me doutais que j'avais tout faux
    je voulais savoir quand et pourquoi une procédure est utile?
    est-ce qu'il est possible de me donner un exemple?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 74
    Points
    74
    Par défaut
    Ben tu as pas tout faux, en regle génerale, une fonction est utilisé pour:
    • une action que tu repete souvent dans un programme
    • une action que tu peux effectuer dans plusieurs programme (tu la mets dans un include, et tu peux la reutiliser)
    • bien séparer les differents "bloc" de ton programme
    • ... ?


    Par exemple les instructions pour afficher un message est un bon exemple d'instructions à mettre dans une fonction.

    Le probleme de la fonction pour parler simplement, c'est qu'elle necessite un "SAUT" dans la mémoire, donc l'execution de ton programme n'est plus linéaire. Tu sautes executer un certain nombre d'instructions, et tu reviens.
    Et ce saut implique des consequences comme la modification de certain registre, ou "ralentir" ton programme.

    Dans ton cas, il est plus judicieux, pour la sauvegarde les registres, d'utiliser l'instruction pusha et popa qui va faire ce que tu voulais faire, mais de facon rapide et simple, et ca evitera les problemes soulevés par Juju_41.

    Toutefois ta logique etait bonne, vu que tu t'es dis j'utilise souvent la sauvegarde de registre alors pourquoi ne pas utiliser une fonction.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2010, 17h49
  2. Réponses: 3
    Dernier message: 07/02/2008, 17h50
  3. Sauvegarde - restauration des paramètres KDE
    Par spekal dans le forum KDE
    Réponses: 1
    Dernier message: 04/11/2006, 14h00
  4. Emulateur x86 64 bits
    Par executter dans le forum Assembleur
    Réponses: 7
    Dernier message: 20/02/2004, 14h06
  5. Sauvegarde / Restauration
    Par Sitting Bull dans le forum Administration
    Réponses: 2
    Dernier message: 13/06/2003, 13h46

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