GTA Builder Форум

Программирование => Общие вопросы Assembler => Тема начата: mfisto от Март 24, 2015, 03:52:55 pm

Название: Как работают функции and, or, not
Отправлено: mfisto от Март 24, 2015, 03:52:55 pm
В данной теме расскажу принцип работы, данных функций.
Начну с функции or. В ассемблере и не только данная функция выкалывает 1-цы у числа, если представить его в двоичной форме. Скажем число 8 - это будет 1000. Возьмем и выколем у него число 4 (4 - это 100). В результате будет 1100. Это пишется вот так ->
8 or 4 = 12. Здесь правило такое, 1 на 1 дает 1, 1 на 0 дает тоже 1, но 0 на 0 дает 0.

Далее это функция and. Она работает по следующему принципу. И так возьмем число 12 (это 1100). И проведем операцию AND. Например с числом 8 (это 1000). Пишем 12 and 8 = 8. Правило такое 1 на 1 дает 1. 1 на 0 дает 0. Ну и 0 на 0 тоже 0. Отсюда и получается что у 12 и у 8 совпадают только 4-ые биты. Поэтому и будет число 8. Вот еще пример возьмем число 8 и число 4, будет 8 and 4 = 0, так как у них нет одинаковых битов. По правилу 1 на 1 - нет совпадений.

Ну с операцией not, просто переворачиваем биты, в данном случае, так как в игре используется 4 байта на любую переменную, то мы берем только 32 бита и их переворачиваем, т.е. not 4 = -5, да и вообще почему именно 32 бита, думаю всем известно, так как 32 разрядная система или по другому - x86. Кто не знает принцип знака, то рассказываю, есть знаковые и есть беззнаковые числа, если знаковое, то последний бит числа отвечает за его знак, у нас это 32 бита значит 32-ой. А пишется со знаком минус. Все числа имеющие 32 бит будут отрицательны. Вот и все.
Название: Re: Как работают функции and, or, not
Отправлено: Shagg_E от Март 24, 2015, 04:32:49 pm
Спасибо, только по-прежнему не понимаю, где это может пригодиться в скриптинге  :'(
Название: Re: Как работают функции and, or, not
Отправлено: mfisto от Март 24, 2015, 04:39:28 pm
Бывает нужно проверить какой либо бит у числа, либо установить его. Скажем многие параметры в структурах, хранятся именно в битах для экономии. В Сан-Андреасе есть спец опкод по проверке и установке бита, а здесь не стали далеко ходить и взяли непосредственные опкоды с работой с битами. Ну по-крайней мере в Вайс-сити.