這個位址undefined_instruction到底有多遠就難說了,也許和標號_undefined_instruction在同乙個
頁面,也許在很遠的地方。不過除了reset,其他的異常是mmu開始工作之後才可能發生的,因此
undefined_instruction 的位址也經過了mmu的對映。
在剛加電的時候,cpu從0x0開始執行,mmu還沒有開始工作,此時的虛擬位址和實體地址相同;另一方
面,重啟在mmu開始工作後也有可能發生,如果reset也用ldr就有問題了,因為這時候虛擬位址和物理
位址完全不同。
因此,之所以reset用b,就是因為reset在mmu建立前後都有可能發生,而其他的異常只有在mmu建立之
後才會發生。用b reset,reset子程式與reset向量在同一頁面,這樣就不會有問題(b是相對跳轉的)
。如果二者相距太遠,那麼編譯器會報錯的
那麼繼續分析:
_undefined_instruction:
.word undefined_instruction
_software_interrupt:
.word software_interrupt
_prefetch_abort:
.word prefetch_abort
_data_abort:
.word data_abort
_not_used:
.word not_used
_irq:
.word irq
_fiq:
.word fiq
這裡的.word是什麼意思呢?
舉個例子來說吧:
ldr r1, _rwtcon
_rwtcon:
.word 0x15300000
是把位址_rwtcon上的內容放到r1,而位址_rwtcon上的內容是0x15300000,實際上就是把r1設定為0x15300000。
ARM常用彙編指令
1 gbll 偽指令用於定義乙個全域性的邏輯變數,並初始化為。gbll bootloader bootloader setl 2 get 或 include get 偽指令用於將乙個原始檔包含到當前的原始檔中,並將被包含的原始檔在當前位置進行彙編處理。可以使用 include 代替 get。incl...
ARM架構常用彙編指令
博主自己的學習筆記,順便分享。不是教科書,有錯誤很正常,請指出,日後會修改。str r0,r1 r1是位址,將r0資料存放到r1指向的位址 str r0,r1,0x10 將r0資料寫入以r1 0x10為位址的儲存器中,r1不變 str r0,r1 0x10 將r0資料寫入以r1 0x10為位址的儲存...
ARM常用彙編指令介紹
b 跳轉指令 跳轉範圍為32mb pc 暫存器r15,程式計數器指向當前執行的程式位址 ldr 從記憶體中讀取資料載入到暫存器中 str 將暫存器中的資料儲存到記憶體 mov 暫存器與暫存器之間的資料傳送指令,也可以將立即數傳給目標暫存器 add 加法指令 sub 減法指令 bic 位清除指令 or...