Глава 1 (продолжение 1)
Рассмотрим процедуры программы Cmos-редактора глава 7 Юров.
Первые три процедуры заложены в BIOS:
С этими процедурами нет проблем в понимании их работы.
Первые три процедуры заложены в BIOS.
А последняя процедура (перевод каретки) - функция DOS
Вверх
;процедура определения текущей позиции курсора ********************************
mov ah,03h
mov stroka,dh
pop dx
--- ---------------------------------------------------------------------------
--- ----------------------------------------------------------------------------
Вверх
call cursor_position
pop ax
Вверх
mov ah,02h
pop dx
Вверх
;процедура перехода на следующую строку **************************************
mov ah,02h
pop dx
В процедуре corretka дважды вызывается функция DOS 02h прерывания 21h - вывод символа на дисплей. В первых трех строках (после сохранения регистров в стеке) на дисплей выводится символ 13 - возврат каретки, DOS переводит курсор в начало текущей строки.В следующих трех строках на дисплей выводится символ 10 - перевод строки, DOS переводит курсор на новую строку текущего столбца для последующего вывода новых строк на экран.
Таким образом функция corretka переводит курсор на начало следующей строки.
;выходные данные
;stroka - строка
;kolonka - колонка
push bx
push dx
mov bh,00h
int 10h
mov kolonka,dl
pop bx
pop ax
ret
Функция 03H прерывания 10h BIOS читать позицию и размер курсора
Вход: BH = видео страница
Выход: DH,DL = текущие строка,колонка курсора
CH,CL = текущие начальная,конечная строки курсора (см. функцию 01H)
Функция 01H прерывания 10h BIOS уст. размер/форму курсора (текст). Курсор, если он видим, всегда мерцает.
Вход: CH = начальная строка (0-1fH; 20H=подавить курсор)
CL = конечная строка (0-1fH)
--- ----------------------------------------------------------------------------
Функция 02H уст. позицию курсора. Установка на строку 25 делает курсор невидимым.
Вход: BH = видео страница
DH,DL = строка, колонка (считая от 0)
----------------------------------------------
;процедура сдвига курсора на одну позицию вправо ******************************
inc kolonka
call print_position
ret
;процедура позиционирования курсора *******************************************
;входные параметры
;stroka - строка
;kolonka - колонка
push dx
mov dh,stroka
mov dl,kolonka
int 10h
pop ax
ret
push dx
mov dl,13
int 21h
mov ah,02h
mov dl,10
int 21h
pop ax
ret
DOS Fn 02H: Вывод на дисплей | ||
Вход | AH | 02H |
DL | символ, выводимый на стандартный вывод | |
Выход | Нет |
Описание: Посылает символ из DL на стандартный вывод.
Обрабатывает символ Backspace (ASCII 8), перемещая курсор влево
на одну позицию и оставляя его в новой позиции.
При обнаружении Ctrl-Break выполняется INT 23H.
---------------------------------------------------------
В главной программе процедура перевода каретки вызывается в следующем контексте:
call cursor_position
mov bp,offset message2
mov cx,dlmessage2
call print_string
call corretka
mov bp,offset message3
mov cx,dlmessage3
call print_string
call corretka
Назад |
Начало урока |
Вверх |
Вперед
Содержание