Назад | Начало урока | Вперед
Содержание

Глава 1 (продолжение 1)

Рассмотрим процедуры программы Cmos-редактора глава 7 Юров.

Первые три процедуры заложены в BIOS:

  1. процедура cursor_position определения текущей позиции курсора
  2. процедура cursor_sdvig сдвига курсора на одну позицию вправо
  3. процедура print_position позиционирования (установка) курсора
  4. процедура corretka перевод курсора на начало следующей строки (перевод каретки) - функция DOS

С этими процедурами нет проблем в понимании их работы.
Первые три процедуры заложены в BIOS.
А последняя процедура (перевод каретки) - функция DOS

Вверх

;процедура определения текущей позиции курсора ********************************
;выходные данные
;stroka - строка
;kolonka - колонка

cursor_position proc
push ax
push bx
push dx

mov ah,03h
mov bh,00h
int 10h

mov stroka,dh
mov kolonka,dl

pop dx
pop bx
pop ax
ret

cursor_position endp
;******************************************************************************

--- ---------------------------------------------------------------------------
Функция 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)
----------------------------------------------

Вверх

;процедура сдвига курсора на одну позицию вправо ******************************

cursor_sdvig proc
push ax

call cursor_position
inc kolonka
call print_position

pop ax
ret

cursor_sdvig endp
;******************************************************************************

Вверх

;процедура позиционирования курсора *******************************************
;входные параметры
;stroka - строка
;kolonka - колонка

print_position proc
push ax
push dx

mov ah,02h
mov dh,stroka
mov dl,kolonka
int 10h

pop dx
pop ax
ret

print_position endp
;*****************************************************************************

Вверх

;процедура перехода на следующую строку **************************************

corretka proc
push ax
push dx

mov ah,02h
mov dl,13
int 21h
mov ah,02h
mov dl,10
int 21h

pop dx
pop ax
ret

corretka endp
;*****************************************************************************

В процедуре corretka дважды вызывается функция DOS 02h прерывания 21h - вывод символа на дисплей. В первых трех строках (после сохранения регистров в стеке) на дисплей выводится символ 13 - возврат каретки, DOS переводит курсор в начало текущей строки.В следующих трех строках на дисплей выводится символ 10 - перевод строки, DOS переводит курсор на новую строку текущего столбца для последующего вывода новых строк на экран. Таким образом функция corretka переводит курсор на начало следующей строки.

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

call cursor_position
mov bp,offset message3
mov cx,dlmessage3
call print_string
call corretka


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz