05. Прерывание 21h. Примеры ввода вывода. - mRrvz/bmstu-asm GitHub Wiki

Прерывание 21h

  • Аналог системного вызова в современных ОС.
  • Используется наподобие вызова подпрограммы.
  • Номер функции передается через АН.
функция назначение вход выход
02 Вывод символа в stdout DL = ASCII-код символа -
09 Вывод строки в stdout DS:DX - адрес строки, заканчивающейся символом $ -
01 Считать символ из stdin с эхом - AL – ASCII-код символа
06 Считать символ без эха, без ожидания, без проверки на Ctrl+Break DL=FF AL – ASCII-код символа
07 Считать символ без эха, с ожиданием и без проверки на Ctrl+Break - AL – ASCII-код символа
08 Считать символ без эха - AL – ASCII-код символа
10 (0Ah) Считать строку с stdin в буфер DS:DX - адрес буфера Введённая строка помещается в буфер
0Bh Проверка состояния клавиатуры - AL=0, если клавиша не была нажата, и FF, если была
OCh Очистить буфер и считать символ AL=01, 06, 07, 08, 0Ah -

Еще одним важным случаем, когда нам требуется прерывание DOS - завершение программы. Чтобы ассемблер перестал читать подряд строки кода нам требуется положить в ah код DOS завершения программы (04Ch) и вызвать прерывание. Код завершения программы (ошибка или нет) кладется и берется из al.

; завершить программу с кодом 3
mov al, 03h
mov ah, 04Ch ; оно же 4Сh
int 21h

Примеры

; ввод символа (результат сохраняется в в al)
mov ah, 01h
int 21h

----------------

; вывод символа на экран (содержащегося в dl)
mov dl, 'x'
mov ah, 02h
int 21h
⚠️ **GitHub.com Fallback** ⚠️