各種模式的切換,可以是程式設計師通過**主動切換(通過寫cpsr暫存器),也可以是cpu在某些情況下自動切換。各種模式下許可權和可以訪問的暫存器不同
作業系統有安全級別要求,因此cpu設計多種模式是為了方便作業系統的多種角色安全等級需要。
arm是io與記憶體統一編址的,
正常工作之外的流程都叫異常,異常會打斷正在執行的工作,並且一般我們希望異常處理完成後繼續回來執行原來的工作。中斷是異常的一種異常處理機制(這些操作只能在 arm 態執行)儲存返回位址到 lr_發生異常後cpu會進入相應的工作模式,與異常相關的工作模式有5種
異常處理中有一些是硬體自動做的,有一些是程式設計師需要自己做的。
cpu設計時提供的異常向量表,一般稱為一級向量表。有些cpu為了支援多個中斷,還會提供二級中斷向量表
設定 pc 為相應的異常向量
返回時, 異常處理需要:
4.1 指令與偽指令
(彙編)指令是cpu機器指令的助記符,經過編譯後會得到一串10組成的機器碼,可以由cpu讀取執行。常用偽指令(彙編)偽指令本質上不是指令(只是和指令一起寫在**中),它是編譯器環境提供的,目的是用來指導編譯過程,經過編譯後偽指令最終不會生成機器碼。
偶爾會用到的gnu偽指令
最重要的偽指令
arm中有乙個ldr指令,還有乙個ldr偽指令。一般都使用ldr偽指令而不用ldr指令4.2 彙編特點4.3 8種定址方式4.4 指令字尾
同一指令經常附帶不同字尾,變成不同的指令。經常使用的字尾有:
4.5 條件執行字尾
4.6 多級指令流水線
為增加處理器指令流的速度,arm使用多級流水線.,允許多個操作同時處理,而非順序執行。pc指向正被取指的指令,而非正在執行的指令
4.7 常用指令
訪存指令 ldr/str & ldm/stm & swp
軟中斷指令 swi(software interrupt)
軟中斷指令用來實現作業系統中系統呼叫
協處理器cp15操作指令 mcr & mrc
協處理器:soc內部另一處理核心,協助主cpu實現某些功能,被主cpu呼叫執行一定任務。arm設計上支援多達16個協處理器,但是一般soc只實現其中的cp15(cp:coprocessor)。協處理器和mmu、cache、tlb等處理有關,功能上和作業系統的虛擬位址對映、cache管理等有關。多暫存器訪問指令
ldr/str每週期只能訪問4位元組記憶體,如果需要批量讀取、寫入記憶體時太慢,解決方案是stm(store register mutiple)/ldm(load register mutiple)
{}rb, 《暫存器 list> //記憶體塊 ==》暫存器列表
{}rb, 《暫存器 list> //暫存器列表 ==》記憶體塊
stmia sp,
//將r0存入sp指向的記憶體處(假設為0x30001000);然後位址+4(即指向0x30001004),將r1存入該位址;然後地 址再+4(指向0x30001008),將r2存入該位址······直到r12內容放入(0x3001030),指令完成。乙個訪存週期同時完成13個暫存器的讀寫
4種棧
!的作用
ldmia r0,
ldmia r0!,
感嘆號的作用就是r0的值在ldm過程中發生的增加或者減少最後寫回到r0去,也就是說ldm時會改變r0的值。
^ 的作用
ldmfd sp!,
ldmfd sp!, ^
^的作用:在目標暫存器中有pc時,會同時將spsr寫入到cpsr,一般用於從異常模式返回。 ARM工作模式
從程式設計的角度看,arm微處理器的工作狀態有兩種,並可在兩種狀態之間切換 1 arm狀態,此時處理器執行32位的字對齊的arm指令 2 thumb狀態,此時處理器執行16位的,半字對齊的thumb指令 為了相容老晶元 在程式執行的過程中,可以在兩種狀態之間進行相應的轉換。處理器工作狀態的轉變並不影...
arm工作模式
從程式設計的角度看,arm微處理器的工作狀態有兩種,並可在兩種狀態之間切換 1 arm狀態,此時處理器執行32位的字對齊的arm指令 2 thumb狀態,此時處理器執行16位的,半字對齊的thumb指令 為了相容老晶元 在程式執行的過程中,可以在兩種狀態之間進行相應的轉換。處理器工作狀態的轉變並不影...
arm工作模式
一 arm工作模式 arm微處理器支援7種工作模式,分別為 1 使用者模式 usr 用於正常執行程式 2 快速中斷模式 fiq 用於高速資料傳輸 3 外部中斷模式 irq 用於通常的中斷處理 4 管理模式 svc 作業系統使用的保護模式 高許可權 復位和軟體中斷進入 5 資料訪問終止模式 abt 當...