"retourner" un nombre

"retourner" un nombre - ASM - Programmation

Marsh Posté le 04-10-2006 à 11:01:43    

Bonjour tout le monde,
 
Je cherche le nom d'une opération (et accessoirement la façon de faire peu importe en quel assembleur) d'une opértion qui me "retourne" un nombre. Je m'explique plus clairement avec un exemple.
 
j'ai un nombre sur 8 bits que je souhaite retourner, c'est-à-dire ceci :
 
si mon nombre de base est %10011011 je souhaite obtenir %11011001, c'est à dire placer b7 sur b0, b6 sur b1, b5 sur b4, b4 sur b3, b3 sur b4, etc.
 
pareil si l'opération porte sur un integer b15 sur b0, b14 sur b1, etc.
 
Voilà.
 
Merci d'avance pour votre aide.
 
edit: est-il possible de le faire en une seule opération?


Message édité par abaddon2002 le 04-10-2006 à 11:35:42
Reply

Marsh Posté le 04-10-2006 à 11:01:43   

Reply

Marsh Posté le 04-10-2006 à 12:02:24    

ror ?
 
edit : ah non, j'avais pas noté l'inversion totale, j'croyais que c'était une bête rotation  [:pingouino]


Message édité par Elmoricq le 04-10-2006 à 12:05:39
Reply

Marsh Posté le 04-10-2006 à 12:37:50    

tu devrais pouvoir t'en sortir avec;
 
mov al , %00101010
xor bl , bl
mov cx , 8
boucle:
rol bl, 1
ror al, 1
adc bl  , 0
loop boucle
 
bon ok c'est pas en une seul op... mais c'est deja pas mal


Message édité par sociopath_epitech le 04-10-2006 à 12:39:01
Reply

Marsh Posté le 04-10-2006 à 12:49:04    

Ca a déja été traité sur ce forum, mais je sais plus ou...
Certains étaient venus avec des solutions très ingénieuses, à base de masques et de permutations...

Reply

Marsh Posté le 04-10-2006 à 13:31:50    

merci beaucoup pour vos réponses  :p .
 
Mackila: Oui le problème est que je suis très critique au niveau des temps. je parcoure donc le forum pour voir ces solutions..
 
sociopath_epitech: oui j'utilises un truc du genre actuellement mais sans boucle pour gagner quelques cycles..

Reply

Marsh Posté le 04-10-2006 à 14:51:28    

ok... pour ma part c'est tout ce que je peut t'apporter,,, bon courage! :)

Reply

Marsh Posté le 13-10-2006 à 09:52:37    

Celà peut se faire avec une LUT en 1 opération, option évidente ;) , mais aussi - pour 8bits à retourner -:

Code :
  1. uchar_t result = (val * 0x0202020202ULL & 0x010884422010ULL) % 1023;


 
c.a.d 3 opérations dont 1 multiplication et division en 64bits, cf http://www.inwap.com/pdp10/hbaker/ [...] ml#item167
 
Il y a des variantes plus longues sans division, d'autres encore plus longues avec multiplications mais pas en 64bits et enfin une décomposition générique à base de masques magiques et décalages.


Message édité par tbp le 13-10-2006 à 09:56:13
Reply

Sujets relatifs:

Leave a Replay

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