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

时间:2017-08-23 22:12:54

标签: assembly avr atmel

所以,我正在学习黄氏教科书中的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.

这似乎与示例试图做的事情无关。我错过了什么,还是应该通知出版商?

1 个答案:

答案 0 :(得分:1)

指令应为subi r0, 10,或“立即减去”以从寄存器r0中减去值10。

所有立即地址指令都是指代字面上的数字,而不是指向寄存器的其他寻址模式,或者是存储在索引寄存器(如X或Y等)中的地址的偏移量。

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