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

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




Скачати 56.65 Kb.
НазваЛабораторная работа n 9 Работа с командами обработки строк
Дата03.08.2012
Розмір56.65 Kb.
ТипЛабораторная работа

ЛАБОРАТОРНАЯ РАБОТА 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 Работа с командами обработки строк iconЛабораторная работа №1 «Работа с командным процессором Windows 2000»
Написать командный файл, выводящий на экран содержимое файлов указанных в качестве параметров этого файла
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа №1 «Работа с командным процессором Windows 2000»
Написать командный файл, выводящий на экран содержимое файлов указанных в качестве параметров этого файла
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа 3 Манипулирование данными в sql oracle Содержание Цели лабораторной работы 1 Теоретические основы 1
Изучить возможности sql oracle по вставке, обновлению и удалению строк в таблице
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа №9 Работа с данными в ms excel. Запустите программу «Microsoft Excel»
Откройте книгу "Заказы" из папки LabExcel. Если этой книги нет, скопируйте ее из папки Teach диска M
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа №1 Работа с объектами Windows Запустить программу «Проводник»
Для изменения режима просмотра вызовите меню Вид и выберите один из пунктов: “крупные значки”, “мелкие значки”, “список”, “таблица”....
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа №1 Работа с объектами Windows Запустить программу «Проводник»
Для изменения режима просмотра вызовите меню Вид и выберите один из пунктов: “крупные значки”, “мелкие значки”, “список”, “таблица”....
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа №13 «Изучение явления электромагнитной индукции»
Занятие 83. Лабораторная работа №13 «Изучение явления электромагнитной индукции»
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа Знакомство с диаграммами расписаний проектов. Создание Gantt диаграммы расписания проекта. Требования к программному обеспечению
Лабораторная работа Знакомство с диаграммами расписаний проектов. Создание Gantt диаграммы расписания проекта
Лабораторная работа n 9 Работа с командами обработки строк iconЛабораторная работа Знакомство с технологией структурного анализа и проектирования sadt, на примере case-системы bpwin Требования к программному обеспечению
Лабораторная работа Знакомство с технологией структурного анализа и проектирования sadt, на примере case-системы bpwin 0
Лабораторная работа n 9 Работа с командами обработки строк iconДокументи
1. /Модуль 1 Access/Access Лабораторная работа ь 1.doc
2. /Модуль...

Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи