【发布时间】:2013-12-03 00:27:00
【问题描述】:
这是什么意思:我只有 12 位用于立即常数,所以我可以只表示从 0 到 2^12 = 4096 的立即常数吗?操作数 2 如果是寄存器,可以有 32 位,但为什么立即数只有 12 位呢?这个数字是从哪里来的?
【问题讨论】:
-
因为如果它有 32 位,就只有一条指令。数字是任意的。这是拥有足够的操作码来做有用的事情和给用户足够的常数范围之间的平衡。
ldr rX, =constant是您可能感兴趣的另一种形式。值 4096 在两条指令中给出了“三字节”掩码。ldr rx, =constant可能被视为加载 32 位值的 64 位指令。 -
同理为什么mips只能有16条固定指令长度
-
ldr rX, =constant术语只是汇编器的辅助语句,不会直接转换为机器码。当constant可以用12 位表示时,它转换为mov rX, #constant。如果不是,则该值存储在汇编器生成ldr rX, [pc, #offset]附近的某个位置 -
@ensc 这正是我的观点。使用
ldr rX, =constant。如果它需要超过 12 位,那么它在代码空间中是 64 位……您可以将其视为 64 位指令。我知道它们不是按顺序排列的,但它们将位于附近。只有关心缓存效果的人才会关心。通常,您应该在热路径之外加载常量。 area 以.ltorg发出,通常称为literal pool。
标签: assembly arm cpu-architecture instruction-set immediate-operand