ldrb r1,[r0,#1]
means take the value in r0 add 1 to it and load from there put the byte (zero padded) into r1.
ldrb r1,[r0],#1
means take the value in r0, use it as an address to read a byte from, put the byte in r1 and then add 1 to r0.
ldrb r1,[r0],#1
is the same as
ldrb r1,[r0]
add r0,r0,#1
just in one instruction instead of two
I assume you want to have a loop that uses
ldrb r1,[r0],#1
the only drawback is your pointer moves it is like doing *p++ instead rather than array[x++]
Another solution that does not destroy the base is
ldrb r1,[r0,r2]
add r2,r2,#1
take the values in r0 and r2, add them together, use that as an address and read a byte and store it in r1
probably better to just
mov r2,r0
loop:
ldrb r1,[r0],#1
...
(end of loop)
mov r0,r2
if you care about preserving the start of string address in a register.
Not this is all documented in the pseudo code that is associated with every instruction and addressing mode in the arm documentation. infocenter.arm.com