Aller au contenu

Quelques instructions en Assembleur

Attention, le but de ce cours n'est pas d'apprendre à programmer en assembleur. Au travers de quelques exemples d'instructions, ce cours doit vous permettre de comprendre l'essentiel du fonctionnement d'un langage machine.

Ces exemples sont basés sur le langage d'assemblage x86 (32 bits) des microprocesseurs d'Intel. Il en existe de nombreux autres (par exemple MIPS, etc...).

Remarque

Par soucis de simplification, les adresses mémoire seront codées en base 10.

Lecture de la mémoire vive : LDR

LDR R1,78 signifie « Placer la valeur stockée à l'adresse mémoire 78 dans le registre R1 ».

Écriture dans la mémoire vive : STR

STR R3,125 signifie « Placer la valeur stockée dans le registre R3 en mémoire vive à l'adresse 125 ».

Addition : ADD

ADD R0,R1,R2 signifie « Additionner la valeur stockée dans le registre R2 et la valeur stockée dans le registre R1, puis placer le résultat dans le registre R0 ».

Remarque

En Python, on écrirait R0 = R1 + R2.

Soustraction : SUB

SUB R0,R1,R2 signifie « Soustraire la valeur stockée dans le registre R2 à la valeur stockée dans le registre R1, puis placer le résultat dans le registre R0 ».

Remarque

En Python, on écrirait R0 = R1 - R2.

Affecter une donnée dans un registre : MOV

MOV R1, #23 signifie « Placer le nombre 23 dans le registre R1 ».

MOV R0, R3 signifie « Placer la valeur stockée dans le registre R3 dans le registre R0 ».

Rupture de séquence : B

B 45 signifie « La prochaine instruction à exécuter se situe en mémoire vive à l'adresse 45 ».

Comparaison de valeurs : CMP

CMP R0, #23 signifie « Comparer la valeur stockée dans le registre R0 et le nombre 23 ».

CMP R0, R1 signifie « Comparer la valeur stockée dans le registre R0 et la valeur stockée dans le registre R1 ».

Remarque importante

Cette instruction CMP doit précéder une instruction de branchement conditionnel BEQ, BNE, BGT, BLT présentée dans l'exemple suivant.

Branchements conditionnels BEQ : deux valeurs sont-elles égales ?

Les instructions :

CMP R0, #23
BEQ 78
signifient « Si la valeur stockée dans le registre R0 est égale à 23, alors la prochaine instruction à exécuter se situe à l'adresse mémoire 78 »

Branchements conditionnels BNE : deux valeurs sont-elles différentes ?

Les instructions :

CMP R0, #23
BNE 78
signifient « Si la valeur stockée dans le registre R0 est différente de 23, alors la prochaine instruction à exécuter se situe à l'adresse mémoire 78 »

Branchements conditionnels BGT : une valeur est-elle supérieure à une autre ?

Les instructions :

CMP R0, #23
BGT 78
signifient « Si la valeur stockée dans le registre R0 est supérieure à 23, alors la prochaine instruction à exécuter se situe à l'adresse mémoire 78 »

Branchements conditionnels BLT : une valeur est-elle inférieure à une autre ?

Les instructions :

CMP R0, #23
BLT 78
signifient « Si la valeur stockée dans le registre R0 est inférieure à 23, alors la prochaine instruction à exécuter se situe à l'adresse mémoire 78 »

Arrêt : HALT

HALT signifie « Arrêter l'exécution du programme ».