Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
 
Опции темы Опции просмотра
Непрочитано 22.06.2006, 10:39   [включить плавающее окно]   #1
солнышко
Женский Новенький
Автор темы
 
Регистрация: 19.06.2006
циклическое переключение индикаторов клавиатуры в Ассемблере

Здравствуйте, пожалуйста помогите с задачей=) Программа ы формате com ? осуществляющая циклическое переключение индикаторов клавиатуры(Caps Lock и еще два) используя упрощенные директивы сегментации. Для передачи кодов параметров используется входной буфер с адресом 60h, для пересылке команд клавиатуре EDh. И данна была таблица 8 7 6 5 4 3 2 1 0 резерв CL NL SL CL 0-выкл 1- вкл NL 0 выкл 1 вкл. SL 0 выкл 1 вкл 7-3 должны быть установлены на 0
Заранее благодарю!
(ОС WINDOWS XP,TASM)
солнышко вне форума  
Ответить с цитированием
Непрочитано 22.06.2006, 13:58   [включить плавающее окно]   #2
1101
Мужской Новенький
 
Регистрация: 17.06.2006
Адрес: Хабаровск
Jesi, иди на http://www.wasm.ru/forum/ там была примерно такая тема с листингом на MASM'е
1101 вне форума  
Ответить с цитированием
Непрочитано 28.06.2006, 15:58   [включить плавающее окно]   #3
Sanya
Мужской Опытный
 
Аватар для Sanya
 
Регистрация: 22.03.2003
Адрес: Апатиты
солнышко
Код:
//*********************************************************************
// мигание индикаторов
// команда 0xED выдается не контроллеру, а самой клавиатуре,
// поэтому пишем ее в порт 0х60
// Состояние индикаторов определяется следующим байтом,
//   0-й бит == состояние Scroll Lock
//   1-й бит == Caps Lock
//   2-й бит == Num Lock
// Бит ==1 -> зажечь светодиод, Бит == 0 -> погасить светодиод
// Для комбинирования светодиодов юзаются битовые маски
// (если записать "3", то включатся Scroll и Caps, а Num погаснет)
//    0 == 000 (все погашены)
//    1 == 001 (Scroll)
//    2 == 010 (Caps)
//    3 == 011 (Scroll + Caps)
//    4 == 100 (Num)
//    5 == 101 (Num + Scroll)
//    6 == 110 (Num + Caps)
//    7 == 111 (все включены)
// Старшие биты (начиная с 3-го) игнорируются.
// Если определить 1 == SCROLL_LOCK, 2 == CAPS_LOCK, 4 == NUM_LOCK,
// то значения получаются установкой битов:
//    зажечь Num и Scroll:   NUM_LOCK | SCROLL_LOCK (5 == 4 + 1)
// сложение чисел заменяется установкой битов побитовым "или"

    static short int i=1;  // вообще-то должно быть char...
    asm{
        mov al, 0xED
        out 0x60, al
        mov ax, i   // i занимает 2 байта, поэтому ax
        out 0x60, al  // ah нас не интересует
        nop
        nop
        nop
    }
    if(i==1) i=2;
    else if(i==2) i=4;
    else i=1;
//*********************************************************************
тут, правда, вперемешку с Сишным кодом, но в целом проблем не возникнет
по таймеру (или как больше нравится) вызываешь этот код -- и будет тебе счастье.
Переменная i -- статическая, в АСМ сделай ее глобальной.
__________________
Лечить и судить умеют и могут все, а вот рассчитать несущую балку?
Sanya вне форума  
Конфигурация ПК
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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


Текущее время: 03:16. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey