Ассемблер - FAQ
Установить определенный бит
Иногда такое требуется в сисфункциях, как например 47. Рассмотрим случай:
EAX: Бит 5 установлен
Тогда пишем 6 нулей: 000000
Биты нумеруются справа налево, при чем с нуля, поэтому в нашем случае бит установим так: 100000
Потом переводим это число в шестнадцатиричное, например здесь https://numsys.ru/ . Получается 0x20, то есть
mov eax, 0x20
А теперь рассмотрим реальный пример на уже упомянутой сисфункции 47:
- ebx = параметры преобразования числа в текст:
- биты 16-21 = сколько цифр отображать
- биты 22-29 зарезервированы и должны быть установлены в 0
- бит 31 установлен = не выводить ведущие нули числа
Да, есть и другие параметры, но я вынес только те которые нам "нужны".
Выписываем нули: выписать нужно максимальныйБит+1, в нашем случае 32: 00000000000000000000000000000000. Зарезервированные биты у нас уже обнулены; а вот 31 бит нам нужно установить, значит: 10000000000000000000000000000000. Теперь следует установить количество цифр. Например 5. Переводим в двоичное: 101. Сказано: биты 16-21. Визуализируем их: 1000000000[000000]0000000000000000. Значит в это промежуток нужно вставить 101: 1000000000[000101]0000000000000000 (распологать нужно правее, а остальное заполнить нулями). (Если ещё какие то биты надо установить, то их тоже устанавливаем, но в данном случае они не нужны). Переводим в шестнадцатиричную систему: 0x80050000
Все, готово:
mov ebx, 0x80050000