Flatik.ru

Перейти на главную страницу

Поиск по ключевым словам:

страница 1
ЛАБОРАТОРНАЯ РАБОТА N 9
Работа с командами обработки строк.
Краткие теоретические сведения

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



  • · 8 бит, то есть байт;

  • · 16 бит, то есть слово;

  • · 32 бита, то есть двойное слово.

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

пересылка цепочки:

  • movs адрес_приемника, адрес_источника

  • movsb

  • movsw

  • movsd


сравнение цепочек:

  • cmps адрес_приемника, адрес_источника

  • cmpsb

  • cmpsw

  • cmpsd


сканирование цепочки:

  • scans (SCAningString) адрес_ приемника

  • scasb

  • scasw

  • scasd


загрузка элемента из цепочки:

  • lods адрес_источника

  • lodsb

  • lodsw

  • lodsd


сохранение элемента в цепочке:

  • stos (STOre String Byte) адрес_приемника

  • stosb

  • stosw

  • stosd


получение элементов цепочки из порта ввода-вывода:

  • ins адрес_приемника, номер_порга

  • insb

  • insw

  • insd


вывод элементов цепочки в порт ввода-вывода:

  • outs номер_порта,адрес_источника

  • outbs

  • outws

  • outds

Логически к этим командам нужно отнести и так называемые префиксы повторения.

rep

reре или repz



герnе или repnz
Префиксы повторения указываются перед нужной цепочечной командой в поле метки. Цепочечная команда без префикса выполняется один раз. Размещение префикса перед цепочечной командой заставляет ее выполняться в цикле. Отличия приведенных префиксов в том, на каком основании принимается решение о циклическом выполнении цепочечной команды: по состоянию регистра есх/сх или по флагу нуля zf:

Префикс повторения rep (REPeat). Этот префикс используется с командами, реализующими операции-примитивы пересылки и сохранения элементов цепочек - соответственно, movs и stos. Префикс гер заставляет данные команды выполняться, пока содержимое в есх/сх не станет равным 0. При этом цепочечная команда, перед которой стоит префикс, автоматически уменьшает содержимое есх/сх на единицу. Та же команда, но без префикса, этого не делает;

Префиксы повторения гере или repz (REPeat while Equal or Zero) являются синонимами. Они заставляют цепочечную команду выполняться до тех пор, пока содержимое есх/сх не равно нулю или флаг zf равен 1. Как только одно из этих условий нарушается, управление передается следующей команде программы. Благодаря возможности анализа флага zf, наиболее эффективно эти префиксы можно использовать с командами cmps и scans для поиска отличающихся элементов цепочек;

префиксы повторения герnе или repnz (REPeat while Not Equal or Zero) также являются синонимами. Их действие на цепочечную команду несколько отличается от действий префиксов repe/repz. Префиксы repne/repnz заставляют цепочечную команду циклически выполняться до тех пор, пока содержимое есх/сх не равно нулю или флаг zf равен нулю. При невыполнении одного из этих условий работа команды прекращается. Данные префиксы также можно использовать с командами cmps и scans, но для поиска совпадающих элементов цепочек.


Общие черты, присущие всем цепочечным командам, заключаются в особенностях формирования физического адреса операндов адрес_ источника и адрес_приемника. Цепочка-источник, адресуемая операндом адрес_источника, может находиться в текущем сегменте данных, определяемом регистром ds. Цепочка-приемник, адресуемая операндом адрес_приемника, должна быть в дополнительном сегменте данных, адресуемом сегментным регистром es. Вторые части адресов - смещения цепочек - также находятся в строго определенных местах. Для цепочки-источника это регистр esi/si (Source Index register - индексный регистр источника). Для цепочки- получателя это регистр edi/di (Destination Index register - индексный регистр приемника). Таким образом, полные физические адреса для операндов цепочечных команд следующие:
адрес_источника -пapa ds:esi/si;

адрес_приемника - пара es: edi/di.


Команды lds и les. позволяют получить полный указатель (сегмент: смещение) на ячейку памяти. Применение их в данном случае очень удобно в силу жесткой регламентации использования регистров для адресации операндов источника и приемника в цепочечных командах. Все семь групп команд, реализующих цепочечные операции- примитивы, имеют похожий по структуре набор команд. В каждом из этих наборов присутствуют одна команда с явным указанием операндов и три команды, не имеющие операндов. На самом деле набор команд микропроцессора имеет соответствующие машинные команды только для цепочечных команд ассемблера без операндов. Команды с операндами транслятор ассемблера использует только для определения типов операндов.

Следующий важный момент, касающийся всех цепочечных команд, - это направление обработки цепочки. Есть две возможности; · от начала цепочки к ее концу, то есть в направлении возрастания адресов; · от конца цепочки к началу, то есть в направлении убывания адресов.

Цепочечные команды сами выполняют модификацию регистров, адресующих операнды, обеспечивая тем самым автоматическое продвижение по цепочке. Количество байт, на которые эта модификация осуществляется, определяется кодом команды. Знак этой модификации определяется значением флага направления df (Direction Flag) в регистре eflags/flags:
если df = 0, то значение индексных регистров esi/si и edi/di будет автоматически увеличиваться (операция инкремента) цепочечными командами, то есть обработка будет осуществляться в направлении возрастания адресов;
если df = 1, то значение индексных регистров esi/si и edi/di будет автоматически уменьшаться (операция декремента) цепочечными командами, то есть обработка будет идти в направлении убывания адресов. Состоянием флага df можно управлять с помощью двух команд, не имеющих операндов:


  • cld (Clear Direction Flag) - очистить флаг направления. Команда сбрасывает флаг направления df в 0.

  • std (Set Direction Flag) - установить флаг направления. Команда устанавливает флаг направления df в 1.

Примеры использования цепочных команд.
Пример 1. Пересылка строки
str1 db 'Я хочу переслать эту строку в другое место'

strlen db $-str1 ;длина пересылаемой строки

text db 80 dup(' ') ;Приемная строка

................................................................

mov CX, strllen ; Столько байтов переслать

push DS ;Настроим ES

pop ES ;на наш сегмент данных

lea SI, strl ;Теперь DS:SI-> строка-источник

lea Dl, text ;Теперь ES:DI-> строка-приемник

cld ;Двигаться по строке вперед

rep movsb ;Пересылка СХ байт
Пример 2. Сравнение двух строк.

Предполагается, что в буфер TEXT поступают строки исходного текста программы, в

которых мы ищем обозначение 'Хочу найти'.

str1 db 'Хочу найти' ;Строка для сравнения

strlen equ $-str1 ;Длина строки

text db 80 dup (' ') ;Приемный буфер

..............................................................

mov AX, DS ;Настроим ES

mov ES, AX ;на наш сегмент данных

lea SI, str1 ;Теперь DS:SI-> строка-источник

lea Dl, text ;Теперь ES:DI-> строка-приемник

mov CX, strlen ;Длина строки

cld ;Выполнять сравнение вперед

гере cmpsb ;Сравнение байтов пока они равны,

;не более СХ раз

jne notequ ;Строки не совпадают, перейти

;на метку notequ ;Строки совпадают

notequ: ;Строки не совпадают


Пример 3. Поиск в строке заданного символа, например, кода пробела (т.е. промежутка между словами).
str db 128 dup (?) ; Строка с текстом

..............................................................

mov AL, ' ' ;Искомый символ

push DS ;Настроим ES

pop ES ;на наш сегмент данных

lea DI, str ;ES:DI-> строка

mov CX, 128 ;Верхняя граница поиска

repne scasb ;Сравнение с AL пока не равно

jne not_found ;Так и не было пробела

dec 1 ;01-> пробел в строке




Задание к работе

В сегменте данных определите 3 строки: str1-фамилия, str2 - имя. str3 - отчество.


1. Напишите программу для объедения этих строк в одну в следующей последовательности:, str2+str3+str1. Выведите полученный результат на экран.

2. В полученной строке ищите символ, порядковый номер которого равен вашему порядковому номеру в группе. Результат поиска выведите на экран в виде сообщения: «Символ «х» (не) найден в строке»


Задание для самостоятельно работы.

Напишите программу, которая вводит с клавиатуры Ваше имя, отчество, фамилию и выводит их на экране справа в три строки, выровненные по правому краю.

Лабораторная работа n 9 Работа с командами обработки строк

В общем случае цепочечные команды позволяют выполнять действия над блоками памяти

56.65kb.

01 10 2014
1 стр.


Лабораторная работа №1 Работа в Oracle Database Express Edition 1 Лабораторная работа №6

Лабораторная работа Выполнение расчетов с использованием программирования в среде Visual Basic for Applications

232.43kb.

18 12 2014
1 стр.


Лабораторная работа №1 Изучение автоматической телеграфной станции ат-пс-пд лабораторная работа №2 и зучение телеграфного коммутационного сервера «Вектор-2000»

Рецензент – зам начальника Гомельской дистанции сигнализации и связи Белорусской железной дороги В. И. Прокопюк

822.36kb.

29 09 2014
3 стр.


Лабораторная работа №1 по курсу "Информационная безопасность" Лабораторная работа №1

Простейшей и в то же время наиболее надежной из всех схем шифрования является так называемая схема однократного использования (рис. 1), изобретение, которое чаще всего связывают с

118.45kb.

10 10 2014
1 стр.


Лабораторная работа №1 «Изучение аэрофотосъёмочной аппаратуры». Аэрофотографическая система и ее основные характеристики. Принципиальная схема аэросъёмочного аппарата. Основные части афа. Назначение афа

Лабораторная работа №2 «Составление технического проекта на производство аэрофотосъемочных работ»

26.07kb.

14 12 2014
1 стр.


Лабораторная работа №5 Анализ операций с ценными бумагами

Лабораторная работа №5 включает 5 заданий. Для выполнения этих заданий необходимо ознакомиться с теоретическим материалом, приведенным к данной лабораторной работе и расположенным

166.96kb.

11 09 2014
1 стр.


Лабораторная работа 9-01 Лабораторная Шонин В. А. работа 9-01 Использование табличной верстки для создания Web-страниц

Целью работы является овладение навыками использования табличной верстки при создании Web-страниц

446.97kb.

12 09 2014
1 стр.


Лабораторная работа №4 Работа со стеком

Стек – это последовательный список с переменной длиной, включение и исключение из которого происходят с одной стороны – его вершины

29.02kb.

11 10 2014
1 стр.