Instruction assembleur(minimiser nombre d'instruc)
Lynda
-
noshufh Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
noshufh Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
bonsoir
J'aimerai que vous m'aidiez s'il vous plait avec mon programme
En fait on nous a demander d'écrire une procédure qui trie des données en mémoire en sachant que notre pile contient le nombre d'éléments (0006) à trier et l'IP du premier élément (0000).
Sachant que notre procédure se trouve dans la plage 0cfb:0000 à 0cfb:0024 et que les éléments sont signés.
voici ma procédure :
mov bp,sp
mov bx,[bp+02]
mov cx,[bp+04]
dec cx
mov si,bx (etiquette3)
mov dx,cx
mov al,[si] (etiquette2)
cmp al,[si+01]
jle 0019 (etiquette1)
xchg al,[si+01]
mov [bx],al
inc si
dec dx (etiquette1)
cmp dx,+00
jnz 000f (etiquette2)
inc bx
loop 0009 (etiquette3)
ret
pouvez s'il vous plait m'aider à minimiser le nombre d'instruction ?
je n'arrive pas à trouver de solution à mon problème ... merci d'avance !
J'aimerai que vous m'aidiez s'il vous plait avec mon programme
En fait on nous a demander d'écrire une procédure qui trie des données en mémoire en sachant que notre pile contient le nombre d'éléments (0006) à trier et l'IP du premier élément (0000).
Sachant que notre procédure se trouve dans la plage 0cfb:0000 à 0cfb:0024 et que les éléments sont signés.
voici ma procédure :
mov bp,sp
mov bx,[bp+02]
mov cx,[bp+04]
dec cx
mov si,bx (etiquette3)
mov dx,cx
mov al,[si] (etiquette2)
cmp al,[si+01]
jle 0019 (etiquette1)
xchg al,[si+01]
mov [bx],al
inc si
dec dx (etiquette1)
cmp dx,+00
jnz 000f (etiquette2)
inc bx
loop 0009 (etiquette3)
ret
pouvez s'il vous plait m'aider à minimiser le nombre d'instruction ?
je n'arrive pas à trouver de solution à mon problème ... merci d'avance !
A voir également:
- Instruction assembleur(minimiser nombre d'instruc)
- Nombre de jours entre deux dates excel - Guide
- Nombre facile - Télécharger - Outils professionnels
- Ascii nombre de caractères - Guide
- Minimiser taille photo - Guide
- Minimiser taille pdf - Guide
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir,
qui est "on"?
ton code fonctionne-t'il bien?
qui est "on"?
ton code fonctionne-t'il bien?
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.
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 ?
je vais voir ce que je peux faire en suivant votre suggestion