Сравнение символьных данных

 

{toc_noswhoall}Символьная обработка часто подразумевает сортировку символьных данных и поиск строк, содержащих определенный контекст. Поэтому нам необходимо познакомиться с некоторыми командами сравнения символьных данных, ориентированными на побайтовую обработку.

КОМАНДА CLC

В команде CLC (Compare Logical Character — СРАВНЕНИЕ КОДОВ) порядок указания операндов точно такой же, как и в команде MVC. Оба операнда, как и во всех командах формата SS, выбираются из памяти; кроме того, необходимо указать длину в байтах необходимых нам областей.

CLC D1(L1 ,B1),D2(B2)

Compare Logical Character

Сравнить (D1+(B1))L1 с (D2 + (В2))L1 и произвести установку признака результата

По команде CLC содержимое строки, длина которой в байтах определяется полем L1 команды и начинающейся по адресу D1+B1, сравнивается с содержимым поля этой же длины, начало которого имеет адрес D2+(B2). При этом логическом сравнении операнды, длина которых может достигать 256 байтов, рассматриваются как целые без знака, т. е. первые биты сравниваемых чисел не являются знаковыми. Тем самым все сравниваемые целые без знака рассматриваются как положительные. Наибольшим целым без знака, умещающимся в одном байте, является 111111112, а наименьшим — 000000002 (если бы эти числа рассматривались как обычные целые, то первое представляло бы число — 1, а второе — 0). При логическом сравнении полуслово С863, например, «больше», чем 4632; при обычномарифметическом сравнении мы получили бы противоположный результат.

При использовании арифметически целых без знака упорядочение последовательности символов по возрастанию числовых значений эквивалентно их размещению в алфавитном порядке. Код пробела Х'40' рассматривается командой CLC как меньший, чем код любой буквы, то же относится и ко всем знакам пунктуации, что нужно учитывать при сортировке. По команде CLC производится установка признака результата в соответствии с тем, в каком отношении находятся рассматриваемые операнды. При выполнении команды CLCсодержимое второго операнда вычитается из содержимого первого по правилам арифметики целых без знака и полученная разность используется для определения признака результата. Конечно же, выполнение самой команды не оказывает влияния на операнды в памяти.

Признаки результата, устанавливаемые командой CLC, могут принимать следующие значения:

Признак результата

Результат

0

Операнды равны

1

1-й операнд < 2-й операнд

2

1-й операнд > 2-й операнд

3

Не устанавливается

После установки признака результата может выполняться его проверка с помощью какой-либо команды условного перехода.

Предположим, что в памяти хранится следующая информация:

А: СЗС1Е34040

В: D9C1Е34040

При выполнении указываемых команд получатся следующие признаки результата:

 

Команда

Признак результата

CLC

А (5),В

1

CLC

А+1 (3),В

0

CLC

А (4),В+1

2

CLC

B(4),А

2

В качестве иллюстрации применения команды CLC на рис. 10.1 приведен фрагмент программы автоматического перевода с немецкого языка на английский. 4000-байтовая строка, хранящаяся в памяти, начиная с ячейки с адресом GERMAN, последовательно проверяется на наличие сочетаний bDIEb, bDERb и bDENb. При обнаружении на их место записывается сочетание bТНЕЬ. Три команды CLC используются для выявления нужных немецких слов. Замена производится по команде MVC. Заметим, что мы использовали литерал

= С'ТНЕ'

в качестве операнда команды MVC. Мы могли с тем же успехом написать

MVC 0(5,9),THEWD

 

Рис. 10.1. Программа перевода артиклей с немецкого языка на английский.

внеся в программу дополнительно предложение

THEWD DC С'ТНЕ'

В гл. 20 будет также рассматриваться команда CLCL.

 



 
Оглавление
Сравнение символьных данных
Команда CLI
Все страницы