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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

MPASM : variables, méfiance
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#1 Message par JJE » ven. 27 mars 2020 17:20

Bonjour à tous,
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 :sad: :eek:
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

MPASM : variables, méfiance
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » ven. 27 mars 2020 18:30

Bonsoir JJE,

Merci ! 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 :sad:

:roll: 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. :wink:

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

MPASM : variables, méfiance
JJE
Passioné
Passioné
Messages : 399
Âge : 83
Enregistré en : novembre 2017
Localisation : Picardie

#3 Message par JJE » ven. 27 mars 2020 19:48

merci de cette réponse
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 :wink: , il est donc normal qu'il fasse la même chose à ce sujet quel que soit le PIC
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 46 invités