  NAME    main
        
  PUBLIC  __iar_program_start
  SECTION .intvec : CODE (2)
  CODE32
        
__iar_program_start
  
  B main   

  SECTION .text : CODE (2)
  CODE32

  ; Question 1
AdresseDebut
  ; Question 2
FonctionACopier
  MOV   R0, #0
  ; Question 3
  MOV   R1, #0x80000000
  ; Question 4
  LSR   R1, R1, #20
  ; Question 5
  ASR   R1, R1, #11
  
  ; Question 6
  ADD   R9, PC, #-4
BoucleInterne
  ; Question 7
  ADDS  R0, R0, R1
  
  ; Question 8
  MOV   R2, R1
  MOV   R1, R0
  MOV   R0, R2
  
  ; Question 9 et Question 10
  MOVCS R0, #0
  MOVCS R1, #1
  
  ; Question 11
  MOV   PC, R9
AdresseFin  
  
          
main
  LDR   SP, =MaPile         ; Préparons une pile
  ; Question 12
  ADD   SP, SP, #32
  
  ; Question 13
  LDR   R0, =AdresseDebut  
  LDR	R1, =FonctionEnRAM   
  LDR 	R2, =AdresseFin     
  
  ; Question 14
  SUB	R2, R2, R0
  ; Question 15
  LSR   R2, R2, #2
  
  ; Question 16
  BL    CopieMemoire  
  
  ; Question 17
  MOV PC, R1
 
; -----------------------------------------------------------
; La fonction CopieMemoire reçoit les arguments/paramètres suivants:
; R0 - Adresse de source (celle où vous devez lire les instructions)
; R1 - Adresse de destination (celle où vous devez écrire/copier les instructions)
; R2 - Nombre d'instructions (de 32 bits) à copier
CopieMemoire
  ; Écrivez le code de la fonction CopieMemoire (jusqu’à l’instruction BX LR).
  ; Aucune modification au code dans le reste du fichier asm.s n'est nécessaire. 

  ; Votre fonction doit fonctionner correctement si R2 contient 0 (même si ça n’est pas le cas ici). 

  ; Votre code doit contenir au moins un commentaire toutes les trois lignes 
  ; de code assembleur, qui décrit le fonctionnement de votre programme. 
  ; Tout programme sans commentaire se verra attribuer la note de 0. 

  ; Votre fonction CopieMemoire ne doit pas modifier le contenu des registres. 
  ; Cela inclut R0, R1, et R2, qui sont utilisés pour passer des arguments à la 
  ; fonction, et tout autre registre du micro-processeur que vous déciderez d’utiliser. 
  ; Indice : vous disposez d’une pile de 32 octets, elle pourrait vous être fort utile ! 

  BX LR
; -----------------------------------------------------------
  
  SECTION  `.noinit`:DATA(2)

StockageTemporaire      DS32    1
; Question 18
FonctionEnRAM	        DS32	45 
; Question 19
MaPile                  DS16    16 

  END