ARM常用彙編及start s初步分析

2021-06-19 14:33:12 字數 1256 閱讀 8029

這個位址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...