如何解决此指令需要多少个指令周期?
如果我没记错的话,ldrb r3,[r1],#1
需要 3 个指令周期,同样 add r4,r1,#2
需要 1 个指令周期 这里不讨论互锁延迟,但我是困惑 cmp r4,r3
需要多少个周期?
请注意:这是带有 ARM9TDMI 流水线时序的 ARM ASSEMBLY。
解决方法
你的问题很相似,使用了 similar code as your classmate,
循环核心是,
ldrb r3,[r1],#1 ; 3 cycles
eor r3,r3,r2 ; 1 cycle
strb r3,[r0],#1 ; 1 cycle
cmp ip,r0 ; 1 cycle
bne .L3 ; 3 cycles
-
ldrb
,eor r3,r2
是类似于图 7.2 的互锁,需要两个互锁周期。 -
str
和cmp
是单循环。 -
bne
是三个周期。
有关流水线阶段的信息,请参阅第 2.2 节。大约需要九个周期。部分来自ARM9TDMI TRM。
ldmia [r1],{r4,r5,r6,r7,r8,r9,r10,r11} # 3 cycle
eor r4,r4,r2 # 1 cycle
eor r5,r2 # 1 cycle
eor r6,r2 # 1 cycle
eor r7,r2 # 1 cycle
eor r8,r2 # 1 cycle
eor r9,r2 # 1 cycle
eor r10,r2 # 1 cycle
eor r11,r11,r2 # 1 cycle
stmia [r0],r11} # 1 cycle
对于 32 字节的传输,这是 12 个周期,因此速度大约是其 24 倍。如图 7-4 所示,首先使用 R4 是有益的。
这个交替循环将花费更长的时间,达到 13 个周期。
invert:
ldrb r5,#1 ; 3 cycles
eor r5,r2 ; 1 cycle
strb r5,#1 ; 1 cycle
add r4,#1 ; 1 cycle
cmp r4,r3 ; 1 cycle
bxge lr ; 3 cycles
b invert ; 3 cycles
这个修改给了9个循环,和gcc一样,
invert:
ldrb r5,#1 ; 2 cycles
add r4,#1 ; 1 cycle
eor r5,#1 ; 1 cycle
cmp r4,r3 ; 1 cycle
blt invert ; 3 cycles
bx lr ; 0 cycles,not in loop
然而,它又是一条指令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。