forum.rastrnet.ru  

Вернуться   forum.rastrnet.ru > Компьютеры и всё, что с ними связано > Программируем

 Сообщения за день       Добавить альбом       Поиск      Правила форума  


Ответ
 
Опции темы Опции просмотра
Старый 18.03.2006, 21:11   #1
Format c:/
Cisco
 
Аватар для Format c:/
 
Регистрация: 04.11.2005
Сообщений: 2,111
Отправить сообщение для Format c:/ с помощью ICQ Отправить сообщение для Format c:/ с помощью Skype™
По умолчанию Assembler проганье

кто нить подскажите как сделать задержку например 1 сек или что бы ждалось нажатие любой клавиши???
__________________
Format c:/ вне форума   Ответить с цитированием
Старый 18.03.2006, 21:49   #2
Casy
Программист
 
Аватар для Casy
 
Регистрация: 18.07.2004
Сообщений: 455
Отправить сообщение для Casy с помощью ICQ
По умолчанию

В плане задержки на секунду - это не все так просто, как кажется

Нужно вешать свой обработчик прерывания на функцией 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 года назад все было). Текст проги - в качестве примера нам тогда писал препод.

Ждать нажатия на клавишу - проще простого. А тактика такова: есть функции, которые поддерживают ввод без эха на экране. Причем ввод нужного количества символов. Ну и делаешь ввод одного символа, без отображения. Пока символ не введут прога с места на сдвинется. Функции сам поищешь, я их уже не помню.
Casy вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler(Tasm) Format c:/ Программируем 3 27.02.2006 02:40
срочно нужна помошь по Assembler`y SERJIK Программируем 1 12.01.2006 19:00


Текущее время: 07:32. Часовой пояс GMT +7.


Powered by vBulletin® Version 3.8.4 Patch Level 5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Форум открыт в июле 2004 г.
Кошки и котята Красноярска и Сибири Живой Мир Сибири