05. Прерывание 21h. Примеры ввода вывода. - mRrvz/bmstu-asm GitHub Wiki
- Аналог системного вызова в современных ОС.
- Используется наподобие вызова подпрограммы.
- Номер функции передается через АН.
функция | назначение | вход | выход |
---|---|---|---|
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