Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10. Программирование на ассемблере ПЭВМ.Обработ...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
568.32 Кб
Скачать

Var I,n,nn,f2:longint;

code:integer;

stroka:string;

Int8:procedure; {Адрес старого обработчика прерывания}

r:registers;

Work:boolean; {Признак рабочего состояния резидента}

over:overlap absolute N; { Наложение двух слов на длинное целое}

{$F+} {обработчики прерываний}

{int 08-таймер}

Procedure Cicle(Flags,CS,IP,AX,BX,CX,DX,SI,DI,ES,DS,BP:word);interrupt;

Begin

Inline($9C);

Int8;

if Work then for i:=1 to N do inc(f2);

end;

{int 3ah - неиспользуемое DOS прерывание}

Procedure Inst(Flags,CS,IP,AX,BX,CX,DX,SI,DI,ES,DS,BP:word);interrupt;

Begin

case CX of

check:CX:=answer;{подтверждение наличия в памяти}

ask:begin {сообщить количество циклов}

AX:=over.first;

BX:=over.second;

end;

change:begin {изменить количество циклов}

Work:=true;

over.first:=AX;

over.second:=BX;

end;

disable:Work:=false; {отключить работу}

end;{case}

end;

{$F-}

Begin {начало программы-инсталлятора}

Writeln(' SlowDown. Demo version 2.2’);

if ParamCount=1 then {прочитать данные из командной строки}

begin

stroka:=ParamStr(1);

Val(stroka,nn,code);

if code<>0 then {неверный ввод}

begin

Writeln('Number please');

Halt(1);

end

else if NN=0 then Work:=false else Work:=true;

end

else {не задано число циклов}

begin

Writeln('Format:slow.exe number_of_circles');

Halt(1)

end;

r.CX:=check; {проверить наличие обработчика в памяти}

Intr($3a,r);

if r.CX=answer then

begin {обработчик уже резидентен}

r.CX:=ask; {запросить параметры в памяти}

Intr($3a,r);

over.first:=r.AX;

over.second:=r.BX;

Writeln('Already installed. Number of circles-',N);

N:=NN; { изменить число циклов}

r.CX:=change;

r.AX:=over.first;

r.BX:=over.second;

Intr($3a,r);