ARM程式設計的程式設計模式和一些概念理解的地方

2021-08-08 22:56:25 字數 1724 閱讀 2720

arm程式設計的程式設計模式和一些概念理解的地方

---參考朱有鵬裸機程式設計

1、arm的程式設計模式和7種工作模式

(1)arm的基本設定

arm採用的是32位的架構

arm約定:  byte:8bit,

halfword:16bit,(2bytes)

word      :32bit,(4bytes)

(2)大部分arm core提供:

arm指令集(32bit)    thumb指令集(16bit)   thumb2指令集(16 & 32bit)

thumb指令集都是16位的,cpu彙編指令集是010101的序列

這個指令本身是16位

arm指令集是32位才可以代表乙個符號語言。

16位的指令就無法完成一些32位異常處理的指令

2、arm處理器工作模式:

1、user:非特權模式,大部分任務執行在這種模式

2、fiq:當乙個高優先順序(fast)中斷產生時將會進入這種狀態

3、irq:當乙個低優先順序(normal)中斷產生時會進入這種模式

4、superisor:當復位或軟中斷指令執行將會進入這種模式

5、abort:當訪問異常將會進入這種模式

6、undef:當執行未定義指令會進入這種模式

7、system:使用和uesr模式相同暫存器的特權模式。

各種模式的切換,可以是程式設計師通過**主動切換的(通過寫cpsr暫存器),

也可以在cpu在某些情況下自動切換。

各種模式下許可權和可以訪問的暫存器不同。

3、cpu為什麼需要這些模式?

cpu是硬體,os是軟體,軟體的設計要依賴硬體的特性,硬體的設計

要考慮軟體需要,便於實現軟體特性。

作業系統有安全級別要求,因此cpu設計多種模式是為了方便作業系統

的多種角色安全等級需要。

硬體和軟體是互相依賴的。

一跑作業系統就有意義了。

svc模式:bootloader的之間的才開始跑的。

3、arm37個暫存器的詳解:

這些模式可以幫助cpu實現許可權管控。

arm的37個通用暫存器。

特殊功能暫存器是外設的暫存器。

對arm cpu本身程式設計的東西,

是一種io和記憶體統一編址的,特殊功能暫存器

通用暫存器沒有位址,但是每乙個暫存器都有乙個名字。

1、arm總共有37個暫存器,但是每一種模式下最多只能看到18個暫存器,

其他暫存器雖然名字相同但是在當前模式不可見。

2、對r14這個名字來說,在arm中共有6個名叫r14(sp)暫存器,

但是在每種特定處理器下,只有乙個r14是可見了。

其他的r14必須切換到他的對應模式下才能看到,這種設計叫影子暫存器banked register

3、你只要自己去切換模式就可以了,不需要寫**去操作的。

(1)user模式下面有r0-r12 ,r13(sp),r14(lr),r15(pc)

cpsr的暫存器

(2)fiq模式下面有r0-r7, 自己特有的r8-r14暫存器,但是所有的pc指標

和cpsr都是一樣的,因為,這個是指定cpu的執行的,是唯一的存在的。

(3)spsr是為了存放前一種狀態的pc的指標的,為了執行完這些異常狀態

然後返回的指標的依據。

Shell程式設計以及一些概念

shell解析器 解析shell指令碼,檢視 cat etc shellscentos預設的解析器是 bash 列印系統預設的shell解析器 echo shell shell是什麼是命令,類似windows的dos命令 又是一門程式語言,裡面含有變數 函式 邏輯控制語句等 shell指令碼是什麼s...

函式式程式設計一些概念理解

其實學習一種新的正規化是困難的 我們必須學會為熟悉的問題找到新的解答方法。函式式程式設計將程式描述為表示式和切換,以數學方程的形式建立模型,並且盡量避免可變的狀態。閉包閉包 closure 是所有函式式語言都具備的一項平常特性,可是相關的論述卻常常充斥著晦澀乃至神秘的字眼。所謂閉包,實際上是一種特殊...

C C 程式設計中的一些概念問題

1.下面的 會有問題嗎?char ptr null printf s n ptr free ptr 查資料發現當ptr null時free 函式是不做記憶體釋放的,所以上面的程式不會出錯。至於printf s n ptr 利用vs2008編譯器輸出的是 null 不知道其它編譯器輸出什麼。2.變數前...