Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Выделение памяти на стеке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ не читает файл в Qt http://www.cyberforum.ru/cpp-beginners/thread922622.html
дан фрагмент программы, которая должна читать сведения из текстового файла, но почему-то он этого не делает. может быть кто-нибудь сталкивался с такой проблемой? помогите пожалуйста void help()...
C++ Виртуальные функции Какие происходят изменения, когда в классе объявляем одну или несколько функций виртуальными? Вот, например, если в SuperClass перед функцией Show() написать слово virtual, то что произойдет? ... http://www.cyberforum.ru/cpp-beginners/thread922612.html
Как сделать автоматическое обновление C++
Здравствуйте! Есть программа с функцией обновления через интернет. Проверка обновления и само обновление происходит по нажатию на кнопку. А как сделать проверку обновления при запуске программы?...
Движение змейки C++
Никак не получается сделать движение змейки с последующим присоединением элементов к ней при съедании яблока. Помогите пожалуйста!!! #include <stdio.h> #include <stdlib.h> #include <conio.h>...
C++ std::map и перегрузка оператора http://www.cyberforum.ru/cpp-beginners/thread922588.html
решил освоить стандартные контейнеры и очередь за "map" нахожу на http://en.cppreference.com/w/cpp/container/map замороченный код, сокращаю его, чтоб читалось, работает. Но как? Здесь по-видимому...
C++ Наследование статической переменной есть класс с статистическим полем я от него "произвожу" два потомка. у всех этик классов будет одно общее поле(переменная) или же у каждого своё? подробнее

Показать сообщение отдельно
sharpey
138 / 128 / 21
Регистрация: 21.09.2008
Сообщений: 401
14.07.2013, 07:46
Есть превосходно написанная, свободно распространяемая книга Столярова Андрея Викторовича "Программирование на языке ассемблера NASM для ОС Unix". В параграфе 2.6 рассмотрены все интересующие Вас детали.
Вообще аналогию стека как стопки листов (патронов в рожке автомата, стопки тарелок и т.п.) считаю крайне неудачной. Указатель стека - это лишь значение регистра SP/ESP на ячейки памяти, где размещаются данные. Из истории: регистр специального назначения R6 в 16-битном процессоре PDP-11 ныне почившей фирмы DEC выполнял то же самое действие (эх, прекрасный у них был ассемблер вместо уродливого Intel'овского). В процессоре PDP-11 была команда
Assembler
1
mov R0,-(SP)
что эквивалентно Intel x86
Assembler
1
push AX
при этом значение указателя стека уменьшается на размер операнда ДО выполнения операции, а извлечение из стека
Assembler
1
mov (SP)+,R0 / pop AX
приводит к изменению указателя стека ПОСЛЕ выполнения операции. Поэтому аналогия типа "для извлечения четвёртой тарелки из стопки от вершины стека мы берем третье слово (поскольку счёт идёт от нуля)"
Assembler
1
mov AX, DWORD PTR [SP+((4-1)*2)]
даёт искажённое представление, т.к. в этой аналогии нет возможности взять четвёртую тарелку из воздуха (т.е. адресоваться по отрицательному смещению, а это возможно).
Знание о том, как работает стек, нужно при рассмотрении работы подпрограмм (call, enter, leave), сохранении/восстановлении всех регистров (pusha/popa).

В свободное время неспешно читаю восьмисотстраничную "Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software" авторов Michael Sikorski и Andrew Honig, вышедшую в 2012 году в издательстве No Starch Press, Inc. - про анализ зловредов. Затрагивается в т.ч. передача параметров в функцию соглашениями cdecl, pascal (stdcall), fastcall. Изумительная книга, даже несмотря на то, что написана на английском. Рекомендую к прочтению, хотя бы для общего развития. В Сети легко находится её электронный вариант.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru