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

30 Дек 2022 в 19:53
180 +1
0
Ответы
1

Для переключения задач в прерывании таймера на ассемблере (например, на FASM), вам необходимо сохранить состояние текущей задачи, загрузить состояние следующей задачи и завершить прерывание. Процесс сохранения и загрузки регистров зависит от архитектуры процессора (например, x86) и используемой операционной системы (например, Windows, Linux).

Обычно, чтобы сохранить состояние текущей задачи, вам нужно поместить значения регистров в стек. Для x86 архитектуры это можно сделать с помощью команды PUSHAD (для общих регистров) и команды PUSHFD (для регистра флагов). После сохранения состояния текущей задачи, вам нужно загрузить состояние следующей задачи из ее стека обратно в регистры с помощью команд POPAD и POPFD.

Чтобы правильно загрузить сегментные регистры, вы можете использовать команды POP для соответствующих сегментных регистров (например, POP ES, POP DS и т.д.). Также важно учесть правильный порядок выполнения команд загрузки регистров, чтобы избежать ошибок.

Чтобы получить состояние процессора в самом начале прерывания, можно обратиться к контексту прерывания, который обычно содержит информацию о регистрах и стеке. В зависимости от операционной системы, это может различаться, поэтому вам стоит изучить структуру контекста прерывания для вашей системы.

Надеюсь, эта информация поможет вам реализовать переключение задач в прерывании таймера на FASM.

16 Апр в 16:53
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 94 757 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир