При переключении контекста значения регистров нужно где-нибудь сохранить (например, в стеке), а при обратном переключении - загрузить обратно. Это происходит при вызове функций, входе в обработчики прерываний, переключении на другой процесс/поток и т.д.