***************************************************************************/
-// Build : arm-eabi-gcc -c stm32lx.S
- .text
- .syntax unified
- .cpu cortex-m3
- .thumb
- .thumb_func
- .global write
+// Build : arm-eabi-gcc -c stm32lx.s
+ .text
+ .syntax unified
+ .cpu cortex-m3
+ .thumb
+ .thumb_func
+ .global write
/*
- r0 - destination address
- r1 - source address
- r2 - count
+ r0 - source address
+ r1 - destination address
+ r2 - output, remaining word count
*/
- // Set 0 to r3
- movs r3, #0
- // Go to compare
- b.n test_done
+ // Go to compare
+ b test_done
write_word:
- // Load one word from address in r0, increment by 4
- ldr.w ip, [r1], #4
- // Store the word to address in r1, increment by 4
- str.w ip, [r0], #4
- // Increment r3
- adds r3, #1
+ // Load one word from address in r0, increment by 4
+ ldr.w ip, [r0], #4
+ // Store the word to address in r1, increment by 4
+ str.w ip, [r1], #4
+ // Decrement r2
+ subs r2, #1
test_done:
- // Compare r3 and r2
- cmp r3, r2
- // Loop if not zero
- bcc.n write_word
-
- // Set breakpoint to exit
- bkpt #0x00
+ // Test r2
+ cmp r2, #0
+ // Loop if not zero
+ bhi write_word
+ // Set breakpoint to exit
+ bkpt #0x00