русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 758; Нарушение авторских прав


Строкой называют последовательность байтов или слов, раз­мещаемую в смежных ячейках памяти. Примером может служить строка, которая вводится с терминала в ВМ. Операции со строками выполняются над каждым элементом строки (байтом или словом), так что время их выполнения пропорционально числу элементов в строке. В ЦП имеется несколько однобайт­ных команд, выполняющих простые операции над строками. Эти команды значительно ускоряют манипуляции над строками бла­годаря уменьшению времени, затрачиваемого на обработку каж­дого элемента и на вспомогательные действия, которые необхо­димо выполнять между обработкой последовательных элементов. К вспомогательным действиям относятся: переадресация элемента строки, уменьшение на единицу счетчика числа обрабаты­ваемых элементов и проверка достижения счетчиком нуля.

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

1: JCXZ Exit ; если СХ=0, то пересылка закончена

2: MOV AL, [SI] ; переслать байт из в AL

3: MOV [DI], AL ; запомнить содержимое AL в памяти

4: INC SI ; увеличить SI на «1»

5: INC DI ; увеличить DI на «1»

6: DEC СХ ; уменьшить СХ на «1»

7: JNZ 1 ; перейти к шагу 1.

Собственно пересылка байта выполняется на шагах 2 и 3. На шагах 4 и 5 осуществляется вычисление адресов источника и места назначения для следующего элемента строки. Наконец, шаги 1, 6 и 7 служат для определения числа обработанных эле­ментов.



Действия, которые выполняются с помощью указанных че­тырех команд на протяжении шагов 2-5, могут быть выполне­ны с помощью одной команды MOVS (переслать элемент стро­ки). Для организации циклического исполнения команды MOVS (а также других команд обработки строк) используется одно­байтовая команда-префикс REP (повторить). Она записывается перед основной командой (например, REP MOVS) и обеспечи­вает ее выполнение N раз. Число повторений N предварительно записывается в регистр СХ и на каждом шаге содержимое СХ уменьшается на единицу. Используются три мнемокода команды-префикса: REP, REPNE/REPNZ и REPE/REPZ. Первый мнемо­код анализирует только одно условие окончания повторений: (СХ)=0. В тех случаях, когда возникает необходимость допол­нительно анализировать условие ZF=0 (или ZF=1), исполь­зуется второй (или третий) мнемокод. Команда REP позволяет еще больше сократить время на обработку элементов строки за счет совмещения операций (СХ) = (СХ) - 1 с проверкой дости­жения счетчиком нуля. Так, совокупность действий, выполня­емых за семь указанных выше шагов, может быть выполнена командой MOVS с префиксом REP.

В ряде случаев возникает необходимость в пересылке строки в обратном порядке, начиная не с первого, а с последнего ее эле­мента. Например, требуется переслать строку, содержащую 10 байт и расположенную в памяти, с относительного адреса (SI) = 200 по (SI) = 209 в область памяти с относительного ад­реса (DI)=205 no (DI) =214. Ясно, что такую пересылку нель­зя выполнять начиная с первого элемента, так как области па­мяти с исходной строкой и строкой-результатом перекрываются и первая же пересылка «испортит» значение пятого элемента ис­ходной строки. Требуемую пересылку строк можно осуществить начиная с последнего элемента исходной строки. В этом случае следует установить начальные адреса элементов строк равными (SI) =205 и (DI) =214. Кроме того, при пересылке каждого элемента необходимо не увеличивать, а уменьшать на единицу содержимое индексных регистров SI и DI. Направление переда­чи устанавливается с помощью флага DF: при значении DF=1 происходит автодекрементирование индексных регистров, а при значении DF=0 - автоинкрементирование.

Когда в качестве элементов строк используются не байты, а слова, соответствующее увеличение или уменьшение значений индексных регистров осуществляется на два, т. е. при DF=1: SI = SI - 2; DI = DI - 2, а при DF=0: SI = SI + 2, DI = DI + 2.

Кроме команды MOVS для действия со строками имеется еще четыре команды: CMPS (сравнение элементов строк), SCAS (сканирование элементов строки), LODS (загрузка эле­мента строки) и STOS (заполнение элемента строки).

Команда CMPS позволяет осуществить поэлементное сравне­ние двух строк, одна из которых располагается в памяти с отно­сительного адреса, указанного в SI, а вторая - с относительного адреса, указанного в DI. По команде CMPS производится вы­читание элемента строки с адресом в SI из элемента строки с ад­ресом в DI. Как обычно, при выполнении операции сравнения результат вычитания не фиксируется, а устанавливаются соот­ветствующие значения флагов, по которым определяется резуль­тат сравнения. По аналогии с командой MOVS при сравнении изменяются значения индексных регистров по правилу: SI = SI ± А; DI = DI ± A, где « + » - используется при DF=0; «-» - при DF=1; А=1- при w = 0; А = 2 при w=1.

Для циклического повторения команды CMPS используется префикс повторения REPNE/REPNZ или REPE/REPZ.

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

Образцовый элемент загружается в AL и затем организуется цикл сканирования с использованием префикса повторения REPE/REPZ. Как и при выполнении предыдущих команд, каж­дый раз по команде SCAS производится автоинкремент (или автодекремент) адреса элемента: (DI) = (DI) ± A.

Две следующие команды LODS (загрузка элемента строки) и STOS (запись элемента строки) позволяют загружать элемен­ты строки в аккумулятор и записывать содержимое аккумулято­ра в строку. При выполнении этих команд осуществляется под­готовка адреса следующего элемента строки, т. е. модифициру­ется содержимое соответствующего индексного регистра. Однако повторение команды LODS обычно не используется, а повторе­ние команды STOS, организуемое с помощью префикса REP, применяется при загрузке строки константой, предварительно помещенной в аккумулятор.

Рассмотренные выше команды работы со строками реализуют относительно простые операции, на базе которых можно органи­зовать более сложные операции обработки строк.



<== предыдущая лекция | следующая лекция ==>
Сдвиги и логические команды | Команды передачи управления


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.