Ассемблер - FAQ

From KolibriOS wiki
Revision as of 11:25, 28 February 2021 by Maxcodehack (talk | contribs) (Create asm faq page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Установить определенный бит

Иногда такое требуется в сисфункциях, как например 47. Рассмотрим случай:

EAX: Бит 5 установлен

Тогда пишем 6 нулей: 000000

Биты нумеруются справа налево, при чем с нуля, поэтому в нашем случае бит установим так: 100000

Потом переводим это число в шестнадцатиричное, например здесь https://numsys.ru/ . Получается 0x20, то есть

mov eax, 0x20

А теперь рассмотрим реальный пример на уже упомянутой сисфункции 47:

  • ebx = параметры преобразования числа в текст:
  • биты 22-29 зарезервированы и должны быть установлены в 0
  • бит 31 установлен = не выводить ведущие нули числа

Да, есть и другие параметры, но я вынес только те которые нам "нужны".

Выписываем нули: выписать нужно максимальныйБит+1, в нашем случае 32: 00000000000000000000000000000000. Зарезервированные биты у нас уже обнулены; а вот 31 бит нам нужно установить, значит: 10000000000000000000000000000000. (Если ещё какие то биты надо установить, то их тоже устанавливаем, но в данном случае они не нужны). Переводим в шестнадцатиричную систему: 0x80000000

Все, готово:

mov ebx, 0x80000000