A.I.M.(http://forum.ja2.su/cgi-bin/yabb/YaBB.pl)
Генерал >> Ъ и Ь >> Ассемблер
(Message started by: Tanto на 08.12.2003 в 01:58:15)

Заголовок: Ассемблер
Прислано пользователем Tanto на 08.12.2003 в 01:58:15
====НАРОД====
Есть здесь кто шарит в "ассемблере"?
Передо мной стоит задача
При каждом нажатии клавиши должно выодится ее значение на экран. Нажали "А" и на экране появляется  "А". Нажатия шифтов и альтов тоже обрабатываются. Но еще остаются функциональные клавиши. Как обрабатывать их скан-код и выводить сообщение о них на экран, ровно  как и комбинации с шифтом и альтом? Также и нажатия  капс лоск и нам лок? Ведь это не алфавитно-цифровые клавиши, а управляющие. И насколько я понимаю, они имеют  обозначаются в 2-байтном дополнительном АСКИ-коде, а сканировать и выводить на экран я могу только однобайтные скан-коды. Доп АСКИ-код   впервом байте всегда имеет нулевое значение.
В аттаче два варианта, которые обрабатывают нажатия клавиши, но не делают этого до конца.
Буду пренамного благодарен,  если кто-нибудь решит эту задачу к пятнице 13 дек.

Заголовок: Re: Ассемблер
Прислано пользователем Psyho на 11.12.2003 в 10:58:39
//Самый простой вариант без Alt, Ctrl, Shift, NumLock, CapsLock (их можно получить только как флаги)

.model TINY
.code
     org 100h
start:
     push cs
     pop  ds
     
label1:
     mov ax, 0100h
     int 16h
     jz label1

     mov ax, 0000h
     int 16h
     cmp al, 0
     jnz smb      
     mov al, ah
smb:
     mov dl, al
     mov ax, 0200h
     int 21h
     cmp al, 27
     jnz label1
exit:
     mov ax, 4c00h
     int 21h
end start

Заголовок: Re: Ассемблер
Прислано пользователем Tanto на 21.12.2003 в 00:45:54
По ходу дела вот что треба ей от меня

.model small
CODES SEGMENT 'code'
ASSUME CS:CODES
org 100h
MAIN:
      mov ah,0
      int 16h
;-------------------- f      
      cmp ah,59
      jz f1
      cmp ah,62
      jz f4
      cmp ah,68
      jz f10
;--------------------shift_f
      cmp ah,84
      jz sf1
      cmp ah,85
      jz sf2
      cmp ah,93
      jz sf10
;--------------------ctrl_f
      cmp ah,94
      jz cf1
      cmp ah,95
      jz cf2
      cmp ah,103
      jz cf10
;--------------------alt_f
      cmp ah,104
      jz af1
      cmp ah,105
      jz af2
      cmp ah,113
      jz af10      
;--------------------
      jmp A
;--------------------
f1:
     mov      ah,9
     mov      dx, offset mef1
     int      21h
     jmp exit
f4:
       mov      ah,9
     mov      dx, offset mef4
     int      21h
     jmp exit
f10:    
       mov      ah,9
     mov      dx, offset mef10
     int      21h
     jmp exit
;------------------
sf1:
     mov      ah,9
     mov      dx, offset mesf1
     int      21h
     jmp exit
sf2:
       mov      ah,9
     mov      dx, offset mesf2
     int      21h
     jmp exit
sf10:    
       mov      ah,9
     mov      dx, offset mesf10
     int      21h
     jmp exit
;-------------------
cf1:
     mov      ah,9
     mov      dx, offset mecf1
     int      21h
     jmp exit
cf2:
       mov      ah,9
     mov      dx, offset mecf2
     int      21h
     jmp exit
cf10:    
       mov      ah,9
     mov      dx, offset mecf10
     int      21h
     jmp exit
;-----------------
af1:
     mov      ah,9
     mov      dx, offset meaf1
     int      21h
     jmp exit
af2:
       mov      ah,9
     mov      dx, offset meaf2
     int      21h
     jmp exit
af10:    
       mov      ah,9
     mov      dx, offset meaf10
     int      21h
     jmp exit
;-----------------
A:
       mov ah,0ah
       mov cx,1   ; выводим один символ
       mov bh,0   ; страница 0
       int 10h    
       jmp Main

;-----------------
exit:
    mov ah,4ch
    int 21h

mef1      db      0dh,0ah, "You press F1", '$'
mef4      db      0dh,0ah, "You press F4", '$'
mef10      db      0dh,0ah, "You press F10", '$'

mesf1      db      0dh,0ah, "You press shift+F1", '$'
mesf2      db      0dh,0ah, "You press shift+F2", '$'
mesf10      db      0dh,0ah, "You press shift+F10", '$'

mecf1      db      0dh,0ah, "You press ctrl+F1", '$'
mecf2      db      0dh,0ah, "You press ctrl+F2", '$'
mecf10      db      0dh,0ah, "You press ctrl+F10", '$'

meaf1      db      0dh,0ah, "You press alt+F1", '$'
meaf2      db      0dh,0ah, "You press alt+F2", '$'
meaf10      db      0dh,0ah, "You press alt+F10", '$'



CODES ENDS
END MAIN

Заголовок: Re: Ассемблер
Прислано пользователем Tanto на 21.12.2003 в 00:47:18
Понимаешь, на каждую клавишу писать много было б, я написал тока н аизбранные и обьяснил ей это. Так как она не очень шарит, то приняла мои обьяснения.
Можно было б с циклом, но вышли траблы. так что пришлось так...



A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.