Code assembleur et registre
njaka91
Messages postés
4
Statut
Membre
-
mpmp93 Messages postés 2931 Date d'inscription Statut Membre Dernière intervention -
mpmp93 Messages postés 2931 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
comment trier un nombre pair et impaire dans un registre ou code assembleur.
Merci d'avance.
comment trier un nombre pair et impaire dans un registre ou code assembleur.
Merci d'avance.
1 réponse
-
soit les deux valeurs dans deux registres:
REGA et REGB
on teste si REGA < REGB => si oui, on inverse contenu de REGA et REGB
=> si non on laisse comme ça...
On itère de valeurs en valeurs par paires....
-
-
pour quel processeur? Z80, 8086, 68HC11???
Une piste: avec les nombres impairs, le bit de poids faible est toujours à '1', celui des valeurs paires est toujours à '0'. Donc:
- avant tri, faire un shift (décalage logique) vers la droite, puis test du bit, il y a sur la plupart des processeurs une instruction de test du bit sorti du registre. Il existe ensuite une instruction de saut conditionnel selon l'état de ce bit dit "carry report"...
Autre solution, faire un ET logique avec la valeur 1, si on a 1 en sortie, c'est que la valeur de départ est impaire...
Exemple:
- on met une valeur N dans AX
- on empile AX -> PUSH AX (on a donc une copie de AX sur la pile...)
- on fait AND AX, #01h (et logique avec valeur de AX)
- on fait un saut conditionnel si AX pas nul (car impair)
- ----section code après saut conditionnel:
- POP AX, on récupère AX valeur initiale
- MOV AX vers zone stockage avant tri....
L'idée est de déplacer au préalable la séquence à trier en deux zones distinctes, l'une contenant les valeurs paires, l'autre les valeurs impaires....
Ensuite, pour chacune de ces zones, on fait un tri, dit "tri à bulles". On teste valeur N et N+1; si n+1 < n, on inverse ces valeurs en mémoire, Puis on passe à la paire suivante. Au passage, si on fait une inversion, on positionne un flag d'inversion à "true". En fin de boucle, on teste ce flag d'inversion et on itère la séquence de tri jusqu'à ce qu'on ait une séquence de tri qui donne un flag d'inversion qui soit "false".
A peluche
-