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

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

Читайте также:
  1. A. Команды умножения
  2. Quot;Однако подали команду на поднятие мощности вторично. А повторные команды выполняются беспрекословно".
  3. Заблаговременная подготовка управленческой команды
  4. Извлечение кода команды, данных из памяти или внешнего устройства (Ml).
  5. Каждая команда представляет 1-2 показательных номера для шоу-программы. Зарубежные команды должны иметь свой государственный флаг.
  6. Как Вы выбираете людей для своей команды?
  7. Команды FTP протокола

Существуют элементарные (или базовые) типы данных.

· Непосредственные данные, представляющие собой числовые или символьные значения и являющиеся частью команды

· Данные описываемые с помощью ограниченного набора директив резервирования памяти и позволяющие выполнять самые элементарные операции о размещении и инициализации числовой и символьной информации.

Работа с ними поддерживается на уровне системы команд микропроцессора. Используя данные этих типов можно формализовать и запрограммировать практически любую задачу. С целью облегчения разработки программ в язык ассемблера была введена возможность использования нескольких сложных типов данных:

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

Scas фдрес_приёмника.

ScasB

ScaSw

ScaSd

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

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

LodSb

LodSw

LodSd

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

Stos адрес_приёмника

stoSb

stoSw

stoSd

· Получение элементов цепочка из порта ввода/вывода

Ins адрес_приёмника, номер порта

InSb

InSw

InSd

· Вывод элементов цепочки в порт ввода/вывода

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

OutSb

OutSw

Outsd

 

Они строятся на равнении байт, слов и двойных слов

· Cmpsb

· Cmpsw

· Cmpsd

Приведённые команды сравнивают байт слово, двойное слово из памяти по адресу esi с байтом, словом и двойным словом по адресу edi и устанавливают флаги. При этом esi и edi продвигаются.

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

· Rep (repeat)

· Rape или repz (repeat while equal or zero)

· Repne или repnz (repeat while not equal or zero)

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

· Либо по состоянию регистра ecx/cx

· Либо по флагу нуля zf

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

Rape или repz заставляет цепочечную команду выполнятся пока содержимое ecx/cx не равно 0 или флаг zf равен единице. Как только одно из условий нарушается, управление передаётся следующей команде. Благодаря возможности анализа состояния флага zf наиболее эффективно эти префиксы можно использовать с командами Cmps и scas для поиска отличающихся элементов цепочки.

Repne или repnz – эти префиксы являются абсолютными синонимами. Они заставляют цепочечную команду выполнятся циклически до тех пор, пока ecx/cx не равно 0 или флаг zf равен 0. При невыполнении одного из условий работа команды прекращается.

Данные команды можно так же использовать с командами cmps и scas для поиска совпадающих элементов цепочки.

Цепочка-источник адресуемая операндом адрес_источника может находится в текущем сегменте данных определяемая регистром ds.

Цепочка-приёмник адресуемая операндом адрес_приёмника должна быть в дополнительном сегменте данных, адресуемым сегментным регистрам es. Допускается замена только регистра ds. Регистр es подменять нельзя.

Вторые части адресов – это смещение цепочек. Так же находятся в строго определённых местах для цепочки источника esi/si. Т.е. индексные регистры источника. Для цепочки получателя – это регистр edi/di – индексный регистр приёмника.

На самом деле набор команд микропроцессора имеет соответствующие машинные команды только для цепочечных команд без операндов. Команды с операндами транслятор ассемблер использует только для определения типов операндов.

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

Есть 2 возможности направления обработки цепочки

1. От начала цепочки к концу в направлении пребывании адресов

2. От конца к началу в направлении убывания адресов

Цепочечные команды сами выполняют модификацию регистров, адресующих операндам, обеспечивая тем самым автоматическое продвижение по цепочке. Количество байт на которые эта модификация осуществляется определяется кодом команд. Знак модификации определяется значением флага направления df.

Если df равен 0, то значение индексных регистров esi/si и edi/di будут автоматически увеличиваться цепочечными командами, т.е. обработка будет осуществляется в направлении возрастании адресов. Если df равен 1, то значения регистров будет уменьшатся, а обработка будет в направлении убывания адресов.

Состоянием флага df можно управлять с помощью 2 команд без операндов:

· Cld (очитить флаг направления, df=0)

· Std (установит флаг направления, df=1)


Дата добавления: 2015-11-26; просмотров: 90 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.008 сек.)