Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы (книга Комаров) / Программирование на Ассемблере (ч 2).doc
Скачиваний:
155
Добавлен:
08.03.2015
Размер:
380.93 Кб
Скачать

3.11.5. Команды обработки строк

Строка представляет собой последовательность элементов, расположенных в смежных ячейках памяти. Элементами строки могут быть байты или слова, а ее длина ограничивается лишь размерами логического сегмента (до 64 кбайт).

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

Все строковые примитивы в общем случае могут быть записаны в следующих форматах:

COPS строка_приемник, строка_источник;

COPSB;

COPSW;

где COPS  формальная мнемоника строкового примитива.

Отсюда следует, что строковый примитив не имеет операндов. Операнды, приведенные в первом формате, имеют фиктивный характер, так как они используются не для адресации данных, а лишь для определения типа обрабатываемых элементов. В этом случае тип элементов определяется предшествующим описанием операндов. Если операнды описаны как последовательность байтов (директивой DB), то строковый примитив выполняет операцию над байтами, а если как последовательность слов (директивой DW), то  над словами.

Во втором и третьем форматах тип обрабатываемых элементов указывается явно в мнемонике строкового примитива: В  байты, W  слова.

При трансляции программы ассемблер заменяет первый формат строкового примитива вторым или третьим форматами в зависимости от размера операндов. Однако, первый формат записи является основным и рекомендуется к применению в большинстве случаев. Это обусловлено тем, что его использование позволяет ассемблеру проверить возможность адресации операндов при трансляции программы и способствует выявлению ошибок на данном этапе.

Для адресации данных строковые примитивы могут использовать единственный способ: косвенную адресацию по регистрам SI, DI. При этом адрес строки-источника всегда находится в регистре SI, а строки-приемника  в регистре DI. По умолчанию предполагается, что строка-источник находится в основном сегменте данных, и адрес ее элемента берется из регистров DS:SI, а строка-приемник находится в дополнительном сегменте данных, и адрес ее элемента берется из регистров ES:DI. Однако, сегмент, соответствующий регистру SI, может быть заменен на любой другой с помощью префикса замены сегмента. Для этого строковый примитив должен записываться в первом формате. Сегмент, соответствующий регистру DI, заменить нельзя ни при каких условиях. Отсюда следует, что строка-источник может находиться в любом сегменте, а строка-приемник  лишь в дополнительном сегменте данных.

Обработка строки-приемника в основном сегменте данных обеспечивается совмещением сегментов путем загрузки (ES)=(DS). При этом формально будет осуществляться обращение к строке-приемнику в дополнительном сегменте, а фактически  в основном сегменте данных.

Для ускорения обработки строк при выполнении любого строкового примитива автоматически аппаратным путем модифицируются регистры указатели адреса SI и DI, что подготавливает обращение к следующему элементу строки без всяких затрат времени. При модификации адресов содержимое регистров SI и DI увеличивается или уменьшается в зависимости от состояния флага направления DF. При DF=0 строка обрабатывается от первого элемента к последнему, и адреса увеличиваются. При DF=1 строка обрабатывается от последнего элемента к первому, и адреса уменьшаются. При этом при обработке байтов содержимое регистров SI, DI изменяется на 1, а при обработке слов  на 2.