Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
AND
Влияние команды на флаги и форматы команды:
0 |
* |
* |
? |
* |
0 |
20 /r |
AND r/m8,r8 |
r/m8 AND r8 |
8086 |
and [bx],ah |
21 /r |
AND r/m16,r16 |
r/m16 AND r16 |
8086 |
and cx,di |
21 /r |
AND r/m32,r32 |
r/m32 AND r32 |
Intel386 |
and memory,ecx |
22 /r |
AND r8,r/m8 |
r8 AND r/m8 |
8086 |
and ch,sum |
23 /r |
AND r16,r/m16 |
r16 AND r/m16 |
8086 |
and di,[si] |
23 /r |
AND r32,r/m32 |
r32 AND r/m32 |
Intel386 |
and ecx,raznost |
24 ib |
AND AL,imm8 |
АL AND imm8 |
8086 |
and al,4 |
25 iw |
AND AX,imm16 |
AX AND imm16 |
8086 |
and ax,03FDh |
25 id |
AND EAX,imm32 |
EAX AND imm32 |
Intel386 |
and eax,23456789h |
80 /4 ib |
AND r/m8,imm8 |
r/m8 AND imm8 |
8086 |
and byte ptr [bx],5 |
81 /4 iw |
AND r/m16,imm16 |
r/m16 AND imm16 |
8086 |
and dx,0DBBh |
81 /4 id |
AND r/m32,imm32 |
r/m32 AND imm32 |
Intel386 |
and ebx,0CAAAAh |
83 /4 ib |
AND r/m16,imm8 |
r/m16 AND imm8 (знакорасшир.) |
8086 |
and cx,0ABh |
83 /4 ib |
AND r/m32,imm8 |
r/m32 AND imm8 (знакорасшир.) |
Intel386 |
and edx,0Ah |
Описание:
Команда AND (Logical AND) относится к группе логических команд (Logical Instructions), и точнее — к подгруппе команд логических (булевых) операций (Boolean Operation Instructions) и вычисляет логическое "И" двух операндов (DEST и SRC). Первый операнд (операнд-назначение, DEST) может быть переменной в регистре или в памяти (r8, r16, r32, r/m8, r/m16, r/m32). Второй операнд (операнд-источник, SRC) — непосредственным значением (imm8, imm16, imm32), переменной в регистре или в памяти. При этом оба операнда одновременно не могут быть переменными в памяти.
Результат команды AND помещается на место первого операнда (DEST). Каждый бит результата устанавливается в 1, в том случае, если соответствующие биты операндов установлены в 1, в противном случае — в 0. Флаги EFLAGS.SF, EFLAGS.ZF и EFLAGS.PF устанавливаются в соответствии с полученным результатом. Флаги EFLAGS.OF и EFLAGS.CF сбрасываются.
Операция:
DEST = DEST AND SRC;
CF = 0;
OF = 0;
Особые ситуации защищенного режима:
#GP(0), если операнд-назначение (DEST) находится в памяти в сегменте, запрещенном для записи.
#GP(0), если при обращении к операнду в памяти в сегменте DS, ES, FS или GS используется нулевой селектор.
#GP(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в сегменте CS, DS, ES, FS или GS.
#SS(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в стековом сегменте SS.
Intel386 … :
#PF(Код ошибки) при страничной ошибке.
#UD при использовании префикса LOCK, если первый операнд команды (DEST) не является значением в памяти.
Intel486 … :
#AC(0) при невыровненной ссылке в память, если активирован контроль выравнивания (CR0.AM = 1, EFLAGS.AC = 1, CPL = 3).
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда в памяти находится вне допустимого для реального режима пространства эффективных адресов в сегменте CS, DS, ES, FS или GS.
#SS, если любая часть операнда в памяти выходит за допустимую для реального режима верхнюю границу стекового сегмента SS.
Intel386 … :
#UD при использовании префикса LOCK, если первый операнд команды (DEST) не является значением в памяти.
Особые ситуации режима V86:
#GP(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в сегменте CS, DS, ES, FS или GS.
#SS(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в стековом сегменте SS.
Intel386 … :
#PF(Код ошибки) при страничной ошибке.
#UD при использовании префикса LOCK, если первый операнд команды (DEST) не является значением в памяти.
Intel486 … :
#AC(0) при невыровненной ссылке в память, если активирован контроль выравнивания (CR0.AM = 1, EFLAGS.AC = 1, CPL = 3).
Замечание:
К группе логических команд относятся команды AND, NOT, OR, XOR, SAL, SAR, SHL, SHR, ROL, ROR, RCL, RCR, CWD, CBW, NOP. Ранее к данной группе также было принято относить и команду NEG, но со временем ее стали включать в группу команд целочисленной арифметики.
В свою очередь, сами названные логические команды делятся на следующие подгруппы:
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru