Comment tester la valeur d'un bit d'un nombre ? [ASSEMBLEUR] - ASM - Programmation
Marsh Posté le 23-04-2002 à 15:55:28
un truc du genre
mov ax,nombre
and ax,0x2
cmp ax,0 (pas sur que cette ligne soit nécessaire)
je etiquette
http://www.pageasm.fr.fm/ peut t'aider
A+
[jfdsdjhfuetppo]--Message édité par JPA le 23-04-2002 à 15:57:54--[/jfdsdjhfuetppo]
Marsh Posté le 23-04-2002 à 16:23:37
Je suis loin de bien maitriser l'assembleur, mais j'ai de vague souvenir du 8051 :D
Le principe, énoncé par jpa, est de faire un ET logique entre un nombre binaire et le nombre que dont tu veux garder un bit. TU appliques un "masque". Par exemple :
Code :
|
Tu conserves bien le bit voulu, que tu peux ensuite tester, j'espère avoir bien compris la chose, mais y'a des personnes bien plus compétente qui pourront confirmer ou infirmer ce qui vient d'être dit =]
A+
[jfdsdjhfuetppo]--Message édité par Evadream -jbd- le 23-04-2002 à 16:25:25--[/jfdsdjhfuetppo]
Marsh Posté le 23-04-2002 à 16:46:11
Un shift et voir le flag de dépassement, quel valeur il a, car alors il contient le dernier bit qui a été éjecté... Ou alors je mélange tout... ça fait bien longtemps que je n'ai plus fait d'assembleur
Marsh Posté le 05-02-2003 à 18:15:54
_John_Doe_ a écrit : Je voudrais pouvoir tester un bit d'un nombre, tout en conservant ce nombre... |
Tu fais un masque comme on appelle ca ...
0110 1010 0001 0010 (6A12h)
& 0000 0000 0000 0010 (0002h)
-----------------------------
0000 0000 0000 0010 (0002h)
par ex pr toi ca donne
mov ax,6A12h
and ax,0002h
cmp ax,0002h
si c'est bon, le ZF (Zero Flag) est positionné car pour une operation de compare, le proco fait destination-source ( ou le contraire, chais pu mert )
donc si ton 2e bit est bien a 1 et bien l'operation de cmp positionne le ZF et en fonction de ca, tu utilise le jump adequat
Voila, j'ai confirmé
Marsh Posté le 23-04-2002 à 15:45:07
Je voudrais pouvoir tester un bit d'un nombre, tout en conservant ce nombre...
Exemple :
0110 1010 0001 0010
comment je teste la valeur du bit n° 1 (en gras) ?
[jfdsdjhfuetppo]--Message édité par _john_doe_ le 23-04-2002 à 15:46:12--[/jfdsdjhfuetppo]