ESP vs EBP. Выбор базы для адресации.

Тема в разделе "WASM.ASSEMBLER", создана пользователем Serg50, 24 фев 2010.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ykidia
    Где это так оО ?
    Какой же бред.. хотя забавно что про стек и переменные утверждает(не размышляет) человек который есчо древний нтвдм юзает. Доберётесь до NT/PM тогда раскажите нам про стек. А сисколы дёргать не из под ядра, стеки громадные выделять и прочие приколы оставьте для других.
     
  2. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Да где захотите - где понаделаете, там и будет. Я лично часто вижу в чужих исходниках pushad/popad, но не везде это оправданно. Однако с точки зрения времязатрат это оправданно. Однако если Вы лично думаете, что 4-5 вложенных подпрограмм с pushad в начале не занимает ни байта в памяти, то ошибаетесь.

    Владимир Николаевич, это оголтелый расизм! (c)
    Смысл: и как это относится к теме?

    Не ожидал, что для Вас это равнозначные понятия... а вроде такие умные местами статьи пишете про PM (правда, в контексте NT)...

    1. Про "сисколы" - для этого у меня открыта другая тема, как раз "для других", а в этой теме об этом нет и речи, пора бы Вам хоть немного поспать...
    2. "Стеки громадные" - выше я настоятельно просил не передергивать, иначе конструктивного разговора не получится. Ну или давайте факты, если я что-то не понял. Вас возбудили 3 буквы dup в примере выше? Ну так не туда смотрите, это для общности примера, если локального массива нет, то и в стеке его выделять не надо.
     
  3. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Не совсем в тему. Но вопрос вот в чём: а кто-нибудь знает как в MASM включить адресацию стековых переменных через ESP, вместо EBP? Неужто нет такой опции?...
     
  4. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    7mm
    Вы о чем? MASM - это не компилятор языка высокого уровня, просто пишем [esp] вместо [ebp], к чему вопрос-то?
     
  5. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Ну к тому, что через локальные переменные адресуются через EBP автоматом. Хотя понятно, компилятор же не знает, где у меня что в стек по ходу пишется....
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    7mm
    см. OPTION PROLOGUE в хелпе masm.
     
  7. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Пролог убирает. Адресацию через ESP не задаёт. Или я не доглядел?..
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    l_inc
    Имхо полезность этого свойства несколько сомнительная, ведь если фнкция содержит баг, в том числе приводящий к порче стека, то лучше об этом узнать при первом запуске проги, чем ловить логическую ошибку неизвестно в какой функции и проявляющуюся лишь изредка.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    7mm
    там вообще-то куча режимов, я их все не пробовал, если они не помогут, то пролог можно и заменить на свой.
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Y_Mur
    если вы накосячили со стеком то использование ebp позволит программе хотя-бы не рухнуть при отладке, а все ее ошибки сводятся к разрушению значений регистров, что довольно просто отлавливается
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Rockphorr
    Гы-гы это глюк в "программе рухнувшей при отладке" легко отлавливается потому как сразу понятно где он и когда возник. А вот забытый или слчайно затёртый pop который должен был восстановить значение регистра может аукаться где-то совсем в другом месте, там где используется результат глюкавой функции и заметишь ты скорее всего это не сразу а может быть когда нибудь и будешь долго разбирать откуда-же этот глюк начинается на самом деле.
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Y_Mur
    у меня такое было несколько раз - довольно быстро локализуется и фиксится после того как увидишь что после какой то функи рушатся регистры
     
  13. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    Rockphorr
    У меня тоже такое было много раз, глюк можно сразу и не заметить, если, к примеру, функа возвращает не жизненно важные значения. Биты какие-нибудь, к примеру, установлены? А должны быть в данной ситуации? Ну и отлично, проехали. А потом выясняется, что сие значение было от потолка, и в один прекрасный день все валится по непонятной причине, и те места, где ты считаешь, что все проверено и работает, ты пойдешь проверять в последнюю очередь.
    Это не повод, вот когда будет несколько сотен раз, вот тогда и посмотрим.
    А пока нередко приходится править код за резкими как понос программистами, которые делают его по-быстрому на коленке, вызывая у начальства довольную улыбку и одобрение, и всем пофиг, что что-то иногда работает как-то не так. Но ведь работает же!! Лишь потом, когда резких программистов уже и след простыл, вдруг все спохватываются, что так же быть не должно!!! И ты сидишь, ищешь, правишь, не находя цензурных слов, чтобы описать ситуацию )))
    Однозначно согласен с Y_Mur, говно лучше видеть сразу, пусть даже это и не всегда приятно или престижно.
    Возможно Вы, Rockphorr, обладаете бОльшей ясностью мышления, чем другие, и поэтому можете позволить себе то, что пишете выше, и редко допускаете ошибки, а если и допускаете, то быстро локализуете и исправляете. Флаг Вам в руки. Но большинству программеров такие рекомендации не подходят, ибо все быстро забывается, внимательность на нуле, а скользящее окошко временной памяти (в башке программера) похоже скорее на очко. Как Вы понимаете, я говорю не только про ассемблерщиков, но и про сишников, и про пассалистов, и даже не только про программеров. Говно - оно на то говно, чтобы всплывать, и чем быстрее, тем лучше :)
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ykidia
    Хорошо если рушится, тогда можно достаточно просто обычно найти причину. Само страшно это деадлоки. Недавно сокеты захватывал с помощью движка. Несколько часов потратил чтобы найти ошибку. Когда возникает множество исключений в десятке потоков, некоторые обрабатываются, некоторые функции трассируются, для некоторых выполняется бактрейс и это всё автоматически и синхронно, в придачу трассировщик трассируется отладчиком вот это ад :)
     
  15. Ykidia

    Ykidia Member

    Публикаций:
    0
    Регистрация:
    21 июн 2005
    Сообщения:
    99
    Адрес:
    Санкт-Петербург
    ой фу...
     
  16. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    А с каким параметром нужно скомпилировать в студии что бы ebp заменялся на esp?
     
  17. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    странно вроде бы параметр /Oy включать использование ESP. Но что то ничего не происходит
     
  18. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    всё вроде бы разобрался, http://msdn.microsoft.com/en-us/library/2kxx5t2c(v=vs.80).aspx
    оптимизацию нужно ещё включить хоть какую нибудь /Ox, /O1, or /O2