我是手臂编程的新手,我正在尝试理解以下代码的作用:
.macro set_bit reg_addr bit
ldr r4, =\reg_addr
ldr r5, [r4]
orr r5, #(1 << \bit)
str r5, [r4]
.endm
特别是我对orr r5,#(1<< \bit)
部分感到困惑,我理解orr
代表逻辑orr ,但我不确定在给定的上下文中这意味着什么。我认为#(1<<\bit)
看到1是否大于给定位,因此将返回 true 或 false 语句但我不确定{{1} 1}}命令会做。
答案 0 :(得分:0)
你是对的,ORR指令用于执行逻辑OR运算。该指示在本问题的上下文中以下列格式使用 - ORR {注册} {常数}
现在,这里的常数是(1 <&lt;&lt; \ bit),这基本上意味着左移1由\位量。这里的位是0-31之间的数字,它决定了需要设置哪个位。 ARM指令集允许常量也具有这样的移位操作。