Logicielsmoto.com

Nous sommes le 28 Mar 2024, 18:18

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
MessagePosté: 30 Aoû 2006, 09:28 
Hors ligne

Inscription: 27 Avr 2006, 09:04
Messages: 101
Je reprends ici les histoires de racine carree, de division, voire d'autre chose...

Je posterai ma racine carree 16 bits quand je rentrerai chez moi. Y a pas mal d'optimisation a voir dessus, a mon avis.

a+
Seg.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 07 Fév 2011, 22:49 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
Hop c'est encore moi :)

Je cherche un moyen rapide (si possible) de calculer 1<<n (ou 2^n) sur 16 bits.

J'ai une solution sur 8 bits (je ne sais pas si c'est la plus efficace...) :

Code:
    ORCC 1 ; set carry
loop
    ASL B
    DECA
    BHS loop


Mais sur 16 bits je sais pas trop comment m'y prendre. Je ne sais pas s'il est plus malin de faire A=B=2 puis MUL;TFR B,A tant que n!=0, ou si une solution à base de ASL A;ASL B serait plus efficace.

D'autres idées ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 08 Fév 2011, 23:53 
Hors ligne

Inscription: 21 Avr 2010, 10:59
Messages: 253
et une petite table de 16 entrées genre

matable
DC.B 00,01
DC.B 00,02
...
DC.B $80,00

un ASLB pour multiplier par 2 , un U qui pointe au debut de la table puis un LDX [U,B] (ou un truc qui s'en rapproche, enfin un truc indexé...).
ca doit pas faire lourd en cycles et ca prend grosso modo 40 octets.

_________________
http://www.alternative-system.com


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Fév 2011, 08:12 
Hors ligne

Inscription: 24 Juil 2010, 16:08
Messages: 454
Localisation: France
Ah oui c'est pas bête ça :)

J'vais essayer .. :)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 03 Oct 2017, 18:03 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Au travers de mes essais de code je suis tombé sur une astuce intéressante.

J'avais un résultat intermédiaire dont le bit Z(ero) du registre de condition m'intéressait un peu plus loin dans le code. Or les instructions en chemin détruisent très vite ce bit Z. Exemple
Code:
    cmpb #$AA
    ldb #$55 ; ou n'importe quoi qui change Z
    beq XXXX ; <== mais basé sur la valeur du cmpb


J'ai bien pensé faire un "pshs cc/puls cc" pour récupérer le bit Z plus loin, mais c'est plutot lent. En fait j'ai trouvé un truc qui me plait bien et que je vous partage ici
Code:
    cmpb #$AA
    NEGB     ; CC=0 ssi Z==1
    ldb #$55 ; CC est inchangé
    bcc XXXX ; <== tester CC ici revient à tester la valeur de Z juste avant le NEGB
Le NEGB transfert le contenu du bit Z (en fait son inverse) dans la carry qui elle resiste bien plus longtemps, permettant d'utiliser un BCC à la place du BEQ à la fin.

C'est rigolo, non? :)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 26 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com