Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачи(решённые)2.3.4 лабы.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
103.22 Кб
Скачать
  1. Дополните программу. Введите строку текста и выведите его по буквам в режиме телетайпа разными по цвету буквами.

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

  1. Дополните программу: вводите пароль 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