Assembleur : comparer 2 nbres
gabriel_g
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
le père -
le père -
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
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
A voir également:
- Assembleur : comparer 2 nbres
- Logiciel assembleur - Télécharger - Édition & Programmation
- Tp corrigé assembleur 8086 - Forum Programmation
- Assembleur 8086 - Forum Programmation
- Assembleur add mul div sus - Forum Assembleur
- Assembleur ✓ - Forum Programmation
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
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