Большинство процессоров не поддерживают побитовый доступ, поэтому вы должны использовать ИЛИ для установки и И для очистки битов.
Поскольку я не очень знаком со сборкой, я просто дам вам C-ish псевдокод, но вы легко сможете преобразовать его в инструкции по сборке.
value = 0x01ABCDEF;
last_byte = value & 0xFF; // = 0xEF
if (last_byte & 0x40) { // is the 7th bit set? (0x01 = 1st, 0x02 = 2nd, 0x04 = 3rd, 0x08 = 4th, 0x10 = 5th, 0x20 = 6th, 0x40 = 7th, 0x80 = 8th)
value = value & 0xFFFFFF00; // clear last byte
value = value | 0x3C; // set the byte with 00111100 bits (0x3C is the hex representation of these bits)
}
Не то чтобы вы могли удалить присвоение last_byte и напрямую проверить value & 0x40
. Однако, если вы хотите проверить что-то, что не является наименее значимой частью, вы должны сначала сделать сдвиг. Например, чтобы извлечь ABCD, вы должны использовать следующее:
middle_bytes = (value & 0xFFFF00) >> 8;
value & 0cFFFF00
получает значение более значимых байтов (0x01), а >> 8
сдвигает результат на один байт и, таким образом, избавляется от последнего байта (0xEF).