Я x51 программировал больше 10 лет назад и всё забыл. Но смутно
помню, что у меня функции делились на обычные (которым вся память
доступна, но медленно), и "быстрые", которые работали со своим
маленьким сегментом памяти. И прерывания были "быстрыми", т.е.
адресация не через DPTR, но напрямую, но только 256 байт всего. Я
про другое, что у x51 банки не памяти, а регистров, и при вызове
прерывания же может (я не помню) автомагически сменяться банка
регистров на отдельную, используемую для прерываний. А обычная программа работает в своей банке регистров. В итоге регистры в стеке сохранять не нужно, что сильно экономит. Кстати у ARM же есть FIQ, и в этом режиме тоже своя регистровая банка.