В большинстве компьютерных архитектур (включая x86) бит не является непосредственно адресуемой единицей памяти. Наименьшая единица, к которой вы можете непосредственно обратиться, - это байт, который содержит 8 бит на x86. Вы не указали, что именно вы пытаетесь выполнить, поэтому я не могу дать вам точное решение вашей проблемы, но работа с отдельными битами (или группами битов) чаще всего достигается путем маскировки битов, которые не представляют интереса для инструкции AND
, в конечном итоге сдвигающей значение влево или вправо, а затем выполняющей обработку.
Если вы действительно хотите получить значение n -го бита в регистре, то вы, скорее всего, ищете инструкцию BT
. В нем хранится значение n -го бита в флаге переноса.
Что касается других советов: инструкция push
уменьшает указатель стека на количество байтов, помещенных в стек. Это характерно для архитектуры x86 - стек по дизайну растет вниз. Поэтому, если вы хотите освободить место в стеке, вы делаете add esp, number_of_bytes
, а не sub
(как вы сделали), что просто резервирует больше места в стеке.