Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с блокировкой клавиатуры, как заблокировать на несколько секунд 
:(
    Опции темы
Voyager
Дата 18.11.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Вот задали в универе написать на Turbo Assembler 5.0 (можно и на другом) простенькую программу, которая на несколько секунд блокирует клавиатуру. Я в ассемблере начинающий, не знаю от чего оттолкнуться. За пример или текст программы буду очень благодарен!
Спасибо.

PM   Вверх
Chingachguk
Дата 18.11.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Под дос ?

Скачай книгу Зубкова С.В. или купи, у него есть описание работы с портами клавиатуры (команды in/out или inportb в си, или Port[] в паскале) или же почитай у Ральфа Брауна про то же самое. Пользуясь команадами для работы с контроллером клавиатруры, блокируй ее.

Если же ты изберешь способ перехвата прерывания (в досе это int 9h или int 16h), то необходимо там же прочитать про вектора прерываний и т.п.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Voyager
Дата 20.11.2005, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



smile
PM   Вверх
Voyager
Дата 22.11.2005, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Узнал вот что
Код


in  al, 21h        ;чтение IMR
or  al, 00000010b  ;вырубить irq1 (клавиатура)
out 21h, al        ;запись IMR

; Какое нибудь ожидание по таймеру. К  примеру
; установить  какую   нибудь  переменную-флаг.
; Пока   он   установлен   дальше   не   идти.
; Перехватить int 08h (вектор по умолчанию для
; irq0 (таймер)).  Потом  по  таймеру сбросить
; флаг и снять обработчик.

in  al, 21h        ;чтение IMR
and al, 11111101b  ;врубить irq1
out 21h, al        ;запись IMR


Помогите составить программу smile
PM   Вверх
Akina
Дата 22.11.2005, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Ну и?

Маскируешь IRQ1. Ждешь... сколько там надо? 3 секунды, скажем - это 3*18.2 = 55 тиков, читаешь Timer Counter из DOS Low Memory (0:46Ch - Long integer with Timer Counter) и ждешь пока эти 55 тиков пройдут, потом размаскируешь. Все...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Voyager
Дата 25.11.2005, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Написал.

Код

;Программа для блокировки клавиатуры
    .model small                
    .stack  100
    .data    
mes0    db    0dh,0ah,'1.Keyboard locked $' ;текстовая строка
mes1    db    0dh,0ah,'2.Keyboard unlocked $'     ;текстовая строка
mes2    db    0dh,0ah,'EXIT$'                ;текстовая строка

delay    macro   time
    local    inner,outer
    mov    cx,time
outer:    push    cx
    mov    cx,0
inner:    loop    inner
    pop    cx
    loop    outer
endm

    .code                           
begin:
    mov    ax,@data        
    mov    ds,ax        
    mov    es,ax

    mov    ax,0003h    ;Очистка монитора
    int    10h
    
    ;Включение и выключение клавиатуpы чеpез запpет клавиатуpного пpеpывания

    in  al, 21h        ;чтение IMR
    or  al, 00000010b  ;выключить irq1 (клавиатура)
    out 21h, al        ;запись IMR
    
    mov    ah, 09h 
    mov    dx,offset mes0      ;Выводим сообщение mes0
    int    21h
    
    delay    65535      ;пауза
    
    in  al, 21h        ;чтение IMR
    and al, 11111101b  ;включить irq1
    out 21h, al        ;запись IMR
    
    mov    ah, 09h 
    mov    dx,offset mes1      ;Выводим сообщение mes1
    int    21h
    
    delay    20000      ;пауза
    
    mov ah,09h        
    mov dx,offset mes2  ; Выводим сообщение mes2
    int 21h
    
    mov    ax,4c00h   ; функция DOS завершения программы  
    int    21h
end    begin


Только все равно под WinNT не работает.
PM   Вверх
Akina
Дата 25.11.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 1
Всего: 454



Цитата(Voyager @ 25.11.2005, 08:42)
под WinNT не работает

и не будет... в NT-based системах пользовательское приложение никто на километр к портам не подпустит... и правильно, кстати.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.