nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Провокационный вопрос :)

Стараюсь не лезть в политику и в срачах не участвовать, но всё-таки терминология - вопрос очень серьёзный, надо определиться раз и навсегда:

Как правильнее - в стеке или на стеке???

Я считаю, что оба выражения надо использовать, но означать они должны разное:



Когда мы вызываем процедуру, мы заносим адрес возврата В СТЕК. Так сказать, поверх стопки подносов мы укладываем новый, пока что пустой, и обязуемся туда вниз не залезать - это не наши данные (хотя если нам передают аргументы через стек, то их мы, так и быть, возьмём). И регистры, которые нужно вернуть "в целости и сохранности", мы тоже заносим В СТЕК.

Локальные переменные мы храним НА СТЕКЕ, по крайней мере, так в прошлом посте делала процедура перемножения кватернионов. Не трогая SP (Stack Pointer), просто стала использовать ячейки памяти SP, SP+1, SP+2 и SP+3 для хранения промежуточных результатов. Поскольку она не вызывает другие процедуры, так вполне можно сделать. Нам как бы дали очень тонкий поднос - на нём можно заниматься своими делами, но поставить ещё один поверх нельзя - он нам расплющит всё!

Чтобы одна процедура с локальными переменными могла легко и непринуждённо вызывать другую, принято делать подносы "с бортиками", по кр. мере на x86. Для этого применяется регистр BP - Base Pointer. Мы ручками прикрепляем его к дну подноса, а потом уже "тянем SP вверх", чтобы все наши временные данные влезли (кавычки, потому что в x86 и много где ещё стек висит вверх тормашками). Но даже после этого мне кажется, что локальные переменные лежат НА СТЕКЕ, в том плане, что к ним не действует наше правило "последним вошёл - первым вышел", к ним мы обращаемся в любом порядке, и читаем, и записываем.

В общем "В СТЕКЕ" - это то, что мы сохранили до лучших времён и пообещали не трогать, а "НА СТЕКЕ" наше рабочее место, как всегда захламлённое до невозможности :)

Объяснять, как функционирует программа на ассемблере - дело неблагодарное, а так, глядишь, её словесное описание станет хоть немного построже.

И осталось ещё понять - нужен ли мне BP в Quat Core?
Tags: ПЛИС, бред, кватернионы-это просто (том 1), работа, странные девайсы
Subscribe

Recent Posts from This Journal

  • Нахождение двух самых отдалённых точек

    Пока компьютер долго и упорно мучал симуляцию, я пытался написать на ассемблере алгоритм захвата на ближней дистанции. А сейчас на этом коде можно…

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 6 comments