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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 20:35   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

он не может быть использован как сегментный в приципе.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.02.2012, 05:22   #12
ABCDEF1551
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 10
По умолчанию

Думаю что мне нужно узнать о EBP. Возможно это не только упростит написание, но и сделает правильно-логичным.
Про переменные и параметры функций мелькнуло - это мне очень нужно, без этого никак.
ABCDEF1551 вне форума Ответить с цитированием
Старый 13.02.2012, 08:23   #13
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Про переменные и параметры функций мелькнуло - это мне очень нужно, без этого никак.
Всё зависит от конкретной вашей реализации. Когда вы вызываете функцию или процедуру из Си или Паскаля, то параметры передаются в стеке, вот тогда и резонно использование помимо ESP ещё и EBP - первый указывает на последний элемент стека(окончание блока параметров), а второй - на начало блока параметров. Если программа написана чисто на Ассемблере, то вы вольны передавать параметры как вам заблагорассудится.
Так что, это обычный индексный регистр, который компилятором по-умолчанию адресуется к сегменту стека. Если делать это осторожно, то можно использовать его и в своих целях.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 13.02.2012, 09:35   #14
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от ABCDEF1551
masm-ами пользуйтесь сами.
А с чего такая патологическая неприязнь к MASM?
Mikl___ вне форума Ответить с цитированием
Старый 14.02.2012, 05:01   #15
ABCDEF1551
Пользователь
 
Регистрация: 11.02.2012
Сообщений: 10
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Когда вы вызываете функцию или процедуру из Си или Паскаля, то параметры передаются в стеке
Так-то оно так.

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
ESP ещё и EBP - первый указывает на последний элемент стека(окончание блока параметров), а второй - на начало блока параметров.
Вот тут я ничего не понял.

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Если программа написана чисто на Ассемблере, то вы вольны передавать параметры как вам заблагорассудится.
Лучше писать грамотно, чем - как заблагорассудится.

8Observer8, спасибо за рекомендацию книги.
Автор пишет замечательно, но я всё равно ничего не понял.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
когда будете сказать по стеку и при этом нужно помнить начало вашего кадра, то поймете как обычно его применяют.
Не думаю. Тут особый случай.

В одной книге написано: "Часть стека, содержащая все данные, помещенные в него для отдельной процедуры, называется кадром стека.".
Вот тут я недопонимаю.
Что же такое кадр стека???
Два параметра для процедуры proc1 в стеке и еще 2 параметра для процедуры proc2 - в итоге получается 2 кадра??? Или как?

Последний раз редактировалось Stilet; 14.02.2012 в 08:33.
ABCDEF1551 вне форума Ответить с цитированием
Старый 14.02.2012, 06:40   #16
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от DiemonStar
ESP ещё и EBP - первый указывает на последний элемент стека(окончание блока параметров), а второй - на начало блока параметров.
Цитата:
Сообщение от ABCDEF1551
Вот тут я ничего не понял.
Проще воспользоваться отладчиком и посмотреть содержимое [ESP], [ESP+4], [ESP+8] может быть станет понятнее
Цитата:
Сообщение от DiemonStar
Если программа написана чисто на Ассемблере, то вы вольны передавать параметры как вам заблагорассудится.
Цитата:
Сообщение от ABCDEF1551
Лучше писать грамотно, чем - как заблагорассудится.
Параметры можно передать а) через стек б) через регистры в) через переменные в памяти, и дело не в "благорассудстве" программиста, и даже не в языке ассемблер
Mikl___ вне форума Ответить с цитированием
Старый 14.02.2012, 06:41   #17
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Вот тут я ничего не понял.
в коде это будет выглядеть примерно так:

Код:
mov ebp,esp
push parametr_1
push parametr_2
push parametr_3
call function
т.е. значение в esp отличается от значения в ebp на размерность трёх параметров + программного указателя, сохранённого для возврата из процедуры.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.02.2012, 06:43   #18
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

DiemonStar
Код:
mov ebp,esp <-- только вот это должно быть внутри function
push parametr_1
push parametr_2
push parametr_3
call function
Mikl___ вне форума Ответить с цитированием
Старый 14.02.2012, 06:47   #19
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Лучше писать грамотно, чем - как заблагорассудится.
А здесь грамотность не причём. Фраза имела контекст, что в ассемблере почти нет рамок устанавливаемых компилятором, в отличии от высокоуровневых языков.

Цитата:
<-- только вот это должно быть внутри function
это абстрактный пример, не претендующий на работоспособность...для наглядности, просто чтобы показать сам принцип работы..
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 14.02.2012, 06:48   #20
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от ABCDEF1551 Посмотреть сообщение
8Observer8, спасибо за рекомендацию книги.
Автор пишет замечательно, но я всё равно ничего не понял.
Я тоже, когда прочитал ничего не понял. И только, когда по рекомендации автора прошёлся по программе по-шагам, всё своими глазами увидел!

Последний раз редактировалось 8Observer8; 14.02.2012 в 06:57. Причина: пунктуация.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++/Абсолютный адрес регистра Ebp coNsept Общие вопросы C/C++ 6 29.03.2011 12:56
Запись в регистр Vitek-pm Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 17.02.2010 04:00
Регистр в таблицах БД Alexij БД в Delphi 3 17.04.2008 13:38
Регистр символов Никки Общие вопросы Delphi 1 22.12.2007 20:14
регистр vitalik007 Общие вопросы Delphi 2 15.09.2007 02:41