-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathficmacros.s
75 lines (74 loc) · 2.58 KB
/
ficmacros.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/* Programme assembleur ARM Raspberry */
/* Assembleur ARM Raspberry : Vincent Leboulou */
/* Blog : http://assembleurarmpi.blogspot.fr/ */
/* modèle B 512MO */
/***************************************
/* Fichier des macros */
/**************************************/
//.altmacro
/* macro d'enrobage du vidage des registres avec étiquette */
.macro vidregtit str
push {r12} @ save r12
mrs r12,cpsr /* save du registre d'état dans r12 */
push {r12}
adr r12,lib1\@ @ utilisation de adr suite pb gros programme
push {r12} @ passage argument sur la pile
ldr r12,[sp,#8] @ on remet en etat r12 pour l'afficher correctement
bl affregistres @ affichage des registres
pop {r12}
msr cpsr,r12 /*restaur registre d'état */
pop {r12} @ on restaure R12 pour avoir une pile réalignée
b smacro1vidregtit\@ @ pour sauter le stockage de la chaine.
lib1\@: .asciz "\str"
.align 4
smacro1vidregtit\@:
.endm @ fin de la macro
//.noaltmacro
/****************************************************/
/* macro de vidage memoire */
/****************************************************/
/* ne vide que les adresses ou les registre r0 et r1 */
.macro vidmemtit str, adr, nb
push {r0,r1,r2,r12} @ save registre
mrs r12,cpsr /* save du registre d'état dans r12 */
adr r2,lib1\@ @ recup adresse libellé passé dans str
.ifc \adr,r1
mov r0,r1
.else
.ifnc \adr,r0
ldr r0,zon1\@
.endif
.endif
mov r1,#\nb /* nombre de bloc a afficher */
bl affmemoireTit
msr cpsr,r12 /*restaur registre d'état */
pop {r0,r1,r2,r12} @ on restaure R12 pour avoir une pile réalignée
b smacro1vidregtit\@ @ pour sauter le stockage de la chaine.
.ifnc \adr,r0
.ifnc \adr,r1
zon1\@: .int \adr
.endif
.endif
lib1\@: .asciz "\str"
.align 4
smacro1vidregtit\@:
.endm @ fin de la macro
/****************************************************/
/* macro d'affichage d'un libellé */
/****************************************************/
/* pas d'espace dans le libellé */
.macro affichelib str
push {r0} @ save r0
mrs r0,cpsr /* save du registre d'état dans r12 */
push {r0}
adr r0,libaff1\@ @ recup adresse libellé passé dans str
bl affichageMess
pop {r0}
msr cpsr,r0 /*restaur registre d'état */
pop {r0} @ on restaure R0 pour avoir une pile réalignée
b smacroafficheMess\@ @ pour sauter le stockage de la chaine.
libaff1\@: .ascii "\str"
.asciz "\n"
.align 4
smacroafficheMess\@:
.endm @ fin de la macro