Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small
  2. .data
  3.  
  4. FIRST_STRING    DB 'You must press F or N or g', 0AH, 0DH, '$'
  5. SECOND_STRING   DB 'Press r for exit $'
  6. BYE_STRING  DB 'OK!  GOOD BYE ! $'
  7. PRESS_STRING_1  DB 'You press key number _1_ $'
  8. PRESS_STRING_2      DB 'You press key number _2_ $'
  9. PRESS_STRING_3      DB 'You press key number _3_ $'
  10. PRESS_STRING_F      DB '    You made a mistake    $'
  11. PRESS_STRING_0      DB '                          ', 0AH, 0DH, '$'
  12.  
  13. .code
  14. .startup
  15.  
  16.     MOV AH, 0           ; номер функції установки режиму дисплея
  17.     MOV AL, 2           ; код режиму 80 * 25 чорно-білого
  18.     INT 10H         ; очищення екрана
  19.  
  20. ; --- установка курсору в рядок 5, стовпець 28
  21.     MOV AH, 2           ; номер функції
  22.     MOV BH, 0           ; номер сторінки
  23.     MOV DH, 25          ; рядок
  24.     MOV DL, 5           ; стовпець
  25.     INT 10H         ; позиціонуємо курсор
  26.  
  27. ; --- вивід рядка
  28.     MOV AH, 9           ; номер функції виведення рядка
  29.     LEA DX, FIRST_STRING    ; завантажуємо адресу першого рядка
  30.     INT 21H         ; друкуємо рядок з позиції курсору
  31.     LEA DX, SECOND_STRING   ; завантажуємо адресу другого рядка
  32.     INT 21H         ; друкуємо рядок з початку нового рядка
  33.  
  34.  
  35. ; ---- очікування натискання клавіш ------
  36. PRESS_KEY:
  37. ; --- установка курсору в рядок 20, стовпець 39
  38.     MOV AH, 2                   ; номер функції
  39.     MOV BH, 0                   ; номер сторінки
  40.     MOV DH, 1               ; рядок
  41.     MOV DL, 17                  ; стовпець
  42.     INT 10H                     ; позиціонуємо курсор
  43.  
  44.     MOV AH, 1           ; номер функції DOS уведення
  45. ; з луною відображення на терміналі
  46.     INT 21H         ; отримання символу
  47.     CMP AL, 0           ; ? 0  
  48.         JZ PRESS_KEY        ; перехід, якщо немає символу
  49.     CMP AL, 46h         ; ? F  
  50.     JE STRING_PRESS_1   ; перехід до програми обробки натискання клавіші V
  51.     CMP AL, 4Eh         ; ? N
  52.     JE STRING_PRESS_2   ; перехід до програми обробки натискання клавіші Z
  53.     CMP AL, 67h         ; ? g
  54.     JE STRING_PRESS_3   ; перехід до програми обробки натискання клавіші d
  55.     CMP AL, 72h         ; ? r
  56.     JE BYE              ; перехід до закінчення роботи
  57.  
  58.  
  59.     call CLEAR_SCREEN
  60.  
  61. ; --- установка курсору в рядок 10, стовпець 25
  62.     MOV AH, 2               ; номер функції
  63.     MOV BH, 0                   ; номер сторінки
  64.     MOV DH, 20              ; рядок
  65.     MOV DL, 0                   ; стовпець
  66.     INT 10H                     ; позиціонуємо курсор
  67.  
  68.     MOV AH, 9               ; номер функції виведення
  69.     LEA DX, PRESS_STRING_F  ; завантажуємо адресу повідомлення про помилку
  70.     INT 21H                 ; видаляємо зайве - друкуємо рядок з позиції курсору
  71.  
  72.     JMP PRESS_KEY       ; до очікування натискання клавіші
  73.  
  74. STRING_PRESS_1:         ; обробка натискання клавіші V
  75.     call CLEAR_SCREEN
  76.  
  77. ; ------- вивід повідомлення про натиснуту клавішу
  78. ; --- установка курсору в рядок 10, стовпець 25
  79.     MOV AH, 2                           ; номер функції
  80.     MOV BH, 0                           ; номер сторінки
  81.     MOV DH, 12                          ; рядок
  82.     MOV DL, 50                          ; стовпець
  83.     INT 10H                             ; позиціонуємо курсор
  84.  
  85.     MOV AH, 9                               ; номер функції виведення
  86.     LEA DX, PRESS_STRING_1          ; завантажуємо адресу повідомлення
  87.     INT 21H                             ; друкуємо рядок з позиції курсору
  88.  
  89.     JMP PRESS_KEY       ; до програми очікування натискання клавіші
  90.  
  91. STRING_PRESS_2:             ; до обробки натискання клавіші Z
  92.     call CLEAR_SCREEN
  93.  
  94. ; ------- вивід повідомлення про натиснуту клавішу
  95. ; --- установка курсору в рядок 10, стовпець 25
  96.     MOV AH, 2                           ; номер функції
  97.     MOV BH, 0                           ; номер сторінки
  98.     MOV DH, 12                          ; рядок
  99.     MOV DL, 50                          ; стовпець
  100.     INT 10H                             ; позиціонуємо курсор
  101.  
  102.     MOV AH, 9                               ; номер функції виведення
  103.     LEA DX, PRESS_STRING_2          ; завантажуємо адресу повідомлення
  104.     INT 21H                         ; друкуємо рядок з позиції курсору
  105.  
  106.     JMP PRESS_KEY       ; перехід до програми очікування натискання клавіші
  107.  
  108.  
  109. STRING_PRESS_3:             ; до обробки натискання клавіші d
  110.     call CLEAR_SCREEN
  111. ; ------- вивід повідомлення про натиснуту клавішу
  112. ; --- установка курсору в рядок 10, стовпець 25
  113.     MOV AH, 2                           ; номер функції
  114.     MOV BH, 0                           ; номер сторінки
  115.     MOV DH, 20                          ; рядок
  116.     MOV DL, 50                          ; стовпець
  117.     INT 10H                             ; позиціонуємо курсор
  118.  
  119.     MOV AH, 9                               ; номер функції виведення
  120.     LEA DX, PRESS_STRING_3          ; завантажуємо адресу повідомлення
  121.     INT 21H                         ; друкуємо рядок з позиції курсору
  122.  
  123. JMP PRESS_KEY       ; перехід до програми очікування натискання клавіші
  124.  
  125.  
  126.  
  127. ; ------ видалення зайвого тексту з екрана
  128. CLEAR_SCREEN:
  129.     push cx
  130.     mov cx, 0h
  131.     ; --- установка курсору
  132.     MOV AH, 2                           ; номер функції
  133.     MOV BH, 0                           ; номер сторінки
  134.     MOV DH, 2                           ; рядок
  135.     MOV DL, 0                           ; стовпець
  136.     INT 10H                             ; позиціонуємо курсор
  137. CLS:
  138.     inc cx
  139.  
  140.     MOV AH, 9                               ; номер функції виведення
  141.     LEA DX, PRESS_STRING_0          ; завантажуємо адресу чистого рядка
  142.     INT 21H                             ; видаляємо зайве - друкуємо рядок з позиції курсору
  143.     cmp cx, 20
  144.     JNE CLS
  145.     pop cx
  146.  
  147.     ret
  148.  
  149. BYE:                    ; закінчення програми
  150.     call CLEAR_SCREEN
  151. ; ------- вивід повідомлення про кінець програми
  152. ; --- установка курсору в рядок 20, стовпець 30
  153.     MOV AH, 2                           ; номер функції
  154.     MOV BH, 0                           ; номер сторінки
  155.     MOV DH, 0                           ; рядок
  156.     MOV DL, 39                          ; стовпець
  157.     INT 10H                             ; позиціонуємо курсор
  158.  
  159.     MOV AH, 9           ; номер функції виведення рядка
  160.     LEA DX, BYE_STRING  ; завантажуємо адресу повідомлення про кінець програми
  161.     INT 21H         ; друкуємо рядок з позиції курсору
  162.  
  163.     MOV AH, 2                           ; номер функції
  164.     MOV BH, 0                           ; номер сторінки
  165.     MOV DH, 2                       ; рядок
  166.     MOV DL, 0                           ; стовпець
  167.     INT 10H
  168. .exit           ; закінчення програми – вихід до операційної системи
  169. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement