Получить значение переменной из стека

Я пытаюсь больше понять, как работает стек внутри.

Я хорошо понимаю, что такое стек, что такое куча и как они сравниваются. На данный момент меня не интересует, как используется стек при вызове другой функции и последующем возврате из этой функции.

Я хочу знать, как локальные переменные хранятся в стеке и как они извлекаются.

Итак, стек - это массив байтов. Также должно быть где-то сохранено значение, отслеживающее текущую позицию в стеке. Я не знаю, где он хранится и как он называется, но пока давайте назовем его POS.

Я начинаю с чистого листа с пустым стеком и POS=0.

Я объявляю переменную A как 16-битное целое число и присваиваю значение 5. Теперь первые 2 байта стека заняты, они содержат значение 5 и POS=2.

Я объявляю переменную B как массив длины A из 16-битных целых чисел. Теперь следующие 10 байтов стека также заняты, они содержат массив длиной 5, где каждый элемент в массиве имеет длину 2, а POS=12.

Я объявляю переменную C как 32-битное целое число и присваиваю значение 0. Теперь следующие 4 байта стека тоже заняты и POS=16.

Я объявляю переменную D как 16-битное целое число, и теперь POS=18.

На этом этапе я хочу вывести значение C. Когда мы смотрим на инструкции ассемблера, как программа узнает, какие 4 байта следует читать из стека? Откуда он знает, что C начинается с позиции 12?

0 ответов

Другие вопросы по тегам