[ASSEMBLEUR] Comment tester la valeur d'un bit d'un nombre ?

Comment tester la valeur d'un bit d'un nombre ? [ASSEMBLEUR] - ASM - Programmation

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]

Reply

Marsh Posté le 23-04-2002 à 15:45:07   

Reply

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]

Reply

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 :
  1. 0110 1010 0001 0010
  2. 0000 0000 0000 0010


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]

Reply

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 :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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...
 
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]


 
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é ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed