Ah giusto, ti ringrazio per la risposta, è un salto “inutile” perchè anche senza B fine l'istruzione successiva dopo aver impostato il lock a 0 punta alla macro fine 
quindi anche il B wait_lock nella macro _start è inutile
il codice con i miglioramenti che mi avete suggerito rimuovendo i salti inutili sarebbe così corretto?
.section .data
  lock: .word 0
.global _start
_start:
  LDR R0, =lock
  LDR R1, [R0]
  
wait_lock:
  TST R1, #1           @ R0 AND #1
  BNE wait_lock          @se risultato TST 1
regione_critica:
  @BEGIN IMPOSTO LOCK A 1
  MOV R5, #1
  STR R5, [R0]
  @END IMPOSTO LOCK A 1
  
  MOV R2, #3
  
  @BEGIN IMPOSTO LOCK A 0
  MOV R6, #0
  STR R6, [R0]
  @END IMPOSTO LOCK A 0
  
  
fine:
  MOV R7, #1
  SVC 0