Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
I8086.DOC
Скачиваний:
50
Добавлен:
02.05.2014
Размер:
1.36 Mб
Скачать
      1. Cmps– сравнение строк

A6

CMPSB

сравнение байтов [DS:SI] и [ES:DI]

A7

CMPSW

сравнение слов [DS:SI] и [ES:DI]

Описание.Эта инструкция сравнивает между собой байты или слова источника и приёмника.

Инструкция CMPSотносится к группе инструкций обработки строк. Оба её операнда находятся в памяти. Адрес источника задаётся регистровой паройDS:SI, адрес приёмника – регистровой паройES:DI. Сегментный регистрDSможет быть заменён другим сегментным регистром с помощью префикса замены сегмента; сегментный регистрESзаменён быть не может.

После выполнения операции содержимое регистров SIиDIавтоматически увеличивается или уменьшается на размер операнда, т.е. на 1 или на 2. Увеличение (автоинкремент) имеет место, если флажок направленияDFв регистре флагов сброшен; уменьшение (автодекремент) – если флажокDFустановлен.

Сравнение, как и в команде CMP, выполняется вычитанием значения приёмника из значения источника. Эти значения рассматриваются как двоичные числа со знаком. Результат вычитания теряется, исходные значения операндов не изменяются. По результатам вычитания устанавливаются соответствующие признаки в регистре флагов.

Инструкция CMPSвыполняет сравнение одной пары байтов или слов. При необходимости вместе с ней могут использоваться префиксы повторенияREP/REPcc, что обеспечит сравнение последовательностей байтов или слов памяти.

ФлажкиCF,OF,SF,ZF,AFиPFустанавливаются в соответствии с результатами выполнения операции сравнения.

Замечания по программированию

При записи на языке ассемблера либо используется мнемоника CMPSBилиCMPSW, явно определяющая размер операндов, либо используется обобщённая мнемоникаCMPSс указанием местоположения операндов в памяти. Следует, однако, помнить, что адресация операндов всегда осуществляется с помощью регистровых парDS:SIиES:DI, поэтому указываемые в данной инструкции адреса используются только для определения размера операндов и, возможно, для применения префикса замены сегмента. За правильность установки начальных значений регистров отвечает программист.

      1. Cwd– преобразование слово в двойное слово

99

CWD

Расширение знака AX на DX

Описание.Содержимое регистраAX, рассматриваемое как число со знаком, расширяется на регистровую паруDX:AX. В регистрDXзаносится старшая часть результата.

Если в AXсодержалось отрицательное число (т.е. если старший разряд регистраAXравен 1), все разряды регистраDXустанавливаются в единицу. Если же вAXсодержался нуль или положительное число (старший разряд регистраAXравен 0), регистрDXобнуляется.

Флажкине изменяются.

      1. Daa– коррекция сложения двоично-десятичных упакованных чисел

27

DAA

двоично-десятичная коррекция сложения AL

Описание.Эта команда выполняет коррекцию результата сложения двух двоично-кодированных десятичных чисел инструкциейADDилиADC.

Если при выполнении предшествовавшей операции сложения в младшем полубайте регистра ALполучено значение, превышающее 9, или произошёл перенос из 3-го разряда в 4-ый (был установлен флажокAF), то значение младшего полубайта регистраALувеличивается на 6, флажокAFостаётся равным 1, а флажокCFустанавливается, если при прибавлении 6 возник перенос из 3-го разряда (если переноса не было, значение флажкаCFне изменяется, т.е. остаётся таким же, каким оно было до выполнения инструкцииDAA). Если же содержимое младшего полубайта регистраALне превышает 9, а флажокAFсброшен, никаких действий с младшим полубайтом не выполняется.

Затем проверяется содержимое старшего полубайта регистра AL. Если его значение больше 9 либо если установлен флажокCF(независимо от того, был ли он установлен при выполнении команды сложения или при увеличении младшего полубайта на 6 в процессе выполнения инструкцииDAA), то это значение увеличивается на 6 и устанавливается флажокCF. Если же значение старшего полубайта не превышает 9, а флажокCFсброшен, никаких действий со старшим полубайтом не выполняется.

ФлажкиAFиCFустанавливаются в соответствии с результатом операции (см. выше).

Флажки SF,ZFиPFустанавливаются по обычным правилам в соответствии с полученным результатом.

Значение флажка OFне определено.