位操纵avr汇编

Moo*_*lit 0 assembly avr

我目前正在阅读有关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
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*hon 6

是的,<<是比特换档.你正在做的是构造一个位掩码00101000,它将设置位3和5,零索引.在你的cbr指令中,你传递掩码0x03 00000011,即清除位0和1.

  • 你说对了.在你的例子中,它们被加在一起,但实际上更好的做法是将它们组合在一起,如下所示:(1 << 5)|(1 << 3).原因是因为如果你不小心做了这样的事情:(1 << 3)+(1 << 3),你会得到16,即1 << 4,你会设置错误位! (4认同)