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



如果我没有错的话,ldrb r3, [r1], #1将需要3个指令周期,类似地,add r4, r1, #2将需要1个指令周期这里不讨论联锁延迟,但我不知道cmp r4, r3需要多少个周期?

请注意:它是带有ARM9TDMI管道计时的ARM ASSEMBLY。

你的问题与你的同学相似,使用的代码相似

环路核心是

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
  • ldrbeor r3,r3,r2是一个类似于图7.2的联锁,需要两个联锁循环
  • CCD_ 6和CCD_
  • CCD_ 8是三个循环

有关管道阶段,请参见第2.2节。大约需要9个周期。章节来自ARM9TDMI TRM。


ldmia  [r1], {r4,r5,r6,r7,r8,r9,r10,r11}  # 3 cycle
eor    r4,r4,r2   # 1 cycle
eor    r5,r5,r2   # 1 cycle
eor    r6,r6,r2   # 1 cycle
eor    r7,r7,r2   # 1 cycle
eor    r8,r8,r2   # 1 cycle
eor    r9,r9,r2   # 1 cycle
eor    r10,r10,r2   # 1 cycle
eor    r11,r11,r2   # 1 cycle
stmia  [r0], {r4,r5,r6,r7,r8,r9,r10,r11}  # 1 cycle

对于32字节的传输来说,这是12个周期,因此速度大约是它的24倍。如图7-4所示,首先使用R4是有益的。


在13个循环时,此交替循环将花费更长的时间。

invert:  
ldrb r5, [r1], #1  ; 3 cycles
eor r5, r5, r2     ; 1 cycle
strb r5, [r0], #1  ; 1 cycle
add r4, r4, #1     ; 1 cycle
cmp r4, r3         ; 1 cycle
bxge lr            ; 3 cycles
b invert           ; 3 cycles

这种修改给出了9个循环,与gcc、相同

invert:  
ldrb r5, [r1], #1  ; 2 cycles
add r4, r4, #1     ; 1 cycle
eor r5, r5, r2     ; 1 cycle
strb r5, [r0], #1  ; 1 cycle
cmp r4, r3         ; 1 cycle
blt invert         ; 3 cycles
bx  lr             ; 0 cycles, not in loop

然而,这是另一条指令。

最新更新