Assembleur : comparer 2 nbres

Fermé
gabriel_g Messages postés 21 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 17 août 2010 - 16 mai 2009 à 10:21
 le père - 16 mai 2009 à 11:06
Bonjour,

Dans le cadre d'une application utilisant un pic 16f876, j'aimerais ecrire un programme capable de comparer 2 nombres binaire (codés sur 8 bits). L'un des 2 est une valeur référence : il est fixe et enregistré dans un variable du programme. L'autre est acquise par le pic, numérisée par le CAN intégré, et doit justement être comparée a la 1ère.

Si la valeur a comparer est inférieure a la valeur référence, on fait certaines actions, si non (elle ne peut pas etre supérieure, elle est soit inférieure, ou égale), on ne fait rien. Bref, ce qui m'intéresse c'est l'algorithme de comparaison des 2 nombres.

Je ne sais pas trop comment m'y prendre. Peut on dabord convertir les codes binaires des 2 nombres en décimal, et effectuer la comparaison sur les valeurs décimales? ou doit on obligatoirement travailler sur les 8 bits de chaque nombre?

Jai pensé a une certaine manière pr comparer les 2 nombres, exemple:

reference : 0001 0100
mesure : 0000 1001

on se sert du fait qu'en se décalant d'un bit vers la gauche, on multiplie un nombre par 2:
les 2 bits les plus significatifs (bits 7) sont égaux, donc on continue l'analyse, les bits 6 aussi, on continue.
Le bit 4 de la reference vaut 1, celui de la mesure 0, donc la mesure EST inférieure, on peut arreter l'analyse.

Voila, je pensais a cette manière d'attaquer la chose, mais il y'en a peut être d'autres plus optimisées ou plus faciles.
Pourriez vous m'aider et proposer un code si vous maitrisez le langage assembleur?

Merci

3 réponses

Bonjour

Pourquoi un "algorithme" de comparaison ?
Un algorithme décompose une opération complexe en opérations plus simples.
Or, la comparaison est une opération élémentaire. Tellement élémentaire qu'elle se fait en une seule instruction en assembleur PIC (SUBLW ou SUBWF selon que ta valeur de référence est constante ou en RAM), il n'y a strictement rien à décomposer.
Le résultat est dans le flag carry qui est à 1 si W est inférieur ou égal à l'opérande, comme c'est indiqué dans la datasheet du PIC
2
gabriel_g Messages postés 21 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 17 août 2010 2
16 mai 2009 à 10:55
merci, je vais regarder ça de plus près.
0
Vérifie surtout pour la carry, j'ai cité de mémoire et je ne suis plus sûr ce de que j'ai écrit. Le plus simple pour le vérifier étant à mon avis d'utiliser le simulateur de MPLAB (pas l'émulateur, trop lent pour des tests répétitifs).
0