装配堆栈指针AVR

时间:2014-10-11 04:35:31

标签: assembly arduino stack microcontroller avr

大家好,我有一个简单的问题,但是我还没有回答。我很感激这方面的一些帮助:

LDI R31, 0 

我不太确定这是做什么的,但在此之前我将堆栈指针加载到等于$ 08且低等于$ 5F(我知道这是我的内存结束的RAMEND定义Arduino的)。有人可以解释这将对堆栈/堆栈指针做什么?我知道R31用作高字节,但我不确定这对我当前的一堆值有什么影响。

这只是我作业的一小部分,但我觉得理解这一点至关重要。 谢谢!

1 个答案:

答案 0 :(得分:2)

R31是Z寄存器的一部分,是R31:R30的别名。某些汇编指令使用X,Y和Z寄存器进行间接寻址。请参见AVR instruction Set. LDI R31, 0设置寄存器31到0.它对堆栈或堆栈指针没有影响。

看起来你正在查看一些汇编代码,特别是在程序开头附近。通常,这是C运行时初始化堆栈指针和RAM等的地方。程序中初始化的源代码中的变量将其初始值从程序代码末尾附近的数据部分复制到RAM中,变量实际驻留在RAM中。 Z寄存器可用于此目的,因为它可以轻松遍历程序数据。