Consto В это трудно поверить, но МОЖНО! И более того многими способами. Один из самый простых mov ebx,<на_что_нужно_изменить>
push ebx ; изменяем его как угодно pop ebx И неплохо бы практиковать это и с другими регистрами, которые ты используешь.
Consto Я так понимаю вот что тебя интересует: В операционной системе Windows так принято: когда ты вызываешь какую-нибудь API, она может менять eax, ecx и edx - остальные регистры _после вызова_ должны быть возвращены в прежнее состояние. это всего лишь означает, что если апи хочет использовать каой-то регистр кроме e(a/c/d)x то она сохраняет его в стек, использует, затем выстанавливает из стека. типа так: MyApiProc: push ebx push esi ; делаю что хочу pop esi pop ebx ret Тут важно отметить, что если в MS Windows так принято, это вовсе не означает что и у тебя все должно быть в точности как умелкомягких. Просто соблюдая такое несложное правило ты имеешь шанс местами облегчить себе жизнь. Например зная, что после вызова любой твоей функции ebx точно не изменится.
EBX, ESI, EDI, EBP изменять можно, но при этом нужно помнить, что винда (насколько я знаю, и линукс тоже), в среде которой работает твоя программа, использует эти регистры для хранения в них разной информации. Поэтому, если ты решил воспользоваться одним из этих регистров, нужно сохранить его содержимое (например в стеке), а когда необходимость в регистре отпала, восстановить это содержимое. Иначе винда не поймет тебя со всеми вытекающими для твоей проги последствиями. Возьми за правило в любой процедуре, использующей регистры ebx, esi, edi, ebp, сохранять их в самом начале процедуры при помощи директив uses или просто push в начале и pop в конце. Код (Text): myProc proc uses ebx esi edi .... myProc endp
cresta Сишное соглашение распространяется на все колбеки, стартовые процедуры тредов и т.д. В общем, всё, что прямым или косвенным образом связано с сишной либой, "наследует" вышеупомянутые ограничения.