русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

CMPS/CMPSB/CMPSW/CMPSD

(CoMPare String Byte/Word/Double word operands)

Сравнение строк байтов/слов/двойных слов

Схема команды: cmps приемник,источник cmpsb cmpsw cmpsd

Назначение: сравнение двух последовательностей (цепочек) элементов в памяти.

Синтаксис

Алгоритм работы:

  • выполнить вычитание элементов (источник - приемник), адреса элементов предварительно должны быть загружены:
    • адрес источника — в пару регистров ds:esi/si;
    • адрес назначения — в пару регистров es:edi/di;
  • в зависимости от состояния флага df изменить значение регистров esi/si и edi/di:
    • если df=0, то увеличить содержимое этих регистров на длину элемента последовательности;
    • если df=1, то уменьшить содержимое этих регистров на длину элемента последовательности;
  • в зависимости от результата вычитания установить флаги:
    • если очередные элементы цепочек не равны, то cf=1, zf=0;
    • если очередные элементы цепочек или цепочки в целом равны, то cf=0, zf=1;
  • при наличии префикса выполнить определяемые им действия (см. команды repe/repne).

Состояние флагов после выполнения команды:

OF SF ZF AF PF CF
r r r r r r

Применение:

Команды без префиксов осуществляют простое сравнение двух элементов в памяти. Размеры сравниваемых элементов зависят от применяемой команды. Команда cmps может работать с элементами размером в байт, слово, двойное слово. В качестве операндов в команде указываются идентификаторы последовательностей этих элементов в памяти. Реально эти идентификаторы используются лишь для получения типов элементов последовательностей, а их адреса должны быть предварительно загружены в указанные выше пары регистров. Транслятор, обработав команду cmps и выяснив тип операндов, генерирует одну из машинных команд cmpsb, cmpsw или cmpsd. Машинного аналога для команды cmps нет. Для адресации назначения обязательно должен использоваться регистр es, а для адресации источника можно делать замену сегмента с использованием соответствующего префикса.

Для того чтобы эти команды можно было использовать для сравнения последовательности элементов, имеющих размерность байт, слово, двойное слово, необходимо использовать один из префиксов repe или repne. Префикс repe заставляет циклически выполняться команды сравнения до тех пор, пока содержимое регистра ecx/cx не станет равным нулю или пока не совпадут очередные сравниваемые элементы цепочек (флаг zf=1). Префикс repne заставляет циклически производить сравнение до тех пор, пока не будет достигнут конец цепочки (ecx/cx=0) либо не встретятся различающиеся элементы цепочек (флаг zf=0).

.dataobl1 db 'Строка для сравнения'obl1 db 'Строка для сравнения'a_obl1 dd obl1a_obl2 dd obl2.code... cld ;просмотр цепочки в направлении возрастания адресов mov cx,20 ;длина цепочки lds si,a_obl1 ;адрес источника в пару ds:si les di,a_obl2 ;адрес назначения в пару ds:sirepe cmpsb ;сравнивать, пока равны jnz m1 ;если не конец цепочки, то встретились разные элементы... ;действия, если цепочки совпали...m1:... ;действия, если цепочки не совпали

См. также: уроки 10, 11 и команды ins, lods, movs, outs, scas, stos, repe, repz, repne, repnz

Просмотров: 790


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.