Programmation en assembleur

Fermé
lotfi de Messages postés 82 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 6 mai 2013 - Modifié par jipicy le 29/12/2012 à 12:03
lotfi de Messages postés 82 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 6 mai 2013 - 29 déc. 2012 à 15:38
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
A voir également:

1 réponse

nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
29 déc. 2012 à 09:14
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
lotfi de Messages postés 82 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 6 mai 2013
29 déc. 2012 à 10:13
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
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 29/12/2012 à 10:35
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
lotfi de Messages postés 82 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 6 mai 2013
29 déc. 2012 à 11:08
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
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 29/12/2012 à 11:24
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
lotfi de Messages postés 82 Date d'inscription dimanche 4 novembre 2012 Statut Membre Dernière intervention 6 mai 2013
29 déc. 2012 à 11:41
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