arm指令的基本格式如下:
其中<>號(hào)內(nèi)的項(xiàng)是必須的,{}號(hào)內(nèi)的項(xiàng)是可選的。各項(xiàng)的說(shuō)明如下:
arm指令集——第2個(gè)操作數(shù)
arm指令的基本格式如下:
靈活的使用第2個(gè)操作數(shù)“operand2”能夠提高代碼效率。它有如下的形式:
(1)#immed_8r——常數(shù)表達(dá)式;
(2)rm——寄存器方式;
(3)rm,shift——寄存器移位方式;
關(guān)于“#immed_8r——常數(shù)表達(dá)式”
該常數(shù)必須對(duì)應(yīng)8位位圖,即一個(gè)8位的常數(shù)通過(guò)循環(huán)右移偶數(shù)位得到。
關(guān)于“rm——寄存器方式”:
在寄存器方式下,操作數(shù)即為寄存器的數(shù)值。
例如:
sub r1,r1,r2
mov pc,r0
關(guān)于“rm,shift——寄存器移位方式”:將寄存器的移位結(jié)果作為操作數(shù),但rm值保持不變,移位方法如下:
關(guān)于“rm,shift——寄存器移位方式”:
例如:
add r1,r1,r1,lsl #3 ;r1=r1+r1*8=9r1
sub r1,r1,r2,lsr r3 ;r1=r1-(r2/2r3)
關(guān)于“arm指令集——條件碼”;arm指令的基本格式如下:
使用條件碼“cond”可以實(shí)現(xiàn)高效的邏輯操作,提高代碼效率。
所有的arm指令都可以條件執(zhí)行,而thumb指令只有b(跳轉(zhuǎn))指令具有條件執(zhí)行 功能。如果指令不標(biāo)明條件代碼,將默認(rèn)為無(wú)條件(al)執(zhí)行。
關(guān)于“arm指令集——條件碼”:
關(guān)于“arm指令集——存儲(chǔ)器訪問(wèn)指令”:arm處理器是典型的risc處理器,對(duì)存儲(chǔ)器的訪問(wèn)只能使用加載和存儲(chǔ)指令實(shí)現(xiàn)。arm處理器是馮·諾依曼存儲(chǔ)結(jié)構(gòu),程序空間、ram空間及i/o映射空間統(tǒng)一編址,除對(duì)ram操作以外,對(duì)外圍io、程序數(shù)據(jù)的訪問(wèn)均要通過(guò)加載/存儲(chǔ)指令進(jìn)行。
存儲(chǔ)器訪問(wèn)指令分為“單寄存器操作指令”和“多寄存器操作指令”。
ldr/str指令用于對(duì)內(nèi)存變量的訪問(wèn)、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問(wèn)、查表、外圍部件的控制操作等。若使用ldr指令加載數(shù)據(jù)到pc寄存器,則實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。
所有單寄存器加載/存儲(chǔ)指令可分為“字和無(wú)符號(hào)字節(jié)加載存儲(chǔ)指令”和“半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。
下面講講,ldr和str——字和無(wú)符號(hào)字節(jié)加載/存儲(chǔ)指令:ldr指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入寄存器中,str指令用于將寄存器中的單一字或字節(jié)數(shù)據(jù)保存到內(nèi)存。指令格式如下:
ldr{cond}{t} rd,<地址> ;將指定地址上的字?jǐn)?shù)據(jù)讀入rd
str{cond}{t} rd,<地址> ;將rd中的字?jǐn)?shù)據(jù)存入指定地址
ldr{cond}b{t} rd,<地址> ;將指定地址上的字節(jié)數(shù)據(jù)讀入rd
str{cond}b{t} rd,<地址> ;將rd中的字節(jié)數(shù)據(jù)存入指定地址
其中,t為可選后綴。若指令有t,那么即使處理器是在特權(quán)模式下,存儲(chǔ)系統(tǒng)也將訪問(wèn)看成 是在用戶模式下進(jìn)行的。t在用戶模式下無(wú)效,不能與前索引偏移一起使用t。