jeudi 31 octobre 2019

Chapitre 68 : assembleur ARM 64 : affichage d’un registre en hexa.


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