|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.02.2014, 23:22 | #1 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 881
|
Переменные
Код:
Я знаю, что переменной k присваивается 1, но на более низком уровне что происходит? Код:
|
17.02.2014, 23:48 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,285
|
Насколько низкий уровень-то нужен?
Если посмотреть дизассемблированный код, то в первом случае будет положена единица на стек, а во втором не произойдет ничего (будто была скомпилирована программа ниже). Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
17.02.2014, 23:58 | #3 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 881
|
x = y;
результатом єтого будет lvalue так? ну примерно такой уровень и нужен. Спасибо за второе задание) |
18.02.2014, 00:16 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,285
|
В таком коде:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
18.02.2014, 00:25 | #5 | |
xor esp, esp
Форумчанин
Регистрация: 11.02.2014
Сообщений: 135
|
Как бы на самом деле, то по адресу переменной будет занесена единичка. Адрес переменной находится в секции .data.
Пример: Код:
Стек то тут не причем. Стек будет при том, если у нас будет такой код: Код:
Код:
Только вот minGw генерирует немного другой код: Код:
Цитата:
Код:
Не проще ли Код:
Последний раз редактировалось MaTBeu; 18.02.2014 в 03:01. |
|
18.02.2014, 00:28 | #6 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 881
|
спасибо за ответ)
|
18.02.2014, 00:40 | #7 |
xor esp, esp
Форумчанин
Регистрация: 11.02.2014
Сообщений: 135
|
Вот что мне на ваш код сгенерировал MingW.
1) Переменная еще не инициализирована, видим что в ней в итоге будет мусор. ( поэтому переменные и надо инициализировать ) 2) Инициализируем переменную занося туда единичку. ebp+var_4 - в итоге будет смещение от текущего значения ebp на значение из var_4 |
18.02.2014, 01:00 | #8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,285
|
Не надо. Лучше объясните.
Обещаю, что не буду спорить, если неправ. Код:
Код:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
18.02.2014, 01:09 | #9 | |
xor esp, esp
Форумчанин
Регистрация: 11.02.2014
Сообщений: 135
|
Цитата:
Но movl -8(%ebp), %eax напоминает смещение на 8 байт относительно значение ebp. Сейчас скомпилирую и дизассемблирую в интеловский синтаксис, тогда расскажу. Код:
Картинка из инета: Тут мы видим, что в ebp находится адрес начала секции где находятся локальные переменные, а в вашем коде цифра 8 это смещение на количество байт до адреса локальной переменной. Поэтому, нет, не со стеком, а с локальными переменными непосредственно работа идет. P.S. Глобальные в секции .data P.P.S. Но я тоже могу ошибаться P.P.P.S. А быть может мы говорим об одних вещах, но разными языками Последний раз редактировалось Malriser; 18.02.2014 в 01:13. |
|
18.02.2014, 01:21 | #10 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,285
|
Да, наверное, об одних. А где хранятся локальные переменные? Мы не работаем со стеком в привычном понимании (push, pop). Но локальные лежат на нем? Ну то есть вот взяли ebp, который указывает на начало текущего фрейма (на сохраненный ebp). Прибавили к значению отрицательное число. И теперь имеем адрес локальной переменной, расположенной на стеке?
UPD Из вики (http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax): Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Переменные | 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 |