Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Delay на Ассемблере...

347
28 мая 2006 года
Maniak
319 / / 05.11.2005
Народ может кто знает как на асме создать процедуру нападобие паскальской delay, или может кто подскажет как делают задержки при приграммировании последовательного порта, ведь между витами есть промежутки и их точно нужно задать...
10K
28 мая 2006 года
Amellion
28 / / 01.03.2006
Цитата:
Originally posted by Maniak
как делают задержки при приграммировании последовательного порта, ведь между витами есть промежутки и их точно нужно задать...



Могу ошибаться,но там таймеры юзают. Точнее может завтра попробую сказать

1.8K
29 мая 2006 года
k3Eahn
365 / / 19.12.2005
Для задержки можешь заюзать BIOS'овское
int 15h, функция ah=86h,в cx:dx сколько ждать в микросекундах.
347
29 мая 2006 года
Maniak
319 / / 05.11.2005
Цитата:
Originally posted by k3Eahn
Для задержки можешь заюзать BIOS'овское
int 15h, функция ah=86h,в cx:dx сколько ждать в микросекундах.



что то не пашет:(

.model tiny
.code
.386
org 100h
Begin:

mov ah,10h
int 16h

mov dx,20000
mov ah,86h
int 15h

mov ah,9
lea dx,str1
int 21h

mov ah,10h
int 16h

ret
str1 db "String...",0Dh,0Ah,'$'
end Begin

5.3K
29 мая 2006 года
r000n_m
177 / / 26.02.2006
Цитата:
Originally posted by Maniak
что то не пашет:(

.model tiny
.code
.386
org 100h
Begin:

mov ah,10h
int 16h

[COLOR=green]xor cx,cx[/COLOR]
mov dx,20000
mov ah,86h
int 15h
[COLOR=green]jc TimerBusy[/COLOR]

mov ah,9
lea dx,str1
int 21h

mov ah,10h
int 16h

[COLOR=green]TimerBusy:[/COLOR]

ret
str1 db "String...",0Dh,0Ah,'$'
end Begin

12K
29 мая 2006 года
ANdroid
37 / / 31.03.2006
Лови, на моем компе делает нормальную задержку (в миллисекундах как в Паскале)
delay macro time
local ext,iter1,iter2,goout
push cx
push bx
xor bx,bx
mov cx,time
cmp cx,0
je goout
ext:
push cx
mov cx,00D0h
iter1:
push cx
mov cx,0FFFFh
iter2:
loop iter2
pop cx
loop iter1
pop cx
loop ext
goout:
pop bx
pop cx
endm
347
29 мая 2006 года
Maniak
319 / / 05.11.2005
Цитата:
Originally posted by

.model tiny
.code
.386
org 100h
Begin:

mov ah,10h
int 16h

xor cx,cx
mov dx,20000
mov ah,86h
int 15h

mov ah,9
lea dx,str1
int 21h

mov ah,10h
int 16h

ret
str1 db "String...",0Dh,0Ah,'$'
end Begin



А как же сдесь сделать задерку хотябы на 1 секунду?

5.3K
30 мая 2006 года
r000n_m
177 / / 26.02.2006
.model tiny
.code
.386
org 100h
Begin:

mov ah,10h
int 16h

mov cx,15
mov dx,16960
mov ah,86h
int 15h
jc TimerBusy

mov ah,9
lea dx,str1
int 21h

mov ah,10h
int 16h

TimerBusy:

ret
str1 db "String...",0Dh,0Ah,'$'
end Begin

вроде так.
347
30 мая 2006 года
Maniak
319 / / 05.11.2005
Цитата:
Originally posted by r000n_m
.model tiny
.code
.386
org 100h
Begin:

mov ah,10h
int 16h

mov cx,15
mov dx,16960
mov ah,86h
int 15h
jc TimerBusy

mov ah,9
lea dx,str1
int 21h

mov ah,10h
int 16h

TimerBusy:

ret
str1 db "String...",0Dh,0Ah,'$'
end Begin

вроде так.



Я наверное что то сдесь глобального не понимаю... ну не получается и все:

.code
.386
org 100h ;*.com файл
Begin:

mov ah,10h
int 16h ;нажимаем кнопку...

mov cx,15
mov dx,16960
mov ah,86h
int 15h ;идет задержка

mov ah,9
lea dx,str1
int 21h ;выводим строчку (что бы
;визуально наблюдать задержку
;от нажатия кнопки до
;появления месаги)

mov ah,10h
int 16h ;опять считываем клавишу что бы
;сразу не закончить прогу

ret
str1 db "String...",0Dh,0Ah,'$'
end Begin

Что сдесь не так? Почему видимой задержки нету?

5.3K
31 мая 2006 года
r000n_m
177 / / 26.02.2006
Цитата:
Originally posted by Maniak
Что сдесь не так? Почему видимой задержки нету?


Только что проверил. Под чистым DOS'ом (с флоппика) работает правильно. Правда я в виде exe компилил, но не думаю, что это важно. Т.к. под виндами exe тоже не работал как надо

12K
31 мая 2006 года
ANdroid
37 / / 31.03.2006
Цитата:
Originally posted by r000n_m
Только что проверил. Под чистым DOS'ом (с флоппика) работает правильно. Правда я в виде exe компилил, но не думаю, что это важно. Т.к. под виндами exe тоже не работал как надо

Да, давненько я заметил, что под виндой (XP) 15h не работает вообще, потому пришлось сделать гору вложенных циклов и вроде все Ok.
Так что если delay нужен подвиндозный, то макрос, описанный выше - наиболее простой вариант (на мой взгляд).

347
31 мая 2006 года
Maniak
319 / / 05.11.2005
Цитата:
Originally posted by ANdroid
Да, давненько я заметил, что под виндой (XP) 15h не работает вообще, потому пришлось сделать гору вложенных циклов и вроде все Ok.
Так что если delay нужен подвиндозный, то макрос, описанный выше - наиболее простой вариант (на мой взгляд).



Так а как этот макрос использовать?(я новичек в асме ...)

1.8K
31 мая 2006 года
k3Eahn
365 / / 19.12.2005
Maniak,
если тебе оно надо под винду, то юзай API(Sleep к примеру).
12K
01 июня 2006 года
ANdroid
37 / / 31.03.2006
Цитата:
Originally posted by Maniak
Так а как этот макрос использовать?(я новичек в асме ...)


собсно просто пишешь как простую команду, а как операнд указываешь задержку (в мс)
Например:
...
delay 1000 ;1секунда
...

Сам текст макроса описывай где-нибудь вне сегментов, т.к он нужен только транслятору и в том месте, где ты его описываешь не будет сгенерирован код.
Транслятор потом вставит вместо delay 1000 весь тот кусок, который написан в тексте макроса и потом сгенерирует код.
Вообще работает как процедура с параметром в Паскале...

1.8K
01 июня 2006 года
k3Eahn
365 / / 19.12.2005
Цитата:
Originally posted by ANdroid
Лови, [color=red]на моем компе[/color] делает нормальную задержку (в миллисекундах как в Паскале)

12K
01 июня 2006 года
ANdroid
37 / / 31.03.2006
Цитата:
Originally posted by k3Eahn

Разумеется под свой комп можно настроить, если поменять цифры во внутренних циклах, лично я недолго настраивал под 2,6 ГГц.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог