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, то задача при переключении пропускается.
