AND – logical AND – логическое И.

Действие приемник = приемник AND источник.

Воздействует на флаги OF=0, SF, ZF, AF не определен, PF, CF=0.

16-ричный код (1 байт) MOD Reg/OPC Reg/Mem (2-ой байт) смещение disp_Lo, disp_Hi формат операндов: приемник, источник
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg8/Mem8, Reg8
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg16/Mem16, Reg16
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg8, Reg8/Mem8
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg16, Reg16/Mem16
Data8 (непосредств.операнд) отсутствует AL, Immed8
Data16 (непосред.операнд) отсутствует AX, Immed16
  MOD 100 Reg/Mem Disp_Lo, Disp_Hi Data Lo Reg8/Mem8, Immed8
  MOD 100 Reg/Mem Disp_Lo, Disp_Hi Data Lo, Data Hi Reg16/Mem16, Imm16
  MOD 100 Reg/Mem Disp_Lo, Disp_Hi Data SX Reg16/Mem16, Imm8

100 - расширение кода операции при работе с непосредственным операндом, размещается в поле Reg/Opc в байте адресации.

Примеры команд:

1. Мнемоническая запись: AND [BX+SI], CH ; формат операндов Mem8, Reg8

Машинный код команды: 00100000 00101000 ; команда занимает 2 байта

16-ричный код команды: 2028h.

2. Мнемоническая запись: AND BL, DL ; формат операндов Reg8, Reg8

Машинный код команды: 00100000 11010011 ; команда занимает 2 байта

16-ричный код команды: 20D3h.

3. Мнемоническая запись: AND DX, [BX+12] ;формат операндов Reg16, Mem16

Машинный код команды: 00100011 01010111 00001100 ;команда занимает 3 байта

16-ричный код команды: 23570Ch.

4. Мнемоническая запись: AND CL, [DI] ; формат операндов Reg8, Mem8

Машинный код команды: 00100010 00001101 ; команда занимает 2 байта

16-ричный код команды: 220Dh.

3. Команда XOR приемник, источникприменяется :

· для выяснения того, какие биты в приемнике и источнике различаются;

· для инвертирования состояния заданных бит в приемнике.

Интересующие нас биты маски (источник) при выполнении команды должны быть единичными, остальные – нулевыми. Например:

Xor ax, 10b ; инвертировать 1-ый бит в регистре АХ

Jz mes ; переход, если 1-ый бит в АХ был единичным.

XOR – logical eXclusive OR – логическое исключающее ИЛИ.

XOR приемник,источник

Действие: приемник = приемник XOR источник.

Команда выполняет операцию логического исключающего ИЛИ над соответствующими парами бит операндов приемник и источник.

Флаги: CF=0, OF=0, PF, AF не определен, ZF, SF.

16-ричный код (1 байт) MOD Reg/OPC Reg/Mem (2-ой байт) смещение disp_Lo, disp_Hi формат операндов: приемник, источник
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg8/Mem8, Reg8
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg16/Mem16, Reg16
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg8, Reg8/Mem8
MOD Reg/OPC Reg/Mem Disp_Lo, Disp_Hi Reg16, Reg16/Mem16
Data8 (непосредств.операнд) отсутствует AL, Immed8
Data16 (непосред.операнд) отсутствует AX, Immed16
  MOD 110 Reg/Mem Disp_Lo, Disp_Hi Data Lo Reg8/Mem8, Immed8
  MOD 110 Reg/Mem Disp_Lo, Disp_Hi Data Lo, Data Hi Reg16/Mem16, Imm16
  MOD 110 Reg/Mem Disp_Lo, Disp_Hi Data SX Reg16/Mem16, Imm8

110 - расширение кода операции при работе с непосредственным операндом, размещается в поле Reg/Opc в байте адресации.

Примеры команд:

1. Мнемоническая запись: XOR [DI], CH ; формат операндов Mem8, Reg8

Машинный код команды: 00110000 00101101 ; команда занимает 2 байта

16-ричный код команды: 302Dh.

2. Мнемоническая запись: XOR AX, DI ; формат операндов Reg16, Reg16

Машинный код команды: 0011001111000111 ; команда занимает 2 байта

16-ричный код команды: 33C7h.

3. Мнемоническая запись: XOR BX, [SI+27h] ;формат операндов Reg16, Mem16

Машинный код команды: 001100110101110000100111 ;команда занимает 3 байта

16-ричный код команды: 335C27h.

4. Мнемоническая запись: XOR SI, 7FFFh ; формат операндов Reg16, imm16

Машинный код команды: 10000001111101101111111101111111 ; команда занимает 4 байта

16-ричный код команды: 81F6FF7Fh.

4. Для проверки состояния заданных бит применяется команда

TEST приемник, источник

Проверяемые биты приемника в маске (операнд-источник) должны иметь единичное значение. Алгоритм работы команды TEST подобен алгоритму работы команды AND, но он не меняет значение операнда-приемника. Результатом работы является установка значения флага нуля ZF:

· если ZF = 0, то в результате логического умножения получился ненулевой результат, т.е. хотя бы один единичный бит маски совпал с соответствующим единичным битом приемника;

· если ZF = 1, то в результате логического умножения получился нулевой результат, т.е. ни один единичный бит маски не совпал с соответствующим единичным битом приемника.

Например:

Test ax, 0001h

jnz l1 ; переход если 0-ой бит равен 1 (переход, если флаг ZF<>0)

  1. Команда NOT операнд

делает инверсию всех битов исходного операнда, изменяя нули на единицы и наоборот. Результат называется дополнением до единицы. Следующие операнды разрешены:

NOT (NOT operand) – инвертирование всех битов операнда приемник.

NOT регистр

NOT память

Наши рекомендации