關於立即數

2021-07-27 20:25:32 字數 555 閱讀 8161

在彙編時,我們常會用到立即數。

但是立即數是有條件限定的:

當乙個數小於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 當立即數...