Ces premiers chapitres nous ont permis de découvrir les
instructions de l’assembleur et son intégration dans le système Linux. Cela
aussi nous permet de dresser quelques consignes pour faciliter la
programmation :
-
Commenter chaque instruction car il est
difficile quelques temps après de comprendre le fonctionnement.
-
Programmer des routines d’une cinquantaine de
lignes et sinon la décomposer en plusieurs sous routines
-
Utiliser les registres r0 à r4 pour les calculs
courants, les registres r5 à r7 pour les indices de boucles et les registres
plus élevés pour des sauvegardes de registre ou pour des données utilisées tout
le long du programme.
-
Préparer des squelettes de programmes qui
serviront de modèles.
Et nous avons
découvert quelques erreurs dont les plus fréquentes sont :
Confondre la récupération d’une adresse avec sa
valeur : ldr r0,=donnée et ldr r0,donnée.
Oublier le b derrière le ldr ou le str pour travailler sur
un seul octet
Oublier le s pour mettre à jour les flags après une
opération.
Utiliser un registre déjà utilisé par ailleurs.
Ne pas gérer correctement la pile lors du retour de
fonctions.
Ne pas sauvegarder (ou restaurer) le registre lr dans une
sous routine.
Oublier la partie lsl #2 dans une instruction de stockage ou
de lecture d’un poste dans une table de pointeurs.
Confondre les codes conditions après un test (blt, bgt, ble,
bge)
Confondre le branchement à une sous fonction (bl) avec le
branchement après un test (ble)
Essayer de modifier une zone située dans la partie code (Il
n’est possible que d’y mettre des constantes).
Oublier que les octets d’un registre sont stockés dans
l’ordre inverse en mémoire.
Confondre l'affectation d'une constante avec une reservation de place :
Confondre l'affectation d'une constante avec une reservation de place :
toto: .int 200 * 4 @ affecte la valeur 800 à l'adresse toto sur 4 octets.
truc: .skip 200 * 4 @ réserve 800 octets de mémoire commençant à l'adresse truc
Dans la première partie, nous avons découvert les principes
pour réaliser des petits programmes en assembleur avec des données en entrée et
des données en sortie dans la console ou dans des fichiers. Maintenant nous
allons essayer de découvrir des utilisations plus poussées sur le
Raspberry : dessin, gestion de fenêtres, gpio.
Déjà, nous avons pu remarquer que dans les instructions
assembleur ARM, il n’y a pas d’instructions d’entrée-sorties pour accéder à des
interfaces divers : écran, clavier, gpio, usb , réseau. Et donc tout est à
découvrir.
Aucun commentaire:
Enregistrer un commentaire