.data .balign 4 red: .word 0 green: .word 0 blue: .word 0 .text .global grayscale .func grayscale grayscale: assign:  /* some comment */  ldr ip, addr_red  str r3, [ip]  ldr ip, addr_green  ldmfd r13!, {r3}  str r3, [ip]  ldr ip, addr_blue  ldmfd r13!, {r3}  str r3, [ip]  stmfd r13!, {r4-r8}  ldr ip, addr_red  ldr r3, [ip]  ldr ip, addr_green  ldr r4, [ip]  ldr ip, addr_blue  ldr r5, [ip] /* another comment */ grayscale_loop:  ldrb r6, [r1]  mul r6, r3, r6  add r1, r1, #1  ldrb r7, [r1]  mul r7, r4, r7  add r1, r1, #1  ldrb r8, [r1]  mul r8, r5, r8  add r1, r1, #1  add r6, r6, r7  add r6, r6, r8  asr r6, r6, #8  str r6, [r2]  add r2, r2, #1  sub r0, r0, #1  cmp r0, #0  bne grayscale_loop  ldmfd r13!, {r4-r8}  stmfd r13!, {r0-r1}  bx lr addr_red: .word red addr_green: .word green addr_blue: .word blue