В наборе инструкций x86 бит с индексом 1 кода операции может быть либо битом направления, который указывает, каковы операнды назначения и источника, либо битом расширения знака.
например. для добавить
00 / r ADD r / m8, r8
по сравнению с 02 / r ADD r8, r / m8
r / m, reg
по сравнению с reg, r / m
для той же мнемоники 81/0 id ADD r / m32, imm32
по сравнению с 83/0 ib ADD r / m32, imm8
Мне интересно, какой самый простой логический способ определить, какой из этих случаев это. Есть ли другой способ проверки, кроме проверки кодов операций инструкций и их сравнения, чтобы выяснить, что это такое (для вариантов команд с расширением знака или направления битов)? Есть также инструкции, которые игнорируют этот бит, но поскольку он установлен в 0, это не имеет особого значения.
РЕДАКТИРОВАТЬ: Оказывается, что для ошибок записи (для чего был предназначен мой код) reg-> r / m всегда так, потому что инструкция ar / m-> reg никогда не вызовет ошибку записи. Но любая информация будет полезна, если кто-то еще столкнется с подобной проблемой.