Assembler - язык неограниченных возможностей


Средства DOS - часть 2


; вывод на экран строки message2 push ax ; сохранить результат преобразования mov ah,9 mov dx,offset message2 int 21h pop ax

; вывод на экран числа из регистра АХ push ax xchg ah,al ; поместить в AL старший байт call print_al ; вывести его на экран pop ax ; восстановить в AL младший байт call print_al ; вывести его на экран

ret ; завершение СОМ-файла

asc_error: mov dx,offset err_msg mov ah,9 int 21h ; вывести сообщение об ошибке ret ; и завершить программу

; Процедура print_al ; выводит на экран число в регистре AL ; в шестнадцатеричном формате, ; модифицирует значения регистров АХ и DX

print_al: mov dh,al and dh,0Fh ; DH - младшие 4 бита shr al,4 ; AL - старшие call print_nibble ; вывести старшую цифру mov al,dh ; теперь AL содержит младшие 4 бита print_nibble: ; процедура вывода 4 бит (шестнадцатеричной цифры) cmp al,10 ; три команды, переводящие цифру в AL sbb al,69h ; в соответствующий ASCII-код das ; (см. описание команды DAS) mov dl,al ; код символа в DL mov ah,2 ; номер функции DOS в АН int 21h ; вывод символа ret ; этот RET работает два раза - один раз ; для возврата из процедуры print_nibble, ; вызванной для старшей цифры, ; и второй раз - для возврата из print_al

messagel db "Десятичное число: $" message2 db "Шестнадцатеричное число: $" err_msg db "Ошибка ввода" crlf db 0Dh,0Ah,'$' buffer db 6 ; максимальный размер буфера ввода blength db ? ; размер буфера после считывания bcontents: ; содержимое буфера располагается за ; концом СОМ-файла end start

Функция 0Ah предоставляет удобный, но ограниченный способ ввода данных. Чаще всего используют функции посимвольного ввода, позволяющие контролировать отображение символов на экране, реакцию программы на функциональные и управляющие клавиши и т.д.


Функция DOS 01h — Считать символ из STDIN с эхом, ожиданием и проверкой на Ctrl-Break

Ввод: АН = 01h
Вывод: AL = ASCII-код символа или 0. Если AL = 0, второй вызов этой функции возвратит в AL расширенный ASCII-код символа
<


Начало  Назад  Вперед