PDA

Просмотр полной версии : [Вопрос] Адрес флага



SooBad
13.05.2017, 22:58
Требуется проверить валидность флага, то бишь его наличие.
Собственно, вопрос: по какой закономерности можно определить его адрес? Насколько мне известно, принцип немного другой, нежели у простых переменных со смещением.

VVWVV
13.05.2017, 23:06
Адрес какого флага? Если вы про битовые операции, то адрес "флагов" - адрес значения, поскольку Pawn хранит значения в ячейках по 32-бита.

SooBad
13.05.2017, 23:11
Адрес какого флага? Если вы про битовые операции, то адрес "флагов" - адрес значения, поскольку Pawn хранит значения в ячейках по 32-бита.

Да, флагов, то бишь "экономных переменных".
Если изъясняться точнее, то нужен адрес этой самой ячейки, зарезервированной в стеке, которая хранит значение определенного флага.

VVWVV
13.05.2017, 23:18
Да, флагов, то бишь "экономных переменных".
Если изъясняться точнее, то нужен адрес этой самой ячейки, зарезервированной в стеке, которая хранит значение определенного флага.

Есть несколько способов получить адрес ячейки.
1) Ячейка - часть массива.


new addr;
#emit load.s.alt array // load.alt если массив глобальный
#emit load.s.pri n // номер ячейки в массиве [0,sizeof array)
#emit idxaddr // pri = адрес ячейки
#emit stor.s.pri addr

2) Если ячейка - обычная переменная.


#emit addr.pri local_var

SooBad
13.05.2017, 23:27
Есть несколько способов получить адрес ячейки.
1) Ячейка - часть массива.


new addr;
#emit load.s.alt array // load.alt если массив глобальный
#emit load.s.pri n // номер ячейки в массиве [0,sizeof array)
#emit idxaddr // pri = адрес ячейки
#emit stor.s.pri addr

2) Если ячейка - обычная переменная.


#emit addr.pri local_var


"Флаги" работают по принципу логических переменных, в плане хранения двоичного значения, и это давно наталкивало меня на то, что адрес такой переменной можно получить, определив адрес ячейки одномерного массива. Собственно, вы данный метод и описали.
Если это так, то остаётся узнать, как осуществить проверку на существование определенного флага.
Как я себе это примерно представляю: если по имени флага адрес возвращает отрицательное значение, - то данный "флаг" в памяти не зарезервирован.

SooBad
14.05.2017, 16:13
Подниму. Проверка флага на валидность остаётся актуальной.