教科书示例中的疑似错误 - Atmel Assembly

Suspected error in textbook example - Atmel Assembly

所以,我正在学习Huang的课本中的Atmel AVR汇编。书中有如下例子:

// Subtract 10 from mem(0x2000)

ldi  XL,        0x00        ; Load mem(0x2000) into X
ldi  XH,        0x20        ;
ld   r0,        X           ; Load the value into r0
sbi  r0,        10          ; Subtract 10 from r0.
st    X,        r0          ; Store the result back in mem(0x2000)

这不是不正确吗?第 4 行实际上不应该是 subi,而不是 sbi.

sbi 的文档如下:

Description:
Sets a specified bit in an I/O register. This instruction operates on the 
lower 32 I/O registers - addresses 0-31.

这似乎与示例的目的完全无关。我是不是错过了什么,或者我应该通知发布者?

指令应该是subi r0, 10,或者"subtract immediate"从寄存器r0中减去值10。

所有立即数地址指令都是指指令中的字面数字,这与其他引用寄存器的寻址模式相反,或者与存储在变址寄存器(如 X 或 Y 等)中的地址的偏移量不同

例如,ld r0, X 加载存储在 X 中存储的地址处的值,此处为 0x2000。 (它不会将 0x2000 加载到 r0。)