use*_*480 2 assembly arm instruction-set cpu-architecture immediate-operand
这是什么意思:我只有 12 位的立即数,所以我可以只表示从 0 到 2^12 = 4096 的立即数吗?操作数 2 ,如果它是一个寄存器,可以有 32 位,但为什么立即常量只有 12 位?这个数字从何而来?
它由指令集定义。例如,MOV
指令被编码为
31 28 | 27 26 | 25 | 24 23 22 21 20 | 19 16 | 15 12 | 11 0 |
cond | 0 0 | I | 1 1 0 1 S | SBZ | Rd | shifter operand |
(see "ARM Architecture Reference Manual, 4.1.29 "MOV")
Run Code Online (Sandbox Code Playgroud)
“立即”常量被编码在只有 12 位的“移位器操作数”中。其他指令也有类似的定义,有时是其他宽度。
存在此限制的原因是——与 x86 不同——ARM 上的指令在使用 Thumb(2) 时始终为 32 位或有时为 16 位。为了支持不能直接用 12 位二进制数字表示的值,移位器操作数允许不同的寻址模式(例如左移、右移、旋转)。
归档时间: |
|
查看次数: |
3419 次 |
最近记录: |