Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Assembler
Перезагрузить страницу Определить число нажатий клавиш Ctrl за заданный интервал времени не больше 20 секунд
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Reg7 Reg7 вне форума
Banned
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2010
Arrow Определить число нажатий клавиш Ctrl за заданный интервал времени не больше 20 секунд - 30.12.2010, 14:12

Помогите, пожалуйста, написать программу: Определить число нажатий клавиш Ctrl за заданный интервал времени не больше 20 секунд. Очень нужно. Заранее спасибо за помощь.
Ответить с цитированием
  (#2 (permalink)) Старый
skaa skaa вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.01.2011
По умолчанию 08.01.2011, 02:02

Только не запускайте программу в самом-самом конце суток, я при подсчёте количества секунд переход на следующие сутки не учёл.
PHP код:
;nasm -f bin QCtrl.asm -o QCtrl.com
;Timer
    org    100h
start
:
    
jmp begin
data
:
    
qsec    db    5;number of seconds
    so    times    255    db 
'$';string for output
begin
:
    
call    CalcQs
    mov    bx
,dx
    mov    cx
,0;cl will calculate number of Ctrl pressingsch will be 1 if downif up
mQCtrlRp
:
    
call    CalcQs
    sub    dx
,bx
    mov    ax
,0
    mov    al
,byte [qsec]
    
cmp    dx,ax
    jg    mQCtrlEx

    mov    ah
,02H
  int    16H
    
and    al,4
    cmp    al
,4
    jnz    mQCtrlSkipKeyDn
    cmp    ch
,1
    je    mQCtrlAlreadyDn
    inc    cl
mQCtrlAlreadyDn
:
    
mov    ch,1
    jmp    mQCtrlSkipKeyNotDn
mQCtrlSkipKeyDn
:
    
mov    ch,0
mQCtrlSkipKeyNotDn
:

    
jmp    mQCtrlRp
mQCtrlEx
:

;
Output result BEGIN
    lea    ax
,[so]
    
mov    bx,0
    mov    bl
,cl
    call    CNToS
    lea    dx
,[so]
    
mov    ah,09
    int    21h
;Output result END

    mov    ah
,4ch
    int    21h
;=======================================================================
CalcQs:
;
Calculate number of seconds from beginning of day now
;Result:
;    
DX number of seconds
    push    ax
    push    bx
    push    cx

    mov    ah
,2ch
    int    21h

    mov    dl
,dh
    mov    dh
,0

    mov    ax
,0
    mov    al
,cl
    mov    bx
,60
    push    dx
    mul    bx
    pop    dx
    add    dx
,ax

    mov    ax
,0
    mov    al
,ch
    mov    bx
,60
    push    dx
    mul    bx
    pop    dx
    mov    bx
,60
    push    dx
    mul    bx
    pop    dx
    add    dx
,ax
    
    pop    cx
    pop    bx
    pop    ax
    ret
;=======================================================================
;=======================================================================
CNToS:
;
Convert integer number to string
;Parameter:
;    
AX result-string address
;    BX number
    push    ax
    push    cx
    push    dx
    push    si

    mov si
,ax
    mov    dx
,bx

;Check if negative BEGIN
    cmp    dx
,0
    jge    mCNToSNotNeg
    
    mov    byte 
[si],'-'
    
inc    si
    neg    dx
mCNToSNotNeg
:
;
Check if negative END

;Calculate QC BEGIN
    push    ax
    push    bx
    mov    cx
,0
    mov    ax
,dx
mCNToSCalcQC
:
    
inc    cx
    mov    bl
,10
    div    bl
    mov    ah
,0
    cmp    ax
,0
    jne    mCNToSCalcQC
    pop    bx
    pop    ax
;Calculate QC END

    add    si
,cx
    dec    si
;Convert BEGIN
    push    ax
    push    bx
    mov    ax
,dx
mCNToSConvert
:
    
mov    bl,10
    div    bl
    add    ah
,'0'
    
mov    byte [si],ah
    dec    si
    mov    ah
,0
    loop    mCNToSConvert
    pop    bx
    pop    ax
;Convert END

    pop    si
    pop    dx
    pop    cx
    pop    ax
    ret
;======================================================================= 
Ответить с цитированием
  (#3 (permalink)) Старый
Reg7 Reg7 вне форума
Banned
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2010
Arrow А где можна достать nasm и как компилировать с помощью него? - 08.01.2011, 14:49

Цитата:
Сообщение от skaa Посмотреть сообщение
Только не запускайте программу в самом-самом конце суток, я при подсчёте количества секунд переход на следующие сутки не учёл.
PHP код:
;nasm -f bin QCtrl.asm -o QCtrl.com
;Timer
    org    100h
start
:
    
jmp begin
data
:
    
qsec    db    5;number of seconds
    so    times    255    db 
'$';string for output
begin
:
    
call    CalcQs
    mov    bx
,dx
    mov    cx
,0;cl will calculate number of Ctrl pressingsch will be 1 if downif up
mQCtrlRp
:
    
call    CalcQs
    sub    dx
,bx
    mov    ax
,0
    mov    al
,byte [qsec]
    
cmp    dx,ax
    jg    mQCtrlEx

    mov    ah
,02H
  int    16H
    
and    al,4
    cmp    al
,4
    jnz    mQCtrlSkipKeyDn
    cmp    ch
,1
    je    mQCtrlAlreadyDn
    inc    cl
mQCtrlAlreadyDn
:
    
mov    ch,1
    jmp    mQCtrlSkipKeyNotDn
mQCtrlSkipKeyDn
:
    
mov    ch,0
mQCtrlSkipKeyNotDn
:

    
jmp    mQCtrlRp
mQCtrlEx
:

;
Output result BEGIN
    lea    ax
,[so]
    
mov    bx,0
    mov    bl
,cl
    call    CNToS
    lea    dx
,[so]
    
mov    ah,09
    int    21h
;Output result END

    mov    ah
,4ch
    int    21h
;=======================================================================
CalcQs:
;
Calculate number of seconds from beginning of day now
;Result:
;    
DX number of seconds
    push    ax
    push    bx
    push    cx

    mov    ah
,2ch
    int    21h

    mov    dl
,dh
    mov    dh
,0

    mov    ax
,0
    mov    al
,cl
    mov    bx
,60
    push    dx
    mul    bx
    pop    dx
    add    dx
,ax

    mov    ax
,0
    mov    al
,ch
    mov    bx
,60
    push    dx
    mul    bx
    pop    dx
    mov    bx
,60
    push    dx
    mul    bx
    pop    dx
    add    dx
,ax
    
    pop    cx
    pop    bx
    pop    ax
    ret
;=======================================================================
;=======================================================================
CNToS:
;
Convert integer number to string
;Parameter:
;    
AX result-string address
;    BX number
    push    ax
    push    cx
    push    dx
    push    si

    mov si
,ax
    mov    dx
,bx

;Check if negative BEGIN
    cmp    dx
,0
    jge    mCNToSNotNeg
    
    mov    byte 
[si],'-'
    
inc    si
    neg    dx
mCNToSNotNeg
:
;
Check if negative END

;Calculate QC BEGIN
    push    ax
    push    bx
    mov    cx
,0
    mov    ax
,dx
mCNToSCalcQC
:
    
inc    cx
    mov    bl
,10
    div    bl
    mov    ah
,0
    cmp    ax
,0
    jne    mCNToSCalcQC
    pop    bx
    pop    ax
;Calculate QC END

    add    si
,cx
    dec    si
;Convert BEGIN
    push    ax
    push    bx
    mov    ax
,dx
mCNToSConvert
:
    
mov    bl,10
    div    bl
    add    ah
,'0'
    
mov    byte [si],ah
    dec    si
    mov    ah
,0
    loop    mCNToSConvert
    pop    bx
    pop    ax
;Convert END

    pop    si
    pop    dx
    pop    cx
    pop    ax
    ret
;======================================================================= 
Ого!!! Спасибо! А где можна достать nasm и как компилировать с помощью него (а то я умею компилировать только с помощью masm32)?
Ответить с цитированием
  (#4 (permalink)) Старый
Reg7 Reg7 вне форума
Banned
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2010
Arrow не компилируется - 08.01.2011, 20:15

для компиляции использовал 2 команды и ассемблер nasm-2.07-installer.exe:
1) nasm −f elf myfile.asm
will assemble myfile.asm into an ELF object file myfile.o.

2) nasm −f bin myfile.asm −o myfile.com
will assemble myfile.asm into a raw binary file myfile.com.

однако после первой команды:
nasm −f elf myfile.asm
мне выдало ошибку:
myfile.asm:3:error:parser:instruction expected

Вы не знаете что это может быть?
Ответить с цитированием
  (#5 (permalink)) Старый
skaa skaa вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.01.2011
По умолчанию 09.01.2011, 20:20

Я взял NASM на
The Netwide Assembler: NASM
.
После запуска команды
nasm −f bin myfile.asm −o myfile.com
должен создаться myfile.com, который готов к использованию, надо его запустить в DOS окне и нажимать кнопку Ctrl. Через 20 секунд она выдаст сколько раз кнопка была нажата.
Для отладки я использую DEBUG, но отлаживать такого рода программы которые измеряют количество нажатых клавиш я даже не знаю как .
Что не получается - спрашивайте!
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Reg7 Reg7 вне форума
Banned
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2010
Arrow 10.01.2011, 00:36

Цитата:
Сообщение от skaa Посмотреть сообщение
Я взял NASM на
The Netwide Assembler: NASM
.
После запуска команды
nasm −f bin myfile.asm −o myfile.com
должен создаться myfile.com, который готов к использованию, надо его запустить в DOS окне и нажимать кнопку Ctrl. Через 20 секунд она выдаст сколько раз кнопка была нажата.
Для отладки я использую DEBUG, но отлаживать такого рода программы которые измеряют количество нажатых клавиш я даже не знаю как .
Что не получается - спрашивайте!
Ура! Работает. А какая строчка в коде программы выдает результат (количество нажатий клавишы Ctrl)?
Ответить с цитированием
  (#7 (permalink)) Старый
skaa skaa вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.01.2011
По умолчанию 10.01.2011, 06:42

В последовательности:
PHP код:
;Output result BEGIN
    lea    ax
,[so]
    
mov    bx,0
    mov    bl
,cl
    call    CNToS
    lea    dx
,[so]
    
mov    ah,09
    int    21h
;Output result END 
функция CNToS переводит число нажатий Ctrl (регистр cl) в строку с адресом so, а три последние строчки выводят её на экран.
Ответить с цитированием
  (#8 (permalink)) Старый
Reg7 Reg7 вне форума
Banned
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2010
Arrow 10.01.2011, 09:37

Цитата:
Сообщение от skaa Посмотреть сообщение
В последовательности:
PHP код:
;Output result BEGIN
    lea    ax
,[so]
    
mov    bx,0
    mov    bl
,cl
    call    CNToS
    lea    dx
,[so]
    
mov    ah,09
    int    21h
;Output result END 
функция CNToS переводит число нажатий Ctrl (регистр cl) в строку с адресом so, а три последние строчки выводят её на экран.
Спасибо огромное.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Случайное число из отрезка попадающее в интервал turtles Java 1 31.08.2011 14:17
Определить сколько раз в списке встречается заданный объект AntiSemit Lisp 0 19.12.2009 20:46
Копирование ячеек через заданный интевал времени doubter Visual Basic 3 30.11.2007 21:57
Определить функцию, которая находит в списке заданный элемент yura_korepin Lisp 1 19.11.2007 10:41
Как определить что нажата и главное удерживается нажатой клавиша Ctrl Романнист C++ Builder 4 08.08.2006 13:40
Обработка событий нажатий клавиш Митька_Димка Delphi 2 26.10.2005 15:40
Проверка нажатий комбинации клавиш Программист C++ Builder 7 11.02.2005 11:55
Как определить часовой интервал наибольшей интенсивности поступления звонков NemoASPI Вопросы начинающих программистов 0 27.12.2004 00:47
Обработка нажатий клавиш Monah IRH PHP 2 28.09.2004 12:00
Перехват нажатий клавиш CSKCSK C++ Builder 1 11.08.2004 19:47
Есть необходимость спрятать программу от комбинации клавиш Ctrl+Alt+Del Anonymous C++ Builder 15 27.12.2003 16:53
Отключение команды по набору клавиш ALT+CTRL+DEL в win2000 xp Anonymous C++ Builder 2 17.11.2002 01:14



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов