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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2014, 01:23   #11
Malriser
xor esp, esp
Форумчанин
 
Регистрация: 11.02.2014
Сообщений: 135
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Да, наверное, об одних. А где хранятся локальные переменные? Мы не работаем со стеком в привычном понимании (push, pop). Но локальные лежат на нем? Ну то есть вот взяли ebp, который указывает на начало текущего фрейма (на сохраненный ebp). Прибавили к значению отрицательное число. И теперь имеем адрес локальной переменной, расположенной на стеке?

UPD
Из вики (http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax):
Код:
movl    -4(%ebp), %eax           # Typical example: load a stack variable into eax
хм, да и правда об одних.

Извиняюсь, я просто сначала не понял.

Да и лучше, автору поста будет из чего выбирать


UPD:

вот что еще можно про стековые переменные автору поста прочитать http://habrahabr.ru/company/abbyy/blog/131713/


Так что мы с вами оба неверно судили об этом.

Вы говорили, что эти переменные в стеке, а они находятся поверх стека.

Я говорил, что в секции .data. ( забыл про такую штуку как локальные переменные я на тот момент, когда спорить с вами начал ) // прям стихами

Последний раз редактировалось Malriser; 18.02.2014 в 01:29.
Malriser вне форума Ответить с цитированием
Старый 18.02.2014, 01:28   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Да ничего страшного. И ТСу будет полезно, согласен. Я там кривовато написал, что происходит в программе (нужно было куски кода кидать сразу) - косноязычие к ночи возрастает
Пожалуй, добавлю куски кода:
1)
Код:
main()
{
   int k = 1;
}
Код:
	movl	$1, -4(%ebp)
2)
Код:
main()
{
1;
}
ничего
3)
Код:
main()
{
   int x, y;
   y = 1;
   x = y;
}
Код:
	movl	$1, -8(%ebp)
	movl	-8(%ebp), %eax
	movl	%eax, -4(%ebp)
UPD
Спасибо за статью, полистаю, просвещусь.
У нас был ассемблер NASM полгода, так что знания скудноваты
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 18.02.2014 в 02:00.
BDA на форуме Ответить с цитированием
Старый 18.02.2014, 02:21   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Поэтому, нет, не со стеком, а с локальными переменными непосредственно работа идет.
сейчас блевану я.

а mov ebp,esp не заметили да?
со стеком она работает, все верно говорил товарищ, локальные переменные лежат на стеке, никакие секции там не участвуют(иначе бы процедуру нельзя было вызвать ни рекурсивно, ни в два потока и тп)

Цитата:
Вы говорили, что эти переменные в стеке, а они находятся поверх стека.
не поверх, а именно в стеке.
отсутствие push/pop не значит что нет работы со стеком.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 18.02.2014 в 02:23.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.02.2014, 12:13   #14
Malriser
xor esp, esp
Форумчанин
 
Регистрация: 11.02.2014
Сообщений: 135
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
сейчас блевану я.

а mov ebp,esp не заметили да?
со стеком она работает, все верно говорил товарищ, локальные переменные лежат на стеке, никакие секции там не участвуют(иначе бы процедуру нельзя было вызвать ни рекурсивно, ни в два потока и тп)

не поверх, а именно в стеке.
отсутствие push/pop не значит что нет работы со стеком.
Хватит нам обоим блевать

Где это вы регистр esp увидели? Я только ebp и eax вижу.

Но в любом случае я не прав, а вы правы. Вчера уже поздно было, еще раз убедился, что ночью лучше на форум не заходить

UPD: все вижу, но к функции main вроде бы mov ebp, esp не относится.

Если опять не прав, прошу простить и просвятить
Malriser вне форума Ответить с цитированием
Старый 18.02.2014, 12:22   #15
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
но к функции main вроде бы mov ebp, esp не относится.
Относится. Это один из вариантов стандартного пролога для функций (мейн не исключение):
Код:
	pushl	%ebp
	movl	%esp, %ebp

//тут работа с локальными переменными в стеке через адресацию с -/+ размер

Последний раз редактировалось p51x; 18.02.2014 в 12:25.
p51x вне форума Ответить с цитированием
Старый 18.02.2014, 13:17   #16
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

спасибо всем)
Pein95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменные glazik Общие вопросы Delphi 2 21.02.2012 21:05
Переменные Карен Помощь студентам 1 01.06.2011 17:16
Переменные экземпляра,класса, константы и переменные cop08 Общие вопросы .NET 3 20.12.2010 21:56
переменные Артэс Общие вопросы C/C++ 11 23.06.2009 12:12