AVR: étiquette de multiplication ASM avec 2

Zippi

AVR: étiquette de multiplication ASM avec 2


Dans l’exemple cidessous :

 ldi ZL ,  low ( 2 * label ) ldi ZH ,  high ( 2 * label ) label : 
 . db "Hello world" ,   0 lpm 

Pourquoi une étiquette de multiplication avec 2 est nécessaire? Je comprends que la mémoire du programme est adressée par mot, et je suppose que l’étiquette: elle-même est de 16 bits (!?).

Voici le texte cité par l’auteur de l’exemple:

« Si l’adresse n’est pas multipliée par deux et que l’étiquette est à l’adresse d’octet 0x60 (adresse de mot 0x30), Z pointera vers le code qui y est stocké. J’espère que cela a clarifié le problème d’adressage. Les autres versions sont … »

Pouvez-vous clarifier.

Réponses


 Ignacio Vazquez-Abrams

Les emplacements de l’assembleur sont adressés par mot car les opcodes AVR sont à 16 bits, mais les registres d’index fonctionnent avec des emplacements d’octets. La multiplication par 2 corrige cet écart.

ÉDITER:

D’après la description de l’ LPM (Load Program Memory) :

La mémoire du programme est organisée en mots de 16 bits tandis que le pointeur Z est une adresse d’octet. Ainsi, le bit le moins significatif du pointeur Z sélectionne soit l’octet bas (Z LSB = 0) soit l’octet haut (Z LSB = 1).

Par conséquent, si nous voulons lire l’adresse de mémoire du programme 5, nous devons charger 10 dans Z , puis lire deux octets.

Zippi

Je n’arrive toujours pas à comprendre.

Ignacio Vazquez-Abrams

Eh bien, ne l’acceptez pas avant de l’avoir fait …

Zippi

« Ainsi, le bit le moins significatif du pointeur Z sélectionne soit un octet bas (ZLSB = 0) soit un octet haut (ZLSB = 1). » Ah maintenant je comprends. Merci beaucoup.

johnfound

@Zippi – vous pouvez maintenant accepter cette réponse. 🙂

Zippi

@johnfound Eh bien, je suppose que je peux maintenant 🙂

 

#de, 2, asm?, avec, AVR, étiquette, multiplication

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *