Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .data
- FIRST_STRING DB 'You must press F or N or g', 0AH, 0DH, '$'
- SECOND_STRING DB 'Press r for exit $'
- BYE_STRING DB 'OK! GOOD BYE ! $'
- PRESS_STRING_1 DB 'You press key number _1_ $'
- PRESS_STRING_2 DB 'You press key number _2_ $'
- PRESS_STRING_3 DB 'You press key number _3_ $'
- PRESS_STRING_F DB ' You made a mistake $'
- PRESS_STRING_0 DB ' ', 0AH, 0DH, '$'
- .code
- .startup
- MOV AH, 0 ; номер функції установки режиму дисплея
- MOV AL, 2 ; код режиму 80 * 25 чорно-білого
- INT 10H ; очищення екрана
- ; --- установка курсору в рядок 5, стовпець 28
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 25 ; рядок
- MOV DL, 5 ; стовпець
- INT 10H ; позиціонуємо курсор
- ; --- вивід рядка
- MOV AH, 9 ; номер функції виведення рядка
- LEA DX, FIRST_STRING ; завантажуємо адресу першого рядка
- INT 21H ; друкуємо рядок з позиції курсору
- LEA DX, SECOND_STRING ; завантажуємо адресу другого рядка
- INT 21H ; друкуємо рядок з початку нового рядка
- ; ---- очікування натискання клавіш ------
- PRESS_KEY:
- ; --- установка курсору в рядок 20, стовпець 39
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 1 ; рядок
- MOV DL, 17 ; стовпець
- INT 10H ; позиціонуємо курсор
- MOV AH, 1 ; номер функції DOS уведення
- ; з луною відображення на терміналі
- INT 21H ; отримання символу
- CMP AL, 0 ; ? 0
- JZ PRESS_KEY ; перехід, якщо немає символу
- CMP AL, 46h ; ? F
- JE STRING_PRESS_1 ; перехід до програми обробки натискання клавіші V
- CMP AL, 4Eh ; ? N
- JE STRING_PRESS_2 ; перехід до програми обробки натискання клавіші Z
- CMP AL, 67h ; ? g
- JE STRING_PRESS_3 ; перехід до програми обробки натискання клавіші d
- CMP AL, 72h ; ? r
- JE BYE ; перехід до закінчення роботи
- call CLEAR_SCREEN
- ; --- установка курсору в рядок 10, стовпець 25
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 20 ; рядок
- MOV DL, 0 ; стовпець
- INT 10H ; позиціонуємо курсор
- MOV AH, 9 ; номер функції виведення
- LEA DX, PRESS_STRING_F ; завантажуємо адресу повідомлення про помилку
- INT 21H ; видаляємо зайве - друкуємо рядок з позиції курсору
- JMP PRESS_KEY ; до очікування натискання клавіші
- STRING_PRESS_1: ; обробка натискання клавіші V
- call CLEAR_SCREEN
- ; ------- вивід повідомлення про натиснуту клавішу
- ; --- установка курсору в рядок 10, стовпець 25
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 12 ; рядок
- MOV DL, 50 ; стовпець
- INT 10H ; позиціонуємо курсор
- MOV AH, 9 ; номер функції виведення
- LEA DX, PRESS_STRING_1 ; завантажуємо адресу повідомлення
- INT 21H ; друкуємо рядок з позиції курсору
- JMP PRESS_KEY ; до програми очікування натискання клавіші
- STRING_PRESS_2: ; до обробки натискання клавіші Z
- call CLEAR_SCREEN
- ; ------- вивід повідомлення про натиснуту клавішу
- ; --- установка курсору в рядок 10, стовпець 25
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 12 ; рядок
- MOV DL, 50 ; стовпець
- INT 10H ; позиціонуємо курсор
- MOV AH, 9 ; номер функції виведення
- LEA DX, PRESS_STRING_2 ; завантажуємо адресу повідомлення
- INT 21H ; друкуємо рядок з позиції курсору
- JMP PRESS_KEY ; перехід до програми очікування натискання клавіші
- STRING_PRESS_3: ; до обробки натискання клавіші d
- call CLEAR_SCREEN
- ; ------- вивід повідомлення про натиснуту клавішу
- ; --- установка курсору в рядок 10, стовпець 25
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 20 ; рядок
- MOV DL, 50 ; стовпець
- INT 10H ; позиціонуємо курсор
- MOV AH, 9 ; номер функції виведення
- LEA DX, PRESS_STRING_3 ; завантажуємо адресу повідомлення
- INT 21H ; друкуємо рядок з позиції курсору
- JMP PRESS_KEY ; перехід до програми очікування натискання клавіші
- ; ------ видалення зайвого тексту з екрана
- CLEAR_SCREEN:
- push cx
- mov cx, 0h
- ; --- установка курсору
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 2 ; рядок
- MOV DL, 0 ; стовпець
- INT 10H ; позиціонуємо курсор
- CLS:
- inc cx
- MOV AH, 9 ; номер функції виведення
- LEA DX, PRESS_STRING_0 ; завантажуємо адресу чистого рядка
- INT 21H ; видаляємо зайве - друкуємо рядок з позиції курсору
- cmp cx, 20
- JNE CLS
- pop cx
- ret
- BYE: ; закінчення програми
- call CLEAR_SCREEN
- ; ------- вивід повідомлення про кінець програми
- ; --- установка курсору в рядок 20, стовпець 30
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 0 ; рядок
- MOV DL, 39 ; стовпець
- INT 10H ; позиціонуємо курсор
- MOV AH, 9 ; номер функції виведення рядка
- LEA DX, BYE_STRING ; завантажуємо адресу повідомлення про кінець програми
- INT 21H ; друкуємо рядок з позиції курсору
- MOV AH, 2 ; номер функції
- MOV BH, 0 ; номер сторінки
- MOV DH, 2 ; рядок
- MOV DL, 0 ; стовпець
- INT 10H
- .exit ; закінчення програми – вихід до операційної системи
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement