assembly - ARM 的 MOV 指令如何以大数作为第二个操作数?

标签 assembly arm cpu-architecture machine-code immediate-operand

我刚开始学习ARM汇编语言,不清楚如何使用MOV将立即数转移到寄存器中。
从 ARM 引用手册和我的教科书中,都说 MOV 指令后面的立即数范围是 0-255。但是当我在自己的 PC 上使用 ADS 1.2 IDE 进行测试时,指令

MOV     R2, #0xFFFFFFFF
表现良好。根据规范,数字 0xFFFFFFFF 是否超出范围?

最佳答案

一条 ARM 指令只能编码一个立即数,该常数可以表示为一个 8 位立即数,按 2 的任意偶数次幂移位。

不过也有MVN指令,类似于 MOV但反转所有位。所以,虽然 MOV R2, #0xFFFFFFFF不能编码为 MOV指令,可编码为MVN R2, #0 .汇编器可能会很好地为您执行此转换。

关于assembly - ARM 的 MOV 指令如何以大数作为第二个操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2624471/

相关文章:

c - C 或 Assembly 中是否有可用的定点表示

linux - Ubuntu 16.04 中的 Eclipse 交叉编译

ios - 编译错误 : #error "This file should be compiled in ARM mode only."

c - 我应该知道什么来优化程序?

c - 如何在 __asm__ 中使用 int?

assembly - ARM 汇编代码和 SVC 编号

gcc - 使用 gcc 在 ARM Cortex M4 上交换备用字节的最快方法

performance - AVX512中 "masked"存储的粒度是多少?

cpu-architecture - CPU的可寻址内存

arm - 哪些 ARM 架构具有乱序执行功能?