Время между нажатиями клавиш - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день, есть программа, выводящая время, прошедшее между нажатиями клавиш "я" и "A"(лат.), нужно немножко поределать, что бы выводил время между нажатиями

любой цифры

и

любой буквы

, не понимаю как это сделать, возможно как-то диапазоном. Процессор 8086, компилировать через TASM, TLINK. Буду благодарен!
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. ascval db '000.0','$'
  5. mili db 0
  6. sec db 0
  7. old_int09h dd 0
  8. old_int08h dd 0
  9. key db 0
  10. met db 0
  11. counter dw 0
  12. soob db 'Привет, уважаемый пользователь!!!',0ah,0dh
  13. db 'Эта программа измеряет время между нажатием клавиши "я" и "A"(лат.)',0ah,0dh,'$'
  14. .code
  15. assume cs:@code,ds:@data,ss:@stack,es:@data
  16. begin proc far
  17. push ds
  18. xor ax,ax
  19. push ax
  20. mov ax,@data
  21. mov ds,ax
  22. start: mov ax,0600h ;\ |al=00 (весь экран), ah=06 (прокрутка)
  23. mov bh,07 ; \ |чёрно-белый
  24. mov cx,0000 ; очистка экрана |левая верхняя позиция
  25. mov dx,314fh ; / |правая нижняя позиция
  26. int 10h ;/ |передача управления в BIOS
  27. mov ah,02 ; \ |установка курсора
  28. mov bh,00 ; \ |номер экрана
  29. mov dh,00 ; установка курсора |номер строки
  30. mov dl,00 ; / |номер столбца
  31. int 10h ; / |передача управления в BIOS
  32. mov ah,09h
  33. lea dx,soob
  34. int 21h
  35. mov ax,3509h ; \
  36. int 21h ; \
  37. mov word ptr old_int09h,bx ; \
  38. mov word ptr old_int09h+2,es ; сохраняем старые адреса
  39. ; обработчиков прерываний
  40. mov ax,3508h ; клавиатуры и системного таймера
  41. int 21h ; /
  42. mov word ptr old_int08h,bx ; /
  43. mov word ptr old_int08h+2,es ; /
  44. push ds ; \
  45. push cs ; \
  46. pop ds ; \
  47. mov ax,2509h ; \
  48. mov dx,offset int09h ; устанавливаем свои
  49. int 21h ; обработчики
  50. mov ax,2508h ; /
  51. mov dx,offset int08h ; /
  52. int 21h ; /
  53. pop ds ; /
  54. input: cmp met,1 ; \
  55. je zda ;
  56. cmp key,2Ch ; /*** -ожидание нажатия "я"
  57. jge zda
  58. jmp input
  59. zda: mov met,1
  60. cmp key,0bh ;
  61. jle zda2
  62. jmp zda
  63. zda2: mov met,1
  64. cmp key,1Eh ; /*** -ожидание нажатия "A"
  65. je p
  66. jmp zda2
  67. p: mov met,0
  68. mov ax,counter
  69. xor dx,dx
  70. mov bx,100 ; \
  71. mul bx ; \
  72. xor bx,bx ; \
  73. ; \
  74. div_18: cmp dx,0 ; \
  75. jnz m1 ; деление
  76. cmp ax,182 ; счётчика
  77. jb m2 ; прерываний таймера
  78. m1: sub ax,182 ; на 18,2
  79. sbb dx,0 ;
  80. inc bx ;
  81. jmp div_18 ;
  82. m2: ; получаем:
  83. mov ax,bx ; в al десятые доли
  84. xor bx,bx ; в bx секунды
  85. div_10: cmp ax,10 ; /
  86. jb above ; /
  87. sub ax,10 ; /
  88. inc bx ; /
  89. jmp div_10 ; /
  90. above: or al,30h
  91. lea si,ascval[4]
  92. mov [si],al
  93. mov ax,bx
  94. call bin_ascii
  95. mov ah,09h
  96. lea dx,ascval
  97. int 21h
  98. push ds ; \
  99. ; \
  100. mov ax,2509h ; \
  101. lds dx,old_int09h ; восстанавливаем
  102. int 21h ; старые
  103. mov ax,2508h ; обработчики
  104. lds dx,old_int08h ; /
  105. int 21h ; /
  106. pop ds ; /
  107. ret
  108. begin endp
  109. int09h proc far ; \
  110. in al,60h ; обработчик | считываем скан-код
  111. mov key,al ; прерываний клавиатуры | сохраняем его в переменную
  112. jmp old_int09h ; / | переходим на старый обработчик
  113. int09h endp
  114. int08h proc far
  115. cmp met,1 ; \
  116. jne old ; обработчик прерываний
  117. inc counter ; системного таймера
  118. old: jmp old_int08h ; /
  119. int08h endp
  120. bin_ascii proc ; процедура перевода двоичного числа
  121. lea si,ascval[2] ; в ASCII
  122. xor bx,bx ; вход: АХ выход: ASCVAL
  123. met1: cmp ax,10
  124. jb met2
  125. met5: sub ax,10
  126. add bx,1
  127. jmp met1
  128. met2: or al,30h
  129. mov [si],al
  130. dec si
  131. cmp bx,0
  132. je met3
  133. met4: mov ax,bx
  134. xor bx,bx
  135. jmp met1
  136. met3: ret
  137. bin_ascii endp
  138. end begin

Решение задачи: «Время между нажатиями клавиш»

textual
Листинг программы
  1. input:    cmp met,1   ; \
  2.     je zda      ;
  3.     cmp key,'0'
  4.     jb  input
  5.     cmp key,'9'
  6.     jbe zda
  7.     cmp key,'A'
  8.     jb input
  9.     cmp key,'Z'
  10.     jbe zda
  11.     cmp key,'a'
  12.     jb input
  13.     cmp key,'z'
  14.     jbe zda
  15.     jmp input

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы