QUOTE (Giekelberri @ Jan 28 2011, 15:41)

Возникает вопрос где сохраняются переменные i, ch1, ch2?
Поскольку переменные локальные, они создаются на стеке. Однако, если в регистрах есть свободное место - оптимизатор выкинет сохранение на стек и восстановление, таким образом переменная будет жить в регистре. До тех пор, пока вы не попытаетесь взять и передать куда-то адрес переменной - в этом случае компилятор положит ее на стек.
QUOTE (Giekelberri @ Jan 28 2011, 15:41)

Если бы переменных было много (ch3, ch4, ch5, ch6, ...), места в регистрах РОН не хватило бы и тогда был бы задействован стек. В этом случае на вершину стека указывал бы указатель стека, хранящийся в Z-регистре или Y-регистре соответственно.
Это у ИАРа указатель на стек данных хранится в Y. GCC использует один стек и на него указывает регистр спец. назначения (SFR) SP.
QUOTE (Giekelberri @ Jan 28 2011, 15:41)

А каким образом в этом случае известна глубина стека?
Неизвестна. А зачем?
QUOTE (Giekelberri @ Jan 28 2011, 15:41)

Повторю вопрос: а где на самом деле сохраняются эти переменные в Call-used registers или Call-saved ergisters?
Могут быть и в тех и в других. На время вызова функций переменные из call-used регистров временно выгружаются на стек, после возврата - вынимаются из стека обратно в регистры.
QUOTE (Giekelberri @ Jan 28 2011, 15:41)

И как становиться известна глубина стека когда для размещения переменных не хватает регистров общего назначения ?
Компилятору она неизвестна.
QUOTE (Giekelberri @ Jan 28 2011, 15:41)

Счетчик PC помещается в стек, это понятно. а куда помещаются локальные переменные для данной функции? Сначала в регистры общего назначения или сразу в стек?
Вы имеете ввиду параметры? В зависимости от типа и количества - могут передаваться или в регистрах, или на стеке или и там и там.
QUOTE (Giekelberri @ Jan 28 2011, 15:41)

Куда помещается значение, возвращаемое функцией?
Аналогично. Какие-то типы возвращаются в регистрах, другие - через стек.
QUOTE (Giekelberri @ Jan 28 2011, 15:41)

Какое максимальное количество параметров, которое возможно передать функции?
По стандарту их там столько, что вы устанете набирать исходник