реклама на сайте
подробности

 
 
> Что такое СТЕК и с чем его едят?, Знающим просьба пояснить простые истины......
Potter
сообщение Feb 23 2007, 01:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 151
Регистрация: 27-05-06
Из: Харьков
Пользователь №: 17 508



Пять лет успешно программля на С. Пришло время.... Пришлось сталкнуться с ассеблером. Все понятно... Вот только не пойму я что такое СТЕК? Поясните пожалуйста особо популярно что это такое? Как он работает? И что в нем по обыкновению храниться? И почему без операций:

ldi r16, high(RAMEND)
out SPH, r16

ldi r16, low(RAMEND)
out SPL, r16

Конроллер МЕГА128 нормально не работает?

Заранее огромное спасибо.......
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Feb 23 2007, 03:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Если быть более точным, то направление куда "ползёт" стек определяется схемотехникой CPU. Действительно чаще он ползёт вниз и это очень удобно. В то же время, например в 8051 он ползёт вверх и устанавливается аппаратно. То есть приведённых вами команд инициализации можно и не делать.

Куча (Heap) в Си или другом языке программирования - напротив вещь не аппаратная и приведение каких-нибудь сравнений, аналогий и примеров, как мне кажется неуместно. Тем более если правильно ей пользоваться. Хотя указание, что нарушение стека ведёт к трудно находимым ошибкам совершенно правильно!

Причина неверной работы с подпрограммами и прерываниями при отсутствии инициализации стека не при входе в прерывание, а при выходе из него. Так как подставляется не тот адрес возврата.


Отмечу ещё одно место, где стек совершенно необходим! Без него просто нельзя (не аппаратный так программный). Это рекурсия. То есть вызов процедурой самой себя (при правильном написании).

В завершение скажу что компилятор СИ от IAR использует два стека. Аппаратный и программный. На сколько я понял программный используется для удобства работы с переменными расположенными на стеке. (чаще всего это параметры процедур).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Potter   Что такое СТЕК и с чем его едят?   Feb 23 2007, 01:13
- - Alex B._   >> Пять лет успешно программля на С успешно?...   Feb 23 2007, 01:43
|- - Potter   Цитата(Alex B._ @ Feb 23 2007, 02:43) усп...   Feb 23 2007, 09:39
|- - Dog Pawlowa   Цитата(Potter @ Feb 23 2007, 10:39) Я про...   Feb 23 2007, 09:54
|- - aleksey_g   Цитата(Potter @ Feb 23 2007, 08:39) Я про...   Feb 23 2007, 12:28
|- - defunct   Цитата(Potter @ Feb 23 2007, 08:39) Цитат...   Feb 23 2007, 13:32
- - rezident   Стек (Stack) в переводе "палка". В приме...   Feb 23 2007, 03:08
|- - =GM=   Цитата(rezident @ Feb 23 2007, 00:08) Сте...   Feb 23 2007, 03:35
|- - Dopler   Цитата(=GM= @ Feb 23 2007, 03:35) Цитата(...   Feb 23 2007, 12:02
|- - =GM=   Цитата(Dopler @ Feb 23 2007, 09:02) Госпо...   Feb 23 2007, 13:56
|- - osnwt   Цитата(=GM= @ Feb 23 2007, 12:56) А пошло...   Feb 23 2007, 16:56
||- - defunct   Цитата(osnwt @ Feb 23 2007, 15:56) Но это...   Feb 23 2007, 17:15
||- - osnwt   Цитата(defunct @ Feb 23 2007, 16:15) Цита...   Feb 23 2007, 17:50
||- - defunct   Цитата(osnwt @ Feb 23 2007, 16:50) участк...   Feb 23 2007, 18:39
||- - osnwt   Цитата(defunct @ Feb 23 2007, 17:39) Плох...   Feb 24 2007, 00:04
|- - Dopler   Цитата(=GM= @ Feb 23 2007, 13:56) Прошу п...   Feb 23 2007, 23:06
- - beer_warrior   Еще вдогонку - через стек передаються в функцию ...   Feb 23 2007, 09:49
- - SasaVitebsk   Соглашусь с defunct. Ошибки в компиляторах и опер...   Feb 23 2007, 22:20


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016