Posté le 11/01/2005 à 23:25 Membre depuis le 10/01/2005, 27 messages
Voilà j'essaye d'apprendre l'assembleur pour une TI 83+ sans shell pour l'instant (j'essayerais la programmation pour les shells si je m'en sort)

Voilà donc déjà j'ai eu beaucoup de mal à trouver des cours pour une TI 83+ (si vous avez des adresses, ça m'interesse), j'ai commencé avec celui de la TIFT (http://paxl.org:2080/~tift/tuts/chapitre1.htm) et je suis bloqué sur les variables, je ne comprend pas comment comment les déclarer et donc s'en servir, j'ai cherché sur plusieurs site mais je n'est trouvé aucune explication, j'ai seulement trouvé d'autre façon de faire qui ne marche pas plus.

Je voulais donc savoir si quelqu'un pouvait m'aider ou me donner une façon qui marche d'utiliser les variables, je ne préfère pas pour l'instant toucher à la pile pour éviter toute erreur. Merci d'avance

dorian833@hotmail.com
Posté le 11/01/2005 à 23:46 Membre depuis le 28/08/2003, 8205 messages
Je ne sais pas si tu programmes déjà dans des langages de haut niveau, mais il n'y a pas vraiment de notion de variable en ASM.
Par exemple, en C, tu déclares une variable comme étant quelque chose portant un nom et pouvant contenir des informations.
En ASM, comme tu es au plus bas niveau, ces notions abstraites n'existent pas. Tu manipules la mémoire (RAM), tu peux la voir comme un énorme tableau d'octets. À toi ensuite de manipuler ces octets comme tu en as envie : tu peux utiliser par exemple la case d'adresse a de la RAM pour stocker l'abscisse d'un sprite, et la case d'adresse b pour stocker son ordonnée.

Lorsque tu écris un programme en ASM, pour te simplifier la vie et que tu n'aies pas à écrire tout plein de chiffres partout pour adresser tes variables, en général le programme qui se charge d'assembler ton code source te permet d'associer une étiquette (un label) à un emplacement mémoire. Si dans la suite de ton programme tu fais référence à cette étiquette, elle sera remplacée par la valeur numérique de l'adresse à laquelle elle fait effectivement référence.
Consulte la documentation du programme d'assemblage que tu utilises, il devrait indiquer la syntaxe que tu peux utiliser.
Cela dit, la plupart des processeurs ont une syntaxe officielle qui est en général celle qu'utilisent les logiciels d'assemblage.

Par exemple, en 68000, pour déclarer un label, on inscrit son nom en face de l'endroit où on veut le placer suivi du caractère ':'.
label:
dc.b 0,5,3


Si ensuite je fais référence au label "label" plus tard dans le programme, je pourrai manipuler les données que j'ai déclarées à côté :
move.b label,d0 ; dépose le contenu de la case mémoire d'adresse "label" dans le reegistre d0, ici 0
move.b label+1,d0 ; dépose le contenu de la case mémoire d'adresse "label+1" dans d0, ici 5



Sinon, regarde les sources de programmes existant, tu verras quelle syntaxe tu dois adopter smile
avatar« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »
Posté le 12/01/2005 à 00:00 Membre depuis le 10/01/2005, 27 messages
Merci pour ton expliquation.

Sur le tuto, il y a :
#define nomdevar1 saferam1
#define nomdevar2 nomdevar1+1
#define nomdevar3 nomdevar2+2
... ld a,(nomdevar1)


Je voulais faire quelque chose dans le même principe (dans certain programme je trouve des truc comme #define nomdevar1 savesscreen+1 ou #define nomdevar1 usermem+1).

Je voulais savoir comment faire un truc dans le même style que le tuto: avoir une variable "mavariable" a laquel je puisse affecter des valeurs comme pour les registre.
Posté le 14/01/2005 à 20:45 Membre depuis le 16/12/2002, 138 messages
Lut !
- saferam1 est l'adresse du début d'un bloc mémoire où tu peut écrire sans crainte de faire fumer la calculatrice ni de perdre tes données tant que ton programme tourne.
- savescreen est l'adresse du début d'un bloc mémoire de la taille du buffer écran (comme son nom l'indique)
- usermem est également un bloc mémoire libre pour tes variables

Maintenant, pour définir tes variables, c'est simple. On choisi ici d'utiliser saferam (comme dans le tuto de la tift) :
#define mavariable saferam1


bien, tu as ta variable "mavariable" à l'adresse saferam1. Maintenant, c'est à toi de savoir ce qu'elle représente, sa taille en octets, etc... si elle fait 1 octet (valeur possible de ta variable : 0x00 à 0xFF), tu pourra déclarer la variable suivante ainsi :
#define var2 mavariable+1

Le "+1" défini ici la taille que tu réserve pour ta variable. Le fait d'utiliser le nom de la variable précédement définie dans la définition de ta 2ème variable permet de changer à l'envi la taille de tes variables sans te soucier de tout redécaler en mémoire...

En espérant que cela t'aide, je te met l'exemple en entier :
#define mavariable savescreen
#define var2 mavariable+1
#define var3 var2+1
#define var4 var3+2 ; ici var3 utilise 2 octets, donc on décale de 2 l'adresse de var4


vala vala, bonne chance happy
Posté le 17/01/2005 à 22:53 Membre depuis le 10/01/2005, 27 messages
Super merci pour ton explication, c'est beaucoup plus clair comme ça.

Je voulais pas avancer dans les leçons sans avoir compris celui-là

Encore merci