Команды обработки строк (цепочек)

Опубликовано февраля 10, 2018 в Архитектура процессора Intel

MOVS (MOVe data from String to string) — пересылка элемента строки-источника в элемент строки-приемника.

LOPS (Load String operand) — загрузка элемента строки-источника в аккумулятор (AL или АХ).

STOS — пересылка содержимого аккумулятора (AL или ЛХ) в элемент строки-приемника.

CMPS — сравнение элемента строки-приемника и строки-источника (реализуется как неразрушающее вычитание элемента строки-приемника из элемента строки-источника, по результату которого устанавливаются арифметические флаги).

SCAS — сканирование (просмотр) элемента строки-приемника. Реализуется как неразрушающее вычитание этого элемента из содержимого аккумулятора с установкой арифметических флагов.

Команды перехода но счетчику

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

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

Для последовательной обработки всех элементов строки или некоторой их части команды обработки строк используются с предшествующим префиксом повторения REP (REPeat) или модификациями REPE/REPZ (повторять пока равно или повторять пока ноль) и REPNE/REPNE (пока не равно или не ноль).

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

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

Действие модификации префиксов подобно аналогичным модификациям команды LOOP. Это означает, что для завершения действия префикса дополнительно проверяется содержимое флага ZF.

В пределе строка может занимать 64 Кб, т.е. весь сегмент. В принципе эти команды можно задавать с операндами, но они игнорируются компилятором. Для того чтобы обработка строки реализовалась в нужном направлении, необходимо произвести инициализацию флага DF с помощью команд CLD или STD.