Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Как подмигнуть капслоком


Автор: Den64 11.12.2006, 13:32
Как на АСМе включить CapsLock или NumLock в DOSe? 

Автор: anwe 11.12.2006, 19:34
Используй команду out, порт № 60h (или 61  smile , точно не помню) функция 0EDh. Во второй ее байт этой функции заносится новое состояние светодиодов.

Автор: Den64 11.12.2006, 21:02
Я записал:
Код

    mov dx, 61h
    mov al, 0EDh
    out dx, al

Ничего не изменилось! Что я не так сделал?

Автор: anwe 11.12.2006, 21:20
Во-первых, попробуй 60h. Во-вторых, надо же во второй байт записать состояние - вызови еще раз out с регистром с новым состоянием.

Автор: Den64 11.12.2006, 23:41
Теперь я записал:
Код

    mov dx, 60h
    mov al, 0EDh
    out dx, al
    mov al, 0
    out dx, al

До запуска проги Светился NumLock, поидее должен потухнуть.
Ничего не изменилось!
Что я теперь не так сделал? 

Автор: anwe 12.12.2006, 00:25
Держи! Заставил сделать!
Код

    .model tiny
    .code
    org 100h
start:
    mov    ah,02
    int    1Ah
    mov    ch,dh
    mov    cl,0100b
l1:
    call    change
    shl    cl,1
    test    cl,1000b
    jz    l2
    mov    cl,0001b
l2:
    mov    ah,1
    int    16h
    jnz    l3
    push    cx
    mov    ah,2
    int    1Ah
    pop    cx
    cmp    ch,dh
    mov    ch,dh
    je    l2
    jmp    l1
l3:
    mov    ah,0
    int    16h
    ret

change    proc
    call    w
    mov    al,0EDh
    out    60h,al
    call    w
    mov    al,cl
    out    60h,al
    ret
change    endp

w    proc
    in    al,64h
    test    al,0010b
    jnz    w
    ret
w    endp

end    start

Надо еще опрашивать клавиатуру на готовность.

Автор: Anglichanin 27.6.2007, 01:12
Я короче скомпилировал эту программу, но ничего не появилось.
Появилась только одна ошибка.


proga.Asm(1): error A2027: Operand expected

1 Severe Errors

Автор: 10110111 29.6.2007, 14:05
Вообще, если делать через порты, то будет только светиться светодиод на клаве, а для того, чтобы включение CapsLock отразилось на работе программ( например, ввод прописных букв без Shift'а), надо писать в BDA по адресу 40:17.
По Ralf Brown's files:
 40:17            Keyboard Control                  Byte

     Bit 7          Insert Locked
     Bit 6          Caps Lock Locked
     Bit 5          Num Lock Locked
     Bit 4          Scroll Lock Locked
     Bit 3          Alt Key Pressed
     Bit 2          Ctrl Key Pressed
     Bit 1          Left Shift Key Pressed
     Bit 0          Right Shift Key Pressed

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)