Иллюстрированный самоучитель по Assembler

       

AND Логическое И


Команда and осуществляет логическое (побитовое) умножение первого операнда на второй. Исходное значение первого операнда (приемника) теряется, замещаясь результатом умножения. В качестве первого операнда команды and можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами. Команда воздействует на флаги SF, ZF и PF.

Правила побитового умножения:

Первый операнд-бит 0101

Второй операнд-бит 0011

Бит результата 0001

Пример 1

mov AX,0FFEh

and AX,5555h ;AX=0554h

Пример 2

; В полях данных:

mem dw 0С003h

;В программном сегменте:

mov AX,700Eh

and AX,mem ;AX=4002h

Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.

Пример

mov EDX, 0FA8 8 0 0 4 lh

and EDX,0FF00000Fh ; EDX = FA000001h

386P+ ARPL

Коррекция запрашиваемого уровня привилегий селектора

Команда aprl сравнивает селектор с образцом, содержащим максимально допустимый уровень привилегий (обычно используется селектор CS) и устанавливает проверяемое значение в соответствии с меньшим из двух уровней привилегий. Если изменение уровня не потребовалось, флаг ZF сбрасывается, если потребовалось - устанавливается. В качестве первого операнда команды aprl может использоваться 16-разрядный регистр или слово памяти с проверяемым селектором; в качестве второго операнда - 16-разрядный регистр с селектором-образцом.

386+ BOUND

Проверка индекса массива на выход за границы массива

Команда bound проверяет, лежит ли указанный индекс, рассматриваемый, как число со знаком, внутри заданных вторым операндом границ.

Если индекс выходит за границы массива снизу или сверху, генерируется прерывание с вектором 5. Первый операнд должен быть регистром, содержащим проверяемый индекс, второй - адресом поля памяти с двумя границами проверяемого массива. В команде bound допустимо использование как 16-битовых, так и 32-битовых операндов (но и первый, и второй операнды должны быть одного типа).



Содержание раздела