Code assembleur et registre

njaka91 Messages postés 4 Statut Membre -  
mpmp93 Messages postés 7217 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.
A voir également:

1 réponse

mpmp93 Messages postés 7217 Date d'inscription   Statut Membre Dernière intervention   1 341
 
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....
0
njaka91 Messages postés 4 Statut Membre
 
Non c com ça notre sujet:
Écrire un programme qui va faire le triage des donner paires et impaires càd
données paires données impaires
140 .... 150 160
141 .... 151 161
142 .... 152 162
. . .
. . .
. . .
14F 15F 16F
En utilisant le test al,01
0
mpmp93 Messages postés 7217 Date d'inscription   Statut Membre Dernière intervention   1 341
 
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
0