使用 cortex-m0 指令集写入寄存器的两个(例如)位的最有效方法是什么?

问题描述 投票:0回答:1

简单的例子。我们想要在寄存器的最右位写入“01”位。 我们应该分别重置“0”位和设置“1”位吗?有没有办法在一条指令中完成它?

例如,如果寄存器的值为 0x11000002:最右位是“10”,最后应该是 0x11000001:最右位是“01”,其余位保持不变。

assembly cortex-m
1个回答
0
投票

我认为你不能比三个指令做得更好:

        @ set least 3 bits of R0 to 01
        movs r1, #3
        bics r0, r1    @ clear least two bits of R0
        adds r0, #1    @ set LSB of R0

如果在循环中执行此操作,则可以将每次迭代两条指令的恒定负载提升到循环之外。

© www.soinside.com 2019 - 2024. All rights reserved.