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