ARM指令集可以分為跳轉(zhuǎn)指令,數(shù)據(jù)處理指令,程序狀態(tài)寄存器傳輸指令,LOAD/Store指令,協(xié)處理器指令和異常中斷產(chǎn)生指令6類
ARM指令集的尋址方式
數(shù)據(jù)處理指令的操作數(shù)的尋址方式
字以及無符號字節(jié)的Load、Store指令的尋址方式
雜類Laod、Store指令的尋址方式
批量Load、Store指令的尋址方式
協(xié)處理器Load、Store指令的尋址方式
數(shù)據(jù)處理指令的操作數(shù)的尋址方式
立即數(shù)荀子,每個立即數(shù)有由一個8位的參數(shù)循環(huán)右移 偶數(shù)位得到,其中循環(huán)移位的位數(shù)由一個4位二進制的兩倍表示
指令編碼格式:
常見的:
MOV R0,#0xFC0 令RO的數(shù)字為0xFC0
MOV R3,R2;將R2的數(shù)字放到R3中
ADD R0,R1,R2;將R0數(shù)值等于R15的數(shù)值加上R2的數(shù)值,R0 = R1+R2
MOV R0,R0,LSL#n ; R0 = R0*(2**n)
此外,左移右移指令要看寄存器,如果是寄存器的話,一般左移的位數(shù)或者是右移的位數(shù),看寄存器的低八位
字以及無符號字節(jié)的LOAD和STORE
load指令用于從內(nèi)存中讀取數(shù)據(jù)放入寄存器中,store指令用于將寄存器中的數(shù)據(jù)保存到內(nèi)存,ARM有兩大LOAD和STORE指令,以內(nèi)用于32位字類型數(shù)據(jù)操作以及8位的無符號的直接類型數(shù)據(jù)
另一類是操作16位半字節(jié)的數(shù)據(jù)以及8位的有符號字節(jié)類型的數(shù)據(jù),這里介紹的是第一種類型的Load和STore
下面關(guān)鍵還是看代碼:
LDR R0,[R1,R2] ;將內(nèi)存單元R1+R2中的字讀取到R0中
LDR R0,[R1,-R2];將內(nèi)存單元R1-R2中的數(shù)據(jù)讀到R0中
LDR R0,[R1,R2,LSL #2]將地址單元R1+R2*4中的數(shù)據(jù)讀取到RO中
LDR R0,[R1,#4]! 將內(nèi)存單元R1+4中的數(shù)據(jù)讀取到R0中,同時R1 = R1+4
指令中尋址方式的語法格式:其中有個 ! 的話,設(shè)置W位,更新基址寄存器的內(nèi)容
LDR R0,[R1,R2]!;將內(nèi)存單元R1+R2中的數(shù)據(jù)讀取到R0中,同時R1=R1+R2
LDR R0,[R1,R2,LSL#2]!將內(nèi)存單元R1+R2*4中的數(shù)據(jù)讀取到R0中,同時R1 = R1+r2*4
對于有兩個寄存器的,這個比較重要
LDR R0,[R1],#4,將地址R1的內(nèi)存單元數(shù)據(jù)讀取到R0中,同時R1 = R1+4
LDR R0,[R1],R2,將地址為R1,的內(nèi)存單元數(shù)據(jù)讀取到R0中,然后R1 = R1+R2
LDR R0,[R1].R2.LSL#2;將地址為R1+4的內(nèi)存單元讀取到R0中,然后R1 = R1+R2*4
注意移位的時候要進行注意,這里面涉及很深,以后再總結(jié)