  NAME    main
        
  PUBLIC  __iar_program_start

  ; La directive SECTION place le texte qui suit en FLASH (type de section = CODE)
  ; La mémoire FLASH commence à l'adresse 0x00000000
  SECTION .intvec : CODE (2)
  CODE32
  
  ; Indique le début du programme
__iar_program_start
  
  B       main    ; Question 1

; Definitions de constantes en memoire FLASH (ROM)
_tableau	        DC32	0x002938AE, 0x003EF391, 0xEA000023	; Question 2 
_AdresseDePointeur      DC32    0x00100000			        ; Question 3  

  ; La directive SECTION place le texte qui suit en FLASH (type de section = CODE)
  ; La mémoire FLASH commence à l'adresse 0x00000000, mais les 128 premiers octets
  ; sont réservés. Le code de la section .text commence donc à l'adresse 0x80 (128)
  SECTION .text : CODE (2)
  CODE32
  
main
  LDR   R0, =_tableau   ; Question 4
  LDR   R1, =_pointeur  ; Question 5 
  LDR   R2, [PC, #-128] ; Questions 6, 7 et 8
  LDR   R4, [PC, #-128] ; Questions 9 et 10
  LDR   R3, =_variable  ; Question 11 	
  STR   R3, [R1]        ; Question 12 
  MOV   R5, #4
  LDR   R2, [R0], #4    ; Question 13
  LDR   R2, [R0, R5]    ; Question 14 
  ADD   R0, R0, #4      ; Question 15 
  STR   R3, [R1]        ; Question 16 
  LDR   R2, [R0, #5]    ; Question 17  
; STR   R1, [_pointeur] ; Question 18
fin
  B     fin             ; Question 19

  
  ; La directive SECTION place le texte qui suit en RAM (type de section = DATA)
  ; La RAM commence à l'adresse 0x00100000
  ; Le '.noinit' signifie que la mémoire n'est pas initialisée, donc au démarrage,
  ; la RAM a un contenu "aléatoire".
  SECTION  `.noinit`:DATA(2)

_pointeur       DS32    1  
_variable	DS32	1 ; Question 20

  END
  