0

我目前正在阅读有关 avr 汇编程序编程的教程。有说:

位操作 cbr 和 sbr 清除或设置寄存器中的多个位。这些指令仅适用于寄存器 r16 到 r31。它们不使用单个位作为参数,而是使用可以包含多个位的掩码:

sbr r16, (1<<5)+(1<<3) ;set bits 5 and 3 in register 16 
cbr r16,0x03    ;clear bits 1 and 0 in register 16

谁能解释一下这两条指令的参数?为什么我必须写 (1<<5)+(1<<3) 才能设置第 5 位和第 3 位?我猜 << 有点像移位操作。

4

2 回答 2

6

是的, << 是位移。你正在做的是构建一个位掩码,00101000它将设置位 3 和 5,零索引。在您的cbr指令中,您传递了掩码 0x03,即00000011,它将清除位 0 和 1。

于 2013-02-24T11:38:10.750 回答
0

是不是更容易写

ldi r16, 0x28
于 2017-04-11T18:30:19.873 回答