这是什么意思:我只有 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")
“立即数”常量被编码在仅 12 位的“移位器操作数”中。其他指令具有类似的定义,有时是其他宽度。
存在此限制是因为(与 x86 不同)ARM 上的指令在使用 Thumb(2) 时始终为 32 位,有时为 16 位。为了支持无法直接用 12 位二进制数字表示的值,移位器操作数允许不同的寻址模式(例如左移、右移、旋转)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)