Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Инструкции обработки строк
Пять базовых строковых операций, называемых примитивами, позволяют оперировать со строками байтов или слов по одному элементу (байту или слову) за раз. Эти операции могут обрабатывать строки длиной до 64К. Операции со строками обеспечивают пересылку, сравнение, сканирование строк по значению, а также пересылку элементов строки в аккумулятор или из него. Этим базовыми инструкциям может предшествовать однобайтный префикс, наличие которого обеспечивает многократное повторение инструкции аппаратным способом, что гарантирует более высокое быстродействие, чем в случае программного цикла. Процесс повторения может быть прекращен при возникновении различных ситуаций, а сама повторяемая операция может быть как прервана, так и возобновлена. Строковые инструкции во многом похожи друг на друга. Они могут иметь операнд-приемник, операнд-источник или оба эти операнда. Аппаратно предполагается, что исходная строка размещена в текущем сегменте данных (для ее адресации используется регистр DS); для изменения этого допущения может использоваться однобайтный префикс изменения сегмента. Строка-приемник должна размещаться в текущем экстра сегменте (для ее адресации используется регистр ES). Для проверки того, что является элементом строки (байт или слово), Ассемблер проверяет атрибуты операндов инструкции. Однако, в действительности эти операнды для адресации строк не используются. Для адресации используются регистры SI, который предполагается загруженным значением смещения строки-источника относительно содержимого DS, и DI, содержимое которого трактуется как смещение строки-приемника относительно содержимого ES. Все эти регистры должны быть загружены требуемыми значениями до выполнения строковой операции, для чего могут использоваться инструкции LDS, LES и LEA. Строковые инструкции автоматически модифицируют содержимое регистров SI и/или DI для обеспечения возможности обработки следующего элемента строки. Значение флага направления DF определяет, будут ли эти индексные регистры автоматически увеличиваться (DF=0) или автоматически уменьшаться (DF=1) при переходе к следующему элементу строки. При обработке строк байтов содержимое SI и/или DI изменяется на 1; в случае строк слов — на 2. Использование регистров и флагов строковыми инструкциями: u SI — смещение строки-источника; u DI — смещение строки-приемника; u CX — счетчик повторений; u AL/AX — значение сканирования: приемник для LODS, источник для STOS; u DF 0 — автоматическое увеличение SI; u DI 1 — автоматическое уменьшение SI; u ZF — признак прекращения сканирования/сравнения. При использовании префикса повторений содержимое регистра CX уменьшается на 1 после каждого повторения строковой инструкции. Регистр CX должен быть загружен требуемым числом повторений до выполнений строковой операции. Если CX содержит 0, строковая операция не выполняется, и управление передается следующей инструкции.
REP/REPE/REPZ/REPNE/REPNZ Префиксы повторения. Эти ключевые слова представляют собой 5 мнемоник 2-х форм однобайтного префикса, управляющего повторением непосредственно следующей за ним строковой инструкции. Различные мнемоники введены для удобства программирования. Наличие префикса на состояния флагов не влияет. REP используется в сочетании с инструкциями MOVS и STOS и интерпретируется как «повторение пока не конец строки» (в CX не 0). REPE и REPZ работают также и физически являются тем же префиксом, что и REP. REPE и REPZ используются в сочетании с инструкциями CMPS и SCAS и требуют, чтобы флаг ZF, используемый этими инструкциями, был установлен в 1 до инициализации следующего повторения. REPNE и REPNZ представляют собой 2 мнемоники одного префикса и функционируют также, как REPE и REPF, но флаг ZF должен быть установлен в 0, или повторение прекратится. Заметим, что устанавливать флаг ZF перед выполнением повторяемой строковой инструкции необязательно. Повторяемая строковая инструкция может быть прервана (на обработку системных прерываний это не распространяется). Процессор распознает это прерывание до обработки очередного элемента строки. После возврата из прерывания повторяемая операция возобновляется с точки прерывания. Заметим, однако, что выполнение не возобновится правильно, если в дополнение к префиксу повторения был специфицирован 2-й или 3-й префикс (например, переключения сегмента или LOCK). В момент прерывания процессор «запоминает» только один префикс, причем, тот, который при кодировании операции непосредственно предшествовал строковой инструкции. После возврата из прерывания остальные префиксы действовать не будут. Если все же необходимо воздействие более, чем одного, префикса, прерывания на время работы строковой операции следует запретить инструкцией CLI. Это, однако не поможет при появлении немаскируемого прерывания. Кроме того, при обработке длинных строк может недопустимо возрасти время, в течении которого система не сможет отвечать на прерывания. Date: 2015-05-22; view: 536; Нарушение авторских прав |