Difference between revisions of "Ассемблер - FAQ"

From KolibriOS wiki
Jump to navigation Jump to search
(Create asm faq page)
 
(Add numbers count)
Line 16: Line 16:
 
А теперь рассмотрим реальный пример на уже упомянутой сисфункции 47:
 
А теперь рассмотрим реальный пример на уже упомянутой сисфункции 47:
 
* ebx = параметры преобразования числа в текст:
 
* ebx = параметры преобразования числа в текст:
 +
:* биты 16-21 = сколько цифр отображать
 
:* биты 22-29 зарезервированы и должны быть установлены в 0
 
:* биты 22-29 зарезервированы и должны быть установлены в 0
 
:* бит 31 установлен = не выводить ведущие нули числа
 
:* бит 31 установлен = не выводить ведущие нули числа
 
Да, есть и другие параметры, но я вынес только те которые нам "нужны".
 
Да, есть и другие параметры, но я вынес только те которые нам "нужны".
  
Выписываем нули: выписать нужно максимальныйБит+1, в нашем случае 32: '''00000000000000000000000000000000'''. Зарезервированные биты у нас уже обнулены; а вот 31 бит нам нужно установить, значит: '''10000000000000000000000000000000'''. (Если ещё какие то биты надо установить, то их тоже устанавливаем, но в данном случае они не нужны). Переводим в шестнадцатиричную систему: 0x80000000
+
Выписываем нули: выписать нужно максимальныйБит+1, в нашем случае 32: '''00000000000000000000000000000000'''. Зарезервированные биты у нас уже обнулены; а вот 31 бит нам нужно установить, значит: '''10000000000000000000000000000000'''.  
 +
Теперь следует установить количество цифр. Например 5. Переводим в двоичное: 101. Сказано: биты 16-21. Визуализируем их:
 +
'''1000000000[000000]0000000000000000'''. Значит в это промежуток нужно вставить 101: '''1000000000[000101]0000000000000000''' (распологать нужно правее, а остальное заполнить нулями).
 +
(Если ещё какие то биты надо установить, то их тоже устанавливаем, но в данном случае они не нужны). Переводим в шестнадцатиричную систему: 0x80050000
  
 
Все, готово:
 
Все, готово:
  mov ebx, 0x80000000
+
  mov ebx, 0x80050000

Revision as of 11:37, 28 February 2021

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

Иногда такое требуется в сисфункциях, как например 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