Académique Documents
Professionnel Documents
Culture Documents
Astuces de Programmation en Assembleur EN C PDF
Astuces de Programmation en Assembleur EN C PDF
Equivalence en langage C :
REGISTRE = 0x8C ;
Equivalence en langage C :
REGISTRE2 = REGISTRE1 ;
Equivalence en langage C :
REGISTRE_TEMP = REGISTRE1 ;
REGISTRE1 = REGISTRE2 ;
REGISTRE2 = REGISTRE_TEMP ;
4- Tests de comparaison
4-1- Tests d'galit
(REGISTRE) = 0x00 ?
movf REGISTRE , f ; (REGISTRE) = (REGISTRE)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
if (REGISTRE = = 0x00)
{
// bloc d'instructions 1
else
// bloc d'instructions 2
(REGISTRE) != 0x00 ?
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
if (REGISTRE != 0x00)
// bloc d'instructions 1
else
// bloc d'instructions 2
(REGISTRE) = 0x3F ?
movlw 0x3F ; W = 0x3F
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
if (REGISTRE = = 0x3F)
{
// bloc d'instructions 1
else
// bloc d'instructions 2
(REGISTRE) != 0x3F ?
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
if (REGISTRE != 0x3F)
// bloc d'instructions 1
else
// bloc d'instructions 2
(REGISTRE1) = (REGISTRE2) ?
movf REGISTRE2 , W ; W = (REGISTRE2)
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
if (REGISTRE1 = = REGISTRE2)
{
// bloc d'instructions 1
else
// bloc d'instructions 2
(REGISTRE1) != (REGISTRE2) ?
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
if (REGISTRE1 != REGISTRE2)
// bloc d'instructions 1
else
// bloc d'instructions 2
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
// bloc d'instructions 1
else
// bloc d'instructions 2
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
// bloc d'instructions 1
else
// bloc d'instructions 2
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
// bloc d'instructions 1
else
// bloc d'instructions 2
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
// bloc d'instructions 1
else
// bloc d'instructions 2
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
// bloc d'instructions 1
else
// bloc d'instructions 2
{ bloc d'instructions 1 }
goto suite
non
{ bloc d'instructions 2 }
suite
{ suite du programme }
Equivalence en langage C :
// bloc d'instructions 1
else
// bloc d'instructions 2
5- Boucle Do While
Exemple :
debut
{ bloc d'instructions }
movf REGISTRE , f
btfsc STATUS , Z
goto debut
suite
{ suite du programme }
Equivalence en langage C :
do
// bloc d'instructions
}
6- Boucle While
Exemple :
debut
btfss STATUS , Z
goto suite
{ bloc d'instructions }
goto debut
suite
{ suite du programme }
Equivalence en langage C :
// bloc d'instructions
7- Boucle FOR
Une variable (1 octet) sert de compteur.
Exemple :
Pour excuter le bloc d'instructions 20 fois, la valeur initiale du compteur doit tre
21 :
movlw D'21' ; W = D'21'
debut
boucle
{ bloc d'instructions }
goto debut
suite
{ suite du programme }
Equivalence en langage C
// bloc d'instructions
Exemple : on veut mettre 0 les bits 1, 2, 4 et 6, les autres bits tant inchangs :
B'u0u0u00u'
N.B. S'il n'y a qu'un seul bit mettre 0, il faut simplement utiliser
l'instruction bcf.
Exemple : on veut mettre 1 les bits 1, 2, 4 et 6, les autres bits tant inchangs :
B'u1u1u11u'
N.B. s'il n'y a qu'un seul bit mettre 1, il faut simplement utiliser l'instruction bcf.
Exemple : on veut complmenter les bits 1, 2, 4 et 6, les autres bits tant inchangs.
N.B. s'il faut inverser tous les bits, il faut simplement utiliser l'instruction comf
REGISTRE , f
9- Tables de donnes
On utilise la technique de l'adressage relatif.
Exemple :
Pour des raisons de simplicit, l'adresse de dbut de cette routine peut tre (pour un
microcontrleur 16F84A) :
0x100
0x200
0x300
; xxxxxxxxxxx
; Routine table
; xxxxxxxxxxx
retlw D'1'
retlw D'11'
retlw D'21'
retlw D'31'
retlw D'41'
retlw D'51'
retlw D'61'
retlw D'71'
retlw D'81'
retlw D'91'
retlw D'101'
retlw D'111'
retlw D'121'
retlw D'131'
retlw D'141'
retlw D'151'
retlw D'161'
retlw D'171'
retlw D'181'
retlw D'191'
retlw D'201'
retlw D'211'
retlw D'221'
retlw D'231'
retlw D'241'
retlw D'251'
; xxxxxxxxxxxxxxxxxx
call table