Assembly 教科书示例中的可疑错误-Atmel程序集
所以,我在学习黄老师的教科书中的Atmel AVR组装。书中有以下示例:Assembly 教科书示例中的可疑错误-Atmel程序集,assembly,avr,atmel,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 f
// 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中。)非常正确-并且XL和XH是X的一部分,而不是Y的一部分(注释有误导性)。有人把事情搞混了。我的示例解决方案中最初是Y,但我改为反映本书的示例解决方案(使用X)。我想我错过了评论。现在修理