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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 16:05   #21
BlackFishSQL
Форумчанин
 
Аватар для BlackFishSQL
 
Регистрация: 02.04.2011
Сообщений: 136
По умолчанию

Mikl приму к сведенью.

Стек.

В книге дано определение его как специально выделенную область памяти...... где выделенную(в ОЗУ)? И каким образом выделенную? Тоесть компьютер знает что с адреса к примеру 0000 по 0100 - это стек?

Регистры! 'Стек распологается в сегменте памяти, описываемом регистром SS, и текущее смещение вершины стека отражено в регистре ESP'.

Что значит 'текущее смещение..' ? Тоесть там просто хранится адрес вершины стека? А регистр SS для чего, и что в нём хранится?

Последний раз редактировалось BlackFishSQL; 29.03.2012 в 16:24.
BlackFishSQL вне форума Ответить с цитированием
Старый 29.03.2012, 17:46   #22
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
могут хранить и данные и адреса
я бы сказал даже что регистры хранят по сути данные, то есть числа.
дело в том как использовать их.
ведь же можно и так:
Код:
xor eax,eax
mov eax,[eax]

Цитата:
Что значит 'текущее смещение..' ? Тоесть там просто хранится адрес вершины стека?
да.
Цитата:
А регистр SS для чего, и что в нём хранится?
цитирую вас же:
Цитата:
Стек распологается в сегменте памяти, описываемом регистром SS
Цитата:
Тоесть компьютер знает что с адреса к примеру 0000 по 0100 - это стек?
он знает что согласно SS, определенная область памяти может быть применена как стек.
грубо говоря, сам проц не отлавливает переполнение стека.(есть метод как его можно отловить, и так же есть метод как можно заставить проц его контролировать напрямую, почти без ОС, но этот метод не принят)
текущее положение стека отражено в esp.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2012, 19:18   #23
BlackFishSQL
Форумчанин
 
Аватар для BlackFishSQL
 
Регистрация: 02.04.2011
Сообщений: 136
По умолчанию

Может я выражусь не правильно или не корректно: проверти моё мнение которое сформировалось о сегментных регистрах {цитирую не учебники а то что в голове} -> тоесть в процессорах Intel существует сегментная организация программы тоесть любая программа состоит из 3х сегментов: кода, данных и стека. И процессору по.... что выполнять после загрузки программы в ОЗУ , он опирирует числами, но что бы знать с какого "участка текста всей программы" начинаются данные или код применяют эти 3 регистра (а вообще 6): СS (Code Segment) , DS (Date Segment) и SS (Stack Segment) в которых содержатся адреса на соответствующие области!!

Если это не так то я не знаю как ещё это вбить в голову!(

Последний раз редактировалось BlackFishSQL; 29.03.2012 в 19:24.
BlackFishSQL вне форума Ответить с цитированием
Старый 29.03.2012, 20:06   #24
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

выполнение идет по адресу cs:eip(rip).
сегменты учавствуют в вычислении физического адреса для чтения/записи данных(выполнение кода начинается с чтения опкодов ж)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2012, 20:09   #25
BlackFishSQL
Форумчанин
 
Аватар для BlackFishSQL
 
Регистрация: 02.04.2011
Сообщений: 136
По умолчанию

можно какой-нибудь очень простой примерс использованием этих регистров?
BlackFishSQL вне форума Ответить с цитированием
Старый 29.03.2012, 22:28   #26
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

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

Сегмент стека тоже инициализируется во время запуска программы. В случае с exe-файлом это будет объявленный отдельно сегмент с выделенной специально для него памятью, а в случае com-файлов стек будет располагаться в конце сегмента кода. В принципе, можно даже создать несколько стеков и в процессе работы переключаться между ними. Иногда такой подход бывает вполне оправдан.

сегмент данных - область где хранятся ваши переменные. Адрес данного сегмента приходится устанавливать вручную в соответствующий сегментный регистр. таких регистров, по-сути, два: ds и es (в более поздних процессорах добавились ещё два - fs и gs). Адресоваться через такие сегменты можно практически в любую область памяти:
например, установив значение 0000h можно адресоваться к векторам прерываний и области системных переменных. установив 0b800h можно адресоваться к экрану в текстовом режиме, а 0a000h - в графическом.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 29.03.2012, 22:34   #27
BlackFishSQL
Форумчанин
 
Аватар для BlackFishSQL
 
Регистрация: 02.04.2011
Сообщений: 136
По умолчанию

Ооооой.... как это себе вбить просто ума не приложу?! Буду грызть камень ассемблера дальше!( Может пойдёт лучше!
BlackFishSQL вне форума Ответить с цитированием
Старый 29.03.2012, 22:36   #28
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
В случае с exe-файлом это будет объявленный отдельно сегмент с выделенной специально для него памятью
в случае exe файла все сегменты указывают на одно и тоже пространство(исключение fs и gs).
es==ds==ss.
по крайней мере у Windows, про дос не знаю, ибо не применяю.

стоит отделить понятие сегмент от область данных/кода/стека в памяти.
так как можно перетрактовать содержимое памяти практически как угодно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2012, 22:41   #29
BlackFishSQL
Форумчанин
 
Аватар для BlackFishSQL
 
Регистрация: 02.04.2011
Сообщений: 136
По умолчанию

Цитата:
стоит отделить понятие сегмент от область данных/кода/стека в памяти.
Вот именно! У меня с этим каша малаша сейчас в голове! Может где можно почитать про организацию памяти, сегментацию и про эти д.... регистры!
Код:
или Вы может как-то обьясните, жлательно как в детском саду с картиночками

Последний раз редактировалось BlackFishSQL; 29.03.2012 в 22:43.
BlackFishSQL вне форума Ответить с цитированием
Старый 29.03.2012, 22:45   #30
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
по крайней мере у Windows, про дос не знаю, ибо не применяю.
Ну а я как-бы про ДОС писал) там сегменты даты на cs инициализируются - наследие com-файлов ориентированных под память в 64 кб
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Электронное письмо с уведомлением о прочтении Климент Свободное общение 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