Почитайте внимательно описание архитектуры на предмет обработки прерываний (можно и
здесь глянуть). В LR находится EXC_RETURN, а отнюдь не адрес возврата. А в вершине стека _прерванного_ процесса (а не обработчика прерывания -- они могут использовать разные стеки, а могут и один) сохраняется восемь регистров, а не только адрес возврата.
В общем, учите матчасть, без неё делать нечего: это не ПК, где всю такую работу ОС сделает.