Bonjour, dans le cadre d'un petit projet, je dois faire un programme sur Arduino qui permet d'afficher les valeur de la suie de Fabinacci.
J'aimerai ici juste comprendre la fonction ADD et savoir comment l'utiliser, sur internet j'ai un peu de mal sur l'asm et je me perds facilement dans ce tsunami de nouvelles choses.
Voici ma partie de code, j'aimerai que 'value2' s'ajoute à la valeur de 'value', soit value = value + value2.
Ahah oui bien vu je me suis mal relu ^^ en effet c'est de la suite de Fabinacci que je parlais, c'est dans le cadre d'un projet, afin de comprendre comment marche le langage machine ect...
Merci de ta réponse, en effet le programme marche correctement, je me doute que les r16 et r17 viennent de la mémoire, mais comment connaître ces cases mémoires ? (exemple si il y en a d'autre du type r17, r18 ect).
ps: je suis sur une arduino UNO, je ne sais pas si ca influe...
Merci de ton message, en effet j'ai fait des recherches de mon côté, et c'est la première fois que je fais de l'ASM (et aussi m'intéresser aux machines ect) et je ne comprend pas toujours tout ce qui m'est présenté sur internet ^^
comme micros() à une résolution de 4µs on ne peut pas en conclure quoi que ce soit...
votre code assembleur ne pourra pas aller bcp plus loin que 10 itérations puisque vous travaillez juste sur 8 bits... en C on peut prendre un unsigned long ou unsigned long long et rien qu'en changeant le type on a un code fonctionnel qui va plus loin...
pas d'avantage à utiliser l'assembleur pour ce genre de choses
Oui le but de l'exercice est de voir comment ça marche, et aussi de voir cette subtilité sur 8 bits.
En effet les Serial.print ralentissent plus qu'autre chose...
Non seulement ça ralenti, mais ça fausse complètement la comparaison.
Serial étant buffurisé, dans la première boucle le buffer n'est pas plein et Serial.println() range les caractères dans le buffer très rapidement, mais dans la deuxième boucle le buffer est plein et Serial.println() doit attendre que de la place dans le buffer se libère (par transmission d'un caractère) pour ranger les caractères dans le buffer.
D'ailleurs si tu inverses et que tu fais le calcul en C en premier tu verras que le calcul en C prend 1184 µs et le calcul en assembleur 12412 µs
Tu n'as pas que ADD qui existe, et il pourrait être intéressant de regarder comment le compilateur gère des entiers sur 32 ou 64 bits.
D'ailleurs je pense que ADC, qui est la même chose que ADD mais qui tient compte de la retenue serait intéressant à regarder :
Ce logiciel léger (sous Windows ou Linux) pourrait peut être faciliter le travail d'édition, d'assemblage et de suivi, au besoin pas à pas, du contenu des registres, des ports, de la RAM...... tout ce qu'il faut pour entrer dans l'intimité d'une puce AVR !
Merci beaucoup de ta réponse, en effet je comprend ce que tu veux dire et j'ai cherché sur internet comment marche un buffer (Buffer circulaire — Wikipédia). Tout est plus claire maintenant !