Pour continuer la découverte de l’assembleur ARM 64 sur mon
raspberry, je duplique les 2 routines précédentes et je les stocke dans un
fichier routinesARM64.s que je compile séparément à la racine de mon répertoire
ASM64. Je crée aussi le fichier constantesARM64.inc et je crée un fichier
ficmacros64.s dans lequel j’écris (à partir des macros 32 bits) les premières
macros : affichage d’un libellé (affichelib et affichage d’un registre en
binaire affbintit).
Après quelques tests, ces macros fonctionnent correctement
en 64 bits. Il faut penser à ajouter le fichier routinesARM64.o dans
l’instruction ld du script de compilation.
Dans le programme affregistre.s, j’ajoute la routine affReg16
qui affiche le contenu du registre x0 en hexadécimal. Il n’y a pas de
difficulté particulière dès que l’on a compris l’utilisation de la pile, l’absence
des instructions conditionnelles. Je n’ai pas utilisé l’instruction ubfx pour
extraire les 4 bits de chaque chiffre puisqu’elle n’est possible qu’avec des
valeurs immédiates.
Je teste la routine avec différentes valeurs 0, -1 et je
vérifie que l’adresse de la pile n’est pas altérée par les appels des routines.
Tout va bien.
Ensuite je duplique le programme en affregistre1 et je le
modifie pour appeler les 2 macros et les routines contenues dans le fichier
objet.
J’en profite pour tester les instructions ldp et stp en
utilisant le registre x5 comme base. Tout va bien !!
Je teste aussi les différents mov qui permettent d’insérer
des valeurs de 16 bits dans un registre. Vous remarquerez que la valeur 010 s’affiche
8 !! Pourquoi ? parce que dans l’assembleur as une valeur qui
commence par 0 est considéré comme octal. Donc attention 10 et 010 n’auront
donc pas la même valeur dans un registre.
Il me reste à transformer cette routine d’affichage en hexa
en macro. En 32 bits, j’affichais tous les registres dans la macro affregtit
mais ici il va y avoir 31 registres à afficher ce qui va faire beaucoup. Je réfléchis
à afficher que 6 registres sur une ligne mais en passant le n° du premier
registre à afficher dans la macro.
Ce sera l'objet du prochain article.
Tous les sources se trouvent ici : https://github.com/vincentARM/ARMassembly64
Aucun commentaire:
Enregistrer un commentaire