微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

此指令需要多少个指令周期?

如何解决此指令需要多少个指令周期?

如果我没记错的话,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 的互锁,需要两个互锁周期。
  • strcmp 是单循环。
  • 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 举报,一经查实,本站将立刻删除。