ARM中MOV與LDR的區(qū)別
LDR R0,=0x56000010 以上三條匯編語句的功能是將數(shù)值0x00004000存儲到以0x56000010為地址的存儲單元中。 其反匯編代碼如下 可見LDR R0,=0x56000010 再來看 LDR R0,=0x56000000 MOV R1,#0x00004000 其反匯編代碼如下 這里L(fēng)DR R0,=0x56000000 也就是說LDR偽指令是根據(jù)后面的數(shù)據(jù)值來決定轉(zhuǎn)換為ldr指令或MOV指令執(zhí)行。 那么同樣是給R0賦值,LDR R0,=0x56000010 能否用mov mov指令后面的立即數(shù)是有限制的,這個立即數(shù)必須由一個8位的二進(jìn)制數(shù)經(jīng)過偶數(shù)次右移后得到才合法數(shù)據(jù) LDR R0,=0x56000000 再舉例如下: mov R0,#0x101 mov R0,#0xFF1 以上兩條指令都不正確,因?yàn)榱⒓磾?shù)不合法。 這樣的話用MOV指令是比較麻煩的,因?yàn)橛行┖唵蔚臄?shù)據(jù)比較容易看出來,有些數(shù)據(jù)即不容易看出來是否是合法數(shù)據(jù)。 為了解決這個問題,我們可以用LDR偽指令來實(shí)現(xiàn),根據(jù)后面的立即數(shù)來決定轉(zhuǎn)換為ldr指令或MOV指令執(zhí)行,符合MOV指令的立即數(shù)合法性要求就轉(zhuǎn)換為MOV指令,不符合的話就轉(zhuǎn)換為LDR加載指令來實(shí)現(xiàn)。 |
評論