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)
- Команда NOT операнд
делает инверсию всех битов исходного операнда, изменяя нули на единицы и наоборот. Результат называется дополнением до единицы. Следующие операнды разрешены:
NOT (NOT operand) – инвертирование всех битов операнда приемник.
NOT регистр
NOT память