Цитата(IgorKossak @ Nov 16 2006, 21:39)

Цитата
Была задача получить текущий адрес выполнения программы – программный счетчик PC.
SP указывает на место куда в следующий раз будет сохранён байт (pop) или адрес (call).
Поэтому надо модифицировать SP (чтобы он указывал на место в стеке, где лежит сохранённый адрес) и после этого РАЗЫМЕНОВАТЬ его, т. е. взять значение, лежащее в стеке (а не в SP и уж тем более, не во __flash).
Да, Вы правы... А что по поводу вот такого варианта?
Код
19 unsigned int __flash *OutSaveContekst(void)
\ OutSaveContekst:
20 {
21 return (unsigned int __flash *)(*(unsigned int *)(SP + 2));
\ 00000000 B7ED IN R30, 0x3D
\ 00000002 B7FE IN R31, 0x3E
\ 00000004 9632 ADIW R31:R30, 2
\ 00000006 8100 LD R16, Z
\ 00000008 8111 LDD R17, Z+1
\ 0000000A 9508 RET
22 }