【发布时间】: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