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





