2016-09-30 80 views
0

關於互聯網上的svc沒有足夠的信息。我瞭解了SVC處理程序如何工作,但是我不明白爲什麼它將寄存器R0,R1,R2,R3和R12堆疊到堆棧上。除非它有一個不存儲的目的,那麼這些寄存器中的信息對處理器來說是非常重要的。SVC HANDLER:ARM皮質m處理器

和任何一個建議如何學習ARM Cortex M3? 如何開始學習,以便不會像上面那樣基本的東西混淆。 感謝您提前

回答

0

這是因爲每次調用函數時,ABI描述:

  • 寄存器r0 - r3可以包含的參數,可以作爲臨時寄存器。這意味着功能不需要保存它們(它們將被修改)
  • 其他寄存器需要由功能保存,即它們需要在功能返回時恢復到先前的值。

這與r12類似。

因此,如果SVC調用C函數處理函數,寄存器r0-r3將被C函數破壞,而其他寄存器被維護。在這種情況下,硬件會自動進行堆棧,以便我們獲得擔保(如果C函數正確),則所有寄存器的值都與調用SVC之前的值相同。

請注意,對於SVC,知道這些寄存器已損壞(因爲我們知道何時調用SVC指令)是可以接受的。但其他異常(如中斷)具有相同的行爲,對於這些異常,這是非常重要的,因爲我們不知道它們何時發生。

關於一本書,我知道這本書,所以我可以告訴它:

的權威指南的ARM Cortex-M3,第二版第二版 由約瑟夫·耀

+0

真正的一點是例外entry _itself_看起來完全像EABI函數調用(硬件負責保存調用者保存的寄存器),因此異常處理程序只是常規的C函數(注意如何沒有特殊的異常返回指令)。 – Notlikethat

+0

先生,你能否請解釋TBB指令也.......因爲我面臨困難,我沒有得到它如何去特定情況下,爲什麼我們正在編寫DCB()之間.. –