Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; определить, какой из шифтов нажат
- ; Intel 80586
- .586P
- ; плоская модель памяти
- .model flat, stdcall
- ; константы
- std_output_handle equ -11
- std_input_handle equ -10
- key_ev equ 0
- left_shift_val equ 42
- right_shift_val equ 54
- ; прототипы внешних процедур
- extern GetStdHandle@4:near
- extern WriteConsoleA@20:near
- extern ReadConsoleInputA@16:near
- ; подключаемые библиотеки
- includelib C:\masm32\lib\user32.lib
- includelib C:\masm32\lib\kernel32.lib
- ; сегмент данных
- data segment
- return dword ?
- output_handle dword ?
- input_handle dword ?
- co dword ?
- buf_key word 9 dup(?)
- left_shift_msg db " LEFT SHIFT",10,0 ; 10 - перевод строки, 0 - конец
- right_shift_msg db " RIGHT SHIFT",10,0
- data ends
- ; сегмент кода
- text segment
- start:
- ; получение хэндлов ввода\вывода
- push std_input_handle
- call GetStdHandle@4
- mov input_handle, eax
- push std_output_handle
- call GetStdHandle@4
- mov output_handle, eax
- main_loop:
- ; считываем со входа
- push offset co
- push 1
- push offset buf_key
- push input_handle
- call ReadConsoleInputA@16
- ; проверяем отжатие клавиши
- cmp word ptr buf_key + 4, key_ev
- jne main_loop
- mov ax, word ptr buf_key + 12 ; записываем скан-код в регистр ax
- cmp ax, left_shift_val ; сравниваем скан-код с кодом клавиши left_shift
- je left_shift
- cmp ax, right_shift_val ; сравниваем скан-код с кодом клавиши right_shift
- je right_shift
- jmp main_loop
- left_shift:
- ; печатаем сообщение о левом шифте
- push 0
- push offset return ; адрес куда вернуть (нам не важен)
- push 13 ; длина сообщения
- push offset left_shift_msg ; первый символ сообщения
- push output_handle
- call WriteConsoleA@20 ; 20 = 4 байта * 5 аргументов
- jmp main_loop
- right_shift:
- push 0
- push offset return
- push 14
- push offset right_shift_msg
- push output_handle
- call WriteConsoleA@20
- jmp main_loop
- text ends
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement