Etape 3 #1
3 changed files with 95 additions and 12 deletions
|
@ -142,6 +142,22 @@
|
|||
<Bp>
|
||||
<Number>0</Number>
|
||||
<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>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134222522</Address>
|
||||
|
@ -156,7 +172,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\116</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Number>2</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>115</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -172,7 +188,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\115</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>2</Number>
|
||||
<Number>3</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>113</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -188,7 +204,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\113</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>3</Number>
|
||||
<Number>4</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>99</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -204,7 +220,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\99</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>4</Number>
|
||||
<Number>5</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>98</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -220,7 +236,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\98</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>5</Number>
|
||||
<Number>6</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>58</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -236,7 +252,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\58</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>6</Number>
|
||||
<Number>7</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>57</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -252,7 +268,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\57</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>7</Number>
|
||||
<Number>8</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>56</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -268,7 +284,7 @@
|
|||
<Expression>\\Simu_Etape0\FonctionEtape2.asm\56</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>8</Number>
|
||||
<Number>9</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>87</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -284,7 +300,7 @@
|
|||
<Expression>\\Simu_Etape0\Principale.asm\87</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>9</Number>
|
||||
<Number>10</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>80</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -300,7 +316,7 @@
|
|||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>10</Number>
|
||||
<Number>11</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>91</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
@ -316,7 +332,7 @@
|
|||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>11</Number>
|
||||
<Number>12</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>92</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
|
|
|
@ -124,6 +124,11 @@ WHILE_NBLED
|
|||
ADD R6, R6, #1 ;On incrémente R6
|
||||
CMP R6, #47 ; SI R6==47 alors on arrête la boucle
|
||||
BNE WHILE_NBLED
|
||||
|
||||
MOV R0, #SCLK ;************
|
||||
PUSH {R0} ;Reset_X(SCLK)
|
||||
BL Reset_X; ;************
|
||||
B . ;while(1)
|
||||
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