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

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

Микропроцессоры 8086 и 8088 не маскируют значение счётчика сдвига. Таким образом, сдвиг может быть выполнен на произвольное число разрядов от 0 до 255. В процессорах, начиная с 80286, в качестве счётчика сдвига используются только младшие 5 разрядов регистра CL, что ограничивает максимальное количество сдвигов (не более 31).

      1. Sbb– двоичное вычитание с заёмом

18 /r

SBB r/m8, r8

r/m8:= r/m8r8 – CF

19 /r

SBB r/m16, r16

r/m16:= r/m16r16 – CF

1A /r

SBB r8, r/m8

r8:= r8r/m8 – CF

1B /r

SBB r16, r/m16

r16:= r16 – r/m16 – CF

1C ib

SBB AL, imm8

AL:= AL – imm8 – CF

1D iw

SBB AX, imm16

AX:= AX – imm16 – CF

80 /3 ib

SBB r/m8, imm8

r/m8:= r/m8imm8 – CF

81 /3 iw

SBB r/m16, imm16

r/m16:= r/m16imm16 – CF

83 /3 ib

SBB r/m16, imm8

r/m16:= r/m16imm8 – CF

Описание.Эта инструкция обеспечивает вычитание двух 8- или 16-разрядных двоичных чисел с учётом значения входного заёма, определяемого флажкомCF.

При вычитании 8-разрядного второго операнда из 16-разрядного первого (код операции 83) перед выполнением операции производится расширение знака второго операнда.

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

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

Команда SBBиспользуется при вычитании двоичных чисел с разрядностью, превышающей 16. В этом случае вычитание младших частей операндов выполняется с помощью инструкцииSUB, а последующих частей операндов – с помощью инструкцийSBB, следующих заSUB.

Совместно с командами десятичной коррекции сложения AASиDASинструкцииSUBиSBBобеспечивают вычитание двоично-десятичных распакованных и упакованных чисел.

      1. Scas– сканирование строки

AE

SCASB

поиск байта AL в [ES:DI]

AF

SCASW

поиск слова AX в [ES:DI]

Описание.Эта инструкция производит поиск байта или слова, содержащегося в регистреAL/AX, в строке по адресу [ES:DI].

Сравнение выполняется путём выполнения вычитания значений операндов. Результат вычитания теряется, но по нему устанавливаются флажки в регистре FLAGS.

Инструкция SCASотносится к группе инструкций обработки строк. Операнд находится в памяти по адресу, содержащемуся в регистровой пареES:DI. Сегментный регистрESне может быть заменён другим сегментным регистром с помощью префикса замены сегмента. Операндом-приёмником всегда является регистрALилиAX.

После загрузки байта или слова в аккумулятор содержимое регистра DIувеличивается (DF=0) или уменьшается (DF=1) на 1 или 2 в зависимости от размера операнда.

Флажкиизменяются в соответствии с результатами выполнения сравнения.