Число основания 2 является четным (делится на 2), если младший бит равен 0. По той же самой причине число основания 10 делится на 10, если младший разряд равен 0.
Сдвиги переводят последний сдвинутый бит в флаг C, так что вы можете определить, равен ли R8
, даже если посмотреть на флаг C.Как указано в документации ARM :
Если указано S, эти инструкции обновляют флаги N и Z в соответствии с результатом.
Флаг C не изменяется, еслизначение сдвига равно 0. В противном случае флаг C обновляется до последнего сдвинутого бита.
Но да, обычный способ проверки на четность / нечетность равен tst r8, #1
для установки флага Z в соответствии с младшим битом.Так что beq r8_was_even
или bne r8_was_odd
, или все, что вы хотите сделать с флагом Z.
Если у вас есть использование для целочисленного результата со смещением вправо (или его нулевого / ненулевого статуса в Z
), movs
со сдвигом (он же lsrs
) - эффективный способ получить одновременно результаты x/2
и x&1
.