Лабораторная работа № 9 Тема. Команды обработки строк, сравнения. Лабораторная работа 9 Тема. Команды обработки строк, сравнения строк, поиска в строке
Скачать 2.09 Mb.
|
Лабораторная работа № 9 Тема. Команды обработки строк, сравнения строк, поиска в строке. Цель. Изучить действие и научиться применять в программах команды работы со строками. Ход работыОзнакомиться с теоретической частью Выполнить практическое задание Ответить на контрольные вопросы Оформить отчет Теоретическая частьКонтрольные вопросы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. |