ARM零碎知識點總結(儘可能零碎)
1.ARM有六類指令集:
跳轉指令、資料處理指令、程式狀態暫存器傳輸指令、Load/Store指令、協處理器指令、異常中斷產生指令
2.ARM中實現程式跳轉的方式有兩種:
1).通過跳轉指令
2).直接向PC暫存器(R15)中寫入目標地址值
3. 資料處理指令又可分為3類:
資料傳送指令、算術邏輯運算指令、比較指令
部分指令的使用如下:
AND(And 邏輯與操作指令)可以提取暫存器中某些位的值,具體的做法是見杜春雷P69。
ORR(Logical OR邏輯或操作指令)可將暫存器中的某些位設定成1,詳見杜春雷P70
EOR(Exclusive OR邏輯異或操作指令)可將進村器中某些位的值取反,詳見杜春雷
BIC(Bit Clear位清除指令)用於將暫存器中的某些位的值設定成0,詳見杜春雷P72
TST(Test位測試指令)用於測試暫存器中某個位是1還是0,詳見杜春雷P73
TEQ(Test Equivalence相等測試指令)用於比較兩個數或運算元是否相等,詳見杜春雷P74
4.程式不能通過直接修改CPSR中的T控制位直接將程式狀態切換到Thumb狀態,必須通過BX等指令完成程式狀態的切換
5.LDR指令的用法:
a.可以用來從記憶體中讀取32位字資料到通用暫存器,然後對資料進行操作
b.當PC作為指令中的目標暫存器時,指令可以實現程式跳轉的功能
現通過LDR的用法不難總結出
1)LDRB(Load Register Byte位元組資料處理指令)的用法如下:
a.讀取8位位元組資料,然後對其操作(暫存器高24位清零)
b.PC為目標暫存器時,實現程式跳轉
2)LDRH(Load Register Halfword半字資料讀取指令)的用法如下:
a.讀取16位半位元組資料,然後對其操作(高16位清零)
b.PC為目標暫存器時,實現程式跳轉
6.arm組合語言中$ 是意思是什麼?
在一個符號前使用$,表示程式在彙編時將使用相應的值來代替$後的符號
7.巨集彙編技術與子程式:
使用子程式可以節省儲存空間及程式設計所花費的時間,也可以提供模組化的程式設計,使程式的除錯維護方便,但它也有缺點,例如,使用子程式時儲存和恢復相關的暫存器及子程式現場,增加了額外的開銷。因此在子程式較短而需要傳遞的引數較多的可以使用巨集彙編技術。