教科书示例中的疑似错误 - 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。)
所以,我正在学习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。)