![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 881
|
![]() Код:
Я знаю, что переменной k присваивается 1, но на более низком уровне что происходит? Код:
|
![]() |
![]() |
![]() |
#2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Насколько низкий уровень-то нужен?
![]() Если посмотреть дизассемблированный код, то в первом случае будет положена единица на стек, а во втором не произойдет ничего (будто была скомпилирована программа ниже). Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 881
|
![]()
x = y;
результатом єтого будет lvalue так? ну примерно такой уровень и нужен. Спасибо за второе задание) |
![]() |
![]() |
![]() |
#4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
В таком коде:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#5 | |
xor esp, esp
Форумчанин
Регистрация: 11.02.2014
Сообщений: 135
|
![]()
Как бы на самом деле, то по адресу переменной будет занесена единичка. Адрес переменной находится в секции .data.
Пример: Код:
Стек то тут не причем. Стек будет при том, если у нас будет такой код: Код:
Код:
Только вот minGw генерирует немного другой код: Код:
Цитата:
Код:
Не проще ли Код:
Последний раз редактировалось MaTBeu; 18.02.2014 в 03:01. |
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 25.04.2010
Сообщений: 881
|
![]()
спасибо за ответ)
|
![]() |
![]() |
![]() |
#7 |
xor esp, esp
Форумчанин
Регистрация: 11.02.2014
Сообщений: 135
|
![]()
Вот что мне на ваш код сгенерировал MingW.
![]() 1) Переменная еще не инициализирована, видим что в ней в итоге будет мусор. ( поэтому переменные и надо инициализировать ) 2) Инициализируем переменную занося туда единичку. ebp+var_4 - в итоге будет смещение от текущего значения ebp на значение из var_4 |
![]() |
![]() |
![]() |
#8 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Не надо. Лучше объясните.
Обещаю, что не буду спорить, если неправ. Код:
Код:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#10 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Да, наверное, об одних. А где хранятся локальные переменные? Мы не работаем со стеком в привычном понимании (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 |