Главная страница
Навигация по странице:

  • 3. Где находится строка-приемник; строка-источник

  • Лабораторная работа № 9 Тема. Команды обработки строк, сравнения. Лабораторная работа 9 Тема. Команды обработки строк, сравнения строк, поиска в строке


    Скачать 2.09 Mb.
    НазваниеЛабораторная работа 9 Тема. Команды обработки строк, сравнения строк, поиска в строке
    Дата15.10.2022
    Размер2.09 Mb.
    Формат файлаdocx
    Имя файлаЛабораторная работа № 9 Тема. Команды обработки строк, сравнения.docx
    ТипЛабораторная работа
    #735318

    Лабораторная работа № 9

    Тема. Команды обработки строк, сравнения строк, поиска в строке.

    Цель. Изучить действие и научиться применять в программах команды работы со строками.

    Ход работы


    1. Ознакомиться с теоретической частью

    2. Выполнить практическое задание

    3. Ответить на контрольные вопросы

    4. Оформить отчет

    Теоретическая часть



















































    Контрольные вопросы


    1. Перечислите операции-примитивы обработки строк

    2. Назначение префиксов повторения


    3. Где находится строка-приемник; строка-источник?


    Практическое задание


    1. Ознакомиться с теоретическим материалом по данной теме.

    2. Написать программу с применением команд обработки строк (цепочек)

    Приложение к лабораторной работе 9

    ;— Сегмент данных —

    DSEG SEGMENT

    ;—структура для ввода строки (см. описание функции ОАН)

    MAX DB 255

    LEN DB 0

    STROKA DB 256 DUP(?)

    ;—перевод строки

    ENT DB 13,10,'$'

    DSEG ENDS

    ;--Сегмент стека--

    STSEG SEGMENT STACK

    DB 30 DUP(?)


    TOP DB ?

    STSEG ENDS

    ;—Сегмент кода—

    CODSEG SEGMENT

    ASSUME CS:CODSEG, DS:DSEG, SS:STSEG, ES:CODSEG

    BEGIN:'

    JMP BEG

    ;--Процедура обращения строки--

    CONVERT PROC

    /--подготавливаем регистры—

    LEA DI, STROKA

    MOV BL, LEN

    MOV BH, 0

    ADD BX, DI

    DEC BX ;теперь ВХ показывает точно на конец строки

    CICL:

    CMP DI, BX ;если DI=BX то заканчиваем

    JNB KONEC

    /--производим обмен символов—

    MOV AL, [DI]

    MOV АН, [ВХ]

    MOV [DI], AH

    MOV [BX], AL

    /--переходим к следующей паре символов--

    INC DI

    DEC ВХ

    JMP CICL

    KONEC:

    RET ;выходим в основную программу

    CONVERT ENDP

    /--Процедура вывода строки символов--

    DISP_STR PROC

    /--вначале переходим к следующей строке—

    MOV DX, OFFSET ENT

    MOV AH. 09H

    INT 21H

    /--подготавливаем регистры--

    MOV DI, OFFSET STROKA

    MOV CL, LEN

    MOV AH, 02H ;функция прерывания 21Н для вывода символа

    PROD:

    MOV DL, [DI]

    INT 21H ;вывод символа из DS:[DI]

    INC DI ;следующий символ

    DEC CL ;уменьшаем счетчик

    JNZ PROD ;если не 0 продолжаем вывод

    RET ;выход в основную программу

    DISP_STR ENDP

    BEG:

    /--устанавливаем сегментные регистры--

    MOV AX, DSEG

    MOV DS, AX

    MOV AX, STSEG

    MOV SS, AX

    MOV SP, OFFSET SS:TOP

    /--осуществляем ввод строки

    MOV DX, OFFSET MAX ;указываем на структуру для ввода строки

    MOV АН, 0АН ;функция ввода строки

    INT 21H

    CMP LEN, 0 ;если строка пустая, то выход

    JZ EXIT

    CALL CONVERT

    CALL DISP_STR

    EXIT:

    MOV АН, 4СН

    INT 21H

    CODSEG ENDS

    END BEGIN
    Комментируя данную программу, прежде всего можно заметить, что, разумеется, если речь идет просто о выводе строки в обратном порядке, то нет нужды менять в строке порядок символов. С помощью той же функции 02Н прерывания 21Н можно вывести строку, взяв символы в обратном порядке. Вам предлагается реализовать именно этот подход для поставленной задачи.

    В данной программе появилась такая структурная единица как процедура. Не надо, однако, смотреть на нее как, скажем, на процедуры в Паскале или функции в Си. Фактически это лишь другой способ указания метки перехода. Программа работала бы точно так же, если бы мы просто указали две метки: CONVERT и DIS_STR (разумеется, CONVERT ENDP и DIS_STR ENDP следовало бы при этом убрать). Правда, здесь не все так уж просто, и с дальнейшим развитием данного вопроса можете познакомитmcz в следующей главе. По поводу вышеприведенной программы можно заметить, также, что в конце вместо END BEGIN можно было бы поставить END BEG. Тогда не понадобилась бы команда JMP BEG.


    написать администратору сайта