mardi 5 décembre 2017

Réflexions sur cette première partie



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 :
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