Читайте также:
|
|
codesg segment para 'code'
assume cs:codesg, ds:codesg, ss:codesg, es:codesg
org 100h
begin: jmp main
main proc near
mov ax, 0600h
mov bh, 07
mov cx, 0000h
mov dx, 184fh
int 10h
mov dx, 0105h
lea bp, [message]
mov cx, 16
call write_string
mov ah, 0ah
lea dx, str1
int 21h
mov ah, 02h
mov dx, 0216h
int 10h
mov cl, real
xor ch, ch
lea si, str2
mov count, 15h
mov bl, 03h
star:
call write_symbol
inc si
loop star
mov ah, 4ch
int 21h
main endp
write_string proc near
mov ah, 13h
mov bh, 00
mov bl, 0fh
mov al, 1
int 10h
ret
write_string endp
write_symbol proc near
push cx
push ax
mov ah, 02h
mov dl, count
int 10h
call teletype
mov al, [si]
mov ah, 09h
mov cx, 1
call color
int 10h
inc count
pop ax
pop cx
ret
write_symbol endp
color proc near
inc bl
cmp bl, 0eh
jb m1
mov bl, 02h
m1: ret
color endp
teletype proc near
mov cx, 65534
n1: push cx
mov cx, 32676
n2:
loop n2
pop cx
loop n1
ret
teletype endp
message db 'Vvedite stroky: '
str1 label byte
virt db 39
real db?
str2 db 40 dup (?),'$'
count db?
codesg ends
end begin
5. Дополните программу: вводите пароль 3 раза, каждый раз после ввода отображайте введенное слово и сообщайте верно или неверно введен пароль. Затем выход в DOS.
title Лабораторная работа №3
stacksg segment para stack 'Stack'
dw 32 dup(?)
stacksg ends
datasg segment para 'Data'
message db 'Vvedite PAROL: $'
pass db 'admin'
true db 'Parol vveden VERNO$'
false db 'Parol vveden NEVERNO$'
string label byte
max db 20
len db?
ary db 21 dup ('$')
as db 1
kol_sr db 1
datasg ends
codesg segment para 'Code'
begin:
assume cs:codesg, ds:datasg, ss:stacksg, es:datasg
push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
;цикл будет повторяться 3 раза, поэтому в cx заношу 3
mov cx,3
m1:
;вывожу приветствие
mov ah, 09h
lea dx, message
int 21h
;буферизированный ввод с клавиатуры
lea dx, string
mov ah, 0ah
int 21h
;перемещаю курсор на следующую строку
mov dh, as
mov dl, 00
mov bh, 00
mov ah, 02h
int 10h
inc as
;вывожу введенное слово
mov bx, offset len
mov al,[bx]
mov ah,0
add bx, ax
inc bx
mov [bx],'$'
mov ah,09h
lea dx,ary
int 21h
;сравниваю длину введенной строки и длины пароля
mov bx, offset len
mov al,[bx]
cmp al,5
je m2;если длина введенной строки и pass равны, то переход на m2
jne m3;если длина введенной строки и pass не равны, то переход на m3
m4:
;перемещаю курсор на следующую строку
mov dh, as
mov dl, 00
mov bh, 00
mov ah, 02h
int 10h
inc as
loop m1
m2:
;перемещаю курсор на следующую строку
mov dh, as
mov dl, 00
mov bh, 00
mov ah, 02h
int 10h
inc as
lea si, pass;помещаю адреса строк pass в si
lea di, ary;помещаю адреса строк ary в di
mov kol_sr,1;кол-ву сравнений присваиваю 1
m6:
mov ah, byte [si];беру символ из строки pass
mov al, byte [di];беру символ из строки ary
cmp ah,al;сравниваю их
jne m3;если не равны перехожу на метку m3
inc si;увеличиваю на 1 si
inc di;увеличиваю на 1 di
inc kol_sr;увеличиваю на 1 kol_sr
cmp kol_sr,5;сравниваю кол-во сравнений с кол-вом букв в pass
jne m6
;выводится сообщение о том, что строки равны
mov ah,09h
lea dx,true
int 21h
mov bx, cx
cmp bx,1
jne m4;если цикл не прошел еще 3 раза иду на метку m4
cmp bx,1
je m5;если цикл отработал 3 раза, то перехожу на метку m5
m3:
;перемещаю курсор на следующую строку
mov dh, as
mov dl, 00
mov bh, 00
mov ah, 02h
int 10h
inc as
;вывожу сообщение о том, что строки не равны
mov ah,09h
lea dx,false
int 21h
mov bx, cx
cmp bx,1
jne m4;если цикл не прошел еще 3 раза иду на метку m4
cmp bx,1
je m5;если цикл отработал 3 раза, то перехожу на метку m5
m5:
;жду нажаие клавишы
mov ah, 01h
int 21h
;выход в DOS
mov ah,4ch
int 21h
codesg ends
end begin
6. Дополните программу: измените цвет выводимых на экран символов и при неверном вводе пароля в правом верхнем углу выводите сообщение «Ха-ха, Вы ошиблись!!!»
codesg segment para 'code'
assume cs:codesg, ds:codesg, ss:codesg, es:codesg
org 100h
begin: jmp main
;******************************************************************
main proc near
call clear_scrin
; вывод сообщения на экран
mov row,09
mov col,10
lea bp, [message]; адрес строки
mov cx, 15;длина строки
call write_string
;Cмещение курсора на конец выведеного сообщения
add col, 18
lea si, cout
wr:
; Установка позиции курсора
mov ah, 02h
mov bh, 00
mov dl, col
int 10h
;ожидание ввода с клавиатуры без эхоотображения
mov ah, 00h
int 16h
CMP al, 0dh; конец ввода «Enter»
je wr1
; Введенный символ из al записывается в строку cout
mov [si], al
inc si
; выводится на экран в текущую позицию курсора символ '*'
mov ah, 09
mov al, '*'
mov bh, 00
mov cx, 1
int 10h
inc col
inc coun
CMP coun, 8;вводится только 5 символов
jne wr;повторяем ввод символа
lea si, parol
lea bp, [cout]
wr1:
mov ah, [si]
mov al, [bp]
cmp ah, al
jne q;выход из программы
cmp cl, coun
je wr2
inc si
inc bp
inc cl
jmp wr1
;выход из программы
MOV ah, 8h
int 21h
q:
call clear_scrin
mov ah, 13h;установка курсора
mov bh, 0
mov bl, 11001010b
mov dh, 0
mov dl, 65
lea bp, mess1
mov cl, 14
mov ch, 0
mov al, 1
int 10h
ret
wr2: call ok
main endp
;********************************************************************
;вывод на экран сообщения о правильном вводе пароля
ok proc near
call clear_scrin
lea bp,[mess];адрес строки
mov cl, 14
call write_string
ret
ok endp
;********************************************************************
clear_scrin proc near
; Очистка экрана
mov ax, 0600h; ah=06-прокрутка экрана
; al=00-весь экран
mov bh, 07
mov cx, 0000
mov dx, 184fh
int 10h
ret
clear_scrin endp
;********************************************************************
write_string proc near
mov ah, 13h; функция вывода на экран
mov al, 1
mov bh, 00; номер видео страницы
mov bl, 00001110b
mov dh, 6;координаты по строке
mov dl, 6;координаты по столбцу
int 10h
ret
write_string endp
message db 'Input password:'
mess db 'You are right!'
mess1 db 'You are wrong!'
row db 00
col db 00
cout db 9 dup (' ')
parol db 'tiraspol'
coun db 0
codesg ends
end begin
7. Дополните программу: измените цвет выводимых на экран символов и при неверном вводе пароля в правом нижнем правом углу выводите сообщение «Ха-ха, Вы ошиблись!!!»
codesg segment para 'code'
assume cs:codesg, ds:codesg, ss:codesg, es:codesg
org 100h
begin: jmp main
;******************************************************************
main proc near
call clear_scrin
; вывод сообщения на экран
mov row,09
mov col,10
lea bp, [message]; адрес строки
mov cx, 15;длина строки
call write_string
;Cмещение курсора на конец выведеного сообщения
add col, 18
lea si, cout
wr:
; Установка позиции курсора
mov ah, 02h
mov bh, 00
mov dl, col
int 10h
;ожидание ввода с клавиатуры без эхоотображения
mov ah, 00h
int 16h
CMP al, 0dh; конец ввода «Enter»
je wr1
; Введенный символ из al записывается в строку cout
mov [si], al
inc si
; выводится на экран в текущую позицию курсора символ '*'
mov ah, 09
mov al, '*'
mov bh, 00
mov cx, 1
int 10h
inc col
inc coun
CMP coun, 8;вводится только 8 символов
jne wr;повторяем ввод символа
lea si, parol
lea bp, [cout]
wr1:
mov ah, [si]
mov al, [bp]
cmp ah, al
jne q;выход из программы
cmp cl, coun
je wr2
inc si
inc bp
inc cl
jmp wr1
;выход из программы
MOV ah, 8h
int 21h
q:
call clear_scrin
mov ah, 13h;установка курсора
mov bh, 0
mov bl, 11001010b
mov dh, 23; координаты y
mov dl, 65; координата x
lea bp, mess1
mov cl, 14
mov ch, 0
mov al, 1
int 10h
ret
wr2: call ok
main endp
;********************************************************************
;вывод на экран сообщения о правильном вводе пароля
ok proc near
call clear_scrin
lea bp,[mess];адрес строки
mov cl, 14
call write_string
ret
ok endp
;********************************************************************
clear_scrin proc near
; Очистка экрана
mov ax, 0600h; ah=06-прокрутка экрана
; al=00-весь экран
mov bh, 07
mov cx, 0000
mov dx, 184fh
int 10h
ret
clear_scrin endp
;********************************************************************
write_string proc near
mov ah, 13h; функция вывода на экран
mov al, 1
mov bh, 00; номер видео страницы
mov bl, 00001110b
mov dh, 6;координаты по строке
mov dl, 6;координаты по столбцу
int 10h
ret
write_string endp
message db 'Input password:'
mess db 'You are right!'
mess1 db 'You are wrong!'
row db 00
col db 00
cout db 9 dup (' ')
parol db 'tiraspol'
coun db 0
codesg ends
end begin
8. Дополните программу: измените цвет выводимых на экран символов и при неверном вводе пароля в центре экрана выводится сообщение «Ха-ха, Вы ошиблись!!!»
; Аналогично предыдущему (изменить координаты)
9. Дополните программу: ввод пароля пока не будет введено правильное слово. При каждом неверном вводе выводите сообщение об этом красным цветом в лувом верхнем углу, при верном вводе пароля он появляется на экране экране через временную задержку разного цвета в правом верхнем углу.
;Аналогично предыдущим
Дата добавления: 2015-08-17; просмотров: 77 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Дополните программу. При верном вводе пароля он появляется на экране через временную задержку разного цвета. | | | Введите две строки. В случае если они одинаковые. Выводится сообщение о том что строки совпали, в противном случае выводится сообщение, о том что строки не совпадают. |