Смекни!
smekni.com

Реалізація функцій бібліотеки графіки для виводу тексту у графічному режимі (OutTextXY, SetTextStyle) (стр. 2 из 2)

cmp dx,4

je dva

jmp tri

dva:

mov bx,10; занесение 10 в DX

mul bx; умножение стар. цифры на 10

xor bx,bx; обнуление BX

mov bl,buf+1; BL - ASCII-код младшой цифры

sub bx,'0'; выделение младшей цифры числа

add ax,bx; получение введеного числа

jmp vse

tri:

mov bx,100; занесение 100 в DX

mul bx; умножение стар. цифры на 10

mov cx,ax; сохранение промеж. результата

xor ax,ax; обнуление AX

mov al,buf+1; AL - ASCII-код 2-й цифры

sub ax,'0'; получение цифры десятков

mov bx,10

mul bx; умножение кол-ва 10 - в на 10

add cx,ax; получение сотни+десятки

xor ax,ax

mov al,buf+2; AL - ASCII-код 2-й цифры

sub ax,'0'; получение цифер единиц

add cx,ax; получение сотни+десятки+единицы

mov ax,cx

vse:

xor bx,bx

mov bx, indeks

mov koord+bx,ax; сохранеие координаты

inc indeks

inc indeks

ret

vvkoor endp

probeli proc

mov ah,02

int 10h

mov ax,0920h; вывод пробела с атрибутом

mov bx,009fh

int 10h

ret

probeli endp

vivstr proc

mov bh,00h

mov ah,02

int 10h

mov dx,cx

mov ah,9

int 21h

ret

endp vivstr

priglash proc

mov dx,0b1ch

lea cx,mes1

call vivstr

mov dx,0c21h

mov cx,1

call probeli

lea cx,mes3

call vivstr

mov dx,0d21h

mov cx,1

call probeli

lea cx,mes4

call vivstr

ret

endp priglash

ramka proc

mov cx,0914h; установка атрибутов области

mov dx,0f3ch

mov ax,0600h

mov bh,01fh

int 10h

mov cx,0a15h; изм. атрибутов внутри области

mov dx,0e3bh

mov ax,0600h

mov bh,01bh

int 10h

; вывод рамки

lea ax,r1; загрузка смещения

mov sdvig,ax; в пер. sdvig

mov cx,7; кол-во рядков рамки

next1:

push cx

mov cx,sdvig

mov dh,stroka

mov dl,14h

call vivstr

inc stroka; переход на след. строку

add sdvig,42; переход на адрес след. строки

pop cx

loop next1

mov stroka,9

ret

endp ramka

begin:

mov ax,dseg

mov ds,ax

mov es,ax

opyat:

mov ax,03h ; очистка экрана

int 10h

mov ax,1003h; выкл. бита мерцания

mov bl,0

int 10h

mov cx, 2000h; выкл. курсор

mov ah,01h

int 10h

call ramka; вывод рамки

call priglash; вывод приглашения

mov dx,0b35h; поз. курсора

mov cx,1

call probeli; вывод синего пробела

mov ah,3fh; ввод номера действия

mov bx,0

mov cx,3

lea dx,buf

int 21h

mov al,buf; определение номера действия

cmp al,'1'

je text

jmp kon

text:

call vvodvsego; ввод координат и цвета

call ramka

mov dx,0b1fh

lea cx,mes11

call vivstr ; вывод приглашения о вводе строки

mov dx,0d1fh

mov cx, 20

call probeli; вывод синих пробелов

mov ah,3fh

mov bx,0

mov cx,22

lea dx,buftxt

int 21h; ввод строки символов

dec ax

dec ax

push ax

mov dx,koord+8

mov ax,hor

mul dx

mov hor,ax

mov dx,koord+8

mov ax,ver

mul dx

mov ver,ax

mov ax,13h

int 10h

mov ax,1130h; \

mov bh,byte ptr koord+4; - получение адреса матрицы символов; /

int 10h; /

mov di,0

pop cx

vivodvs: ; цикл вывода символов

push cx; сохранение параметра цикла

mov al,buftxt+di; загрузка символа

push di; сохранение номера символа в; введённом массиве

mov cl,razm; \

mul cl; - получение величины сдвига в массиве матриц

mov si,ax; /

mov ah,0

mov bx,koord

mov x,bx

mov bx,koord+2

mov y,bx

mov cl,razm

glavn: ; цикл вывода линии образа символа

push cx; параметра цикла

mov cx,koord+8

cikl:

push cx

push es; сохранение регистра

mov bx,x; загрузка координаты Х

mov ax,y; загрузка координаты Y

mov dx,320

mul dx

add ax,bx

mov di,ax; загрузка абс. адреса

dec di

mov dx,koord+4; загрузка цвета

mov al,es: [bp+si] ; загрузка байта образа символа

mov cx,0a000h; - загрузка адреса видеобуфера

mov es,cx; /

mov cx,8; загрузка параметра цикла

zdvig:

rol al,1; сдвиг влево на 1 бит

jnc n4; если CF=0, то прыжок

push cx

mov cx,koord+8

n7: ; цикл вывода точки

add bx,1; - определение признака выхода за экран

cmp bx,317; /

ja n8; если есть, то прыжок

inc di; приращение координаты

mov es: [di],dl; вывод точки

loop n7

n8:

pop cx

jmp n6

n4:

add di,koord+8

n6:

loop zdvig

pop es; восстановление сегмента образов символов

pop cx

inc word ptr y; увеличение коорд. Y

loop cikl

inc si; переход на след. байт образа символа

pop cx

loop glavn

pop di; восстановление номера символа в массиве

inc di; переход на след. символ

mov ax,koord

add ax,hor

mov koord,ax

mov ax,koord+2

add ax,ver

mov koord+2,ax

cmp koord,319; определение признака выхода за экран

ja zaderg; если есть, то прыжок

cmp koord+2, 199; определение признака выхода за экран

ja zaderg; если есть, то прыжок

pop cx; восстановление параметра цикла

loop vivodvseh

jmp zaderg

vivodvseh:

jmp vivodvs

zaderg:

mov ah,00

int 16h

mov indeks,0

jmp opyat

kon:

mov ax,4c00h

int 21h

cseg ends

end begin


б). Блок – схема алгоритму.


зі стор. до стор.

28. 28

зі стор. до стор.

28 28

зі стор. до стор.

28 28


до стор. 27

зі стор.26

ні

так

до стор.

28

ні

так


зі стор. зі стор.

27 26

до стор.

26

зі стор.

26

до стор.

26

зі стор.

26

так

так

до стор. 26



так

ні

ні

так


зі стор. до стор. 32

31

до стор. 33

зі стор.

32