ИМХО, все-таки Y инициализирован и именно значением == SP
или я не прав и это не всегда так ?
или я не прав и это не всегда так ?
В прологе выполняеться следующий псевдокод:
FP = SP
FP = FP - <frame_size>
SP = FP
где:
FP - Frame Pointer, размещаеться в регистре Y
SP - Stack Pointer
frame_size - размер памяти необходимой для хранения локальных переменных.
адреса [FP+1...FP+1+frame_size] - локальный фрейм функции.
Для всех функций, которые имеют фрейм, FP = SP, и регистр FP(Y) используется в качестве базового для доступа к локальным переменным. В AVR архитектуре SP не может быть базовым регистром. Если функция не имеет фрейма регистр Y(FP) в прологе не инициализируется, и свободно используется компилятором в теле функции.
Если функция naked и не имеет пролога, то FP не может быть навен SP. Если только случайно
Анатолий.