2014-07-16 35 views
0

這可能是一個愚蠢的問題,但在我的彙編代碼,調試過程中,我有POP {PC}彙編

pop{r2-r6,pc} 

,我認爲這是給我一個硬故障異常。我明白pop的作用,但我不確定pc部分的含義。我無法在互聯網上的任何位置找到它,並且它在任何地方都不是我的代碼中的變量。

我在c中使用上的STM32萊凱勒++

+0

在你的情況下,'pc'只是'r15'的別名,儘管更普遍地看到Mike的答案。 – OJFord

+0

「pop pc」是常用來實現從函數返回的東西(它從堆棧彈出返回地址) – sehe

回答

1

pcr15程序計數器,這給該處理器從取指令地址的寄存器。將其更改爲另一個地址會使程序跳轉到該地址。

在這種情況下,地址從堆棧讀取以從函數調用返回;返回地址將被推入堆棧(從鏈接寄存器lrr14)在功能的開始。

如果這導致崩潰,那麼這可能是因爲堆棧中的地址已損壞。也許你正在寫本地數組的邊界之外,或者用太深的函數調用級別溢出堆棧。

+0

這有幫助。有一個非常深的函數調用級別,我將不得不看看我能否以某種方式修復。 – Dude

0

PC寄存器是程序計數器,它保存在ARM架構(STM32使用ARM架構)上執行的下一條指令的地址。

ARM中的默認組裝方式是在函數返回時簡單覆蓋PC寄存器。用彈出式對話框看到的只是一種直接返回的方式,see here

您的問題的其餘部分在Mike的帖子中進行了整齊的解釋。