Как вы могли бы использовать инструкцию TEST (или последовательность инструкций TEST), чтобы увидеть, установлены ли оба бита ноль и четыре в регистре AL на один?
Вы можете использовать трюк с флагом четности, как в ответе Аурела Били - хотя, как уже отмечалось, он работает, только если оба бита находятся в младших 8 битах.
Вот простой способ с несколькими инструкциями теста:
test al, 16
jz not_both_set
test al, 1
jz not_both_set
both_set:
...
not_both_set:
Эквивалентно, последняя условная ветвь может быть инвертирована:
test al, 16
jz not_both_set
test al, 1
jnz both_set
not_both_set:
...
both_set:
Вот еще один способ, который не использует test
, а вместо этого использует временный регистр и делает and
, а затем cmp
на этом:
mov ah, al
and ah, 17
cmp ah, 17
jne not_both_set
both_set:
...
not_both_set:
Как будет использоваться инструкция TEST, чтобы увидеть, установлен ли какой-либо бит?
Просто предоставьте маску с обоими битами, установленными на test
инструкция «Очистить нулевой флаг» (отличная от нуля) означает, что установлен хотя бы один из битов.
Как можно использовать инструкцию TEST, чтобы увидеть, установлен ли ни один из битов?
Снова используйте маску обоих битов, Zero Flag s et означает, что ни один бит не установлен.