Aller au contenu

Initiation à l'assembleur

Certains élémenst sont repris de : https://pixees.fr/informatiquelycee/n_site/nsi_prem_von_neu.html

Il n'est pas question d'apprendre à programmer en assembleur dans ce cours, mais voici tout de même quelques exemples d'instructions en assembleur :

LDR R1,78

Place la valeur stockée à l'adresse mémoire 78 dans le registre R1 (par souci de simplification, nous continuons à utiliser des adresses mémoire codées en base 10)

STR R3,125

Place la valeur stockée dans le registre R3 en mémoire vive à l'adresse 125

ADD R1,R0,#128

Additionne le nombre 128 (une valeur immédiate est identifiée grâce au symbole #) et la valeur stockée dans le registre R0, place le résultat dans le registre R1

ADD R0,R1,R2

Additionne la valeur stockée dans le registre R1 et la valeur stockée dans le registre R2, place le résultat dans le registre R0

SUB R1,R0,#128

Soustrait le nombre 128 de la valeur stockée dans le registre R0, place le résultat dans le registre R1

SUB R0,R1,R2

Soustrait la valeur stockée dans le registre R2 de la valeur stockée dans le registre R1, place le résultat dans le registre R0

MOV R1, #23

Place le nombre 23 dans le registre R1

MOV R0, R3

Place la valeur stockée dans le registre R3 dans le registre R0

B 45

Nous avons une structure de rupture de séquence, la prochaine instruction à exécuter se situe en mémoire vive à l'adresse 45

CMP R0, #23

Compare la valeur stockée dans le registre R0 et le nombre 23. Cette instruction CMP doit précéder une instruction de branchement conditionnel BEQ, BNE, BGT, BLT (voir ci-dessous)

CMP R0, R1

Compare la valeur stockée dans le registre R0 et la valeur stockée dans le registre R1.

CMP R0, #23
BEQ 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 est égale à 23

CMP R0, #23
BNE 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 n'est pas égale à 23

CMP R0, #23
BGT 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 est plus grand que 23

CMP R0, #23
BLT 78

La prochaine instruction à exécuter se situe à l'adresse mémoire 78 si la valeur stockée dans le registre R0 est plus petit que 23

HALT

Arrête l'exécution du programme

Encore une fois, il n'est pas question d'apprendre à programmer en assembleur, les instructions ci-dessus sont uniquement des exemples.

On débute doucement

  MOV R0, #25
  ADD R1, R0, #12

Que contient le registre R1 ?

  CMP R4, #18
  BGT 77

Expliquez brièvement ces instructions.

Exercice

Écrire les instructions en assembleur correspondant aux phrases données.

  • Additionne la valeur stockée dans le registre R0 et la valeur stockée dans le registre R1, le résultat est stocké dans le registre R5.

  • Place la valeur stockée à l'adresse mémoire 878 dans le registre R0.

  • Place le contenu du registre R0 en mémoire vive à l'adresse 124.

  • La prochaine instruction à exécuter se situe en mémoire vive à l'adresse 478.

  • Si la valeur stockée dans le registre R0 n'est pas égale à 42 alors la prochaine instruction à exécuter se situe à l'adresse mémoire 85.

Exercice

Expliquez brièvement (sur le même modèle que les exemples ci-dessus), les instructions suivantes :

ADD R0, R1, #42
LDR R5,98
CMP R4, #18
BGT 77
STR R0,15
B 100

Exercice

Voici un programme Python simple :

  x = 4
  y = 8
  if x == 10:
    y = 9
  else :
    x=x+1
  z=6

Et voici maintenant voici son équivalent en assembleur :

  MOV R0, #4
  STR R0,30
  MOV R0, #8
  STR R0,75
  LDR R0,30
  CMP R0, #10
  BNE else
  MOV R0, #9
  STR R0,75
  B endif
else:
  LDR R0,30
  ADD R0, R0, #1
  STR R0,30
endif:
  MOV R0, #6
  STR R0,23
  HALT
Après avoir analysé très attentivement le programme en assembleur ci-dessus, vous essaierez d'établir une correspondance entre les lignes du programme en Python et les lignes du programme en assembleur. À quoi sert la ligne "B endif" ? À quoi correspondent les adresses mémoires 23, 75 et 30 ?