Tous les chapitres précédents ont été écrits pour la
programmation en assembleur pour le Raspberry pi modèle 1. Pour programmer en assembleur ARM 64 bits,
j’ai acquis un raspberry pi3 B+ mais hélas je ne peux pas écrire de programmes
en 64 bits car la version Linux Raspbian Jessie ne gère que le 32 bit. En
attendant de réussir à faire fonctionner des versions Linux 64 bits sur le
raspberry pi 3, j’ai testé certains programmes des chapitres précédents écrits
en 32 bits.
Déjà les outils de compilation et de lien restent identiques
pour les 2 modèles.
Par contre l’adresse
de base du GPIO est différente : 0x 3F003000 à la place de 0x20003000. Et
pour ceux qui veulent utiliser la mailbox l’adresse est 0x40000000.
Au niveau des instructions, nous trouvons l’instruction de
division signée sdiv et non signée udiv. Ces instructions ne donnent que le
quotient de 2 nombres de 32 bits. Pour avoir le reste il faut multiplier ce
quotient par le diviseur et l’enlever du dividende !! Mais cela est fait grâce
à la seule instruction mls,
exemple :
mov r2,#105 @ dividendemov r1,#10 @ diviseurudiv r0,r2,r1 @ calcul quotient dans r0mls r3,r1,r0,r2 @ calcul reste dans r3
Sur le raspberry pi 1, il n’était possible que de mettre des
valeurs immédiates de 0 à 255 et des multiples de 4, 8, 16 et 32 de ces
valeurs. Il fallait donc utiliser une instruction de chargement ldr pour
charger dans un registre les autres valeurs. Sur le Raspberry pi 3, il est
possible de charger tous les valeurs de 0 à 0xFFFF (0 à 4095) dans la partie
basse d’un registre avec l’instruction mov puis de charger toutes les valeurs
de 1 à 0xFFFF dans la partie haute grâce à l’instruction movt.
Par exemple pour charger la valeur 0xCCCCCCCD dans le
registre r0 il faut effectuer :
Mov r0, #0xCCCD
Movt r0,#0xCCCC
Curieusement et bien que la documentation l’indique, il n’est
pas possible d’additionner ou de soustraire une valeur dans la plage 0-4095.
Nous trouvons aussi l’instruction rbit qui permet
d’intervertir les 32 bits d’un registre.
Et une curieuse instruction IT (IF Then) dont je n’ai pas
bien compris la logique et l’utilité !!
Si je trouve d’autres différences, je compléterais ce post.
Aucun commentaire:
Enregistrer un commentaire