И компилятор расположит восстановление всех сохраненных при входе в обработчик регистров после этой вставки. Падение программы после первого же прерывания обеспечено. На С самым "прямым" способом будет, наверное, написать "обертну" на асм из которой вызвать обработчик как обычную функцию.
--------------------
На любой вопрос даю любой ответ "Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
С ассемблером все понятно, RET вместо RETI можно использовать без каких либо оговорок. А вот с Си получается значительно сложнее и, самое главное - некрасиво.
Как я понимаю, появилась необходимость по выходу из прерывания не разрешать определенное(ые) прерывание(ия) до какого-то события. На мой взгляд, в Си вполне легально это решается работой с битами разрешения/запрещения конкретных прерываний. Т.е. в подпрограмме обработки прерывания запещается(ются) конкретное(ые) прерывание(ия) и по выходу из нее оно(и) уже не работает(ют) до особого на то разрешения. А будучи вновь разрешенным(и) снова вызывает(ют) прерывание(я).
Конечно, это не так лаконично, как в ассемблере, зато вполне кошерно.