0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
1

Пауза на 7 секунд или пауза до нажатия клавиши

06.11.2013, 01:51. Показов 4336. Ответов 12
Метки нет (Все метки)

Для загрузчика надо сделать паузу, длящуюся 7 секунд, во время которой, если пользователь нажмет клавишу, происходит выход из паузы, или выход из паузы происходит по истечению 7 секунд.

Как по отдельности сделать то и то знаю:

Пауза до нажатия клавиши
Assembler
1
2
mov ah,0
int 16h
Пауза на ~7 секунд
Assembler
1
2
3
4
mov cx,500 ; старшее слово числа микросекунд паузы
mov dx,0 ; младшее слово числа микросекунд паузы
mov ah,86h ; функция 86h
int 15h ; пауза
Но как объединить эти две не знаю, или существует какой-то другой способ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2013, 01:51
Ответы с готовыми решениями:

Пауза (ожидание нажатия любой клавиши)
В windows паузу можно сделать через getch(), которая хранится в conio.h. А убунту почему-то не...

Ожидание нажатия кнопки или пауза в выполнении цикла
Есть цикл, внутри него несколько кейсов. Необходимо каким-то образом реализовать "поэтапное"...

Пауза и возобновление работы по нажатию клавиши
Здравствуйте. Необходимо реализовать паузу в цикле при нажатии на клавишу и продолжение программы...

Пауза/рывок при нажатии клавиши
Добрый день! Пишу обработчик событий для клавиатуры (left, right ,up и down) и заметил одну...

12
541 / 341 / 63
Регистрация: 29.03.2013
Сообщений: 702
06.11.2013, 09:00 2
UWasya, примерно так:
1. Flag=0;
2. AX=8300h, ES:BX - ptr to Flag, INT 15h - задаёшь время ожидания(CX: DX);
3. AH=1 INT 16h - проверяешь, нажата ли какая-нибудь клавиша;
4. Если не нажата - переход к п. 8;
5. Отменяешь ожидание установки флага AX=8301h, INT 15h;
6. Получаешь символ(ы) AH=0 INT 16h;
7. Переходишь к п.9;
8. Если Flag<>80h, переход к п.3;
9. ...

PS: под windows Fn 83h/Int15h может не работать, пробуй из-под DOS.
1
Клюг
7670 / 3185 / 382
Регистрация: 03.05.2011
Сообщений: 8,381
06.11.2013, 10:09 3
Повесить обработчик на int 1Ch и в нём по int 16h/AH=01h опрашивать буфер клавы. Примеры - ищите old_int1C в разделе Assembler, MASM, TASM
0
1773 / 751 / 153
Регистрация: 03.06.2009
Сообщений: 5,492
06.11.2013, 10:22 4
Опрашивать по int 16h/AH=01h + в цикле проверять 4-х байтное значение по адресу
40:006c Timer tick counter (count of 55ms ticks since CPU reset)
0
36 / 34 / 13
Регистрация: 22.03.2013
Сообщений: 285
06.11.2013, 12:17 5
Мб какой-то адекватный пример есть? На который можно ориентироваться?
0
1773 / 751 / 153
Регистрация: 03.06.2009
Сообщений: 5,492
06.11.2013, 12:26 6
быдлокод:
Assembler
1
2
3
4
5
6
7
8
9
10
11
;ax - кол-во тиков
;1 тик=55 мсек
wwait:
    push ds     ;сохранить сегментный регистр
    push 40h
    pop ds      ;DS=0040h (область данных BIOS)
    movzx eax,ax    ;очистить старшую часть EAX
    add eax,ds:[6ch];В eax значение счетчика тиков, при котором заканчивается ожидание
wlp:    cmp ds:[6ch],eax;сравнить значение счетчика с eax
    jb wlp      ;если счетчик меньше - продолжить ожидание
    pop ds      ;восстановить регистр
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
06.11.2013, 12:54  [ТС] 7
Наиболее понятна из всех ваша реализация, но можете более подробно уточнить некоторые моменты:
"4. Если не нажата - переход к п. 8;"
тут мы по флагу ZF должны проверять

"8. Если Flag<>80h, переход к п.3;"
тут что-то вообще не понятно, для чего сама переменная Flag нужна, какая функция в ней изменяет значения?
0
36 / 34 / 13
Регистрация: 22.03.2013
Сообщений: 285
06.11.2013, 13:04 8
Цитата Сообщение от alexcoder Посмотреть сообщение
быдлокод:
Зачем мы делаем pop ds, если потом происходит
Assembler
1
2
mov ds,6ch
add eax,ds
Или я не так понял?
0
541 / 341 / 63
Регистрация: 29.03.2013
Сообщений: 702
06.11.2013, 13:50 9
Цитата Сообщение от UWasya Посмотреть сообщение
"4. Если не нажата - переход к п. 8;"
тут мы по флагу ZF должны проверять
да, jz пункт8

Цитата Сообщение от UWasya Посмотреть сообщение
"8. Если Flag<>80h, переход к п.3;"
тут что-то вообще не понятно, для чего сама переменная Flag нужна, какая функция в ней изменяет значения?
функция AX=8300h, INT 15h ожидает в ES:BX адрес переменной размером в байт, седьмой бит которого она установит в 1 по окончании заданного CX: DX промежутка времени.
1
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
06.11.2013, 22:51  [ТС] 10
Можете еще начинающему кодеру еще кое-что уточнить:
Цитата Сообщение от Argogo Посмотреть сообщение
ES:BX - ptr to Flag
move byte ptr flag,bx ? (flag как db)
Цитата Сообщение от Argogo Посмотреть сообщение
Если Flag<>80h
про знаки больше меньше не понял как реализовать.
0
Ушел с форума
Автор FAQ
14924 / 7180 / 875
Регистрация: 11.11.2010
Сообщений: 12,882
07.11.2013, 05:38 11
Цитата Сообщение от UWasya Посмотреть сообщение
про знаки больше меньше
UWasya, у Argogo так обозначено "не равно"
1
541 / 341 / 63
Регистрация: 29.03.2013
Сообщений: 702
07.11.2013, 09:42 12
Цитата Сообщение от UWasya Посмотреть сообщение
Можете еще начинающему кодеру еще кое-что уточнить:
Сообщение от Argogo ES:BX - ptr to Flag move byte ptr flag,bx ? (flag как db)
UWasya, как начинающий кодер, ты давно должен был прочитать справку по функции 8300h прерывания int 15h. Тогда ты мог бы сам догадаться, что переменная Flag представляет собой байт, и что пара регистров ES:BX должна указывать на этот байт перед обращением к данной функции.
Вот пример для случая, когда код и данные в одном сегменте:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
    ...
    push    cs
    pop es
    mov bx, offset Flag
    mov ax, 8300h
    mov cx, Deley_HighWord
    mov dx, Delay_LowWord
    int 15h
    jc  @@FailSetTimer
    ...
Flag    db  0
    ...
1
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 35
07.11.2013, 20:33  [ТС] 13
Спасибо за всё большое.
Я уже к моменту вашего ответа по вот этому материалу все сделал http://fido7.ru.asm.chainik.na... p-or-delay
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2013, 20:33

Методы работы с временем.пауза анимации или замедление времени
Ребята , вот например нужно мне швырнуть в противника морозцом нарпример ,он потом должен...

Имитация нажатия клавиши D каждые 5 секунд
Народ нужно сделать прогу которая имитировала нажатие на клавишу &quot;D&quot; каждые 5 секунд, все нужно...

После нажатия клавиши Enter или нажатия на Button
Помогите пожалуйста.:-[ Задача: После нажатия клавиши Enter или нажатия на Button поле курсора...

Пауза
Здравствуйте) как реализовать паузу в плеере с помощью winmm.dll есть команда pause, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.