在彙編時,我們常會用到立即數。
但是立即數是有條件限定的:
當乙個數小於255不用判斷,它是立即數。
當大於255時:
把資料轉換成二進位制形式,從低位到高位寫成4位
1組的形式。
if(count of 1 > 8)
isnotimmediate;
else
} 解決老是需要判斷的方案:
我們在arm彙編中如何規避立即數這個問題呢,其實可以使用
arm彙編
ldr偽指令,例如直接把
mov指令變為,
ldr r1
,=0x12345678
這樣編譯器就不會報錯了。但這種方法也有弊端會增加開銷和影響執行效率。 同時
arm彙編中還有有效數的概念,比如
mov r1,#0xffffffff
指令中
0xffffffff
不是立即數,但是是有效數,編譯器最自動把原指令變換為
mvn r1,#0
,也不會報錯。有效數判定:原數是立即數或者原數反碼是立即數。
關於ARM立即數的理解
一 立即數指令碼的組成 arm公司將32bit指令碼分為如下兩部分 32bit立即數通過imm8值迴圈右移ror值 2bit得到。即 shifter operand immed 8 rotate right rotate imm 2 二 如何判斷乙個數是否是合法立即數?首先將這個數轉換為32bit1...
ARM立即數問題
最近學習彙編,遇到乙個問題,我把截圖貼在下面 上面可以看出,相信應該有人感到鬱悶吧,為啥oxffffffff可以識別,而ox1ff卻不行,網上查了好多資料,所以總結一下,immed 8迴圈右移 2 rotate imm immediate 立即數 immed 8 8位的常數 rotate imm 4...
ARM彙編立即數合法性
每個立即數由乙個8位的常數迴圈右移偶數字得到。其中迴圈右移的位數由乙個4位二進位制的兩倍表示。則有 immed 8迴圈右移 2 rotate imm 並不是每乙個32位得常數都是合法的立即數,只有能通過上面構造方法得到的才是合法的立即數。arm彙編編譯器按照下面的規則來生成立即數的編碼。1 當立即數...