Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Цепочечные команды






 

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

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

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

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

Содержимое этих блоков для микропроцессора не имеет никакого значения. Это могут быть символы, числа и все что угодно. Главное, чтобы размерность элементов совпадала с одной из вышеперечисленных, и эти элементы находились в соседних ячейках памяти.

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

Операции-примитивы и команды, с помощью которых они реализуются:

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

movs адрес_приемника, адрес_источника (MOVe String) — переслать цепочку;

movsb (MOVe String Byte) – переслать цепочку байтов;

movsw (MOVe String Word) – переслать цепочку слов;

movsd (MOVe String Double word) — переслать цепочку двойных слов.

Команды производят копирование элементов из одной области памяти (цепочки) в другую.

 

2. Сравнение цепочек:

cmps адрес_приемника, адрес_источникд(СоMPare String) — сравнить строки;

cmpsb (CoMPare String Byte) — сравнить строку байт;

cmpsw (CoMPare String Word) — сравнить строку слов;

cmpsd (CeMPare String Double word) — сравнить строку двойных слов.

Команды производят сравнение элементов цепочки-источника с элементами цепочки-приемника.

 

3. Сканирование цепочки:

sсas адрес_приемника (SCAning String) — сканировать цепочку;

scasb (SCAning String Byte) — сканировать цепочку байт;

scasw (SCAning String Word) — сканировать цепочку слов;

scasd (SCAning String Double Word) — сканировать цепочку двойных слов.

Команды производят поиск некоторого значения в области памяти.

 

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

lods адрес_источника (LOaD String) — загрузить элемент из цепочки в регистр-аккумулятор al/ax/eax.

lodsb (LOaD String Byte) — загрузить байт из цепочки в регистр al.

lodsw (LOaD String Word) — загрузить слово из цепочки в регистр ах.

lodsd (LOaD String Double Word) — загрузить двойное слово из цепочки в регистр еах.

Эта операция позволяет извлечь элемент цепочки и поместить его в регистр-аккумулятор al, ах или еах.

 

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

 

stos адрес_приемника (STOre String) — сохранить элемент из регистра-аккумулятора al/ax/eax в цепочке;

stosb (STOre String Byte) — сохранить байт из регистра аl в цепочке;

stosw (STOre String Word) — сохранить слово из регистра ах в цепочке;

stosd (STOre String Double Word) — сохранить двойное слово из регистра еах в цепочке.

Эта операция позволяет произвести действие, обратное команде lods, то есть сохранить значение из регистра-аккумулятора в элементе цепочки.

 

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

ins адрес_приемника, номер_порта (Input String) — ввести элементы из порта ввода-вывода в цепочку.

insb (INput String Byte) — ввести из порта цепочку байтов;

insw (INput String Word) — ввести из порта цепочку слов;

Insd (INput String Double Word) — ввести из порта цепочку двойных слов.

 

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

outs номер_порта, адрес_источника(ОutPut String) — вывести элементы из цепочки в порт ввода-вывода

outsb (OUTput String Byte) — вывести цепочку байтов в порт ввода-вывода;

outsw (OUTtput String Word) — вывести цепочку слов в порт ввода-вывода;

outsd (OUTput String Double Word) — вывести цепочку двойных слов в порт ввода-вывода.

 

К этим командам нужно отнести и так называемые префиксы повторения. Они предназначены для использования цепочечными командами. Префиксы повторения имеют свои мнемонические обозначения:

rер

rере или repz

rерnе или repnz

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

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

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

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

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал