【问题标题】:Single instruction to load shifted immediate value into a register?将移位的立即值加载到寄存器中的单条指令?
【发布时间】:2020-07-13 05:35:53
【问题描述】:

我似乎无法找到一种方法,通过一条指令将立即值放入寄存器中的不是最低位的位置。

例如,假设您希望您的寄存器为r1 = 0x00110000。然后,一个多指令的方式来做到这一点。

mov r1, #0x11
lsl r1, #16

我正在使用几种设备,其中一些设备允许立即值高达 32 位,但大多数不允许,所以我只能使用基本的 ARM 指令。

【问题讨论】:

  • 从文字池中加载是一条指令,但大小并不小。不清楚你的目标是什么。
  • 等等什么?您的标题说存储到内存(AFAIK 所有 ARM 存储指令都使用任何备用位来寻址模式偏移,而不是立即存储数据)。但是你只是在谈论加载一个立即值到一个寄存器mov r1, #0x11 << 16 组装好;用那个。我认为 Thumb2 模式允许旋转 8 位立即数,并且您的汇编程序知道如何编码任何可编码的立即数。
  • 啊,谢谢@PeterCordes!我什至没有考虑过使用那个符号!是的,标题有错误,我现在改正它
  • 或者你可以直接使用ldr r1, =0x00110000,让汇编器来整理。

标签: assembly arm instructions


【解决方案1】:

让您的汇编程序为您编码移位/旋转,方法是给它0x00110000 值。

大多数汇编器(包括所有 ARM 汇编器?)都支持汇编时常量表达式,因此您可以编写

mov r1, #0x11 << 16

这将在 ARM 模式下汇编到 11 18 a0 e3。但在 Thumb 模式下,它需要 ARMv6 Thumb2。请参阅http://www.keil.com/support/man/docs/armasm/armasm_dom1361289878994.htm 了解可用的 MOV 形式。

可能更好的选择是 LDR 伪指令,它允许汇编器在 PC 相对加载(来自文字池)或带有某种编码的 mov-immediate 之间进行选择。 http://www.keil.com/support/man/docs/armasm/armasm_dom1359731145835.htm(这是 keil 的汇编器文档,但 GAS 和 clang 也支持相同的语法。)

ldr r1, =0x11 << 16

我正在使用多种设备

考虑为每个设备重新构建,以便您可以针对每个设备优化代码。特别是如果您使用ldr reg, =value - 它可以在可用时使用mov.w reg, #imm16

其中一些允许立即值高达 32 位

如果您谈论的是 ARMv6T2 movt / movw,那就是两条 32 位指令,每条指令提供一个 16 位的一半。

没有 ARM 能够用一条指令对任意 32 位常量进行编码;这将不会为 32 位指令中的操作码留下任何位。

【讨论】:

  • 不是单条指令 - 我会通过添加“或不是任意值”来纠正。可以使用移位器生成特定范围的 32 位立即数(在 ARM32 和 Thumb2 之间以多种不同的方式)。有关 Thumb-2,“4.2 立即数”,请参阅 here
  • @tum_:我的意思不是 任意 32 位立即数。是的,ARM 立即数并不总是简单的零扩展或符号扩展,因此可编码值不仅仅是一个连续的 0..n 范围。对我来说,“高达 32 位的立即数”意味着 4 字节的立即数,这显然是无稽之谈。 x86 可以做到这一点,ARM 不能。但无论如何,我找到了一种更清晰的表达方式,谢谢。
  • 是的,我明白你的意思,@Peter。添加此评论主要是为了引起 OP 的注意,因为他们似乎专门询问“移位立即数”(原因我不知道),并且还提到了“几个设备”,但没有提供更多细节。
  • 并非所有汇编程序都支持该语法,但对于 gas,至少 ldr r0,=something 将在可能的情况下转换为 mov 对于该指令集,如果可能,它将从附近的池中加载值。虽然伪代码是最简单的方法,但不必详细了解特定值(对于每个指令集)可以做什么或不可以做什么。
  • @old_timer:我想;我变得懒惰,并没有寻找重复。如果你知道一个好的,我仍然可以关闭它。 (或者关闭它们作为这个的副本,如果我们没有一个好的规范,可以添加更多的链接。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2014-04-29
  • 2018-02-18
  • 2020-11-21
  • 2022-11-17
相关资源
最近更新 更多