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

; Аналогично предыдущему (изменить координаты)

  1. Дополните программу: ввод пароля пока не будет введено правильное слово. При каждом неверном вводе выводите сообщение об этом красным цветом в лувом верхнем углу, при верном вводе пароля он появляется на экране экране через временную задержку разного цвета в правом верхнем углу.

;Аналогично предыдущим

  1. Введите две строки. В случае если они одинаковые. Выводится сообщение о том что строки совпали, в противном случае выводится сообщение, о том что строки не совпадают.

stacksg segment para stack 'Stack'

dw 32 dup(?)

stacksg ends

datasg segment para 'Data'

d1 label byte

max1 db 50

len1 db ?

ary1 db 51 dup('$')

d2 label byte

max2 db 50

len2 db ?

ary2 db 51 dup('$')

message db 'HI!$'

acc db 'sovpali$'

message2 db 'HI!$'

no_a db 'ne sovpali$'

mes1 db 'Vvedite stroku$'

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

mov dh,0

call kursor

mov ah,09h

lea dx,mes1

int 21h

mov dh,1

call kursor

mov ah,0ah

lea dx,d1

int 21h

mov dh,2

call kursor

mov ah,09h

lea dx,mes1

int 21h

mov dh,3

call kursor

mov ah,0ah

lea dx,d2

int 21h

mov dh,4

call kursor

mov bx, offset len1

mov al, [bx]

mov bx, offset len2

mov ah, [bx]

cmp al,ah

jnz a3

push ds

pop es

cld

mov cl,al

mov si,offset ary1

mov di,offset ary2

repe cmpsb

jcxz a1; если cx равен нулю -- строки совпали сообщим об этом

mov ah,9

lea dx,no_a ; если cx не равен нулю -- строки не совпали сообщим об этом

int 21h

jmp a2; идем на выход из программы

a1: mov ah,9

lea dx,acc

int 21h

a2: mov ah,8

int 21h

mov ah,4ch ; в любом случае выходим из программы

int 21h

a3: mov ah,9

lea dx,no_a

int 21h

jmp a2

kursor proc near

push ax

push dx

mov dl,0

mov bh,0

mov ah,02h

int 10h

pop ax

pop dx

ret

kursor endp

codesg ends

end begin

  1. Программа подсчета количества введенных символов и при нажатии сочетания клавиш Alt+C прекратить ввод. Вычисления производить в процедуре.

.model small

.data

CountCHR dw 0

AIndex dw 0

StrCount db 8 dup(?)

stdout equ 1

info db '‚Введите строку: ',10,13,'$'

info1 db 10,13,'Количество введённых символов: ','$'

.code

myp proc

mov ax, @data

mov ds, ax

mov AH, 09h

mov DX, offset info

int 21h

again:

mov AH, 08h

int 21h

cmp AL, 0

je AltCtrl

mov DL, AL

mov AH, 02h

int 21h

inc CountCHR

jmp again

AltCtrl:

mov AH, 08h

int 21h

cmp AL, 2Eh

je quit

jmp again

quit:

mov AX, CountCHR

cmp AX, 0

je endb

mov AH, 09h

mov DX, offset info1

int 21h

mov AX, CountCHR

call PutI2

mov AH, 40h

mov DX, offset STRCount

mov BX, stdout

mov CX, 08h

int 21h

endb:

mov ax, 4C00h

int 21h

myp endp

Puti2 proc near

mov bx, 10

xor dx, dx

div bx

or ax, ax

jz Done

push dx

call Puti2

pop dx

Done: mov al, dl

or al, '0'

call PutCH

ret

PutI2 endp

PutCH proc near

mov di, AIndex

mov STRCount[di], al

mov byte ptr STRCount+1[di], 0

inc AIndex

ret

PutIt endp

.stack

dw 32 dup(?)

end myp

******************************************************************************************************************************************************************************************************************************************************************************************************************************

Л/р №4

Используя макроопределения решить следующие задачи: