Вы когда-нибудь хотели, чтобы ваша программа продолжала работать до тех пор, пока пользователь не введет какие-либо данные? В мире программирования на языке ассемблера 8086 это может быть довольно сложной задачей. Но не бойтесь! В этой статье блога мы рассмотрим несколько методов ввода с клавиатуры и предотвращения завершения программы в 8086. Мы углубимся в примеры кода и будем использовать разговорный язык, чтобы сделать процесс обучения увлекательным и увлекательным. Итак, начнем и продолжим вечеринку!
Метод 1. Опрос клавиатуры
Первый метод предполагает постоянную проверку состояния клавиатуры, чтобы определить, была ли нажата какая-либо клавиша. Вот пример фрагмента кода:
start:
mov ah, 01h ; Set AH = 01h to check the keyboard status
int 16h ; Call interrupt 16h to check the keyboard
jz start ; If zero flag is set, no key is pressed, so loop back to start
; Key has been pressed, do something here
; ...
jmp start ; Loop back to start to continue polling the keyboard
В этом методе мы используем прерывание 16h с функцией AH = 01h для проверки состояния клавиатуры. Если установлен нулевой флаг, это означает, что ни одна клавиша не нажата, и мы возвращаемся к начальной метке, чтобы продолжить опрос. Если клавиша была нажата, мы можем выполнить нужные действия, а затем вернуться и продолжить опрос.
Метод 2: ожидание ввода с клавиатуры
Другой подход заключается в ожидании ввода с клавиатуры с использованием прерывания 16h с функцией AH = 00h. Вот пример фрагмента кода:
start:
mov ah, 00h ; Set AH = 00h to wait for keyboard input
int 16h ; Call interrupt 16h to wait for input
; Key has been pressed, do something here
; ...
jmp start ; Loop back to start to wait for the next input
В этом методе мы используем прерывание 16h с функцией AH = 00h для ожидания ввода с клавиатуры. Выполнение программы будет приостановлено до нажатия клавиши. После нажатия клавиши мы можем выполнить нужные действия, а затем вернуться назад и дождаться следующего ввода.
Метод 3: использование буфера клавиатуры
В модели 8086 также предусмотрен буфер клавиатуры, в котором сохраняются нажатия клавиш. Мы можем проверить буфер и соответствующим образом обработать ввод. Вот пример фрагмента кода:
start:
mov ah, 0Ah ; Set AH = 0Ah to check the keyboard buffer
mov dx, offset buffer ; Set DX to the offset of the buffer
int 16h ; Call interrupt 16h to check the keyboard buffer
cmp byte ptr [buffer+1], 00h ; Check if any key is pressed
je start ; If no key is pressed, loop back to start
; Key has been pressed, do something here
; ...
jmp start ; Loop back to start to continue checking the keyboard buffer
buffer db 3, ?, ?, ?, ? ; Define the keyboard buffer
В этом методе мы используем прерывание 16h с функцией AH = 0Ah для проверки буфера клавиатуры. В буфере хранится ASCII-код клавиши, нажатой в [буфер+2]. Если [buffer+1] равен нулю, это означает, что ни одна клавиша не нажата, поэтому мы возвращаемся к начальной метке. Если клавиша была нажата, мы можем выполнить нужные действия, а затем вернуться назад, чтобы продолжить проверку буфера.
В этой статье блога мы рассмотрели три метода ввода с клавиатуры и предотвращения завершения программы на ассемблере 8086. Мы рассмотрели опрос клавиатуры, ожидание ввода с клавиатуры и использование буфера клавиатуры. Эти методы могут быть полезны в сценариях, где вы хотите, чтобы ваша программа продолжала работать до тех пор, пока пользователь не введет какие-либо данные. Итак, внедряйте эти методы в свои программы 8086 и продолжайте веселиться!