EBX

Тема в разделе "WASM.BEGINNERS", создана пользователем Consto, 3 авг 2006.

  1. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Можно ли изменять EBX
    В одном месте прочитал, что можно , в другом - что нет.
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    в колбэках(ну типа там оконные процедуры и т.д.) низя, а во всем остальном можно
     
  3. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Consto
    В это трудно поверить, но МОЖНО! И более того многими способами. Один из самый простых
    mov ebx,<на_что_нужно_изменить>
     
  4. Coban

    Coban New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2006
    Сообщения:
    5
    Consto, можно, но с такими же условиями как и ESI, EDI, EBP...
     
  5. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    это также как nobodyzzz говорит, я не очень-то знаю какие на ESI, EDI, EBP...условия
     
  6. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    да =)))
     
  7. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    push ebx
    ; изменяем его как угодно
    pop ebx

    И неплохо бы практиковать это и с другими регистрами, которые ты используешь.
     
  8. drmist

    drmist New Member

    Публикаций:
    0
    Регистрация:
    31 май 2005
    Сообщения:
    112
    Consto
    Я так понимаю вот что тебя интересует:
    В операционной системе Windows так принято: когда ты вызываешь какую-нибудь API, она может менять eax, ecx и edx - остальные регистры _после вызова_ должны быть возвращены в прежнее состояние.
    это всего лишь означает, что если апи хочет использовать каой-то регистр кроме e(a/c/d)x то она сохраняет его в стек, использует, затем выстанавливает из стека.

    типа так:
    MyApiProc:
    push ebx
    push esi
    ; делаю что хочу
    pop esi
    pop ebx
    ret

    Тут важно отметить, что если в MS Windows так принято, это вовсе не означает что и у тебя все должно быть в точности как умелкомягких. Просто соблюдая такое несложное правило ты имеешь шанс местами облегчить себе жизнь. Например зная, что после вызова любой твоей функции ebx точно не изменится.
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    EBX, ESI, EDI, EBP изменять можно, но при этом нужно помнить, что винда (насколько я знаю, и линукс тоже), в среде которой работает твоя программа, использует эти регистры для хранения в них разной информации. Поэтому, если ты решил воспользоваться одним из этих регистров, нужно сохранить его содержимое (например в стеке), а когда необходимость в регистре отпала, восстановить это содержимое. Иначе винда не поймет тебя со всеми вытекающими для твоей проги последствиями.
    Возьми за правило в любой процедуре, использующей регистры ebx, esi, edi, ebp, сохранять их в самом начале процедуры при помощи директив uses или просто push в начале и pop в конце.

    Код (Text):
    1. myProc proc uses ebx esi edi
    2. ....
    3. myProc endp
     
  10. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Спасибо, понятно
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Consto
    Поищи на этом форуме темы по обсуждению "stdcall" или загляни в PSDK.
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cresta
    Сишное соглашение распространяется на все колбеки, стартовые процедуры тредов и т.д. В общем, всё, что прямым или косвенным образом связано с сишной либой, "наследует" вышеупомянутые ограничения.