0
在引發SWI中斷後的ARM ASM編程中,如何檢查是否從ARM狀態或THUMB狀態升高?在ARM ASM中如何檢查引發哪個中斷狀態?
LDR R11,=DST
LDR R12,=0X4000100 ;THIS IS FOR STORING THE ADDRESS
LDR R1,=0X4000200 ;THIS IS FOR STORING THE COUNT
SWI 0X1240 ;
在引發SWI中斷後的ARM ASM編程中,如何檢查是否從ARM狀態或THUMB狀態升高?在ARM ASM中如何檢查引發哪個中斷狀態?
LDR R11,=DST
LDR R12,=0X4000100 ;THIS IS FOR STORING THE ADDRESS
LDR R1,=0X4000200 ;THIS IS FOR STORING THE COUNT
SWI 0X1240 ;
您還沒有指定哪個ARM指令的版本設置你使用,但
你幾乎肯定會發現它在保存的程序狀態寄存器(SPSR)。
具體來說,你想知道T-bit的價值。
T位
T位反映了操作狀態:
- 當T比特被設置,則處理器在Thumb狀態
- 執行當T位是清楚,處理器在ARM狀態下執行。
運行狀態由CPTBIT外部信號反映。
就像旁邊一樣,如果您嘗試從中斷返回,您通常不需要擔心中斷是否來自拇指代碼或ARM代碼。有特殊的中斷返回指令,應該爲您處理。
在最後的ARM平臺,我的工作,你可以簡單地做movs pc, lr
從中斷返回,同時恢復先前的執行狀態。
使用lpc2378的進程 – tracy00
它唯一的例外是_does_,它來自哪個狀態,是一個未定義的指令,其中LR偏移量是來自ARM的+4而來自Thumb的+2。對於其他任何情況,LR偏移量完全取決於異常類型(特別是對於SVC,確實爲0)。 – Notlikethat