![]() |
|
|
#1 |
|
Cisco
![]() |
кто нить подскажите как сделать задержку например 1 сек или что бы ждалось нажатие любой клавиши???
__________________
![]() |
|
|
|
|
|
#2 |
|
Программист
|
В плане задержки на секунду - это не все так просто, как кажется
Нужно вешать свой обработчик прерывания на функцией 251ch 21h прерывания. А перед этим еще желательно сохранить текущий обработчик(чтобы после выхода из проги восстановить его) с помощью функции 351ch. Пусть например этот обработчик на каждый тик таймера уменьшает значение какой-нить переменной на 1. 18 тиков - почти одна секунда. Вот пример кода: assume cs:c,ss:s,ds:d delay = 3;задерживать будем на 3 секунды s segment stack dw 128 dup(?) s ends d segment old1c dw 0,0 x dw ?;переменная, которую будем уменьшать d ends c segment start: mov ax,d mov ds,ax mov ax,351ch;сохраняем текущий обработчик int 21h push bx push es mov ax,251ch lea dx,tim;в dx адресс процедуры уменьшающей переменную push ds push cs pop ds int 21h;выполняем установку нового обработчика pop ds mov cx,5 mov x,18*delay;в х запихиваем кол-во секунд умноженное на 18(именно столько тиков в секунду) m: cmp x,0;сравниваем х с 0 jnz m ;как только он уменьшиться обработчиком до 0, значит прошло ~3 секунды mov x,18*delay;подготавливаем данные для следующей задержки mov ah,2 mov dl,'*';для демонстрации выводим символ "*" на экран int 21h loop m pop ds pop dx mov ax,251ch;записываем старый обработчик на историческое место в памяти int 21h mov ax,4c00h;выходим из проги int 21h tim: push ax;собсно новый обработчик push ds mov ax,d mov ds,ax dec x;уменьшаем значение pop ds pop ax iret;выход из процедуры обработки прерывание(именно iret, а не ret как из обычных процедур) c ends end start Если коменты понятны, да еще и правельны - значит кое что помню еще в асме (3 года назад все было). Текст проги - в качестве примера нам тогда писал препод.Ждать нажатия на клавишу - проще простого. А тактика такова: есть функции, которые поддерживают ввод без эха на экране. Причем ввод нужного количества символов. Ну и делаешь ввод одного символа, без отображения. Пока символ не введут прога с места на сдвинется. Функции сам поищешь, я их уже не помню. |
|
|
|
![]() |
|
|
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Assembler(Tasm) | Format c:/ | Программируем | 3 | 27.02.2006 02:40 |
| срочно нужна помошь по Assembler`y | SERJIK | Программируем | 1 | 12.01.2006 19:00 |
|
|