Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2014, 09:25   #1
pokosmosu22
Новичок
Джуниор
 
Регистрация: 29.09.2014
Сообщений: 2
Радость Стек сопроцессора (вопрос внутри)

Ассемблер
Друзья, не могу до конца разобраться с работой стека.
В стек загружаются данные последовательно, последняя загруженная переменная становится вершиной стека, верно? Можно ли в дальнейшем при помощи какой либо команды изменить вершину стека, не загружая новых переменных, а используя лишь имеющиеся, т.е. собственно вопрос в том, как назначить вершина стека?
pokosmosu22 вне форума Ответить с цитированием
Старый 29.09.2014, 09:49   #2
Kokarnit
 
Регистрация: 08.08.2014
Сообщений: 7
По умолчанию

Регистр SP - это как я помню - stack pointer. Он и указывает на вершину стека. Попробуй изменить его.
Kokarnit вне форума Ответить с цитированием
Старый 30.09.2014, 11:50   #3
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,830
По умолчанию

Цитата:
Сообщение от pokosmosu22 Посмотреть сообщение
Можно ли в дальнейшем при помощи какой либо команды изменить вершину стека, не загружая новых переменных, а используя лишь имеющиеся, т.е. собственно вопрос в том, как назначить вершина стека?
В обычной практике программирования вершину стека не меняют, поскольку в нем хранятся и адреса возврата, так что можно нарваться на AV. Чаще всего компиляторы используют другой регистр для косвенной адресации к данным стека, обычно это EBP.
Код:
procedure AsmProc(A, B, C, D: Integer);
asm
        MOV EAX, D; // транслируется в MOV EAX, [EBP+8]
end;
Любая процедура/функция на Delphi, даже ассемблерная, имеет пролог и эпилог, если использующая стековый кадр, как в нашем примере. В ассемблерном подстрочнике можно явно видеть пролог и эпилог:
Код:
asm
        PUSH EBP
        MOV EBP, ESP
        // тело процедуры
        POP ESP
        RET
end;


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

Последний раз редактировалось Vapaamies; 30.09.2014 в 11:53.
Vapaamies вне форума Ответить с цитированием
Старый 30.09.2014, 14:44   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

FDECSTP : вершина--
FINCSTP : вершина++

FLDENV : если правильно определить fpu status word, то можно значение вершины задать как хочется

Последний раз редактировалось f.hump; 30.09.2014 в 14:57.
f.hump вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Информатика. Вопрос внутри. BesQ Помощь студентам 12 02.05.2013 13:09
дарова мужики . вопрос внутри. ромик0 Общие вопросы C/C++ 4 02.07.2011 21:48
Стек. Калькулятор + польская запись. Вопрос! Бунтарь Паскаль, Turbo Pascal, PascalABC.NET 8 20.12.2010 01:58
стек внутри стека zhenya.ya Помощь студентам 0 05.05.2010 20:15
вопрос внутри g1m Помощь студентам 8 24.02.2008 15:05