這幾天跟同事在實作 IC 的 ROM code 時遇到一個難纏的問題,後來發現與 ARM 的 pipeline 機制有關係,問題是這樣的,看看以下的程式碼(實際上作了什麼事不重要,主要在流程): int SDRM_BN_Cmp ( SDRM_BIG_NUM * BN_Src1, SDRM_BIG_NUM * BN_Src2 ) { effecda8 : e92d4008 push { r3, lr } effecdac : e1a02000 mov r2, r0 effecdb0 : e1a0e001 mov lr, r1 if ( BN_Src1 - >Length > = BN_Src2 - >Length ) { effecdb4 : e5903004 ldr r3, [ r0, #4] effecdb8 : e591c004 ldr ip, [ r1, #4] effecdbc : e153000c cmp r3, ip effecdc0 : 3a000005 bcc effecddc <SDRM_BN_Cmp + 0x34> return SDRM_DWD_Cmp ( BN_Src1 - >pData, BN_Src1 - >Length, effecdc4 : e590000c ldr r0, [ r0, #12] effecdc8 : e1a01003 mov r1, r3 effecdcc : e59e200c ldr r2, [ lr, #12] effecdd0 : e1a0300c mov r3, ip effecdd4 :