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 подключать кварц? Зачем он нужен? почему к кварца такие значения до тысячных для чего это нужно?
Пока все, дальше - больше.
Заранее спасибо.
К каким ногам подключать - смотрите в даташите, на второй странице рисунок. Кварц нужен для синхронизации работы МК, потому что в нем все должно быть синхронно: в определенные моменты времени должны выполняться определенные действия. Все кварцы имеют конкретную частоту, очень точно поддерживаемую производителем. Поэтому столько цифр после запятой.