- 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
J'ai fait les observations suivantes qui invitent à faire attention aux variables mises à disposition par l'assembleur :
1 - différence entre V set ... et variable v = ...
le source :
Code : Tout sélectionner
V set .288
variable VV = .288
Dans le fichier .lst
Code : Tout sélectionner
00000120 00156 V set .288
0120 00157 variable VV = .288
0x120 est bien égal à .288 (1*16²+2*16+0)
set considère les symboles ainsi définis comme des nombres de 32 bits
variable introduit des symboles de 16 bits
2 - valeurs négatives
le source
Code : Tout sélectionner
V set -.288
O2 set V%.256
Dans le fichier .lst
Code : Tout sélectionner
FFFFFEE0 00156 V set -.288
FFFFFFE0 00157 O2 set V%.256
si on observe que 0XFFFFFFE0 = -.32
ceci revient à écrire -288 = -1*256 +(- 32). quotient -1 reste -32.
Il est plutôt d'usage d'écrire -288 = -2*256 + 224, -2*256 étant le plus grand entier multiple de 256 inférieur ou égal à -288
et le reste étant positif.
3 - accéder aux octets d'un symbole
si positif, tout va bien
le source
;Pour accéder à l'octet de bas poids, rang 0
Code : Tout sélectionner
O1 set low(V)
V set .288
O2 set V%.256
movlw O1
movlw O2
Dans le fichier .lst
Code : Tout sélectionner
00000120 00156 V set .288
00157 ; pour accéder à l'octet de bas poids, rang 0
00000020 00158 O1 set low(V)
00000020 00159 O2 set V%.256
0016 3020 00160 movlw O1
0017 3020 00161 movlw O2
; pour accéder à l'octet de poids 1
Code : Tout sélectionner
00000001 00163 O1 set low(V>>8)
00000001 00164 O2 set (V>>8)%.256
00000001 00165 O3 set low(V/.256)
0018 3001 00166 movlw O1
0019 3001 00167 movlw O2
001A 3001 00168 movlw O3
si négatif, attention
pour accéder à l'octet de poids 1
dans le source
Code : Tout sélectionner
O1 set low(V>>8)
O2 set (V>>8)%.256
O3 set low(V/.256)
movlw O1
movlw O2
movlw O3
Dans le fichier .lst
si négatif, attention
Code : Tout sélectionner
FFFFFEE0 00156 V set -.288
00157 ; pour accéder à l'octet de bas poids, rang 0
000000E0 00158 O1 set low(V)
FFFFFFE0 00159 O2 set V%.256
0016 30E0 00160 movlw O1
0017 30E0 00161 movlw O2
00162 ; pour accéder à l'octet de poids 1
000000FE 00163 O1 set low(V>>8)
000000FE 00164 O2 set (V>>8)%.256
00165 ; mais attention, pas
000000FF 00166 O3 set low(V/.256)
0018 30FE 00167 movlw O1
0019 30FE 00168 movlw O2
001A 30FF 00169 movlw O3
L'opérateur "/" est pourtant décrit comme la division entière, on tombe dans le même défaut que celui décrit dans le paragraphe précédent.
4 - Grands nombres
le source :
Code : Tout sélectionner
V set 0x0123456789
dans le .lst
Code : Tout sélectionner
00155
23456789 00156 V set 0x0123456789
00157
L'assembleur tronque les 2 chiffres de trop, normal mais il n'en fait pas part
pour tout cette documentation, il est bien de le mentionner (et ce post est très utile) car je me suis déjà fait avoir
J'ai cherché mon erreur, et fin de compte j'ai trouvé après plus de 20 minutes de recherche.... que du temps de perdu.....
Maintenant je programme plus avec des Pic18Fxxxx que des Pic16Fxxxx, mais les stocks des Pic16Fxxxx il faudra bien les écoulés.
Mais pour les variables le problème reste similaire dans les deux versions de Pic.
A+
Temps-x a écrit :Source du message Mais pour les variables le problème reste similaire dans les deux versions de Pic.
en fait, c'est le même assembleur , il est donc normal qu'il fasse la même chose à ce sujet quel que soit le PIC
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 46 invités