Добавил:
@wequalwo Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АбрамоваИванов0392_Пр2.pdf
Скачиваний:
2
Добавлен:
08.09.2024
Размер:
64.46 Кб
Скачать

2.3. Демонстрация результата

Запускаем программу, выполнив

CMD>> pract2.com

Введя строку "a lot of people are rich. But the rich aren`t always happy" получаем ожи-

даемый результат (Рис. 2.1)

Рис. 2.1. Создание .com файла.

3. Зачетное задание

Ввести с клавиатуры две строки. Указать те символы, которые есть и в первой и во второй строке и которых нет в этих строках и сформировать одну строку из совпадаю-

щих, а вторую из несовпадающих символов введенных строк.

Реализуем:

CODE SEGMENT

ASSUME CS:CODE, DS:CODE, SS:CODE

ORG 100h

START:

; Ввод строк

LEA DX, STR1

CALL OUTPUT

LEA DX, STRING1

CALL INPUT

CALL NEXTLINE

LEA DX, STR2

CALL OUTPUT

LEA DX, STRING2

CALL INPUT

6

CALL NEXTLINE

STRING1:

MOV CL, [STRING1+1] ; получаем размер буффера

CMP CL, 0

 

; Проверяем, что не введена нулевая строка

JE STRING2

 

 

LEA SI, STRING1+2

 

ITER1:

 

 

MOV BL, [SI]

;

Получаем код символа

SUB BL, 'A'

;

Высчитываем индекс в массиве

CMP BL, 0

;

Проверям, что симол латинская буква

JL LOOPS1

 

 

CMP BL, 57

 

 

 

 

 

JG LOOPS1

MOV [ASCII+BX], BYTE PTR 1 ; Записываем единицу в индекс данного символа

LOOPS1:

INC SI

LOOP ITER1

STRING2:

MOV CL, [STRING2+1]

CMP CL, 0

JE CHARSSTART

LEA SI, STRING2+2

ITER2:

MOV BL, [SI]

;

Получаем код символа

SUB BL, 'A'

;

Высчитываем индекс в массиве

CMP BL, 0

;

Проверям, что симол латинская буква

JL LOOPS2

 

 

CMP BL, 57

 

 

JG LOOPS2

 

 

MOV DL, [ASCII+BX]

;

Смотрим на значение в массиве

CMP DL, 0

; Если символа не было в первой строке

JE SINGLE

 

 

CMP DL, 1

; Если символ был в первой строке

7

JE DOUBLE

JMP LOOPS2

SINGLE:

MOV

[ASCII+BX], 2

 

 

JMP LOOPS2

 

 

DOUBLE:

 

 

 

MOV [ASCII+BX], 3

 

 

JMP LOOPS2

 

 

LOOPS2:

 

 

 

INC SI

 

 

LOOP ITER2

 

 

CHARSSTART:

 

 

LEA SI, ASCII

 

 

LEA DI, OUTCOMM

 

 

LEA BX, OUTDIFF

 

 

MOV CX, 58

 

 

CHARSITER:

 

 

MOV AL, [SI]

 

 

MOV DX, SI

 

 

SUB DX, OFFSET ASCII

;

Высчитываем ascii код символа по индексу

ADD DX, 'A'

 

 

CMP AL, 3

;

Был в обоих

JE BOTH

 

 

CMP AL, 0

; Был только в одном

JNE EITHER

 

 

JMP LOOPCHAR

; Символ не встретился

BOTH:

 

 

 

 

 

 

 

MOV [DI], DX

INC DI

JMP LOOPCHAR

EITHER:

MOV [BX], DX

INC BX

8

LOOPCHAR:

INC SI

LOOP CHARSITER

LEA DX, COMMONCH

CALL OUTPUT

LEA DX, OUTCOMM

CALL OUTPUT

CALL NEXTLINE

LEA DX, DIFFERRENTCH

CALL OUTPUT

LEA DX, OUTDIFF

CALL OUTPUT

CALL NEXTLINE

EXIT:

MOV AH, 4CH

INT 21H

INPUT: ; Ввод

MOV AH, 0AH

INT 21h

RET

OUTPUT: ; Вывод

MOV AH, 09H

INT 21H

RET

NEXTLINE: ; переход на следующую строку

MOV AH, 02H

MOV DL, 10

INT 21h

RET

STRING1 DB 128, 128 DUP('$')

9

STRING2 DB 128, 128 DUP('$')

OUTCOMM DB, 128, 128 DUP('$')

OUTDIFF DB, 128, 128 DUP('$')

ASCII DB 58 DUP(0)

STR1 DB 'First string: $'

STR2 DB 'Second string: $'

COMMONCH DB 'Common: $'

DIFFERRENTCH DB 'Different: $'

CODE ENDS

END START

Ниже приведены примеры работы программы:

Рис. 3.1

Рис. 3.2

10