【发布时间】:2011-10-07 13:02:00
【问题描述】:
我正在编写 ARM 汇编代码,有时必须将寄存器的一位设置为 1。当然,最好通过“register-or-bitmask”方法来完成。但是,根据 ARM 文档,Assembly ORR 命令(按位或)确实不采用立即值。换句话说,您只能将一个寄存器中的值与另一个寄存器中的值按位或。仔细想想,这是有道理的,因为 ARM 指令本身就是 32 位长,因此无法将 32 位掩码塞进指令中。但是,将立即值写入寄存器只是为了正确使用它是低效的,因为它会产生read-after-write 危险,从而使 CPU 停顿。一般来说,ORR 带有掩码的寄存器的最有效方法是什么,而不会浪费寄存器不断地将掩码保存在内存中? ARM 有什么推荐吗?
【问题讨论】:
-
您的目标处理器是什么? Cortex-M3 有一个bit-banded 内存区域,如果您有该选项,这是执行此操作的最佳方式。
标签: assembly arm bitwise-operators pipeline