; r1 : s_add
; r2 : len
; r3 : d_add
_char_copy:
b _check
_loop:
ldrb r0, [r1], #1 ; load a byte to r0 from [r1], then r1 += 1
sub r2, r2, #1 ; len -= len 加在這是因為流水線。。。節省一個週期
strb r0, [r3], #1 ; store a byte form r0 to [r3], then r3 +=1
_check:
cmp r2, #0
bne _loop
mov pc, lr ; return
; 程式碼這樣寫 效率不高,是一個位元組位元組的搬
; 可以判斷一下長度和起始地址 然後按32bit, 在多個暫存器的“塊”搬會更好
; 再考慮考慮 指令週期和相關性 效率會高許多 這就不多寫了
; r1 : s_add
; r2 : len
; r3 : d_add
_char_copy:
b _check
_loop:
ldrb r0, [r1], #1 ; load a byte to r0 from [r1], then r1 += 1
sub r2, r2, #1 ; len -= len 加在這是因為流水線。。。節省一個週期
strb r0, [r3], #1 ; store a byte form r0 to [r3], then r3 +=1
_check:
cmp r2, #0
bne _loop
mov pc, lr ; return
; 程式碼這樣寫 效率不高,是一個位元組位元組的搬
; 可以判斷一下長度和起始地址 然後按32bit, 在多個暫存器的“塊”搬會更好
; 再考慮考慮 指令週期和相關性 效率會高許多 這就不多寫了