Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КС-ZAO / Лекции ЦЭВМруский вариант11.doc
Скачиваний:
188
Добавлен:
07.02.2016
Размер:
15.82 Mб
Скачать

Процессор 80386, новые инструкции

В процессоре 80386 введены следующие новые инструкции:

BSF BTR LFS MOVZX

BSR BTS LGS SETxx

BT CDQ LSS SHLD

BTC CWDE MOVSX SHRD

Проверка битов

Инструкциями проверки битов процессора 80386 являются инструкции BT, BTC, BTR и BTS. Инструкция BT - это основная инструкция проверки битов, копирующая значение заданного типа во флаг переноса. Например, в следующем фрагменте программы переход на Bit3Is1 происходит только в том случае, если бит 3 регистра EAX отличен от 0:

bt eax,3

jc Bit3Is1

.

. Bit3Is1:

.

.

Если EAX содержит значение 00000008h, то в этой программе произойдет переход на Bit3Is1. Если же EAX содержит значение 0FFFFFF7h, то переход выполнен не будет. Первый операнд инструкции BT представляет собой 16- или 32-разрядный общий регистр или ячейку памяти, содержащую проверяемый бит. Второй операнд - это номер проверяемого бита, заданный 8-битовым непосредственным значением или содержимым 16- или 32-разрядного общего регистра. Если в качестве второго операнд используется регистр, то его размер должен совпадать с размером первого операнда. Номер проверяемого бита может задаваться как регистром, так и непосредственным значением, а поле, в котором проверяется бит, может представлять собой как ячейку памяти, так и регистр.

Инструкция BTC аналогична инструкции BT, только копируемое во флаг переноса значение представляет собой дополнение заданного бита. То есть флаг переноса устанавливается в значение 1, если заданный бит равен 0, и в значение 0, если заданный бит равен 1. Инструкция BTC устраняет необходимость использования инструкции CMC, когда требуется задать состояние флага переноса, обратное значению проверяемого бита.

Инструкция BTR также аналогична инструкции BT, но после копирования проверяемого бита во флаг переноса его значение становится равным 0. Аналогично, инструкция BTS устанавливает проверяемый бит, копируемый во флаг переноса, в значение 1. Эти инструкции проверки полезно использовать для анализа и установки состояния флага в одной операции (при этом подразумевается, что не может произойти прерывание между проверкой флага и установкой его в новое значение).

Просмотр битов

Для нахождения первого или последнего ненулевого бита операнда размером в слово или двойное слово полезно использовать инструкции BSF и BSR. Инструкция BSF просматривает исходный операнд, начиная с бита 0 (младший бит), определяя первый ненулевой бит. Если все биты операнда-источника являются нулевыми, то флаг нуля очищается. В противном случае флаг нуля устанавливается, а в целевой регистр (приемник) копируется номер первого найденного ненулевого бита.

Второй операнд инструкции BFS - это 16- или 32-разрядный общий регистр или просматриваемая ячейка памяти, а первый операнд - это 16- или 32-разрядный общий регистр, в который будет записываться номер первого ненулевого бита в просматриваемых данных. Оба операнда должны иметь одинаковый размер.

Инструкция BSR аналогична инструкции BFS, но просмотр она начинает со старшего (наиболее значащего) бита операнда-источника к младшему биту.

Перемещение данных с расширением по знаку или нулю

Инструкции MOVZX и MOVSX позволяют вам копировать 8- или 16- разрядное значение в 16- или 32-разрядный общий регистр без необходимости использования лишних инструкций для расширения значения до заданного размера. Инструкция MOVZX заполняет старшие биты приемника нулями, а инструкция MOVSX распространяет знак значения в соответствии с размером приемника. Обе инструкции аналогичны стандартной инструкции MOV.

Соседние файлы в папке КС-ZAO