AVR 有ADC
(带进位加法) 和ROL
(带进位左移) 指令。
然而,在我看来,这ROL
完全没有必要,而且ADC r, r
目的相同。
据我所知,ADC r, r
和的ROL r
结果都是(r << 1) | carry
。对于两者,进位都设置为操作数的MSB。
以下是一个例子:
r = 0x12 = 0001_0010
,carry = 0
ADC r, r
r = 0010_0100 = 0x24
carry = 0
ROL r
r = 0010_0100 = 0x24
carry = 0
直观地讲,将寄存器加到自身就是将其乘以二,这与左移一相同。ADC
同时还添加了进位,这成为结果的新 LSB。
那么 even 是什么意思呢?和ROL
之间有语义差异吗?我相信和也
可以得到同样的结论。ROL r
ADC r, r
ROR
SBC