Arm汇编指令集1
匯編指令是CPU指令的助記符,經過編譯后會生成一串10組成的機器碼,可以由CPU讀取執行。
?
匯編偽指令本質上不是偽指令(只是和指令一起寫在代碼中),它是編譯器環境提供的,目的是用來知道編譯過程,經過編譯后偽指令最終不會生成機器碼。
?
ARM匯編特點1:
ARM采用RISC架構,CPU本身不能直接讀取內存,而需要先將內存中的內容加載入CPU中的通用寄存器中才能被CPU處理。
ldr(load register)指令將內存內容加載到通用寄存器中。
str(store?register)指令將通用寄存器內容加載到內存中。
ldr/str組合用來實現ARM CPU和內存數據交換
?
ARM匯編特點2:ARM支持8中尋址方式
寄存器尋址???????????? mov r1,r2
立即尋址????????????????mov r0, #0xff0
寄存器移位尋址????? mov r0, r1, lsl #3
寄存器間接尋址????? ldr r1, [r2]
基址變址尋址???????? ldr r1,[r2,#4]
多寄存器尋址?????????ldmia?r1!,{r2-r7,r12}
堆棧尋址????????????????stmfd?sp!,{r2-r7,lr}
?
相對尋址?????????????? ?beq flag
?????????????????????????flag:
?
?
ARM匯編特點3:指令后綴
同一指令經常附帶不同后綴,編程不同的指令。經常使用的后綴有
B(byte)功能不變,操作長度變為8位
H(half word)功能不變,長度變為16位
S(signed)功能不變,操作數變為有符號
如 ldr ldrb ldrh ldrsb ldrsh
S(S標志)功能不變,影響SPSR標志位
如mov和movs? ?movs r0,#0
?
ARM匯編特點4:條件執行后綴
比如
mov? ? ?r0, r1? ?@相當于C語言中的r0 = r1;
moveq?r0,?r1??@如果eq后綴成立,則直接執行mov?r0?r1;?如果eq不成立,則本句代碼直接作廢,相當于沒有,類似C語言?if(eq)?{mov?r0,?r1}。
1、條件后綴是否成立,不是取決去本句代碼,而是取決于這句代碼之前的代碼運行的后果。
2、條件后綴決定了本句代碼是否被執行,而不會影響上一句和下一句代碼是否被執行。
后綴如下:
?
?
ARM匯編特點5:多級指令流水線
為增加處理器指令流的速度,ARM使用多級流水線。
取址----解碼----執行,這只是簡單的三級流水線,像S5PV210是用13級流水線,ARM11為8級。
?
數據處理指令
數據傳輸指令?:mov?mvn
mov r0,r1
mov r0,#0xff
mov和mvn用法一樣,區別是mov是原封不動地傳遞,而mvn是按位取反后傳遞。
?
算數指令?add? sub? rsb? adc sbc? rsc
邏輯指令?and? orr? ?eor? bic
比較指令?cmp?cmn?tst?teq,注意比較指令不用加S(見ARM匯編特點3)就可以影響cpsr中的標志位。
乘法指令?mvl mla umull nmlal smull smlal
前導零計數????clz
這些指令詳解,直接百度搜就能知道。
?
cpsr訪問指令
mrs和msr
mrs用來讀psr,msr用來寫psr
cpsr和spsr的區別和聯系:cpsr是程序狀態寄存器,整個SoC中只有一個;而spsr有五個,分別在5中異常模式下,作用是當從普通模式進入異常模式時,用來保存普通模式下的cpsr的,以再返回普通模式時恢復cpsr。
?
跳轉指令?b? bl bx
b?????直接跳轉(就沒打算返回)。
bl????branch?and?link,跳轉前把返回地址放入lr中,以便返回,以便于函數調用。
bx????跳轉同時切換到ARM模式,一般用于異常處理的跳轉。
?
訪存指令:
ldr str ldm stm swp
單個字/半字/字節訪問 ldr/str
多字批量訪問????ldm/stm
swp????r1,r2,[r0]????????@把內存中r0存入r1,再把r2存入r0
?
ARM匯編中的立即數:
合法立即數與非法立即數
ARM指令都是32位,除了指令標記和操作標記外,本身只能附帶很少尾數的立即數。因此立即數有合法與非法之分
合法立即數:經過任意位數的移位后非零部分可以用8位表示的即為合法立即數
?
軟終端指令:swi
軟中斷用來實現操作系統中系統調用
轉載于:https://www.cnblogs.com/sanshijvshi/p/10718922.html
總結
- 上一篇: CPU芯片哪家强?电视处理器这么选就对了
- 下一篇: python基础教程:包的创建及导入