Cours gratuits » Cours informatique » Cours programmation » Cours Assembleur » Cours Assembleur : l’architecture de machines MIPS

Cours Assembleur : l’architecture de machines MIPS

Problème à signaler:

Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

                                            Langage assembleur

Exemple de l’assembleur ARM

Tarik Graba

Année scolaire 2015/2016

Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Assembleur

Langage

 Un processeur interprète des instructions “numériques”

(généralement codées en binaire),

•       C’est ce qui est appelé langage machine.  L’assembleur est un langage de programmation bas niveau,

•       lisible par l’Homme (représentation textuelle), • équivalent au langage machine (1 ? 1).  Il est spécifique à chaque

processeur et lié à son architecture.

Assembleur

Outils

 Pour faciliter la programmation, en plus des instructions, les outils permettent de :

•   Définir des symboles, des étiquettes, tables

•   Des macros–fonctions

On appelle cela des directives d’assemblage.

Ces directives varient en fonction des outils utilisés (chaine de compilation).

Nous utiliserons dans ce cours celles de Gnu AS.

Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Modèle du programmeur

 

Espace mémoire extérieur au processeur. Des registres internes au processeur.

Instructions pour le transfert entre les registres et la mémoire. Opérations sur le contenu des registres.

L’espace mémoire est communs aux instructions et aux données.

Les périphériques font aussi partie de l’espace mémoire.

Caractéristiques de l’ARM

Taille des données

 Processeur RISC 32 bits :

•   Les registres internes font 32 bits

•   Les données manipulées sont des word (32 bits), half–word (16 bits) ou byte (8 bits).

Caractéristiques de l’ARM

Différentes tailles pour les instructions

Historiquement les instructions faisaient toutes 32 bits.

Pour rendre le code plus compact et permettre des réductions de coûts, des jeux d’instructions simplifiés ont été ajoutés :  Les instructions font :

•   32 bits (mode ARM)

•   16 bits (mode THUMB)

•   mixte 32/16 bits (mode THUMB 2)


Les registres

r0

r1

r2

r3

r4

r5

r6

r7

r8

r9

r10

r11

r12

r13 (sp)

r14 (lr)

r15 (pc)

16 registres généraux

3 registres avec des rôles particuliers :

•     r15 (pc) : Compteur programme

•     r14 (lr) : Link register (adresse de retour)

•     r13 (sp) : Stack pointer (pointeur de pile)

En fonction de l’état du processeur

Les “shadow registers” de l’ARM7TDMI (ARMv4T) :

User/Syst.

 

Superv.

 

FIQ

 

IRQ

 

Abort

 

Undef

r0

r0

r0

r0

r0

r0

r1

r1

r1

r1

r1

r1

r2

r2

r2

r2

r2

r2

r3

r3

r3

r3

r3

r3

r4

r4

r4

r4

r4

r4

r5

r5

r5

r5

r5

r5

r6

r6

r6

r6

r6

r6

r7

r7

r7

r7

r7

r7

r8

r8

r8fiq

r8

r8

r8

r9

r9

r9fiq

r9

r9

r9

r10

r10

r10fiq

r10

r10

r10

r11

r11

r11fiq

r11

r11

r11

r12

r12

r12fiq

r12

r12

r12

r13 (sp)

r13svc

r13fiq

r13irq

r13abt

r13und

r14 (lr)

r14svc

r14fiq

r14irq

r14abt

r14und

r15 (pc)

r15 (pc)

r15 (pc)

r15 (pc)

r15 (pc)

r15 (pc)

En fonction de l’état du processeur

Les deux pointeurs de pile des

Cortex-M (ARMv6-M) :

Main Stack Pointer (MSP)

Process Stack Pointer (PSP)

Le registre d’état xPSR

CPSR : Current Program Status Register de l’ARM7TDMI

                     31 30 29 28                                                                                    7 6 5 4                                       0

N

Z

C

V

……

I

F

T

mode


 Flags :                                                               

•     N : négatif

•     Z : zéro

•     C : retenue

•     V : dépassement

Interruptions :

•     F : désactiver les FIQ

•     I : désactiver les IRQ T : Thumb

Mode de fonctionnement


Le registre d’état xPSR

PSR : Program Status Registers du Cortex-M0

                     31 30 29 28                          24                                                                                         5                               0

N

Z

C

V

   

Reserved

 
   

Reserved

 

Except.

Reser

ved

T

 

Reserved

 
                 

APSR

IPSR

EPSR

APSR : Application Program Status Register

IPSR : Interrupt Program Status Register

EPSR : Execution Program Status Register


Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Spécificités de l’ARM

Instructions ARM/Thumb

À l’origine les syntaxes des instructions thumb et arm étaient différentes.

Une syntaxe unifiée (unified) est supportée par les versions récentes des outils de développement.

Du fait de la taille des instructions thumb (16-bits) certaines restrictions d’usage existent.

Dans ce cours nous présentons la syntaxe unifiée. Pour les restrictions du mode thumb se référer à la documentation officielle.

Jeu d’instructions

On peut classer les instructions en trois grandes catégories :

1.    Traitement et manipulation des données :

•   Arithmétiques et logiques

•   Tests et comparaisons

2.    Transfert de données depuis et vers la mémoire

3.    Contrôle de flot

•   Branchements

Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Opérations arithmétiques et logiques

Opération sur 3 registres

OPE r_dest, r_s1, r_s2

Exemples

AND r0,r1,r2 pour (r0 = r1&r2) ADD r5,r1,r5 pour (r5 = r1 + r5)

Opérations arithmétiques et logiques

Les instructions

   

ADD r0,r1,r2

?

r0=r1+r2

Addition

ADC r0,r1,r2

?

r0=r1+r2+C

Addition avec retenue

SUB r0,r1,r2

?

r0=r1-r2

Soustraction

SBC r0,r1,r2

?

r0=r1-r2-C+1

Soustraction avec retenue

RSB r0,r1,r2

?

r0=r2-r1

Soustraction inversée

RSC r0,r1,r2

?

r0=r2-r1-C+1

Soustraction inversée avec retenue

AND r0,r1,r2

?

r0=r1&r2

Et binaire

ORR r0,r1,r2

?

r0=r1|r2

Ou binaire

EOR r0,r1,r2

?

r0=r1^r2

Ou exclusif binaire

BIC r0,r1,r2 ? r0=r1&~r2

Met à 0 les bits de r1 indiqués par r2

Opérations de déplacement de données

entre registres

Opération sur 2 registres

OPE r_dest, r_s1

Exemples

MOV r0,r1 pour (r0 = r1) MOV pc,lr pour (pc = lr)

MVN r0,r1 pour (r0 = ?r1)

Opérations de déplacement de données

entre registres

Les instructions

   

MOV r0,r1 ?

r0=r1

Déplacement

MVN r0,r1 ?

r0=~r1

Déplacement et négation

Opérations de décalage

Opération sur 3 registres

OPE r_dest, r_s, r_m

Exemples

LSL r0,r1,r2 pour (r0 = r1  r2[7:0])

ASR r3,r4,r5 pour (r3 = r4  r5[7:0])

Seul l’octet de poids faible de r_m est utilisé.

Opérations de décalage

Les instructions

LSL ? Décalage logique vers la gauche

LSR ? Décalage logique vers la droite

ASL ? Décalage arithmétique vers la gauche

ASR ? Décalage arithmétique vers la droite

ROR ? Décalage circulaire vers la droite

Remarque!

Modification des indicateur du PSR

Par défaut, les opérations arithmétiques et logiques ne modifient pas les indicateurs (N,Z,C,V) du PSR.

Il faut ajouter le suffixe “S” au mnémonique de l’instruction.

Exemples

ADDS r0,r1,r2

ANDS r0,r1,r2

MOVS r0,r1

Opérations de comparaison

Opération sur 2 registres

OPE r_s1, r_s2

Exemples

CMP r0,r1 pour (psr ? r0 ? r1)

TEQ r0,r1 pour (psr ? r0 ? r1)

Opérations de comparaison

Les instructions

   

CMP r0,r1

?

psr?r0-r1

Comparer

CMN r0,r1

?

psr?r0+r1

Comparer à l’inverse

TST r0,r1

?

psr?r0&r1

Tester les bits indiqués par r1

TEQ r0,r1 ? psr?r0^r1

Tester l’égalité bit à bit

Ces instructions ne modifient que les bits (N,Z,C,V) du PSR, le résultat n’est pas gardé.


 Un des opérandes source peut être un immédiat.

Exemples

MOV r0,#0x20

CMP r0,#32

ADD r0,r1,#1

• Un immédiat est une valeur constante qui est encodée dans une partie de l’instruction.

On doit les précéder du symbole ‘#’.

Il peut être décimal, hexadécimal (0x) ou octal (0).

Ces 12 bits sont utilisés de la façon suivante :

8 bits (0 ? 0xFF)

4 bits pour un décalage circulaire (valeurs paires de 0 à 30)

En mode ARM les instructions sont codées sur 32 bits et seulement 12 bits peuvent être utilisés pour coder l’immédiat.

31                  28 27                       21       20      19             16 15              12    11                         …                        0

cond

code op

S

Rn

Rs

Imm


   

Exemples

 

ADD r0,r1,#100

(0x64 0)

ADD r0,r1,#0xFF00

(0xFF  8)

ADD r0,r1,#0x3FC

(0xFF  2)

ADD r0,r1,#0xF000000F

(0xFF 28)

ADD r0,r1,#0x102

Interdit!!


Opérandes immédiats

En mode thumb-16bits

Ça dépend de l’instruction. Par exemple :

 ADDS Rd,Rn,#imm3 (source et destination différentes)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0

1 1

1 0

imm3

Rn

Rd

 ADDS Rdn,#imm8 (même source et destination)

15 14 13 12 11 10 9 8 7 6 5

4 3 2 1 0

0 0 1

1 0

Rdn

 

imm8

         

Combiner une opération avec un décalage

ALU + Barrel shifter

 

Combiner une opération avec un décalage

Le barrel shifter peut être utilisé en même temps que l’ALU Toute opération peut être accompagnée du décalage du second opérande.

Exemples

 

ADD r0,r1,r2,LSL #4

(r0 = r1 + r2 × 16)

ADD r0,r1,r2,LSL r3

(r0 = r1 + r2 × 2r3)

Combiner une opération avec un décalage

Remarques

Certaines instructions sont équivalentes :

LSL rd,rs,#i ? MOV rd,rs,LSL #i

Rotate Right with Extend

RRX rd,rs ? MOV rd,rs,RRX Rotation à droite d’une position en prenant le bit de retenue C.

Les multiplications

Les opérandes ne peuvent être que des registres. En fonction des versions de l’architecture :

•   Toutes les instructions ne sont pas disponibles sur toutes les architectures.

•   La retenue ”C” et le dépassement “V” n’ont pas toujours le même comportement.

La multiplication

Les instructions

 

MUL r0,r1,r2                       ?r0=r*r2

multiplication

MLA r0,r1,r2,r3 ?r0=r1+r2*r3

mult. et accumulation

MLS r0,r1,r2,r3 ?r0=r1-r2*r3

mult. soustraction

UMULL r0,r1,r2,r3?{r1,r0}=r2*r3

mult. 64bits non signée

SMULL r0,r1,r2,r3?{r1,r0}=r2*r3

mult. 64bits signée

UMLAL r0,r1,r2,r3?{r1,r0}+=r2*r3

MAC 64bits non signée

SMLAL r0,r1,r2,r3?{r1,r0}+=r2*r3

MAC 64bits signée

Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Instructions pour transférer les données

Deux instructions de transfert de données entre la mémoire et les registres.

LDR : charger un registre avec une donnée en mémoire

STR : enregistrer la valeur du registre en mémoire

Exemples

 

LDR r0,[r1]

(r0 = RAM[r1])

STR r0,[r1]

(RAM[r1] = r0)

Instructions pour transférer les données

Taille des données

          LDR/STR :         mots de 32 bits (words)

LDRH/STRH :               mots de 16 bits (half words)

LDRB/STRB :               mots de 16 bits (byte)

Généralement, les adresses doivent être alignées :

          LDR/STR :        4

LDRH/STRH :             2

LDRB/STRB :              quelconque

Modes d’adressage

 Adressage indirect

               LDR r0,[r1]                                (r0 = RAM[r1])

 Adressage indirect avec déplacement (offset)

LDR r0,[r1,#8]        (r0 = RAM[r1 + 8]) LDR r0,[r1,r2]  (r0 = RAM[r1 + r2])

 Adressage indirect avec déplacement et pré-incrémentation

                LDR r0,[r1,#8]!                          (r1 = r1 + 8 puis r0 = RAM[r1])

 Adressage indirect avec déplacement et post-incrémentation

                LDR r0,[r1],#8                             (r0 = RAM[r1] puis r1 = r1 + 8)

Transferts multiples

En plus des instructions LDR et STR le jeu d’instruction ARM propose les instructions LDM et STM pour les transferts multiples.

Exemples

 

LDMIA r0,{r1,r2,r3}

(r1 = RAM[r0])

(r2 = RAM[r0 + 4])

(r3 = RAM[r0 + 8])

STMIA r0,{r1-r3}

(RAM[r0] = r1)

(RAM[r0 + 4] = r2)

(RAM[r0 + 8] = r3)

Transferts multiples

Variantes

Il existe 4 suffixes possibles pour les instructions de transferts multiples :

IA pour la post-incrémentation (Increment After)

IB pour la pré-incrémentation (Increment Before)

DA pour la post-décrémentation (Decrement After)

DB pour la pré-décrémentation (Decrement Before)

Pour que la valeur du registre d’adresse soit modifiée il faut ajouter (!)

LDMIA r0!,{r1-r3}


 

Conventions

Le registre r13 (sp) est le pointeur de pile (stack pointer) Le pointeur de pile contient l’adresse de la dernière donnée empilée

 Avant chaque empilement le pointeur de pile doit être décrémenté

 

La convention ARM standard est « Full Descending » Pour gérer la pile et éviter les confusions, il existe des équivalents des instructions LDM et STM avec des suffixes spécifiques en fonction des stratégies utilisées pour la pile.

FD : Full Descending

FA : Full Ascending

ED : Empty Descending

EA : Empty Ascending

Ou plus simplement :

Empiler

PUSH {r1-r5}

ou

STMFD sp!,{r1-r5}

Dépiler

ou

STMDB sp!,{r1-r5}

POP {r1-r5}

ou

LDMFD sp!,{r1-r5}

 

ou

LDMIA sp!,{r1-r5}


Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Il existe deux instructions de branchement :

B adresse                        Aller à l’adresse

BX registre                      Aller à l’adresse pointée par le registre

                                         et        éventuellement         changer        de        mode

(ARM/THUMB interworking)

Ces instructions modifient le compteur programme "pc" (r15)

BL(X)   Pour sauvegarder l’adresse de retour dans "lr" (r14) L’adresse de retour est celle de l’instruction suivant le BL.

 Pour revenir d’un branchement BL il suffit de remettre lr dans pc

•   BX lr

•   MOV pc,lr (deprecated)

 pour les instructions B et BL l’adresse est stockée comme un immédiat qui représente un offset par rapport à la position actuelle :

•   l’offset est forcement limité  pour l’instruction BX le mode (ARM/Thumb) est déterminé en fonction du bit de poids faible de l’adresse normalement non utilisé (voir interworking)


Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Exécution conditionnelle des instructions

L’exécution des instructions peut être rendue conditionnelle en rajoutant les suffixes suivant :

EQ

Equal

Z == 1

NE

Not equal

Z == 0

CS/HS

Carry set/unsigned higher or same

C == 1

CC/LO

Carry clear/unsigned lower

C == 0

MI

Minus/negative

N == 1

PL

Plus/positive or zero

N == 0

VS

Overflow

V == 1

VC

No overflow

V == 0

HI

Unsigned higher

C == 1 and Z == 0

LS

Unsigned lower or same

C == 0 or Z == 1

GE

Signed greater than or equal

N == V

LT

Signed less than

N!= V

GT

Signed greater than

Z == 0 and N == V

LE

Signed less than or equal

Z == 1 or N!= V

Exécution conditionnelle des instructions

Exemples

CMP r0,r1                              comparer r0 à r1

SUBGE r0,r0,r1                        si r0 ? r1 alors r0 = r0 ? r1

SUBLT r0,r1,r0                         si r0 < r1 alors r0 = r1 ? r0

SUBS r0,r1,r2                        r0 = r1 ? r2

BEQ address                          aller à adresse si le résultat est nul

Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage

Encodage des instructions

En mode ARM

                                 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9     8   7   6   5   4   3   2   1   0

Cond

0

0

1

Opcode

S

Rn

Rd

Operand 2

Cond

0

0

0

0

0

0

A

S

Rd

Rn

Rs

1

0

0

1

Rm

Cond

0

0

0

0

1

U

A

S

RdHi

RdLo

Rn

1

0

0

1

Rm

Cond

0

0

0

1

0

B

0

0

Rn

Rd

0

0

0

0

1

0

0

1

Rm

Cond

0

0

0

1

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

1

Rn

Cond

0

0

0

P

U

0

W

L

Rn

Rd

0

0

0

0

1

S

H

1

Rm

Cond

0

0

0

P

U

1

W

L

Rn

Rd

Offset

1

S

H

1

Offset

Cond

0

1

1

P

U

B

W

L

Rn

Rd

Offset

Cond

0

1

1

     

1

 

Cond

1

0

0

P

U

S

W

L

Rn

Register list

Cond

1

0

1

L

   

Offset

Cond

1

1

0

P

U

N

W

L

Rn

CRd

CP#

Offset

Cond

1

1

1

0

CP Opc

CRn

CRd

CP#

CP

0

CRm

Cond

1

1

1

0

CP Opc

L

CRn

Rd

CP#

CP

1

CRm

Cond

1

1

1

1

   

Ignored by processor

                                                   

Data processing and

FSR transfer

Multiply

Multiply long

Single data swap

Branch and exchange

Halfword data transfer, register offset

Halfword data transfer, immediate offset Single data transfer

Undefined

Block data transfer

Branch

Coprocessor data transfer

Coprocessor data operation

Coprocessor register transfer Software interrupt

                                 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9     8   7   6   5   4   3   2   1   0

Encodage des instructions


En mode thumb

Move shifted register

Add and subtract

Move, compare, add, and subtract immediate

ALU operation

High register operations and branch exchange

PC-relative load

Load and store with relative offset

Load and store sign-extended byte and halfword

Load and store with immediate offset

Load and store halfword

SP-relative load and store

Load address

Add offset to stack pointer

Push and pop registers

Multiple load and store

Conditional branch

Software interrupt

Unconditional branch

Long branch with link

Format         15 14 13 12 11 10 9     8    7    6   5    4    3   2    1   0

01

0     0

0

Op

Offset5

Rs

Rd

02

0     0

0

1

1

1

Op

Rn/ offset3

Rs

Rd

03

0     0

1

Op

Rd

Offset8

04

0     1

0

0

0

0

Op

Rs

Rd

05

0     1

0

0

0

1

Op

H1

H2

Rs/Hs

RdHd

06

0     1

0

0

1

Rd

Word8

07

0     1

0

1

L

B

0

Ro

Rb

Rd

08

0     1

0

1

H

S

1

Ro

Rb

Rd

09

0     1

1

B

L

Offset5

Rb

Rd

10

1     0

0

0

L

Offset5

Rb

Rd

11

1     0

0

1

L

Rd

Word8

12

1     0

1

0

SP

Rd

Word8

13

1     0

1

1

0

0

0

0

S

SWord7

14

1     0

1

1

L

1

0

R

Rlist

15

1     1

0

0

L

Rb

Rlist

16

1     1

0

1

Cond

Softset8

17

1     1

0

1

1

1

1

1

Value8

18

1     1

1

0

0

Offset11

19

1     1

1

1

H

Offset

                       

Format         15 14 13 12 11 10 9     8    7    6   5    4    3   2    1   0


Plan

Généralités

Spécificités de l’architecture ARM

Jeu d’instructions

Manipulation des données

Transfert des données

Branchements

Exécution conditionnelle

Encodage

Directives d’assemblage


Nous utiliserons Gnu Arm As

•   arm-none-eabi-as est installé dans les salles de TP

En plus des instructions, nous pouvons utiliser des directives pour que le code soit plus facile à écrire et plus lisible.

La documentation officielle :

•  

La forme générale des instructions est alors :

[<Étiquette>:] [<instruction ou directive>] [@ <commentaire>]

Les lignes ne contenant que des commentaires ou étiquettes ne sont pas comptées.

Les étiquettes (labels) seront remplacées par l’adresse de l’instruction qui suit.

Un “symbole” local ayant le nom de l’étiquette est définit.

 

Exemple

Start:

MOV r0,#0 @ mise zero de r0

MOV r2,#10 @ charger la valeur 10 dans r2

Loop:

ADD r0,r0,r2,LSL #1 @ r0=r0+2*r2

SUBS r2,r2,#1 @ r2-BNE Loop

                             B           Start


.cpu cpu_model

Pour préciser le modèle du processeur (arm7tdmi, cortex-m3, cortex-m0 …) .arch cpu_arch

Pour préciser l’architecture du processeur (armv5t, armv7-m, armv6-m …) .syntax unified

Pour préciser qu’on utilise la syntaxe unifiée

Pour préciser qu’on veut générer du code 16 ou 32 bits

LDR r0,=VALEUR

 Cette directive permet de mettre une valeur quelconque dans un registre. Cette directive est replacée en fonction de la valeur par :

• MOV r0,#VALEUR • LDR r0, [pc,#offset] .word VALEUR

Où offset est le décalage entre l’adresse de l’instruction et l’adresse où est positionnée la valeur (à la fin du code).

Récupérer l’adresse d’une étiquette :

ADR r0,ETIQUETTE

 Cette directive est remplacée par :

ADD r0,pc,#offset

Où offset est le décalage entre la position de l’instruction et la position de l’étiquette.

Exemple :

ADR r0, str str:

.asciz "hello world"

.EQU SYMBOLE, VALEUR ou .SET SYMBOLE, VALEUR

 La macro est remplacée par la valeur.

Exemple :

.EQU COMPTER,10

MOV r0, #COMPTEUR

des macros plus complexes sont aussi possibles.

Directives de remplissage :  mettre une valeur arbitraire sur 32 bits/16 bits/8 bits à la position actuelle : .word/.half/.byte VALEUR  mettre une chaîne de caractères :

.ascii "La chaine de caracteres"

.asciz "Une autre chaine" se finit par '\0'  remplir une zone :

.fill nombre, taille_en_octets, valeur Exemple : .fill 100,4,0xdeadbeaf Directives d’alignement :

 Si les données insérées ne sont pas multiple de la taille d’une instruction il faut réaligner en remplissant éventuellement les vides par un motif.

.align log2(nbr_octets), motif

.balign nbr_octets, motif

Définition de symboles globaux

 Pour déclarer un symbole qui sera utilisé ailleurs :

.global NOM_DU_SYMBOLE

Le symbole est exporté et sera visible au moment de l’édition de liens.

.section nom, "flags",%type

Permet de préciser la section dans l’objet final

Exemples de flags :                                                Exemples de types :

"a" : allouer de l’espace,    %progbits : contient des données

"x" : contient du code

                            exécutable,                                                %nobits : ne contient rien, il

faut juste allouer

                      "w" : est modifiable.                                                      l’espace nécessaire

Par défaut, si la directive n’est pas utilisée, le code assemblé se retrouve dans la section .text

Équivalent de .section .text, "ax",%progbits



. Reduced Instruction Set Computer


74