1.Не как не могу понять для чего нужен стек?
Стек - это определенным образом организованная часть ОЗУ, организация по принципу (первым зашел - последним уйдешь. Представьте как народ в тупик набивается). У стека есть указатель стека - он всегда указывает на первую свободную ячейку ОЗУ. А теперь для чего он нужен. Когда выполняется код - он выполняется шаг за шагом. Когда встречается команда "вызов подпрограммы" - эта размеренность прерывается, нужно прыгнуть в эту подпрограмму. Так вот в стеке запоминается адрес возврата из подпрограммы, чтоб не забыть в какое место возвращаться. Также в стеке можно хранить содержимое регистров.
2.что за регистры xyz и вообще по ним я ничего не понял.
Это парные регистры-указатели. В них можно загрузить адрес ОЗУ и специальными командами писать данные в ОЗУ по этим адресам.
3.что это такое LDI ZL,low(M2)
LDI ZH,High(M2)
М2 - это метка, которая при компилиции станет адресом. Хай и лоу - это спецслова асемблера, которые двухбайтный адрес разбивают на два куска для записи в два однобайтных регистра.
4.Зачем вообще надо перепрыгивать с одной строчки памяти на другую,если можно просто ставить метки.
Вопрос не понял. Метки использовать можно и нужно, прыгать без меток, задавая прямо адрес - не хорошо. Такой код можно увидеть в листингах сишных программ - там меток никто ставить не будет, метки - это для людей.
5.не смог понять для чего это нужно да и что это вообще такое? http://easyelectronics.ru/img/AVR_kurs/new/ak8.gif
Эта картинка всего лишь говорит, что регистры - это всего лишь ячейки ОЗУ по определенным адресам, к которым можно обращаться по имени.
6.Для чего ставиться в некоторых местах знак $?
Этот знак - признак 16-тиричного числа. Можно заменить 0х, но это ведь два символа.
7.И вообще я не понял самой сути регистров, то есть регистры это все? я могу назначить константу регистром потом удалть и назначить регистром что-то другое? Можно ли вообще создать переменную x и присвить ей какое-то значение или слово?
Регистр - это именованная ячейка памяти, расположенная в ОЗУ по определенному адресу. В ней можно хранить байт данных, читать и писать. А что эти данные означают - решает программист.
8.почему стек записывается с конца озу, а не просто в отдельной памяти? почему ее нету?
В некоторых моделях авр нет ОЗУ вообще, а стек есть (аппаратный). Для них можно писать только на асемблере. В остальных стек не вынесен отдельно и это очень удобно: вы сами его помещаете куда хотите и сами следите за ним. В конец памяти стек помещают чтобы не заботиться о его переполнении (так он получается максимального размера).
9.не могу понять что такое прерывания, обьясните простым и доступным языком.\
Прерывания - это процесс прерывания выполнения основной программы для выполнения каких-либо действий, требующих немедленной реакции. Допустим у вас индикатор с динамической индикацией. Периодически надо зажигать новое знакоместо. Вообще прерывания позволяют иметь квазимультизадачность (в каждый момент времени делается только одно действие, все действия выполняются по очереди, очень быстро, поэтому кажется что одновременно).
10. к каким ножка в atmega16a-pu подключать кварц? Зачем он нужен? почему к кварца такие значения до тысячных для чего это нужно?
Пока все, дальше - больше.
Заранее спасибо.
К каким ногам подключать - смотрите в даташите, на второй странице рисунок. Кварц нужен для синхронизации работы МК, потому что в нем все должно быть синхронно: в определенные моменты времени должны выполняться определенные действия. Все кварцы имеют конкретную частоту, очень точно поддерживаемую производителем. Поэтому столько цифр после запятой.