所以,我正在学习黄氏教科书中的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.
这似乎与示例试图做的事情无关。我错过了什么,还是应该通知出版商?
答案 0 :(得分:1)
指令应为subi r0, 10
,或“立即减去”以从寄存器r0中减去值10。
所有立即地址指令都是指代字面上的数字,而不是指向寄存器的其他寻址模式,或者是存储在索引寄存器(如X或Y等)中的地址的偏移量。
例如,ld r0, X
加载存储在X中存储的地址的值,此处为0x2000。 (它不会将0x2000加载到r0中。)