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
так
ні
ні
так
31
до стор. 33зі стор.
32