【发布时间】:2021-06-24 10:19:06
【问题描述】:
如果我没记错的话ldrb r3, [r1], #1 将需要 3 个指令周期,同样add r4, r1, #2 将需要 1 个指令周期这里不讨论互锁延迟,但我很困惑有多少个周期cmp r4, r3 会接受吗?
请注意:这是带有 ARM9TDMI 流水线时序的 ARM ASSEMBLY。
【问题讨论】:
-
我个人认为这需要 2 个周期,1 个用于从 r3 获取数据,一个用于解码和比较 r4 和 r3,但这完全是一种盲目的看法,idk 很多,如果我是,请更正错了。
-
您检查了哪些参考文献,这些参考文献以何种方式不完整/不清楚/模棱两可?
-
cmp r4,r3是数据处理指令。就像sub r4,r3,但只影响标志。数据处理指令(非 PC/非移位)为 1 个周期 (1S/1I)。您必须查看指令序列以了解互锁和内存等待状态注意事项。即,如果没有内存互锁,add r4,r1,#2和cmp r4,r3的结论应该相同。bxx将花费额外的周期来处理cmp设置的条件代码。流水线是流水线的,因此 (1S/1I) 与流水线中的其他指令一起发生;通常你只计算非我。 -
谢谢@artlessnoise,但我已经阅读了你提到的参考手册,在第 7 章定义了指令周期,我没有阅读任何关于 CMP的指南> 指令,请您根据您的知识告诉总循环计数为以下代码:
invert: ldrb r3, [r1], #1 eor r3, r3, r2 strb r3, [r0], #1 add r4, r4, #1 cmp r4, r3 bxge lr b invert -
@artlessnoise - 我在上面评论中提到的代码,据我说,ldrb 指令三个周期,(由于加载指令,2 个周期互锁)一个周期 eor指令,strb指令1周期,add指令1周期,cmp指令2周期,1周期bxge 指令(停留在循环中的平均情况),b 指令三个周期。
标签: assembly arm cpu-architecture arm9