教科书示例中的可疑错误 - Atmel Assembly
Posted
技术标签:
【中文标题】教科书示例中的可疑错误 - Atmel Assembly【英文标题】:Suspected error in textbook example - Atmel Assembly 【发布时间】:2017-08-23 22:12:54 【问题描述】:所以,我正在从 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.
这似乎与示例试图做的事情无关。我错过了什么,还是应该通知发布者?
【问题讨论】:
非常正确 - XL 和 XH 是 X 的一部分,而不是 Y(该评论具有误导性)。有人把事情搞混了。 在我的示例解决方案中最初是 Y,但我改为反映本书的示例解决方案(使用 X)。我想我错过了评论。立即修复 【参考方案1】:该指令应为subi r0, 10
,或“减立即数”以从寄存器 r0 中减去值 10。
所有立即地址指令都指的是指令中的字面数字,而不是其他指代寄存器的寻址模式,或者与存储在索引寄存器中的地址的偏移量,例如 X 或 Y 等。
例如,ld r0, X
加载存储在 X 中存储的地址的值,这里是 0x2000。 (它不会将 0x2000 加载到 r0 中。)
【讨论】:
以上是关于教科书示例中的可疑错误 - Atmel Assembly的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 USB 上的示例程序对我的 atmel 开发板进行编程
【求助】关于UF_ASSEM_add_part_to_assembly