Bonjour Temps-X et tous les forumeurs,
je reviens sur ce sujet qui date, il est vrai.
Quelques petites remarques sur cet exemple de partage de code.
Bravo pour sa présentation et sa clarté.
Si je veux me servir de ce sous-programme, que dois-je faire :
1 - dans le CBlock définissant les variables de mon programme, je dois recopier
2 - dans mon programme lui même je dois recopier le source de sous-programme proposé
► Afficher le texte
Temps-x a écrit :Source du message ;-----------------------------------------------------------------------------------------------
multiplie
btfsc multiplicateur+0,0
call impaire
paire
movf multiplicateur+0,W
xorlw D'1'
btfsc STATUS,Z
return
bcf STATUS,C
rlf multiplicande+0,F
rlf multiplicande+1,F
rlf multiplicande+2,F
rlf multiplicande+3,F
bcf STATUS,C
rrf multiplicateur+1,F
rrf multiplicateur+0,F
btfss multiplicateur,0
goto paire
impaire
bcf STATUS,C
movf multiplicande+0,W
addwf produit+0,F
btfsc STATUS,C
call v1
movf multiplicande+1,W
addwf produit+1,F
btfsc STATUS,C
call v2
movf multiplicande+2,W
addwf produit+2,F
btfsc STATUS,C
call v3
movf multiplicande+3,W
addwf produit+3,F
goto paire
;******************************************************************************************
v1
movlw B'00000001'
bcf STATUS,C
addwf produit+1,F
btfss STATUS,C
return
v2
movlw B'00000001'
bcf STATUS,C
addwf produit+2,F
btfss STATUS,C
return
v3
movlw B'00000001'
bcf STATUS,C
addwf produit+3,F
return
3 - Admettons que je dispose de 3 variables V1, V2, Res initialisées et que je veuille mettre dans Res le résultat de V1*V2
. il me faut
3.1 copier V1 dans multiplicateur et V2 dans multiplicande :
Code : Tout sélectionner
movf V1, W
movwf multiplicateur
movf V1+1, W
movwf multiplicateur+1
movf V2 W
movwf multiplicande
movf V2+1, W
movwf multiplicande+1
3.2 appeler la fonction
3.2 récupérer le résultat
Et cela à chaque fois que j'aurai à effectuer une multiplication 16 bits et là, on ne se préoccupe pas des problèmes de banque ni de page.
Vue la répétitivité, il me semble préférable de faire bosser l'assembleur. Une méthode que j'avais décrite
ici et mise en oeuvre dans de nombreux sujets ces derniers mois serait certainement à utiliser.
4 - Telle que mis en oeuvre dans le paragraphe 3, cette méthode va à l'échec dès le deuxième appel car la mise à 0 du produit est effectuée en dehors de la procédure et je ne l'ai pas faite. Deux instructions à ajouter dans 3.1.
C'est vrai que c'est un peu de travail en plus et ce n'est pas le plus intéressant. Quand on a déniché un bon algorithme, qu'on l'a codé, qu'on l'a testé, qu'on l'a présenté proprement par respect du lecteur, on a de bonnes raisons d'être satisfait et
et
à Temps-X