  NAME    main
        
  PUBLIC  __iar_program_start
  ; La directive SECTION place le texte qui suit en ROM (type de section = CODE)
  ; La mémoire ROM 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 ROM
_tableau	            DC32	0x002938AE, 0x003EF391, 0xEA000023	; Question 2 
_AdresseDePointeur      DC32    0x00100000			                ; Question 3  
_AdresseDeTableau       DC32    0x00000004

  ; La directive SECTION place le texte qui suit en ROM (type de section = CODE)
  ; La mémoire ROM 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, 10 et 11
  LDR   R3, =_variable  ; Questions 11 et 12 	
  STR   R0, [R1]        ; Question 13 
  MOV   R5, #4
  LDR   R2, [R0], #4    ; Question 14
  LDR   R2, [R0, R5]    ; Question 15 
  ADD   R0, R0, #4      ; Question 16 
  STR   R3, [R1]        ; Question 17 et 18
  LDR   R2, [R0, #5]    ; Question 19
; STR   R1, [_pointeur] ; Question 20 et 21
  LDR   R6, =_tableau   ; Question 22
  STR   R2, [R6]        
fin
  B     fin             ; Question 23

  
  ; 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 ; Questions 24 et 25

  END
  