Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 20:16   #1
Артин
 
Регистрация: 14.04.2009
Сообщений: 8
По умолчанию Планировщик процессов.

Планировщик с принудительным переключением, циклическая очередь без приоритетов, 2 процесса.

Планировщик-то я написал, но препод ругается, говорит через попу сделано и требует переделать.
Цитата:
.model small
.stack 100h; Стек на 256 байт
.data; Сегмент данных:
num db 0h; Номер процесса
max db 1bh; Максимальный процесс
st1 db 100h dup(0); Стек1
st2 db 100h dup(0); Стек2
s_SS dw 0h; Состояние SS
s_SP dw 3h dup(0); Стек состояний SP
smesh dw 0h
segm dw 0h
.code; Сегмент кода:
Main Proc Near
mov ax, @data
mov ds, ax
mov ax, 0h
mov es, ax
cli; Запрет прерываний
mov ax, es:[0020h]
mov bx, es:[0022h]
mov cs:[smesh], ax; Сохранение стандартной
mov cs:[segm], bx; обработки прерывания
mov ax, offset Inter; Смещение
mov bx, seg Inter; Взятие сегмента
mov es:[0020h], ax; Замена вектора прерывания
mov es:[0022h], bx; на свою программу обработки
sti; Отмена запрета прерываний
Pause:
mov al, num
cmp al, max
jne Pause
cli
mov ax, 0h
mov es, ax
mov ax, cs:[smesh]
mov bx, cs:[segm]
mov es:[0020h], ax; Восстановление стандартной
mov es:[0022h], bx; обработки прерывания
int 21h
sti
mov ah, 4ch; Выход из программы
int 21h
Main endp
Inter Proc Far
push ax
mov al, num
cmp al, 0h
jne Reset
mov si, 0h
mov s_SS, ss; Сохранение исходного
mov [s_SP], sp; процесса
mov ax, ds
mov ss, ax
mov sp, offset st1+256; Адрес 1го стека
pushf; Сохранение регистра флагов
push cs; Сохранение сегмента команд
push offset proc1; Сохранение смещения
push ds; Сохранение сегмента данных
mov [s_SP+2], sp; Сохранение 1го процесса
mov sp, offset st2+256
pushf
push cs
push offset proc2;
push ds
mov [s_SP+4], sp
Reset:
add si, 2h
cmp si, 6h
jne Switch
mov si, 2h; Сброс состояния
Switch:
mov ax, [s_SP+si]; Переключение на
mov sp, ax; следующий процесс
mov al, num
inc al; Следующий номер процесса
mov num, al
cmp al, max; Если процесс не последний
jne Exit;
mov ax, s_SS
mov ss, ax; Восстанавление исходного стека
mov ax, [s_SP]
mov sp, ax; и указателя на него
Exit:
mov al, 20h
out 20h, al; Уст-ка ком-го регистра
pop ax
jmp dword ptr cs:[smesh]; Переход к стандартной процедуре
Inter endp
proc1 proc
cli
mov ax, 0B800h
mov es, ax
mov di, 3840
mov al, num
add al, '@'
mov es:[di], al
sti
jmp proc1
proc1 endp
proc2 proc
cli
mov ax, 0B800h
mov es, ax
mov di, 3848
mov al, num;
add al, '@'
mov es:[di], al
sti
jmp proc2
proc2 endp
end Main
Артин вне форума Ответить с цитированием
Старый 04.05.2009, 20:18   #2
Артин
 
Регистрация: 14.04.2009
Сообщений: 8
По умолчанию

Препод именно ругается на наличие cli/sti в процедурах самих процессов. Но если их убрать, то программа повисает.
Артин вне форума Ответить с цитированием
Старый 05.05.2009, 23:21   #3
Артин
 
Регистрация: 14.04.2009
Сообщений: 8
По умолчанию

Неужели никто не знает, как переделать, что бы было не через жопу и работало?)))
Артин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершение процессов Sanek777 Общие вопросы Delphi 9 13.08.2010 21:25
Блокировка процессов Zeraim Операционные системы общие вопросы 5 17.04.2008 13:02
отключение процессов UROKSAN Win Api 1 10.04.2008 09:08
Здравствуйте! Помогите пожалуйста, нужно написать планировщик задач. perple Помощь студентам 1 19.10.2007 19:37