Хелпикс

Главная

Контакты

Случайная статья





(CoMPare String Byte/Word/Double word operands)



  (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).

(REPeat string operation)

Повторить цепочечную операцию

 

Схема команды: rep repe repz repne repnz

Назначение: указание условного и безусловного повторения следующей за данной командой цепочечной операции.
Алгоритм работы:
Алгоритм работы зависит от конкретного префикса. Префиксы rep, repe и repz на самом деле имеют одинаковый код операции, их действия зависят от той цепочечной команды, которую они предваряют:

  • rep используется перед следующими цепочечными командами и их краткими эквивалентами: movs, stos, ins, outs. Действия rep:

1. анализ содержимого cx:

§ если cx< > 0, то выполнить цепочечную команду, следующую за данным префиксом и перейти к шагу 2;

§ если cx=0, то передать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);

2. уменьшить значение cx=cx–1 и вернуться к шагу 1;

  • repe и repz используются перед следующими цепочечными командами и их краткими эквивалентами: cmps, scas. Действия repe и repz:

1. анализ содержимого cx и флага zf:

§ если cx< > 0 или zf< > 0, то выполнить цепочечную команду, следующую за данным префиксом, и перейти к шагу 2;

§ если cx=0 или zf=0, то передать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);

2. уменьшить значение cx=cx-1 и вернуться к шагу 1;

  • repne и repnz также имеют один код операции и имеют смысл при использовании перед следующими цепочечными командами и их краткими эквивалентами: cmps, scas. Действия repne и repnz:

1. анализ содержимого cx и флага zf:

§ если cx< > 0 или zf=0, то выполнить цепочечную команду, следующую за данным префиксом и перейти к шагу 2;

§ если cx=0 или zf< > 0, то передать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);

2. уменьшить значение cx=cx–1 и вернуться к шагу 1.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.