Вариант задания
Ввести с клавиатуры две строки. Сравнить их. Вывести на экран номер позиции, в которой строки различаются.
Листинг программы
model SMALL
stack 100h
dataseg
Ask db 0Ah, 0Dh, 'Enter string:','$'
OUTSTRING db 0Ah, 0Dh, 'They are equal','$'
STR1 db 80, ?, 82 dup( ? ) ; буфер ввода для первой строки
STR2 db 80, ?, 82 dup( ? ) ; буфер ввода для второй строки
POS db 0
OUTPOS db 0Dh,0Ah, ?, '$'
codeseg
startupcode
; Очистка экрана
MOV AX,0600H ;AH 06 (прокрутка)
;AL 00 (весь экран)
MOV BH,07 ;Нормальный атрибут (черно/белый)
MOV CX,0000 ;Верхняя левая позиция
MOV DX,184FH ;Нижняя правая позиция
INT 10H ;Передача управления в BIOS
;Запрос на ввод строки
lea DX, Ask ; Адрес строки - в DX
mov AH, 09h ; Номер функции - в AH
int 21h ; Вызов функции
;Ввод первой строки
lea DX, STR1
mov AH, 0Ah
int 21h
;Запрос на ввод
lea DX, Ask ; Адрес строки - в DX
mov AH, 09h ; Номер функции - в AH
int 21h ; Вызов функции
;Ввод второй строки
lea DX, STR2
mov AH, 0Ah
int 21h
;lea BX, STR1 + 2 ;устанавливаем на первый символ строки
;Проверяем, какая строка длиннее, и записываем её длину в счётчик
mov AL, STR1 + 1
mov CL, AL
mov BL, STR2 + 1
cmp AL, BL
jg GO
mov CL, BL
GO:
;Счётчик идёт, начиная с третьего символа (в первых двух данные о строке)
mov SI, 2
BEG:
inc POS ;Счётчик позиций
mov AL, STR1[SI]
mov BL, STR2[SI]
cmp AL, BL ;Сравниваем теущие символы
jne RES ;Если не равны, то переходим на метку RES
inc SI ;Увеличиваем индекс
loop BEG
;Эта часть кода выполнится только при условии, что строки равны по длине и совпадают по символам
lea DX, OUTSTRING ; Адрес строки - в DX
mov AH, 09h ; Номер функции - в AH
int 21h ; Вызов функции
loop QUIT ;Прыгаем в конец программы
RES: ; переход на эту метку будет только при условии, что либо строки не равны по длине, либо отличаются символами
; Вывод значения POS
add POS, 48
mov AL, POS
mov OUTPOS + 2, AL
lea DX, OUTPOS
mov AH, 09h
int 21h
; Альтернативный способ
;mov DL, POS
;mov AH, 02h
;int 21h
QUIT:
lea DX, STR1
mov AH, 0Ah
int 21h
exitcode 0
end
Ход выполнения работы
Пример 1
Входные данные: массив из пяти элементов: 1, 2, 3, 4, 5
Выходные данные: RES= 1
Пример 2
Входные данные: массив из пяти элементов: 4, 56, 23, 45, 3
Выходные данные: RES = 5
Вывод
При выполнении данной лабораторной работы мы освоили приёмы обработки символьной информации и функции DOS для ввода и вывода информации на терминал на языке ассемблер.