Programmation en assembleur

lotfi de Messages postés 99 Statut Membre -  
lotfi de Messages postés 99 Statut Membre -
en l'assembleur et sur tout dans le instruction de sauts conditionnels
l'orsque j'ecris
JNZ suite
move AX,5
mov BH,4

svp vous pouvez de m'explique comment PC execute c instruction la et comment

1 réponse

  1. nicocorico Messages postés 846 Statut Membre 138
     
    Bonjour,
    Que veux-tu dire exactement? L'exécution de l'instruction de saut conditionnel dépend du registre de flags qui est lui-même influencé par les opérations précédentes, invisibles dans la suite que tu donnes. L'instruction "Mov" quant à elle, n'influence pas le registre de flags...
    Et fait attention à ton orthographe si tu veux bien, c'est pas très compréhensible comme t'écris et puis t'en viens même à faire une faute dans les instructions "move"!
    1
    1. lotfi de Messages postés 99 Statut Membre
       
      bonjour,
      je ne compris pas comment applique l' instruction de saut conditionnel
      par exemple
      jnz suit
      mov AL,4
      add AL,5
      suit:
      mov AL,7
      tu peu m'expique svp comment c'instruction serait executéé
      et merci pour avance
      0
    2. nicocorico Messages postés 846 Statut Membre 138
       
      Oui, en fait ça n'a pas de sens de commencer par l'instruction de saut conditionnel: il faut comprendre le fonctionnement dans son ensemble pour que ce soit clair: parmi les registres spéciaux du processeur il y a un registre de flags (drapeaux) qui contient différents bits ayant une signification précise. La plupart des instructions du proc. influencent ce registre de flags, et ce en fonction du résultat du calcul que tu leur donne, ce registre permet donc de récupérer différentes informations sur le résultat, par exemple s'il vaut 0, s'il est négatif ou bien s'il a débordé du registre destination... Une fois que le registre de flags a été influencé par une instruction, on peut donc exploiter ces informations grâce à une instruction de saut, par exemple l'instruction "jnz" que tu emploie saute tant que le dernier résultat calculé est différent de 0...
      Exemple:
        Mov   EAX,02    // On part avec EAX valant 2   
      @Bcl:   
        Dec   EAX       // Décrémente EAX   
        Jnz   @Bcl      // Saute à "@Bcl" si le résultat est différent de 0   

      // La boucle va donc être exécutée deux fois, EAX valant 1 puis 0...

      // Ici EAX vaut 0
        Inc   EAX       // EAX vaut maintenant 1   
        Jz    @Suite    // Donc pas de saut   
        Dec   EAX       // EAX redescend à 0   
        Jz    @Suite    // Donc cette fois le saut va se faire    
        Ret  
      
      @Suite:
      0
    3. lotfi de Messages postés 99 Statut Membre
       
      merci beacoup mon amis et pour les instruction de comparaison tu m'explique quelque part
      je suis desole de te demande de m'esplique tous ça puisque je suis debutant dans ce domaine la
      0
    4. nicocorico Messages postés 846 Statut Membre 138
       
      Hé bien du côté des comparaisons, tu peux employer l'instruction Cmp:
      En fait Cmp fait un "Sub" entre les deux valeurs, sans retenir le résultat...
      Par exemple:
      Cmp EAX,ECX // C'est à dire: Sub EAX,ECX  
      Jz  @Suite  // Saute si EAX et ECX sont égaux, le résultat a donné 0
      Cmp EAX,10
      Jz  @Suite  // Saute si EAX vaut 10


      La prise en compte du signe change le résultat, il y a donc des sauts conditionnels que le prenne en compte et d'autres non.
      Cmp EAX,ECX  
      Jb  @Suite  // Saute si EAX est inférieur à ECX non-signés  
      Cmp EAX,ECX  
      Jl  @Suite  // Saute si EAX est inférieur à ECX signés


      Il y a aussi l'instruction "Test" (equivalent de "And" cette fois), qui permet de faire des tests très pratiques:
      Test EAX,03   // Test les bits 1 et 2  
      Jnz  @Suite   // Saute si l'un des bits concerné est différent de 0


      Et pour savoir si un registre vaut 0 ou non le plus pratique est de faire:
      And  EAX,EAX ou Test EAX,EAX  
      Jz   @Suite // Saute si le registre vaut 0
      0
    5. lotfi de Messages postés 99 Statut Membre
       
      je peu ecrive comme ça
      mov AX,5
      mov BX,4
      cmp AX,BX
      JE equiv
      mov AX,BX
      jump suit
      equiv:
      sub AX,BX
      suit:
      0