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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2015, 22:32   #1
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию Как организовать задержку (API Sleep)?

Есть-ли у кого нетривиальные способы организации паузы?
В справочнике сказано, что fn(86) INT-15h работает только на AT-машинах, видимо поэтому у меня не срабатывает. Что можно предпринять?

Написал такой макрос, но он почему-то срабатывает через-раз. Подскажите, где ошибка?
Вызываю так: GetDelay 5

Код:
macro GetDelay [sec]  
{  mov   ax,0200h           ; таймер. читаем секунду -----------------------------------|
   int   1Ah
   add   dh,sec             ; DH = секунда! прибавляем к ней задержку.
   cmp   dh,59h             ; проверим DH на больше/равно 60 сек
   jnbe  correct            ; вышли за предел? Если да - коррекция
   mov   bl,dh              ; если DH меньше 60, то сохраняем секунду в BL для сравнения
   jmp   timer              ; переход в цикл чтения
correct:
   sub   dh,59h             ; скорректируем секунды
   mov   bl,dh              ; сохраняем получившуюся секунду
timer:
   mov   ax,0200h           ; читаем текущую секунду в цикле..
   int   1Ah
   cmp   dh,bl              ; сравниваем с сохранённым BL
   je    endTimer           ; равно? выходим из цикла
   jmp   timer              ; значит не равно. мотаем цикл..
endTimer:         }
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 30.09.2015 в 22:35.
R71MT вне форума Ответить с цитированием
Старый 01.10.2015, 08:30   #2
AbakBarama
Пользователь
 
Регистрация: 12.05.2011
Сообщений: 57
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
проверим DH на больше/равно 60 сек
А на самом деле сравниваете с 59h==89 сек.
AbakBarama вне форума Ответить с цитированием
Старый 01.10.2015, 10:11   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А чо б Sleep()-то не вызвать?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 01.10.2015, 13:56   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

в сх - количество тиков сколько ожидать. 1тик= 55 мсек.
Код:
	xor ax,ax
	mov es,ax
	mov ax,es:[46ch]
	add ax,cx
wait1:	cmp ax,es:[46ch]
	jnz wait1
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 01.10.2015, 14:52   #5
Argogo
Пользователь
 
Регистрация: 28.03.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
В справочнике сказано, что fn(86) INT-15h работает только на AT-машинах, видимо поэтому у меня не срабатывает. Что можно предпринять?
Это говорит о том, что работает на всех AT-машинах и более поздних. Только использовать её можно в чистом DOS'е (ну или совсем без системы). Ибо во всяких-там NTVDM (и прочих эмуляторах) оно не (всегда) работает.
Argogo вне форума Ответить с цитированием
Старый 01.10.2015, 21:57   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

AbakBarama, глюк был не на том участке, а в конце: je endTimer
..я проверял на равно, а нужно было на "больше/равно"

min@y™, хотелось-бы без API

alexcoder, прикольный вариант! Нужно будет взять на заметку..

Argogo, не знаю как-там с чистым досом, но под "Борщом" тоже не работает
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 01.10.2015 в 23:32.
R71MT вне форума Ответить с цитированием
Старый 01.10.2015, 22:51   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
хотелось-бы без API
почему? прога не под виндавсом штоль?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.10.2015, 01:00   #8
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
прога не под виндавсом штоль?
min@y™..если с Boot-CD будеш грузиться, то планы рухнут. Мне-бы без API, и всё ручками... Желательно красиво....

alexcoder предложил свой вариант, схватив тики1
...не вомневаюсь, что у тя ест свой вариант...Акромя тиков на чё можно опереться...
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 04.10.2015 в 01:06.
R71MT вне форума Ответить с цитированием
Старый 04.10.2015, 05:45   #9
Argogo
Пользователь
 
Регистрация: 28.03.2013
Сообщений: 22
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
не знаю как-там с чистым досом, но под "Борщом" тоже не работает
Цитата:
Сообщение от R71MT Посмотреть сообщение
если с Boot-CD будеш грузиться, то планы рухнут. Мне-бы без API, и всё ручками...
Я правильно понимаю, что должно работать и под "борщом", и при загрузке с CD (т.е. вообще без системы)? Или необходима правильная работа только с CD, без OS?
Argogo вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать задержку в визуальной программе?? RegediK Общие вопросы C/C++ 2 16.02.2012 01:40
как сделать задержку вывода изображения pupilMartyr Общие вопросы Delphi 9 03.05.2011 21:57
Как заменить sleep в потоке? чтобы получить задержку 5 мили Dasverd2010 Общие вопросы Delphi 13 07.09.2010 14:29
как сделать паузу (или задержку) в цыкле : с# Natok Помощь студентам 7 30.05.2009 12:55
Как организовать задержку выполнения?? Kenifer Общие вопросы Delphi 12 03.09.2007 21:56