![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 |
Форумчанин
Регистрация: 02.04.2011
Сообщений: 136
|
![]()
Mikl приму к сведенью.
Стек. В книге дано определение его как специально выделенную область памяти...... где выделенную(в ОЗУ)? И каким образом выделенную? Тоесть компьютер знает что с адреса к примеру 0000 по 0100 - это стек? Регистры! 'Стек распологается в сегменте памяти, описываемом регистром SS, и текущее смещение вершины стека отражено в регистре ESP'. Что значит 'текущее смещение..' ? Тоесть там просто хранится адрес вершины стека? А регистр SS для чего, и что в нём хранится? Последний раз редактировалось BlackFishSQL; 29.03.2012 в 16:24. |
![]() |
![]() |
![]() |
#22 | |||||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
дело в том как использовать их. ведь же можно и так: Код:
![]() Цитата:
Цитата:
Цитата:
Цитата:
грубо говоря, сам проц не отлавливает переполнение стека.(есть метод как его можно отловить, и так же есть метод как можно заставить проц его контролировать напрямую, почти без ОС, но этот метод не принят) текущее положение стека отражено в esp. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|||||
![]() |
![]() |
![]() |
#23 |
Форумчанин
Регистрация: 02.04.2011
Сообщений: 136
|
![]()
Может я выражусь
![]() Если это не так то я не знаю как ещё это вбить в голову!( Последний раз редактировалось BlackFishSQL; 29.03.2012 в 19:24. |
![]() |
![]() |
![]() |
#24 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
выполнение идет по адресу cs:eip(rip).
сегменты учавствуют в вычислении физического адреса для чтения/записи данных(выполнение кода начинается с чтения опкодов ж) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#25 |
Форумчанин
Регистрация: 02.04.2011
Сообщений: 136
|
![]()
можно какой-нибудь очень простой примерс использованием этих регистров?
|
![]() |
![]() |
![]() |
#26 |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
![]()
В сегменте кода содержится код загруженной вами программы, как справедливо заметил Пепел Феникса. Инициализируется он либо при запуске программы, либо при дальнем переходе. Т.е. данный сегментный регистр лучше напрямую не трогать.
Сегмент стека тоже инициализируется во время запуска программы. В случае с exe-файлом это будет объявленный отдельно сегмент с выделенной специально для него памятью, а в случае com-файлов стек будет располагаться в конце сегмента кода. В принципе, можно даже создать несколько стеков и в процессе работы переключаться между ними. Иногда такой подход бывает вполне оправдан. сегмент данных - область где хранятся ваши переменные. Адрес данного сегмента приходится устанавливать вручную в соответствующий сегментный регистр. таких регистров, по-сути, два: ds и es (в более поздних процессорах добавились ещё два - fs и gs). Адресоваться через такие сегменты можно практически в любую область памяти: например, установив значение 0000h можно адресоваться к векторам прерываний и области системных переменных. установив 0b800h можно адресоваться к экрану в текстовом режиме, а 0a000h - в графическом.
Правильно поставленная задача - три четверти решения.
|
![]() |
![]() |
![]() |
#27 |
Форумчанин
Регистрация: 02.04.2011
Сообщений: 136
|
![]()
Ооооой.... как это себе вбить просто ума не приложу?! Буду грызть камень ассемблера дальше!( Может пойдёт лучше!
|
![]() |
![]() |
![]() |
#28 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
es==ds==ss. по крайней мере у Windows, про дос не знаю, ибо не применяю. стоит отделить понятие сегмент от область данных/кода/стека в памяти. так как можно перетрактовать содержимое памяти практически как угодно. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#29 | |
Форумчанин
Регистрация: 02.04.2011
Сообщений: 136
|
![]() Цитата:
Код:
![]() Последний раз редактировалось BlackFishSQL; 29.03.2012 в 22:43. |
|
![]() |
![]() |
![]() |
#30 | |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
![]() Цитата:
Правильно поставленная задача - три четверти решения.
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Электронное письмо с уведомлением о прочтении | Климент | Свободное общение | 12 | 26.05.2011 11:40 |
CfileDialog и возник глюк | nusik | Общие вопросы C/C++ | 11 | 28.08.2009 16:02 |
Возник вопрос при создании сайта | Fortune55 | Общие вопросы по Java, Java SE, Kotlin | 1 | 06.04.2009 12:49 |
Возник вопрос при заполнении массива.. | SnakeMan | Помощь студентам | 8 | 15.01.2008 12:31 |