; Pile par 8 bit PRESERVE8 ; instruction set comme ARM set ; il est principalement sur 16 bit THUMB ; ====================== zone de réservation de données, ====================================== ;Section RAM (read only) : area mesdata,data,readonly ;Section RAM (read write): area maram,data,readwrite ; On donne une zone mémoire à VarTime (elle est aligné) VarTime dcd 0 ; =============================================================================================== ;constantes (équivalent du #define en C) TimeValue equ 900000 EXPORT Delay_100ms ; la fonction Delay_100ms est rendue publique donc utilisable par d'autres modules. ;Section ROM code (read only) : area moncode,code,readonly ; REMARQUE IMPORTANTE ; Cette manière de créer une temporisation n'est clairement pas la bonne manière de procéder : ; - elle est peu précise ; - la fonction prend tout le temps CPU pour... ne rien faire... ; ; Pour autant, la fonction montre : ; - les boucles en ASM ; - l'accés écr/lec de variable en RAM ; - le mécanisme d'appel / retour sous programme ; ; et donc possède un intérêt pour débuter en ASM pur Delay_100ms proc ; On charge la valeur du poiteur ldr r0,=VarTime EXPORT VarTime ldr r1,=TimeValue ; On initialise un pointeur sur TimeValue str r1,[r0] BoucleTempo ; On charge la valeur pointer par le pointeur passer en argument ; R1 à le nombre de boucle qu'il reste à faire (TimeValue) ldr r1,[r0] ; On enlève à r1 1 pour tester la fin de la boucle subs r1,#1 str r1,[r0] ; si la valeur est non nul on relance la boucle, car pas terminer bne BoucleTempo ; sinon on fini la fonction ; lr pointe l'endroit qui à appeller la fonction ; on y retourne à la fin de la fonction bx lr endp END