CMPSB - Порівняти рядки байтів

Вплив команди на прапори та формати команди:

Порівняння виконується шляхом віднімання операнда, зазначеного індексним регістром-призначенням з операнда, зазначеного індексним регістром-джерелом.

Зауважте, що напрямок віднімання для команди CMPS це [SI] - [DI] або [ESI] - [EDI]. Лівий операнд ([SI] або [ESI]) – це джерело, правий операнд ([DI] або [EDI]) – це призначення. Це випадок інверсного використання угоди Intel про те, що лівий операнд це призначення, а правий операнд це джерело.

Після порівняння обидва індексні регістри (джерело та призначення) автоматично змінюються. Якщо прапор DF дорівнює 0 (була виконана команда CLD), то регістри збільшуються; якщо прапор DF дорівнює 1 (була виконана команда STD), то регістри зменшуються. Регістри збільшуються або зменшуються на 1 при порівнянні байтів, на 2 при порівнянні слів і на 4 при порівнянні подвійних слів.

Мнемоніки CMPSB, CMPSW, CMPSD є синонімами CMPS порівняння байтів, слів, чи подвійних слів, відповідно.

КомандіCMPS може передувати префікс REPE або REPNE для порівняння блоку (E)CX байт, слів або подвійних слів. Зверніться до опису REP для більш детальної інформації щодо цієї операції.

IF (Команда типу CMPSD) OR (Команда з подвійним словом як операнда)

THEN OperandSize = 32;

ELSE OperandSize = 16;

IF AddressSize = 16

THEN (Використовувати SI для source-index та DI для destination-index);

ELSE (* AddressSize = 32 *)

Використовувати ESI для source-index та EDI для destination-index;

IF (Команда з байтом як операнда)

встановити ZF за результатами операції [destination-index] - [source-index];

IF DF=0 THEN IncDec=1; ELSE IncDec = -1;FI;

IF OperandSize = 16

встановити ZF за результатами операції [destination-index] - [source-index];

IF DF = 0 THEN IncDec = 2 ELSE IncDec = -2; FI;

ELSE (* OperandSize = 32 *)

встановити ZF за результатами операції [destination-index] - [source-index];

(* Порівняння подвійних слів *)

IF DF = 0 THEN IncDec = 4 ELSE IncDec = -4; FI;

source-index = source-index + IncDec;

destination-index = destination-index + IncDec;

Особливі ситуації захищеного режиму:

Особливі ситуації режиму V86: