Etape 3 #1
3 changed files with 95 additions and 12 deletions
|
@ -142,6 +142,22 @@
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
|
<LineNumber>128</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>134222544</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
|
<Filename>.\FonctionEtape2.asm</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\128</Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>1</Number>
|
||||||
|
<Type>0</Type>
|
||||||
<LineNumber>116</LineNumber>
|
<LineNumber>116</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134222522</Address>
|
<Address>134222522</Address>
|
||||||
|
@ -156,7 +172,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\116</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\116</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>1</Number>
|
<Number>2</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>115</LineNumber>
|
<LineNumber>115</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -172,7 +188,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\115</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\115</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>2</Number>
|
<Number>3</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>113</LineNumber>
|
<LineNumber>113</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -188,7 +204,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\113</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\113</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>3</Number>
|
<Number>4</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>99</LineNumber>
|
<LineNumber>99</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -204,7 +220,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\99</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\99</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>4</Number>
|
<Number>5</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>98</LineNumber>
|
<LineNumber>98</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -220,7 +236,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\98</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\98</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>5</Number>
|
<Number>6</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>58</LineNumber>
|
<LineNumber>58</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -236,7 +252,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\58</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\58</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>6</Number>
|
<Number>7</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>57</LineNumber>
|
<LineNumber>57</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -252,7 +268,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\57</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\57</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>7</Number>
|
<Number>8</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>56</LineNumber>
|
<LineNumber>56</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -268,7 +284,7 @@
|
||||||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\56</Expression>
|
<Expression>\\Simu_Etape0\FonctionEtape2.asm\56</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>8</Number>
|
<Number>9</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>87</LineNumber>
|
<LineNumber>87</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -284,7 +300,7 @@
|
||||||
<Expression>\\Simu_Etape0\Principale.asm\87</Expression>
|
<Expression>\\Simu_Etape0\Principale.asm\87</Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>9</Number>
|
<Number>10</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>80</LineNumber>
|
<LineNumber>80</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -300,7 +316,7 @@
|
||||||
<Expression></Expression>
|
<Expression></Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>10</Number>
|
<Number>11</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>91</LineNumber>
|
<LineNumber>91</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
@ -316,7 +332,7 @@
|
||||||
<Expression></Expression>
|
<Expression></Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>11</Number>
|
<Number>12</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>92</LineNumber>
|
<LineNumber>92</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
|
|
@ -124,6 +124,11 @@ WHILE_NBLED
|
||||||
ADD R6, R6, #1 ;On incrémente R6
|
ADD R6, R6, #1 ;On incrémente R6
|
||||||
CMP R6, #47 ; SI R6==47 alors on arrête la boucle
|
CMP R6, #47 ; SI R6==47 alors on arrête la boucle
|
||||||
BNE WHILE_NBLED
|
BNE WHILE_NBLED
|
||||||
|
|
||||||
|
MOV R0, #SCLK ;************
|
||||||
|
PUSH {R0} ;Reset_X(SCLK)
|
||||||
|
BL Reset_X; ;************
|
||||||
|
B . ;while(1)
|
||||||
ENDP
|
ENDP
|
||||||
|
|
||||||
;**************************************************************************
|
;**************************************************************************
|
||||||
|
|
64
README.md
64
README.md
|
@ -1 +1,63 @@
|
||||||
# roue_assembler
|
# But du projet
|
||||||
|
Le but sera de faire fonctionner diverses LEDS à l'aide d'un STM32 et tout cela en langage Assembler
|
||||||
|
# Réaliser un code assembler à partir de C
|
||||||
|
Comme vous le savez le code en langage C peut être compilé puis récupéré en assembler. C'est justement ici une solution que j'ai trouvé pour mieux comprendre différents principes, ou si certaines instructions ne me paraissent pas clair.
|
||||||
|
Bien évidemment le but du projet n'est pas de recopier bêtement du code que le compilateur peut réaliser, mais de comprendre et de voir comment faire différents algorithmes en Assembler.
|
||||||
|
|
||||||
|
La première chose est d'installer le package suivant sur une machine Linux :
|
||||||
|
```bash
|
||||||
|
sudo dnf install arm-none-eabi-gcc
|
||||||
|
```
|
||||||
|
*J'utilise Fedora donc mon package manager est dnf, mais cela fonctionne avec apt ou pacman*
|
||||||
|
|
||||||
|
Ensuite il suffit de créer un programme en C, voici en un par exemple qui m'a aidé à comprendre l'inversion des bits, ou comment le C récupère les arguments d'une fonction :
|
||||||
|
```c
|
||||||
|
void set(int pin);
|
||||||
|
int invert(int x);
|
||||||
|
|
||||||
|
void * gpioA = (void *)0x40010800;
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
add(5);
|
||||||
|
invert(0x20);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set(int pin){ *((short *)(globalPtr+0xc)) |= (0x01 << pin) }
|
||||||
|
int invert(int x){ return ~x }
|
||||||
|
```
|
||||||
|
|
||||||
|
Ensuite je lance la commande suivante pour compiler le tout dans un niveau d'optimisation choisi :
|
||||||
|
```bash
|
||||||
|
arm-bibe-eabi-gcc -OX -c test.c -o test.o
|
||||||
|
```
|
||||||
|
|
||||||
|
|Argument|Type d'optimisation du compilateur|
|
||||||
|
|---|---|
|
||||||
|
|-O0|Zero|
|
||||||
|
|-O1|Normale|
|
||||||
|
|-O2|Maximale|
|
||||||
|
|
||||||
|
Et enfin pour voir le résultat en assembler dans la le terminal :
|
||||||
|
```bash
|
||||||
|
arm-none-eabi-objdump -D test.o
|
||||||
|
```
|
||||||
|
|
||||||
|
Nous obtenons le résultat suivant :
|
||||||
|
|
||||||
|
```assembly
|
||||||
|
00000000 <invert>:
|
||||||
|
0:e1e00000 mvnr0, r0
|
||||||
|
4:e12fff1e bxlr
|
||||||
|
|
||||||
|
00000008 <set>:
|
||||||
|
8:e3a01001 movr1, #1
|
||||||
|
c:e59f3010 ldrr3, [pc, #16]@ 24 <add+0x1c>
|
||||||
|
10:e5932000 ldrr2, [r3]
|
||||||
|
14:e1d230b5 ldrhr3, [r2, #5]
|
||||||
|
18:e1c33011 bicr3, r3, r1, lsl r0
|
||||||
|
1c:e1c230b5 strhr3, [r2, #5]
|
||||||
|
20:e12fff1e bxlr
|
||||||
|
24:00000000 andeqr0, r0, r0
|
||||||
|
```
|
Loading…
Add table
Reference in a new issue