cs:0100 EB41 JMP 0143 cs:0102 0000 DW 0000 ; признак активизации и настройка времени задержки cs:0104 AA00 DW 00AA ; счетчик повторения цикла уровень 1 cs:0106 AA00 DW 00AA ; счетчик повторения цикла уровень 2 cs:0108 AA00 DW 00AA ; счетчик повторения цикла уровень 3 cs:010A 9C PUSHF ; запинаем флаги для правильного их восстановления cs:010B 2EF7060201FFFF TEST Word Ptr CS:[0102],FFFF ; проверяем необходимость торможения cs:0112 7429 JZ 013D ; нет -- выполняем прерывание и уходим cs:0114 51 PUSH CX ; цикл, уровень 1 cs:0115 2E8B0E0401 MOV CX,CS:[0104] ; инициализация счетчика cs:011A 51 PUSH CX ; цикл, уровень 2 cs:011B 2E8B0E0601 MOV CX,CS:[0106] ; ... cs:0120 51 PUSH CX ; цикл, уровень 3 cs:0121 2E8B0E0801 MOV CX,CS:[0108] ; ... cs:0126 21C0 AND AX,AX ; тело цикла: тормоз cs:0128 21DB AND BX,BX cs:012A 21C9 AND CX,CX cs:012C 21D2 AND DX,DX cs:012E E2F6 LOOP 0126 ; цикл 3 cs:0130 59 POP CX cs:0131 E2ED LOOP 0120 ; цикл 2 cs:0133 59 POP CX cs:0134 E2E4 LOOP 011A ; цикл 1 cs:0136 59 POP CX cs:0137 2E832E020101 SUB Word Ptr CS:[0102],+01 ; изменения признака активности cs:013D 9A11110000 CALL 0000:1111 ; выполнение настоящего int 08h cs:0142 CF IRET ; возврат из прерывания cs:0143 B80835 MOV AX,3508 ; читаем значение вектора int 08h cs:0146 CD21 INT 21 cs:0148 2E891E3E01 MOV CS:[013E],BX ; ориентируем call на старый int 08h cs:014D 2E8C064001 MOV CS:[0140],ES cs:0152 B80825 MOV AX,2508 ; подставляем новый int 08h cs:0155 BA0A01 MOV DX,010A cs:0158 CD21 INT 21 cs:015A B8CC25 MOV AX,25CC ; тоже с int 0cch cs:015D BA0A01 MOV DX,010A ; (указывает на параметры измененного вектора) cs:0160 CD21 INT 21 ; cs:0162 BA4801 MOV DX,0148 ; cs:0165 CD27 INT 27Замечания: вызов настоящего int 08h перенесен в конец, так работает надежнее. Тело цикла можно сделать массивнее, для более эффектного торможения, но 3х счетчиков обычно вполне хватает.
piiih-up:
cs:0100 B8CC35 MOV AX,35CC ; читаем адрес int 0cch в es:bx cs:0103 CD21 INT 21 ; cs:0105 81EB0A01 SUB BX,010A ; если не установлен piiih -- ушел cs:0109 751C JNZ 0127 ; cs:010B 26C70602016600 MOV Word Ptr ES:[0102],0066 ; выставляем задержку cs:0112 26C7060401AA00 MOV Word Ptr ES:[0104],00AA ; счетчи цикла 1 cs:0119 26C7060601AA00 MOV Word Ptr ES:[0106],00AA ; счетчи цикла 2 cs:0120 26C7060801AA00 MOV Word Ptr ES:[0108],00AA ; счетчи цикла 3 cs:0127 CD20 INT 20 ; всеЗначения в piiih-up для каждой конкретной машины свои: нужно подбирать!