這取決於你是哪種臂架構談論和哪些指示。分支鏈路(BL)和分支鏈路交換(BLX)指令具有鏈接寄存器r14,使得返回地址的pc被寫入那裏。
返回指令bx lr,mov pc,lr,軟件選擇lr作爲返回,並不像其他指令集那樣硬連線。
程序員或編譯器可以自由使用bl指令並可以使用堆棧,但只按照預期使用這些指令會更有意義。
只要中斷和局部變量和保存狀態的函數調用。軟件必須在一個函數上保存狀態,調用硬件不會爲你做。保存狀態取決於體系結構。對於傳統的32位分支你有/註冊了註冊表,當你切換模式時,你的一些或許多註冊表被切換到另一個分支,例如有多個r13寄存器,一個用於用戶模式,一個用於irq等等這樣,你就不必使用不同的指令來使用你所使用的寄存器,因此在這種情況下,當你從用戶或服務模式切換到irq模式時,通過切換yo從基本保護或保存狀態銀行登記冊,你想要拯救你的任何其他狀態需要做你自己。
現在,cortex-m微控制器有點不同,當發生中斷時,硬件會爲您保存狀態,所有寄存器,寄存器沒有存儲區,只是將它們推入堆棧並使用位模式爲返回地址表明這是一箇中斷並恢復寄存器/狀態。
所有這些東西都記錄在臂架構的體系結構參考手冊或特定內核的技術參考手冊中。這兩套文件都可以在infocenter.arm.com上找到。
arm的核心是如何處理中斷的,傳統上你有單獨的irq和fiq線路進來.ARM使核心不是芯片,所以它取決於芯片供應商實施其餘的中斷設計,並且其差異很大。一般來說,雖然你(軟件)有一些責任去外設,並告訴它從它的末端取消中斷。它如何鎖定在外圍設備和核心之間是可以改變的東西的一部分。基本上你希望在離開服務程序之前使信號無效。皮質毫秒和更新的全尺寸內核可以有數十到數百個單獨的中斷,支持使軟件工作更容易,性能更好,你不必花時間在一個通用的ISR中找出誰造成了它然後分支給各種處理程序,他們把它到每個外設的另一個極端,甚至比它可以擁有自己的isr更細粒度。
一些內核中的更多中斷管理位於核心,您可以看到arm文檔,其餘中斷管理特定於該芯片,您需要芯片供應商提供的文檔以獲取該信息,絕不是普通的中斷如何工作的答案。
儲蓄函數調用是在軟件,並根據調用約定。你可以看看編譯器生成的代碼。對於中斷,ARM具有存儲寄存器,因此如果發生模式切換,某些寄存器會被硬件保留。 – Jester
您需要教程或書籍。還有不同的ARM內核具有非常不同的中斷處理。 – Olaf
我的問題得到-1。似乎我們現在不能在沒有批評的情況下在這裏提出任何問題。人們應該如何學習? – Engineer999