Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Цепочечные командыСтр 1 из 7Следующая ⇒
Цепочечные команды также называют командами обработки строк символов. Отличие между ними в том, что под строкой символов здесь понимается последовательность байт, а цепочка — это более общее название для случаев, когда элементы последовательности имеют размер больше байта — слово или двойное слово. Т.е. цепочечные команды позволяют проводить действия над блоками памяти, представляющими собой последовательности элементов следующего размера: - 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, но для поиска совпадающих элементов цепочек.
|