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.變數前...