CodeNet / Языки программирования / Ассемблер / Пишем "многозадачную" ОС в "Real Mode"
CodeNet / Платформы / Пишем ОС / Пишем "многозадачную" ОС в "Real Mode"
CodeNet / Платформы / Пишем ОС / Пишем "многозадачную" ОС в "Real Mode"
Приостанавливаем задачу
Вообще-то я наверное зря создал целый раздел ради такой простой вещи, ну ладно.
Приостановка задачи сводится к записи в ее id значения 254.
doStop3: call _di mov al,254 mov [cs:di],al mov dx,[cs:di+3] call _ei ret
Как вы помните, при переключении задач переход к следующей осуществляется следующим образом:
int201: push ax mov dx,515 mul dx add di,ax ; DI = Абсолютное смещение вершины ; стека в структуре TTASK pop ax cmp [Byte Ptr ds:di],255 je nexttask cmp [Byte Ptr ds:di],254 ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! je nexttask mov [ds:numtask],al mov ax,di
Таким образом если id содержит значаение 254, то задача при переключении пропускается.