深入探索AVR内部架构与指令编码
1. 栈操作基础
在Microchip Studio中,若选择了ATtiny45,其SRAM的最后一个字节地址为0x015F。我们可以通过以下操作观察栈操作:
1. 在Columns列表中选择1,然后向下滚动内存窗口,使地址0x015F可见。此时,处理器状态窗口顶部的栈指针应设置为0x015F,指向ATtiny45 SRAM的最后一个字节。
2. 执行PUSH指令将R16压入栈中:
push R16 ; Save R16 to the stack
执行后,内存窗口中地址0x015F处会显示0x5A,这表明R16的值已被压入栈顶。同时,处理器状态窗口中的栈指针会减1,从0x015F变为0x015E。
3. 执行CLR指令清除R16:
clr r16 ; R16 gets modified
这一步模拟了R16被用于其他目的并改变其值的情况。
4. 最后,使用POP指令从栈中弹出值恢复R16:
pop r16 ; Restore R16 from the stack
执行POP指令后,栈指针寄存器会加1,再次变为0x015F,R16将包含从栈中弹出的0x5A。虽然RAM的最后一个字节仍然是0x5A,但由于栈指针指向该字节,当有新值压入栈时,它将被覆
超级会员免费看
订阅专栏 解锁全文
34

被折叠的 条评论
为什么被折叠?



