ARM指令集中立即數尋址的范圍


上學期學習了一會兒ARM匯編指令,對其中立即數尋址一節有些疑惑。先看書上的一個例子:

MOV R3, #0x3A    ;將十六進制數3A放到寄存器R3中

在上面的指令中,第2個源操作數為立即數,數值可以是0~0xFF范圍內的任意值。

可在平時卻經常看到第2操作數大於0xFF的例子,如 MOV R3, #0x400 等等。

這是為什么呢?網上搜羅一番,果然有很多相關的討論帖子,再加上自己的理解,大致得到了如下的結論。

有興趣的可以去搜一下這一個關鍵詞,8位位圖,原來我們的第2操作數就是遵循這個規律的。

以上的解釋文字來自ARM Processor Instruction Set,再附上兩張圖片:

所以,我們可以這樣總結:

1.判斷一個數是否符合8位位圖的原則,首先看這個數的二進制表示中1的個數是否不超過8個。如果不超過8個,再看這n個1(n<=8)是否能同時放到8個二進制位中,如果可以放進去,再看這八個二進制位是否可以循環右移偶數位得到我們欲使用的數。如果可以,則此數符合8位位圖原理,是合法的立即數。否則,不符合。

2.無法表示的32位數,只有通過邏輯或算術運算等其它途徑獲得了。比如0xFFFFFF00,可以通過0x000000FF按位取反得到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM