Décalage de n bit dans ARM - ASM - Programmation
Marsh Posté le 17-01-2008 à 23:00:21
Peux-tu nous donner plus de précision sur la partie à traduire qui te pose problème ?
Marsh Posté le 18-01-2008 à 17:42:20
Elmoricq a écrit : Peux-tu nous donner plus de précision sur la partie à traduire qui te pose problème ? |
Je maitrise pas bien l'assembleur ARM, disons que la boucle est la partie la plus difficile dans ce code.
Marsh Posté le 19-01-2008 à 16:05:10
bin déjà c'est pas vraiment de l'assembleur là hein
je connais pas spécialement l'archi arm et ses variantes (si y'en a)
bon si le compilo supporte l'émulation d'opération 64bits sur ton cpu 32bits, juste le >> pourrait marcher. (donc déjà vérifier avant de hacker, ça permetterra de pas faire une contre-performance pour un cpu 64bits)
--
ensuite avec quelques shifts et des masques ça devrait marcher.
à l'arrache pour un shift arithmétique droit de n bits (stune proposition):
- shift droit de n bits des 32bits bas (sans extension de signe),
- si n<32
shift gauche de 32-n bits des 32bits haut puis ou logique du résultat temporaire avec les 32bits bas
- si n>32
shift droit de n-32 bits des 32bits haut (avec extension de signe) puis ou logique du résultat temporaire avec les 32bits bas
- shift droit de n bits 32bits haut (extension de signe)
voilà donc après y'a ptet moyen de faire mieuxe (déjà ptet faire des combinaisons de masques pour dégager les comparaisons)
Marsh Posté le 01-02-2008 à 19:40:14
Tutoriel sur l'assembleur ARM:
http://www.heyrick.co.uk/assembler/
ça peut peut-être t'aider.
ex: MOV R0, R1, LSR R2
fait l'équivalent du C: R0 = R1 >> R2
Et puis il n'est pas inutile de lite ce tutoriel pour savoir comment sont alloués et utilisés les registres ARM:
Code :
|
En gros tu as 4 registres généraux de données et 4 registres généraux d'adresses, les autres ayant certaines contraintes dépendant du mode (user ou kernel ou interruption matériel).
Dans le détail, les assembleurs se ressembles tous un peu, superficiellement, dans leurs principes, mais avec de grosses différences dans les instructions supportées et modes d'adressage. Ce qu'il faut retenir c'est qu'il n'est pas nécesssaire de faire des décalages bit par bit, quand l'ARM a un barrel shifter générique utilisable dans presque toutes les instructions arithmétiques et de déplacement de registre ou de chargement en mémoire pour calculer des adresses facilement.
Sinon revois ton code C de simulation il est très inefficace. Si on suppose que ton compilo supporte les types 64 bits (long long) il va passer les paramètres 64 bits dans 2 registres 32 bits (par exemple R4 et R5). Regarde déjà ce que génère gcc dans une sourtie en source assembleur (.s).
Marsh Posté le 17-01-2008 à 21:12:12
Bonjour a tous
La fonction suivante fait un décalage de n bit dans un mot de 64 bits
Pouvez vous m'aider a traduire cette fonction en assembleur ARM9
Merci d'avance