Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / docx55 / lab5asm

.docx
Скачиваний:
19
Добавлен:
01.08.2013
Размер:
92.54 Кб
Скачать

Вариант задания

Ввести с клавиатуры две строки. Сравнить их. Вывести на эк­ран номер позиции, в которой строки различаются.

Листинг программы

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 для ввода и вывода информации на терминал на языке ассемблер.

4

Соседние файлы в папке docx55