求编一个简单的ARM程序
答案:2 悬赏:80 手机版
解决时间 2021-01-30 02:55
- 提问者网友:爱了却不能说
- 2021-01-29 23:02
编写以字节为单位的字符串拷贝子程序,要求从存储器某处拷贝到另一处。源字符串的起始地址放入R1,长度(以字节为单位)放入R2,目的字符串的起始地址放入R3
最佳答案
- 五星知识达人网友:慢性怪人
- 2021-01-30 00:32
; 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, 在多个寄存器的“块”搬会更好
; 再考虑考虑 指令周期和相关性 效率会高许多 这就不多写了
; 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, 在多个寄存器的“块”搬会更好
; 再考虑考虑 指令周期和相关性 效率会高许多 这就不多写了
全部回答
- 1楼网友:零点过十分
- 2021-01-30 01:43
我。。知。。道
加。。我。。私。。聊
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯