ARM汇编中的ldr
, str
或b
等内存指令每个需要4个时钟周期。
这是因为每个内存位置的长度都是4个字节吗?
ARM汇编中的ldr
, str
或b
等内存指令每个需要4个时钟周期。
这是因为每个内存位置的长度都是4个字节吗?
LDR R0,[R1]
MOV R2,R3 // Allow time for memory read to occur
ADD R4,R4,#200 // by interleaving other instructions
CMP R0,#0 // before trying to use the value
// By trying to access the data immediately, this will cause a pipeline
// 'stall' and waste time waiting for the data to become available.
LDR R0,[R1]
CMP R0,#0 // Wastes at least 1 cycle due to pipeline not having the data
这个想法是在管道中隐藏固有的延迟,如果可以的话,通过延迟对寄存器的依赖(也称指令交错),进一步隐藏内存访问中的附加延迟。