這可能是一個愚蠢的問題,但在我的彙編代碼,調試過程中,我有POP {PC}彙編
pop{r2-r6,pc}
,我認爲這是給我一個硬故障異常。我明白pop的作用,但我不確定pc部分的含義。我無法在互聯網上的任何位置找到它,並且它在任何地方都不是我的代碼中的變量。
我在c中使用上的STM32萊凱勒++
這可能是一個愚蠢的問題,但在我的彙編代碼,調試過程中,我有POP {PC}彙編
pop{r2-r6,pc}
,我認爲這是給我一個硬故障異常。我明白pop的作用,但我不確定pc部分的含義。我無法在互聯網上的任何位置找到它,並且它在任何地方都不是我的代碼中的變量。
我在c中使用上的STM32萊凱勒++
pc
或r15
是程序計數器,這給該處理器從取指令地址的寄存器。將其更改爲另一個地址會使程序跳轉到該地址。
在這種情況下,地址從堆棧讀取以從函數調用返回;返回地址將被推入堆棧(從鏈接寄存器lr
或r14
)在功能的開始。
如果這導致崩潰,那麼這可能是因爲堆棧中的地址已損壞。也許你正在寫本地數組的邊界之外,或者用太深的函數調用級別溢出堆棧。
這有幫助。有一個非常深的函數調用級別,我將不得不看看我能否以某種方式修復。 – Dude
PC
寄存器是程序計數器,它保存在ARM架構(STM32使用ARM架構)上執行的下一條指令的地址。
ARM中的默認組裝方式是在函數返回時簡單覆蓋PC寄存器。用彈出式對話框看到的只是一種直接返回的方式,see here。
您的問題的其餘部分在Mike的帖子中進行了整齊的解釋。
在你的情況下,'pc'只是'r15'的別名,儘管更普遍地看到Mike的答案。 – OJFord
「pop pc」是常用來實現從函數返回的東西(它從堆棧彈出返回地址) – sehe