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

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

Следующие четыре процедуры - процедуры BIOS прерывание 10h :

  1. процедура get_screeng_mode определения текущего графического режима
  2. процедура set_screeng_mode установки графического режима
  3. процедура clear_screeng очистки экрана
  4. процедура print_string вывода сообщений с учетом цвета (в видеобуфер)
  5. процедура clear_string очистки строки
Процедура get_screeng_mode - определение текущего графического режима,
сохранение значения этого режима в переменной screeng_mode
Это необходимо для восстновления граф. реж. стоявшего до запуска программы
при выходе из программы

Вверх

;процедура определения текущего графического режима ***************************
;выходные параметры:
;screeng_mode - номер графического режима

get_screeng_mode proc
push ax
mov ah,0Fh
int 10h
mov screeng_mode,al
pop ax
ret
get_screeng_mode endp
;******************************************************************************

Вверх

;процедура установки графического режима **************************************
;входные параметры:
;screeng_mode - номер графического режима который нужно установить

set_screeng_mode proc
mov ah,00h
mov al,screeng_mode
int 10h
ret
set_screeng_mode endp
;******************************************************************************

Вверх

;процедура очистки экрана *****************************************************

clear_screeng proc
mov ah,00h
mov al,03h
int 10h

mov ah,11h
mov al,12h
mov bl,00h
int 10h

ret

clear_screeng endp
;******************************************************************************

Вверх

;процедура вывода сообщений с учетом цвета ***********************************
;ВХОДНЫЕ ПАРАМЕТРЫ bp - указатель на сообщение, cx - длина строки

print_string proc
push ax

mov ah,13h
mov al,01h ;режим сервиса для вывода сообщения
mov bh,00h ;номер страницы экрана(в видеобуфере)
mov bl,color
mov dh,stroka
mov dl,kolonka
int 10h

;востановление стандартного цвета
mov color,0Fh
;********************************

pop ax
ret

print_string endp

;*****************************************************************************

По всей вероятности здесь для вывода сообщения используется функция 13h прерывания 10h BIOS "писать строку". При этом в al помещается 01h, что означает "использовать атрибут в bl". В bl мы помещаем атрибут - цвет символов.
Мы поместили в переменную color:
color DB 0Fh ;атрибут цвета выводимых строки или символа
Какой это цвет? Это белый цвет на фоне черного DOS-экрана.

-------------------------------------------------------------------------------
13H писать строку ¦AT¦ Выдает строку в позиции курсора. Символы 0dH
(CarRet), 0aH (LineFeed), 08H (backspace) и 07H (Beep) трактуются как
команды управления и не высвечиваются.
Вход:

ES:BP => выводимая строка (спецформат для AL=2 и AL=3)
CX = длина строки (подсчитываются только символы)
DH,DL = строка,колонка начала вывода
BH = номер страницы
AL = код подфункции:
0 = использовать атрибут в BL; не трогать курсор
1 = использовать атрибут в BL; курсор - в конец строки
2 = формат строки: char,attr, char,attr...; не трогать курсор
3 = формат строки: char,attr, char,attr...; передвинуть курсор


Т.к. в программе периодически возникала необходимость, при выводе сообщений стереть их с экрана, то была написана процедура clear_string.

Вверх

;процедура очистки строки *****************************************************
;ВХОДНЫЕ ПАРАМЕТРЫ
;color
;kolonka
;stroka

clear_string proc
push bp
push cx

call print_position
mov bp,offset clear_str
mov cx,dlclear_str
call print_string

pop cx
pop bp
ret
clear_string endp
;******************************************************************************

Изучив вышеуказанные функции становится понятным код, с которого начинается
главная процедура main:


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

Hosted by uCoz