Читайте также: |
|
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
;вместо символв записываю #
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 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, 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_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 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
Дата добавления: 2015-08-17; просмотров: 98 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Ввести с клавиатуры натуральное число. Поменять порядок следования цифр в числе и вывести на экран. | | | Дополните программу. При верном вводе пароля он появляется на экране через временную задержку разного цвета. |