Команда логического отрицания NOT .
Команда NOT (HE) обращает состояние каждого бита регистра или ячейки памяти и ни на какие флаги не воздействует. Таким образом, команда NOT заменяет каждый 0 на 1, а каждую 1 – на 0. Другими словами, она выполняет для операнда дополнение до единицы.
Команда проверки TEST .
Команда TEST (test — проверить) выполняет операцию AND над операндами, но воздействует только на флаги и не изменяет значения операндов. Команда TEST изменяет флаги точно так же, как команда AND: она обнуляет флаги CF и OF, изменяет флаги PF, ZF и SF, а флаг AF оставляет неопределенным.
Когда вслед за командой TEST указана команда JNZ (jump if not zero - перейти, если не нуль), переход произойдет только в том случае, если хотя бы в одной позиции бита оба операнда содержат 1.
Команды сдвига и циклического сдвига
У микропроцессора 8x86 есть семь команд, осуществляющих сдвиг 8-или 16-битового содержимого регистров или ячеек памяти на одну или несколько позиций влево или вправо. Три из них сдвигают операнд, а остальные четыре его вращают или циклически сдвигают.
Для всех семи команд флаг переноса CF является как бы расширением операнда битом 9 или битом 17. Иначе говоря, флаг CF приобретает значение бита, сдвинутого за один из концов операнда. Команды сдвига и циклического сдвига вправо помещают во флаг CF значение нулевого бита. Команды сдвига и циклического сдвига влево помещают в него значение бита 7 (при операциях над байтом) или бита 15 (при операциях над словом).
Команды сдвига и циклического сдвига распадаются на две группы. Логические команды сдвигают операнд, не считаясь с его знаком; они используются для действий над числами без знака или над нечисловыми значениями, например над масками. Арифметические команды сохраняют старший, знаковый бит операнда; они используются для действий над числами со знаком. На рис. 1 показано действие этих команд.
Команды сдвига и циклического сдвига имеют два операнда: приемник и счетчик. Приемником может быть 8- или 16-битовый регистр общего назначения или ячейка памяти. Счетчик может быть цифрой 1 или значением без знака в регистре CL.