Instruction assembleur(minimiser nombre d'instruc)
Fermé
Lynda
-
Modifié le 13 avril 2018 à 20:08
noshufh Messages postés 8 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 9 mars 2019 - 13 avril 2018 à 23:22
noshufh Messages postés 8 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 9 mars 2019 - 13 avril 2018 à 23:22
A voir également:
- Instruction assembleur(minimiser nombre d'instruc)
- Nombre facile - Télécharger - Outils professionnels
- Gto nombre episode ✓ - Forum Jeux vidéo
- Kahoot gratuit nombre de participants - Forum Réseaux sociaux
- Nous limitons le nombre de fois que vous pouvez publier - Forum Facebook
2 réponses
yg_be
Messages postés
23233
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2024
Ambassadeur
1 538
13 avril 2018 à 21:20
13 avril 2018 à 21:20
bonsoir,
qui est "on"?
ton code fonctionne-t'il bien?
qui est "on"?
ton code fonctionne-t'il bien?
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
13 avril 2018 à 22:46
13 avril 2018 à 22:46
Bonsoir,
Huum le jeu des étiquettes n'est pas clair du tout là, ça empêche de comprendre facilement le déroulement du programme...
Mais à vue de nez, il semble possible de faire le "inc si" aussitôt après le mov al,[si] :
mov al,[si] (etiquette2)
cmp al,[si+01]
jle 0019 (etiquette1)
xchg al,[si+01]
Ce qui permettrait de supprimer le décalage dans l'adressage [SI+01] et en venir à un adressage plus simple [SI] sur les deux instructions l'utilisant, le code en serait plus compact.
Mais je vois mal si ça prêterait à conséquence à cause des étiquettes équivoques.
Par ailleurs comme dit yg_be il faut bien sûr agir sur :
dec dx
cmp dx,+00
jnz 000f
Car presque toutes les opérations induisent un résultat sur les flags (ici, dec), il est donc inutile de les forcer avec un cmp dx,+00. Il faut se reporter au tableau d'influence de chaque instructions sur les flags.
Par ailleurs juste pour info, un cmp registre,00 s'optimise en toute simplicité en faisant and registre,registre (avec le même, donc and dx,dx) avec un saut conditionnel identique à sa suite, donc jz pour brancher si 0.
Huum le jeu des étiquettes n'est pas clair du tout là, ça empêche de comprendre facilement le déroulement du programme...
Mais à vue de nez, il semble possible de faire le "inc si" aussitôt après le mov al,[si] :
mov al,[si] (etiquette2)
cmp al,[si+01]
jle 0019 (etiquette1)
xchg al,[si+01]
Ce qui permettrait de supprimer le décalage dans l'adressage [SI+01] et en venir à un adressage plus simple [SI] sur les deux instructions l'utilisant, le code en serait plus compact.
Mais je vois mal si ça prêterait à conséquence à cause des étiquettes équivoques.
Par ailleurs comme dit yg_be il faut bien sûr agir sur :
dec dx
cmp dx,+00
jnz 000f
Car presque toutes les opérations induisent un résultat sur les flags (ici, dec), il est donc inutile de les forcer avec un cmp dx,+00. Il faut se reporter au tableau d'influence de chaque instructions sur les flags.
Par ailleurs juste pour info, un cmp registre,00 s'optimise en toute simplicité en faisant and registre,registre (avec le même, donc and dx,dx) avec un saut conditionnel identique à sa suite, donc jz pour brancher si 0.
noshufh
Messages postés
8
Date d'inscription
vendredi 13 avril 2018
Statut
Membre
Dernière intervention
9 mars 2019
13 avril 2018 à 23:22
13 avril 2018 à 23:22
D'accord merci pour votre explication et pour l'idée
Je pense voir où vous voulez en venir
Je vais essayer de réécrire la procédure
Je pense voir où vous voulez en venir
Je vais essayer de réécrire la procédure
13 avril 2018 à 21:40
on c'est mon prof de tp et mon prof de cours
mon code fonctionne mais j'aimerai essayer de le minimiser et aussi savoir s'il y a une instruction qui pourrait remplacer les deux instructions : cmp dx,+00 et jnz 000f ?
13 avril 2018 à 22:04
13 avril 2018 à 22:13
13 avril 2018 à 23:21
je vais voir ce que je peux faire en suivant votre suggestion