Если вставка их меняет, то нужно при этом соблюдать предосторожности: при изменении ebp нельзя, например, обращаться к локальным переменным в процедурах (регистр ebp используется при вызове процедур в качестве регистра базы (с помощью него можно обращаться к локальным переменным). А если мы его меняем, то компилятор при обращении к локальным переменным породит те же самые команды, как если бы мы и не меняли ebp. Ясно, что ссылки в этом случае будут неправильными. Поэтому при изменении ebp возможно только использование регистров и глобальных переменных. Понятно, что по окончании ассемблерной вставки регистр ebp должен быть восстановлен (намусорил – убери за собой!)) , а при изменении esp нельзя обращаться к локальным переменным и стеку (esp – указатель стека). Перед изменением esp обязательно нужно запретить прерывания (команда cli), а после восстановления разрешить прерывания (команда sti). Если этого не сделать, а прерывание произойдёт, когда esp будет изменён, то оно получит неправильный стек. Ведь перед вызовом прерывания в стеке сохраняются некоторые данные, да и само прерывание использует стек. А может, ваш изменённый esp будет указывать на участок кода вашей программы. Так что если не хватает регистров, можно использовать нехорошие вещи (использовать ebp, и esp), но уже с определёнными ограничениями. Но если вы запрещаете прерывания, то при первой возможности, их, конечно, надо разрешать (иначе компьютер не будет реагировать на нажатия клавиш, передвижение мыши, изменение системного времени). Вообще, я считаю, что регистр esp лучше использовать по назначению (как указатель стека), а ebp можно и не по назначению