Читайте также:
|
|
Существуют элементарные (или базовые) типы данных.
· Непосредственные данные, представляющие собой числовые или символьные значения и являющиеся частью команды
· Данные описываемые с помощью ограниченного набора директив резервирования памяти и позволяющие выполнять самые элементарные операции о размещении и инициализации числовой и символьной информации.
Работа с ними поддерживается на уровне системы команд микропроцессора. Используя данные этих типов можно формализовать и запрограммировать практически любую задачу. С целью облегчения разработки программ в язык ассемблера была введена возможность использования нескольких сложных типов данных:
· Сканирование цепочки.
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 | Нарушение авторских прав