2016-07-07 107 views
0

我們使用arm9和ucos。通用移植函數的最後一個工具在我們的系統中具有奇怪的行爲。LDMFD奇怪地影響R13

Instrument: LDMFD SP!,{R0-R12,LR,PC}^ 

讓我們假設SP是0x10002000,下面15個DWORD(這將被複制到R0-R12,LR,PC)有從1到15,我們發現PC(R15)值發生變化,跳轉到15,但SP(R13)變成了一個奇怪的值(遠離堆棧存儲空間的地址)。我預計它會變成0x1000203C(0x10002000 + 4 * 15)。

爲什麼R13改變了這種方式?

+1

'SP'是'R13'。 'R14'是'LR'。 – Michael

+0

非常感謝。這是一個拼寫錯誤,它是受到影響的R13。我改變了對R13的問題。 – shino

回答

0

該指令與堆棧中的其他寄存器一樣加載r14。寫入PC導致跳轉。這不是一個將返回地址設置爲鏈接寄存器的分支和鏈接。

此外,該指令實際上是一個異常返回(因爲^)。因此,根據您返回的模式,r14可能會被存儲。因此,在異常返回後,您可能會看到與從內存加載的內存不同的r14

+0

非常感謝。這個問題有一個已經修復的拼寫錯誤。 R13(SP)是有奇怪行爲的寄存器。 – shino

+0

@shino,上述答案仍然適用。堆棧指針是分區的,因此您需要了解是否看到「R13_irq」或「R13_usr」。 –