0% ont trouvé ce document utile (0 vote)
101 vues3 pages

Codage des Instructions ARM 32 bits

Transféré par

azul
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
101 vues3 pages

Codage des Instructions ARM 32 bits

Transféré par

azul
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Microcontrôleurs I IESE3

Fiche technique : encodage de certaines instructions ARM


Les instructions sont rangées en mémoire suivant l'encodage little-endian
par blocs de 16 bits. On reconnaît les instructions 32 bits à leurs bits
de poids fort : 0b11101, 0b11111 ou 0b11110.

Longueur d'instruction Bits de poids fort Codage hexa En mémoire


Instruction 32 bits 11101 ou 11111 ou 11110 aabb ccdd bb aa dd cc
Instruction 16 bits autres combinaisons aabb bb aa

On ne donne ici que le codage de certaines instructions 32 bits : suffixe


« .w ». Les instructions dont le code contient le bit 's' mettent à jour
les indicateurs xPSR lorsque le bit s est à 1 (ex : variante movs.w).

1- Chargement des constantes :

Syntaxe mov(s).w rd,#x Chargement d'une constante 8 bits


Codage binaire 11110000 010s1111 0000dddd xxxxxxxx
Effet r[dddd] ← 00000000 00000000 00000000 xxxxxxxx

Syntaxe mvn(s).w rd,#x Complément à 1 d'une constante 8 bits


Codage binaire 11110000 011s1111 0000dddd xxxxxxxx
Effet r[dddd] ← 11111111 11111111 11111111 xxxxxxxx

Syntaxe movw rd,#x Chargement d'une constante 16 bits


Codage binaire 11110w10 0100zzzz 0yyydddd xxxxxxxx
Effet r[dddd] ← 00000000 00000000 zzzzwyyy xxxxxxxx

Syntaxe movt rd,#x Chargement (demi-mot de poids fort)


Codage binaire 11110w10 1100zzzz 0yyydddd xxxxxxxx
Effet r[dddd]<31:16> ← zzzzwyyy xxxxxxxx
r[dddd]<15:00> inchangé

2- Transferts de registres

Syntaxe mov(s).w rd,rm Transfert (copie) de registre


Codage binaire 11101010 010s1111 0000dddd 0000mmmm
Effet r[dddd] ← r[mmmm]

Syntaxe mvn(s).w rd,rm Complément à 1 de registre


Codage binaire 11101010 011s1111 0000dddd 0000mmmm
Effet r[dddd] ← ~ r[mmmm]

Fiche codage des instructions page 1/3


Microcontrôleurs I IESE3

3- Opérations arithmétiques et logiques :

Syntaxe op(s).w rd,rn,rm Opération binaire avec deux registres


Codage binaire 1110101o ooosnnnn 0000dddd 0000mmmm
Effet r[dddd] ← op(r[nnnn],r[mmmm])

Syntaxe op(s).w rd,rn,#x Opération binaire registre et constante


Codage binaire 1111000o ooosnnnn 0000dddd xxxxxxxx
Effet r[dddd] ← op(r[nnnn],00000000 00000000 00000000 xxxxxxxx)

Attention aux cas particuliers si l'un des opérandes est r15 (pc).

Codages des opérations : (Op2 désigne le second opérande rm ou #x)

Mnémonique Codage Description Signification


(op) (oooo)
and(s).w 0000 ET logique bit à bit rd ← rn & Op2
bic(s).w 0001 BIt Clear (ET NON) rd ← rn & (~ Op2)
orr(s).w 0010 OU logique bit à bit rd ← rn | Op2
orn(s).w 0011 OR Not (OU NON) rd ← rn | (~ Op2)
eor(s).w 0100 Exclusive OR (Ou exclusif) rd ← rn ^ Op2
add(s).w 1000 Somme (modulo 232) rd ← (rn + Op2) mod 232
adc(s).w 1010 Somme avec retenue (Carry) rd ← (rn + Op2 + C) mod 232
sbc(s).w 1011 Soustraction avec retenue rd ← (rn – Op2 – C) mod 232
sub(s).w 1101 Soustraction (modulo 232) rd ← (rn – Op2) mod 232
rsb(s).w 1110 Soustraction inversée rd ← (Op2 – rn) mod 232

4- Multiplication (pas de modification des indicateurs)

La multiplication modulo 232 est indépendante du codage signé/non-signé.

Syntaxe mul rd,rn,rm Multiplication (32 * 32 bits → 32 bits)


Codage binaire 11111011 0000nnnn 1111dddd 0000mmmm
Effet r[dddd] ← (r[nnnn] * r[mmmm]) mod 232

Fiche codage des instructions page 2/3


Microcontrôleurs I IESE3

5- Test de bits et comparaison :

Syntaxe op.w rn,rm Opération binaire avec deux registres


Codage binaire 1110101o ooo1nnnn 00001111 0000mmmm
Effet APSR ← op(r[nnnn],r[mmmm])

Syntaxe op.w rn,#x Opération binaire registre et constante


Codage binaire 1111000o ooo1nnnn 00001111 xxxxxxxx
Effet APSR ← op(r[nnnn],00000000 00000000 00000000 xxxxxxxx)

Codages des opérations : (Op2 désigne le second opérande rm ou #x)

Mnémonique (oooo) Description


tst.w 0000 Calcul du ET logique (rn & Op2)
Mise à jour des indicateurs, le résultat est ignoré.
cmp.w 1101 Calcul de la soustraction ((rn – Op2) mod 232)
Mise à jour des indicateurs, le résultat est ignoré.

6- Décalages et rotations :

Syntaxe op.w rd,rn,rm Décalage/Rotation avec offset registre


Codage binaire 11111010 0ppsnnnn 1111dddd 0000mmmm
Effet r[dddd] ← op(r[nnnn],r[mmmm])

Syntaxe op.w rd,rm,#k Décalage/Rotation avec offset constant


Codage binaire 11101010 010s1111 0xxxdddd yyppmmmm
Effet r[dddd] ← op(r[mmmm],#xxxyy)

Codages des opérations : (Op2 désigne le second opérande rm ou #xxxyy)

Mnémonique Codage Description: rd ← op(rn,rm) ou rd ← op(rm,#k)


(op) (pp) (k=xxxyy sauf exceptions)
lsl(s).w 00 Décalage logique à gauche (k=0..31)
(si k==0 le mnémonique mov(s).w sera utilisé)
lsr(s).w 01 Décalage logique à droite (k=1..32, 32 si xxxyy=00000)
asr(s).w 10 Décalage arithm. à droite (k=1..32, 32 si xxxyy=00000)
ror(s).w 11 Rotation à droite (k=1..31)
rrx(s).w 11 Rotation à droite de un bit, étendue à la retenue.
rd,rm (k=0) (constante seulement, xxxyy=00000, pas de #k)

Fiche codage des instructions page 3/3

Vous aimerez peut-être aussi