C0 - Нижний левый угол B3 - Вертикальная линия

codesg segment para 'code'

assume cs:codesg, ds:codesg, ss:codesg, es:codesg

org 100h

begin: call start

message db 'Vvedite parol: *', '$'

message2 db 'Parol ne > 6 simvolov !!!', '$'

string label byte

start proc near

;устанавливаю курсор в нужном месте

mov dh, 01 ;номер строки

mov dl, 00 ;символ в строке

mov ah, 02h ;символ установки курсора

int 10h

mov ah, 09h ;вывод строки символов

lea dx, message ;приглашение к вводу пароля

int 21h

mov k,14 ;с каого места будет рисовать снежинки

mov cx,5

l1: ;цикл

inc k

call verh ;рисую верхнию линию

call niz ;рисую нижнию линию

loop l1

mov col,17

call stenca

wr:

;устан курсор в рамке

mov dh, 01

mov dl, col

mov ah, 02h

int 10h

;ожидание ввода с клавиатуры без эхоотображения

mov ah,00h

int 16h

;вместо C0 - Нижний левый угол B3 - Вертикальная линия символв записываю #

mov ah,02h

mov dl,'#'

int 21h

;рисую продолжение рамки

inc k

call verh

call niz

call r1

call stenca

inc col

inc coun

cmp coun,6 ;пароль не больше 6 символов

jne wr

je r2

coun db 00 ;перемен-кол-во символов пароля

col db 00 ;перемен-где рисует снежинку

k db 00 ;перемен-устанвка курсора для ввода символов

mov ah,4ch ;выход из программы

int 21h

start endp

r1 proc near ;стираю снежинку

add col,2

mov dh, 01

mov dl, col

mov ah, 02h

int 10h

mov ah,02h

mov dl,' '

int 21h

sub col,2

ret

r1 endp

r2 proc near ;если пароль > 6 символов

mov dh, 01

mov dl, 30

mov bh, 00

mov ah, 02h

int 10h

mov ah, 09h

lea dx, message2

int 21h

mov ah,4ch

int 21h

ret

r2 endp

verh proc C0 - Нижний левый угол B3 - Вертикальная линия neaar

mov dh, 00

mov dl, k

mov ah, 02h

int 10h

call snejinka

ret

verh endp

niz proc neaar

mov dh, 02

mov dl, k

mov ah, 02h

int 10h

call snejinka

ret

niz endp

stenca proc near

mov dh, 01

mov dl, k

mov ah, 02h

int 10h

call snejinka

ret

stenca endp

snejinka proc neaar

mov ah,02h

mov dl,'*'

int 21h

ret

snejinka endp

codesg ends

end begin

2. Дополните программу: ввод пароля пока не будет введено правильное слово. При каждом неверном вводе выводите сообщение об этом.

csg segment para

assume cs:csg, ds:csg, es:csg, ss:csg

org 100h

start:

jmp main

main proc near

call clrscr

mov ah, 0bh

mov bh, 01h ; Применять палитру 1.

mov bl, 01h ; Установить белый цвет для сообщений

int 10h

lea bp, [msg]

mov cx, 09h ; В выводимой строке 9 букв.

mov dx C0 - Нижний левый угол B3 - Вертикальная линия, 0000h ; Вывод в 0-ю строку, 0-й столбец.

mov bl, 07h ; Белый цвет.

call puts

again:

lea si, inpas ; Загрузить адрес строки для сохранения символов.

input:

mov ah, 02h

mov dh, 01h ; Установить курсор в 1-ю строку.

mov dl, col ; Установить курсор в нужный столбец.

mov bh, 00h ; Установить курсор на 0-й видеостранице.

int 10h

mov ah, 00h ; Ожидание появления символа в буфере клавиатуры.

int 16h

cmp al, 0dh

je check_pass

mov [si], al ; Сохранение текущего символа.

inc si

mov ah, 09h

mov al, '*' ; Выводимый символ.

mov bh, 00h ; Номер видеостраницы.

mov bl, 04h

mov cx, 01h ; Количество повторений.

int 10h

inc cnt

inc col

cmp cnt, 06h

je check C0 - Нижний левый угол B3 - Вертикальная линия_pass

jmp input

check_pass:

lea si, inpas

lea di, pass

xor cx, cx

xor bx, bx

dec cnt

l1:

mov ah, [si+bx]

mov al, [di+bx]

cmp ah, al

jne pass_error

cmp bl, 05h

je exit_ok

inc bl

jmp l1

pass_error:

call err_msg

mov col, 00h

mov cnt, 00h

jmp again

exit_ok:

call ok

exit:

mov ah, 04ch

int 21h

ret

main endp

; Процедура err_msg

err_msg proc near

call clrscr

lea bp, [errmsg]

xor cx, cx

mov cl, 18h

mov dx, 0000h

mov bl, 04h ; Красный цвет.

call puts

ret

err_msg endp

; Процедура OK

ok proc near

call clrscr

lea bp, [okmsg]

xor cx, cx

mov dx, 0000h

mov cl, 02h

mov bl, 02h ; Зеленый цвет.

call puts

mov ah, 00h

int 16h

ret

ok endp

; Процедура puts

puts proc near

mov C0 - Нижний левый угол B3 - Вертикальная линия ah, 13h

mov al, 01h ; Курсор в конец строки.

mov bh, 00h ; Вывод на 0-ю видеостраницу.

int 10h

ret

puts endp

; Процедура clrscr

clrscr proc near

mov ah, 06h

mov al, 00h ; Число прокручиваемых строк.



mov cl, 00h ; Номер столбца верхнего левого угла.

mov ch, 00h ; Номер строки верхнего левого угла.

mov dl, 4fh ; Номер столбца правого нижнего угла.

mov dh, 18h ; Номер строки правого нижнего угла.

mov bh, 07h

int 10h

ret

clrscr endp

msg db "Password: "

okmsg db "OK"

errmsg db "Error, Please try again:"

pass db '111111'

row db 0

col db 0

cnt db 0

inpas db 6 dup("?")

csg ends

end start


documentaepldsz.html
documentaeplldh.html
documentaeplsnp.html
documentaeplzxx.html
documentaepmhif.html
Документ C0 - Нижний левый угол B3 - Вертикальная линия