LDR指令的格式:
LDR{條件} 目的寄存器 <存儲(chǔ)器地址>
作用:將 存儲(chǔ)器地址 所指地址處連續(xù)的4個(gè)字節(jié)(1個(gè)字)的數(shù)據(jù)傳送到目的寄存器中。
LDR指令的尋址方式比較靈活,實(shí)例如下:
LDR R0惩激,[R1] 邀窃;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0痢艺。
LDR R0理卑,[R1芜果,R2] ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0玉雾。
LDR R0翔试,[R1,#8] 复旬;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R0垦缅。
LDR R0,[R1],R2 驹碍;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0壁涎,然后R1=R1+8。
LDR R0志秃,[R1],#8 怔球;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+8的值存入R1洽损。
LDR R0庞溜,[R1,R2]! ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R0流码,并將R1+R2的值存入R1又官。
LDR R0,[R1漫试,LSL #3] 六敬;將存儲(chǔ)器地址為R18的字?jǐn)?shù)據(jù)讀入寄存器R0。
LDR R0驾荣,[R1外构,R2,LSL #2] 播掷;將存儲(chǔ)器地址為R1+R24的字?jǐn)?shù)據(jù)讀入寄存器R0审编。
LDR R0,[R1,,R2歧匈,LSL #2]垒酬! ;將存儲(chǔ)器地址為R1+R24的字?jǐn)?shù)據(jù)讀入寄存器R0件炉,并將R1+R24的值存入R1勘究。
LDR R0,[R1],R2斟冕,LSL #2 口糕;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+R2*4的值存入R1磕蛇。
LDR R0景描,Label ;Label為程序標(biāo)號孤里,Label必須是當(dāng)前指令的-4~4KB范圍內(nèi)伏伯。
要注意的是
LDR Rd,[Rn]捌袜,#0x04 ;這里Rd不允許是R15炸枣。
另外LDRB 的指令格式與LDR相似虏等,只不過它是將存儲(chǔ)器地址中的8位(1個(gè)字節(jié))讀到目的寄存器中。
LDRH的指令格式也與LDR相似适肠,它是將內(nèi)存中的16位(半字)讀到目的寄存器中霍衫。
LDR R0,=0xff
這里的LDR不是arm指令侯养,而是偽指令敦跌。這個(gè)時(shí)候與MOVE很相似,只不過MOV指令后的立即數(shù)是有限制的。這個(gè)立即數(shù)必須是0X00-0XFF范圍內(nèi)的數(shù)經(jīng)過偶數(shù)次右移得到的數(shù)柠傍,所以MOV用起來比較麻煩麸俘,因?yàn)橛行?shù)不那么容易看出來是否合法。
LDR R惧笛,label 和 LDR R从媚,=label的區(qū)別
LDR 是ARM中的指令,也是偽指令患整。
當(dāng)用 LDR r, =imd // r 為寄存器拜效, imd為立即數(shù)
LDR 是一條偽指令。編譯器會(huì)根據(jù) 立即數(shù)的大小各谚,決定用 ldr 指令或者是mov或mvn指令紧憾。
當(dāng)imd能用mov或者mvn操作時(shí),就將它翻譯成一條mov或mvn指令昌渤。當(dāng)imd大于mov或mvn能夠操作的數(shù)時(shí)赴穗,編譯器會(huì)將imd存在一個(gè)內(nèi)存單元中,然后再用一條ldr指令加載這個(gè)內(nèi)存單元的的值到寄存器中愈涩。
LDR r, label 和 LDR r, =label的區(qū)別:
LDR r, =label 會(huì)把label表示的值加載到寄存器中望抽,而LDR r, label會(huì)把label當(dāng)做地址,把label指向的地址中的值加載到寄存器中履婉。
譬如 label的值是 0x8000煤篙, LDR r, =label會(huì)將 0x8000加載到寄存器中,而LDR r, label則會(huì)將內(nèi)存0x8000處的值加載到寄存器中毁腿。