Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
Multiplication 16 bits par 16 bits
Bonjour Temps-x,
C'est une vraie histoire de fous
Je viens de refaire une exécution pas à pas sous MPLAB SIM.
à l'entrée dans multiple, je saute bien à impaire, normal
je déroule impaire qui ajoute bien Operande à produit, sans retenue bien sûr
sur le retirn, je me retrouve à paire, normal.
là je charge multiplicateur + 0 dans W soit 0x01.
le xorlw D'1' qui suit donne un résultat nul, normal et arme Z.
donc le btfsc STATUS, Z ne "skip" pas puisque Z n'est pas "clear"
donc je fais le return.
Le programme que je teste est celui que tu as donné dans le post 4 de ce sujet, sans aucune modification, sauf les valeurs des opérandes bien sûr
J'aimerais bien trouver la faille
C'est une vraie histoire de fous
Je viens de refaire une exécution pas à pas sous MPLAB SIM.
à l'entrée dans multiple, je saute bien à impaire, normal
je déroule impaire qui ajoute bien Operande à produit, sans retenue bien sûr
sur le retirn, je me retrouve à paire, normal.
là je charge multiplicateur + 0 dans W soit 0x01.
le xorlw D'1' qui suit donne un résultat nul, normal et arme Z.
donc le btfsc STATUS, Z ne "skip" pas puisque Z n'est pas "clear"
donc je fais le return.
Le programme que je teste est celui que tu as donné dans le post 4 de ce sujet, sans aucune modification, sauf les valeurs des opérandes bien sûr
J'aimerais bien trouver la faille
Multiplication 16 bits par 16 bits
Bonsoir JJE,
C'est bien le même que j'ai testé, est il fonctionne chez moi, regarde si tu as bien paramétré MPLAB 8.92 comme sur les images.
On travaille avec un Pic16F628A à titre d'exemple
Si on fait une erreur, on peut la chercher des heures, voir des jours, sans se rendre compte quelle est devant nous, l'ordinateur à toujours raison, mais après faux comprendre le pourquoi.....
A+
JJE a écrit :Source du message Le programme que je teste est celui que tu as donné dans le post 4 de ce sujet
C'est bien le même que j'ai testé, est il fonctionne chez moi, regarde si tu as bien paramétré MPLAB 8.92 comme sur les images.
On travaille avec un Pic16F628A à titre d'exemple
JJE a écrit :Source du message J'aimerais bien trouver la faille
Si on fait une erreur, on peut la chercher des heures, voir des jours, sans se rendre compte quelle est devant nous, l'ordinateur à toujours raison, mais après faux comprendre le pourquoi.....
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Multiplication 16 bits par 16 bits
Bonsoir Tempx-x
C'est à n'y rien comprendre.
Je suis bien sous MPLAB 8.92 :
et j'ai la même configuration que la tienne :
au point rouge en bas à droite près mais qui n'a rien à voir avec le sujet. D'ailleurs, je ne crois pas que la config puisse influencer ce programme à ce point.
As-tu essayé sous MPLAB SIM ? Ce n'est rien à faire si tu travailles avec MPLAB; Dans le menu Debugger/Select Tool, cocher MPLAB SIM (4 chez moi). lancer un assemblage et avancer le programme pas à pas, je serais surpris que la description que je t'ai faite plus haut ne défile pas sous tes yeux.
Par ailleurs, à la main, j'ai le même résultat, c'est ce qui a attiré mon attention
Ce n'est pas que je tienne à avoir raison, mais il faudrait bien éclaircir ce problème.
Quelqu'un d'autre suit-il ce sujet qui pourrait nous éclairer ?
C'est à n'y rien comprendre.
Je suis bien sous MPLAB 8.92 :
et j'ai la même configuration que la tienne :
au point rouge en bas à droite près mais qui n'a rien à voir avec le sujet. D'ailleurs, je ne crois pas que la config puisse influencer ce programme à ce point.
As-tu essayé sous MPLAB SIM ? Ce n'est rien à faire si tu travailles avec MPLAB; Dans le menu Debugger/Select Tool, cocher MPLAB SIM (4 chez moi). lancer un assemblage et avancer le programme pas à pas, je serais surpris que la description que je t'ai faite plus haut ne défile pas sous tes yeux.
Par ailleurs, à la main, j'ai le même résultat, c'est ce qui a attiré mon attention
Ce n'est pas que je tienne à avoir raison, mais il faudrait bien éclaircir ce problème.
Quelqu'un d'autre suit-il ce sujet qui pourrait nous éclairer ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Multiplication 16 bits par 16 bits
Bonsoir JJE,
Si justement, tu travaille avec un PIC16F884, la mémoire est différent, mon fichier est fait à titre d'exemple pour un Pic16F628A.
l'assembleur est comme fou, il ne sait plus ou il se trouve, mais toi à sa place
Si tu as pris le même fichier que l'exemple en post 4 il est normal qu'il y et des erreurs.
Je travaille toujours avec le simulateur pour trouver les erreurs, sinon j'utilise toujours jens file Editor 3.95 qui est un simple éditeur
de texte.
Je ne cherche en aucun cas à avoir raison, je suis comme toi, un peu trop curieux, ce qui est un avantage, et un inconvénient.
Il faudrait un volontaire sur le forum qui refasse le test..., ...
ça prends moins de 10 minutes, et c'est enrichissant... qui se portera volontaire..... ? Gérard j'en suis presque sur .... Il adore ASM...
A+
JJE a écrit :Source du message D'ailleurs, je ne crois pas que la config puisse influencer ce programme à ce point.
Si justement, tu travaille avec un PIC16F884, la mémoire est différent, mon fichier est fait à titre d'exemple pour un Pic16F628A.
l'assembleur est comme fou, il ne sait plus ou il se trouve, mais toi à sa place
Si tu as pris le même fichier que l'exemple en post 4 il est normal qu'il y et des erreurs.
JJE a écrit :Source du message As-tu essayé sous MPLAB SIM ?
Je travaille toujours avec le simulateur pour trouver les erreurs, sinon j'utilise toujours jens file Editor 3.95 qui est un simple éditeur
de texte.
JJE a écrit :Source du message Ce n'est pas que je tienne à avoir raison, mais il faudrait bien éclaircir ce problème.
Je ne cherche en aucun cas à avoir raison, je suis comme toi, un peu trop curieux, ce qui est un avantage, et un inconvénient.
Il faudrait un volontaire sur le forum qui refasse le test..., ...
ça prends moins de 10 minutes, et c'est enrichissant... qui se portera volontaire..... ? Gérard j'en suis presque sur .... Il adore ASM...
A+
Multiplication 16 bits par 16 bits
Temps-x a écrit :Source du message Si justement, tu travaille avec un PIC16F884, la mémoire est différent, mon fichier est fait à titre d'exemple pour un Pic16F628A.
en fait, c'est une fausse manip de ma part, voici la fenêtre que j'ai quand c'est ton projet qui est ouvert dans MPLAB :
exactement la tienne
As-tu fait un pas à pas sous MPLAB SIM comme je te le demandais ?
Bonne nuit, elle commence mal pour moi
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Multiplication 16 bits par 16 bits
Bonjour JJE,
Bien sur, et depuis longtemps.
A+
JJE a écrit :Source du message As-tu fait un pas à pas sous MPLAB SIM comme je te le demandais ?
Bien sur, et depuis longtemps.
A+
Multiplication 16 bits par 16 bits
Multiplication 16 bits par 16 bits
Bonjour Temp-x, le sommeil, ça n'a pas marché, alors je t'ai fait une petite "vidéo", voici image par image, le déroulé du programme en 11 étapes à voir dans l'ordre de leur numéro en fichiers joints. Attention, dans la page affichée, ils ne sont pas dans l'ordre et leur nom a disparu
pap1 : prêt à partir, un point d'arrêt et l'ajout d'un nom pour bien matérialiser le retour de call impair.
pap2 : prêt à partir, go vers le point d'arrêt
pap3 : on y est, un pas et ...
pap4 : on entre dans le sous-programme multiplie. On voit bien que le bit 0 de multiplicateur + 0 est à 1 donc on ne fait pas le saut et ...
pap5 : on entre dans le sous-programme impaire qu'on va dérouler sans images avec un "run to cursor" et nous voici à ;
pap6 : qui nous emmène à paire. Avant d'y aller, on peut observer la valeur des variables qui sont telles que l'on pouvait espérer.
pap7 : j'ai fait un pas de trop, mais on voit dans la fenêtre watch bien que l'instruction movf multiplcateur +0, w a été effectuée
pap8 : le xorlw D'1' vient d'être effectué, sans surprisen on trouve 0 dans WREG et STATUS, Z à 1. J'ai opportunément ajouté STATUS dans le watch, on n'en avait pas besoin jusque là. Au pas suivant, on ne va pas sauter, encore un pas, et hop
pap9 : on se retrouve bien sur le nop que j'ai ajouté pour matérialiser le retour de impair. Un pas de plus et on déroule les instructions déjà déroulées en pap7.
pap10 : même causes, mêmes effets, on se retrouve sur le return, celui du call multiplie appelé en pap3.
pap11 : et on sort, sans avoir terminé la multiplication.
Remarque que si tu effectue un rrf multiplicateur avant pour effacer ce bit qui a été exploité, ce problème disparaît; mais comment sort-on de cette boucle ?
Cet algorithme c'est, je crois, la méthode égyptienne; l'un des meilleurs pour la multiplication.
Je n'arrive pas à comprendre pourquoi ces 11 étapes ne se reproduisent pas chez toi
pap1 : prêt à partir, un point d'arrêt et l'ajout d'un nom pour bien matérialiser le retour de call impair.
pap2 : prêt à partir, go vers le point d'arrêt
pap3 : on y est, un pas et ...
pap4 : on entre dans le sous-programme multiplie. On voit bien que le bit 0 de multiplicateur + 0 est à 1 donc on ne fait pas le saut et ...
pap5 : on entre dans le sous-programme impaire qu'on va dérouler sans images avec un "run to cursor" et nous voici à ;
pap6 : qui nous emmène à paire. Avant d'y aller, on peut observer la valeur des variables qui sont telles que l'on pouvait espérer.
pap7 : j'ai fait un pas de trop, mais on voit dans la fenêtre watch bien que l'instruction movf multiplcateur +0, w a été effectuée
pap8 : le xorlw D'1' vient d'être effectué, sans surprisen on trouve 0 dans WREG et STATUS, Z à 1. J'ai opportunément ajouté STATUS dans le watch, on n'en avait pas besoin jusque là. Au pas suivant, on ne va pas sauter, encore un pas, et hop
pap9 : on se retrouve bien sur le nop que j'ai ajouté pour matérialiser le retour de impair. Un pas de plus et on déroule les instructions déjà déroulées en pap7.
pap10 : même causes, mêmes effets, on se retrouve sur le return, celui du call multiplie appelé en pap3.
pap11 : et on sort, sans avoir terminé la multiplication.
Remarque que si tu effectue un rrf multiplicateur avant pour effacer ce bit qui a été exploité, ce problème disparaît; mais comment sort-on de cette boucle ?
Cet algorithme c'est, je crois, la méthode égyptienne; l'un des meilleurs pour la multiplication.
Je n'arrive pas à comprendre pourquoi ces 11 étapes ne se reproduisent pas chez toi
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Multiplication 16 bits par 16 bits
Multiplication 16 bits par 16 bits
Bonjour JJE, et tout le forum,
et JJE au moins tu cherches à comprendre, tu as toute mon admiration.
Aussi appelé méthode russe, mais ce qui l'on découvert c'est bien les égyptiens
https://www.youtube.com/watch?v=WtAAp0aSoqE
Pour additionner les valeurs, on aurait pu utiliser la méthode de F6FCO décrite ICI
Il faut toujours regarder ce que les anciens faisait, car ils avaient des idées qui ont été oublié, je trouve cette technique génial.
Il faut savoir quelle est apprit dans les écoles de programmation, j'ai lu ça sur les forums, mais les programmeurs ne veulent pas
diffuser leurs sources, parce que c'est leur gagne pain..... on peut aussi le comprendre ....
Dans ta proposition en post #29 on n'est plus dans le système égyptien.
Je te tiens au courant pour la suite, car là j'ai pas le temps de voir tout ce que tu m'as mis, je vois ça un peu plus tard, dans la soirée.
A+
JJE a écrit :Source du message Cet algorithme c'est, je crois, la méthode égyptienne; l'un des meilleurs pour la multiplication.
et JJE au moins tu cherches à comprendre, tu as toute mon admiration.
Aussi appelé méthode russe, mais ce qui l'on découvert c'est bien les égyptiens
https://www.youtube.com/watch?v=WtAAp0aSoqE
Pour additionner les valeurs, on aurait pu utiliser la méthode de F6FCO décrite ICI
Il faut toujours regarder ce que les anciens faisait, car ils avaient des idées qui ont été oublié, je trouve cette technique génial.
Il faut savoir quelle est apprit dans les écoles de programmation, j'ai lu ça sur les forums, mais les programmeurs ne veulent pas
diffuser leurs sources, parce que c'est leur gagne pain..... on peut aussi le comprendre ....
JJE a écrit :Source du message une proposition qui prend en compte ma remarque de sortie de boucle en ajoutant un compteur de passages (loop1)
Dans ta proposition en post #29 on n'est plus dans le système égyptien.
Je te tiens au courant pour la suite, car là j'ai pas le temps de voir tout ce que tu m'as mis, je vois ça un peu plus tard, dans la soirée.
A+
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 89 invités