Я не совсем уверен, что понимаю, о чем вы спрашиваете, но в наборе команд Intel64 / AMD64 / x86_64 легко выполнить последовательность побитовых операций, которые будут возвращать значение и флаг кода состояния, который позволяет предлагаемое сравнение.
Предположим, что входное значение находится в регистре% rax.
MOV %rax, %r8 # replicate input value into %r8
MOV %rax, %r9 # replicate input value into %r9
AND $0x1, %r8 # AND 0x1 with the contents of %r8 and put result in %r8
XOR $0x1, %r9 # XOR 0x1 with the contents of %r9 and put result in %r9
OR %r8, %r9 # OR %r8 with %r9 and put result in %r9
Операция AND вернет 0, если вход четный, иначе вернет 1. XOR операция вернет 0, если входное значение равно 0x1, в противном случае возвращается ненулевое значение. Операция ИЛИ вернет 0, если% r8 и% r9 равны нулю, в противном случае она возвращает ненулевое значение.
Каждая из побитовых операций устанавливает различные флаги условий. Соответствующий здесь называется "ZF", который устанавливается в 1, если результат операции равен 0.
Флаг ZF, установленный конечной операцией, может использоваться для управления условной ветвью. Используйте «JZ» (переход, если ноль) для перехода, если ZF = 1 (то есть условие выполнено), или «JNZ» (переход, если не ноль) для перехода, если условие не истинно.
Вы можете сохранить результат из% r9 в памяти и использовать его позже при сравнении с нулем (true) или не с нулем (false).
Вы также можете воздействовать на результат, не используя команду условного перехода - тот же код условия можно использовать для управления командой условного перемещения. Инструкция CMOVE скопирует входной операнд в памяти или в регистр в выходной регистр, если ZF = 1, или CMOVNE выполнит копирование, если ZF = 0. Например, вы можете скопировать значение «1» из исходного регистра в регистр назначения, если условие выполнено, а затем накопить значения регистра назначения в накопителе. В этом случае аккумулятор будет содержать количество случаев, для которых сравнение вернуло «True».