как переключить задачу в прерывании таймера?
я пишу многопоточность в реальном режиме, уже сделал interrupt abuse и заменил прерывание таймера на свое. у меня есть массив из массивов (матрица, далее х и у).по оси х - потоки, а по оси у - все имеющиеся в процессоре регистры (в том числе сегментные). мне нужно сохранить текущее состояние процесса в массив по оси х (сохранить значения всех регистров), увеличить номер текущей задачи на единицу, загрузить регистры из следующего дескриптора и закончить прерывание. проблема в том, что я не знаю, как и в каком порядке загрузить регистры, чтобы случайно не сломать код (например, в каком порядке загрузить сегментные регистры?) и как получить состояние процессора в самом начале прерывания (я знаю, что где-то в стеке, но где - не знаю). кода на руках нет, но пишется все на fasm'e.
Есть такой подход к решению сложных задач: если сложную задачу не получается решить как есть, можно начать со связанной задачи попроще. Например переключать задачу не в прерывании а по вызову функции. Я подозреваю, что если у тебя получится решить эту простую задачу, она даст тебе подсказку, как решать сложную.
Кроме того, можно посмотреть как эту задачу (или задачу попроще) решают другие. Например можно посмотреть в реализацию swapcontext.
jcmvbkbc, я вспомнил, как получить состояние машины, но как правильно его загрузить? Нарпример, если загрузить ss или sp, то все - стек в другом месте, и стек обработчика больше не используется.