Я попробовал int 16h \ 01, но все, что он сделал, это изменил направление один раз, а затем продолжил движение в этом направлении.
Список прерываний Ральфа Брауна содержитописание почти всех прерываний MS-DOS и BIOS.
Описание int 16h
, функция 01
на этой странице гласит:
...
Return:
ZF установлено, если нажатие клавиши недоступно
ZF сбрасывается, если доступно нажатие клавиши
AH = код сканирования BIOS
AL = символ ASCII
Примечание: если присутствует нажатие клавиши, это не удалено из буфера клавиатуры
...
Это означает, что функция вернет значение в AX, которое представляет собой значение, которое будет возвращено при вызове функции 00
позже.
Предположим, вы нажимаете клавиши "A", "B", "C" и "D", и вы не вызываете функцию int 16h
.Позже вы вызываете функцию 00
четыре раза.В этом случае вы ожидаете, что «A» возвращается в первый раз, «B» во второй раз, «C» в третий раз и «D» в четвертый раз.
Если вы вызываете функцию 01
доВызывая функцию 00
в первый раз, функция всегда будет возвращать «A» (хотя вы нажали «B», «C» и «D» позже), потому что функция 00
вернет «A», когда она будет вызванав следующий раз.
Если вы не вызовете функцию 00
, функция 01
вернет "нажатую клавишу" A "навсегда.
Вы должны вызватьint 16h
, функция 00
, если функция 01
вернула ZF=clear
:
mov ah, 1
int 16h
jz noKeyPressed
mov ah, 0
int 16h
; AX contains information about the key pressed
...
noKeyPressed:
...