|
Макросы.
Артикул | Наименование | Цена, от | NewVar | | Создание новой переменной длиной 0 байт без регистрации. Вых: Var1, EAX=адр нач. кластера новой переменной. Портит только EAX. | NewVar Var1 | | | NewIfNone | | Создать Var1, если не существует. JZ - признак создания новой переменной. Регистры не портит. | NewIfNone Var1 | | | NewPzl | | Создание нового Пазла типа 0 с параметрами по умолчанию. | NewPzl Pzl1 | Строка умолчания PzzzL STRUC. | | NewParPzl | | Создание нового Пазла Pzl1 типа Type1, максимального размера Max1. | NewParPzl Pzl1, Type1, Max1 | На основе макроса NewPzl. | | ZtoVar | | Добавление текста в переменную из Z-строки, кратно 2 байтам | ZtoVar Var1, AZst, Len_Max | | | StoVar | | Добавление байта в переменную из линейной строки AZst, выход только по достижению Len_Max (не включая). | StoVar Var1, AZst, Len_Max | На основе макроса VarEAX. Длина строки не ограничена. | | StoVar32 | | Добавление в переменную-32 из линейной строки, по 4 байта, выход только по Len_Max. | StoVar32 Var1, AZst, Len_Max | На основе макроса VarEAX4. | | StoUniVar32 | | Добавление в переменную-32 из линейной строки юникода 16LE, по 4 байта из 2, выход только по Len_Max. | StoUniVar32 Var1, AZst, Len_Max | | | SByteToVar32 | | Добавление в переменную-32 из строки по 4 байта из 1, выход только по Len_Max. | SByteToVar32 Var1, AZst, Len_Max | | | VarZStr | | Перенос переменной в Z-строку | VarZStr Var1, AZst, Len_Max | | | Var32ZStr | | Перенос переменной-32 Var1 в Z-строку. Выход по окончанию переменной или при превышении Len_Max. | Var32ZStr Var1, AZst, Len_Max | | | Var32ZStr16 | | Перенос 2 бит из 4 переменной Var1 в Z-строку. Выход по окончанию переменной или при превышении Len_Max (байт). | Var32ZStr16 Var1, AZst, Len_Max | Получает в строке стандартный юникод UTF16Le. | | Var32ZStr8 | | Перенос 1 бита из 4 переменной Var1 в Z-строку. Выход по окончанию переменной или при превышении Len_Max. | Var32ZStr8 Var1, AZst, Len_Max | Обратная функция SByteToVar32. Выход по окончанию переменной или при превышении Len_Max. | | VarEmp32 | | Определяет (признак JL), если переменная Var1 некорректна, пустая или короче 4 байт. Регистры не портит. | VarEmp32 Var1 | | | Hex4Reg | | Преобразует младшие 4 бита Reg1 в шестнадцатеричное значение. Портит Reg1. | Hex4Reg Reg1 | | | VarDat32 | | Добавление в переменную Var1 числа Dat32. Не портит регистры, EAX сохраняется неизменным. | VarDat32 Var1, Dat32 | На основе банального макроса VarEAX4 | | StartVR | | Инициализация цикла с начала Ad0CL=перемен, R1=адр, Rubez=стоп-адрес. Портит R1, Rubez. | StartVR Ad0CL, R1, Rubez | Защита по адресу переменной отключена! | | StartAdr | | Инициализация цикла с Adr1 Var1=перемен, R1=счетчик, Rubez=стоп-адрес. JZ = выход перед циклом (адр за концом данных), EAX=исходный M0Lx. Портит EAX, R1, Rubez. | StartAdr Var1, Adr1, R1, Rubez | | | StartPN | | Инициализация цикла с текущ. параметров Ad0CL=перемен, R1=адр, Rubez | StartPN Ad0CL, R1, Rubez | | | StartStopPN | | Инициализация цикла с текущ. параметров до стоп-адр.StpAdr, Ad0CL=перемен, R1=адр, Rubez=стоп-адрес | StartStopPN Var1, StpAdr, R1, Rubez | | | StartRevPN | | Инициализация реверсивного цикла с текущ. параметров до нуля Ad0CL=перемен, R1=адр, Rubez= | StartRevPN Var1, R1, Rubez | | | StartRev | | Инициализация реверсивного цикла Var1=перемен с конца до нуля без текущих параметров, R1=адр, Rubez=стоп-адрес, JZ - вых до цикла, признак ошибки. | StartRev Var1, Stp1, R1, Rubez | Точно работает с ECX, EDX. | | VarPos | | Установка адреса переменной Var1 на позицию LnStr, не изменяет M0Pn/M0Lx. вых: EAX=адрес данных, EBX=кластер, запись в M0Pn/M0Lx. Портит EAX, EBX. | VarPos Var1, LnStr | Очень медленный макрос, строго не рекомендуется для больших переменных - каждый раз ищет кластера по циклу подряд. | | VarPosPn | | Установка адреса переменной Var1 на позицию LnStr, запись в M0Pn/M0Lx | VarPosPn Var1, LnStr | Очень медленный макрос, строго не рекомендуется для больших переменных - каждый раз ищет кластера по циклу подряд. Длину можно передавать в регистре. | | NextPn | | Просмотр следующего адреса переменной (списка) Arr1 (+ 8 от текущего в M0Pn/M0Lx). Вых: EAX=Старший адрес (переменная списка), EBX=младший адрес (тип). Вых. JZ-конец переменной, портит только EAX, EBX. | NextPn Arr1 | Выдаёт адреса переменных, а не сами переменные. | | Next4Pn | | Увеличение адреса списка (переменной) Var1 на 4 от текущего в M0Pn/M0Lx; Вых: EAX=искомый адрес, JZ-конец переменной | Next4Pn Var1 | | | BackPn | | Уменьшение текущих параметров M0Lx/M0Pn на Stp1=шаг циклаВых: JZ-конец переменной, EBX=Старший искомый адрес, EAX=младший искомый адрес,ECX=Начало данных кластера конца данных | BackPn Var1, Stp1 | | | Rd4Adr | | Чтение 4 байт переменной по адресу Adr1 с шагом Stp1 (1,2,3,4). Вых: EAX=значение по адресу Adr1, EBX- следующий адрес/0 . | Rd4Adr Adr1, Stp1 | | | VarEAX | | Добавление значения из EAX длиной LnStr (1,2,3,4) в переменную Var1 | VarEAX Var1, LnStr | | | VarEAX2 | | Добавление значения из EAX длиной 2 округленный вниз до четного адрес Var1 | VarEAX2 Var1 | | | VarEAX4 | | Добавление значения из EAX длиной 4 округленный вниз до четного адрес Var1. Не портит регистры, EAX сохраняется неизменным | VarEAX4 Var1 | Корректоно работает только с 32-разрядными переменными. Не портит регистры, EAX сохраняется неизменным. | | GetClast | | Выделяет 1 кластер (вых:нач. адр. в EAX) из цепочки 0-кластеров. Если память кончилась - получаем 6% от уже выделенной памяти. | GetClast | | | ClastPlus | | Прибавляет кластер (вых: EAX=адр.кл.) в конец цепочки (Ad0CL=адр.0 кл.), портит только EAX. JL - ошибка. | ClastPlus Ad0CL | | | ClastInitEAX | | Инициализация заголовка (EAX=адр нач. кластера). MsF1, MsF2, MsDn, MsUp, M0Ln=0. | ClastInitEAX | | | QlClast | | Число байтов длины из EAX преобразуется в число необходимых кластеров в EAX, остаток длины в последнем кластере в EDX. Изменяет EAX, EDX. | QlClast | | | CleVar | | Обрезание переменной Ad0CL до 1 кластера и 0 длины. При отсутствии/ошибке переменной Ad0CL создает новую. | CleVar Ad0CL | | | CleArr | | Обрезание списка Arr1 до переменной 1 кластера и 0 длины. Не портит регистры. | CleArr Arr1 | | | CleArrVar | | Обрезание только переменных списка Arr1 до 1 кластера и 0 длины, не удаляя их полностью. Не портит регистры. | CleArrVar Arr1 | Основная переменная Arr с огрызками переменных остаются! | | CleDar | | Очистка списка2 Dar1. Регистры не изменяет. | CleDar Dar1 | | | FreCla | | Возврат 1 кластера AdCL в зону 0-кластеров. Не портит регистры совсем! | FreCla AdCL | | | VarCopy | | Var1= Var2. JL - ошибка. Не портит регистры совсем! | VarCopy Var1, Var2 | Копирует переменные любой длины. Отрабатывает некорректность Var2 (=0). | | VarMsCopy | | Полное копирование Var1= Var2. Копируются также MsF1, MsF2. JL - ошибка. Не портит регистры совсем! | VarMsCopy Var1, Var2 | Модификация макроса VarCopy. Копирует переменные любой длины. Отрабатывает некорректность Var2 (=0). | | ArrCopy | | Копирует список любой размерности Arr1 в Arr2. | ArrCopy Arr2, Arr1 | На основе макроса CleArr и функции ArrPlus. Возможно непосредственное использование регистров для передачи параметров. | | DarCopy | | Копирует Dar1 в Dar2 с копией фильтра MsF1 | DarCopy Dar2, Dar1 | На основе макроса CleDar и функции DarPlusDar. Возможно непосредственное использование регистров для передачи параметров. | | DarCopyMs | | Копирует Dar1 в Dar2 с копией фильтра MsF1 и MsF2. | DarCopyMs Dar2, Dar1 | На основе макроса CleDar и функции DarPlusDarMs. Возможно непосредственное использование регистров для передачи параметров. | | VarInVar | | Количество вхождений Var2 в Var1. Результат в EAX.JZ - нет вхождений | VarInVar Var1, Var2 | | | VarEqu | | Var1= Var2? Результат: JZ-равны | VarEqu Var1, Var2 | | | VarEqu32 | | Var1= Var2? Результат: JZ-равны. Не портит регистры совсем! | VarEqu32 Var1, Var2 | Максимально быстрый скрипт. Сначала проверяет переменные на совпадение длины. | | TestRubez | | Коррекция адреса перемен R1 до конца данных, Rubez-граница кластера. JNZ - возврат в цикл. Портит только ЕАХ, R1. | TestRubez R1, Rubez | | | TestRever | | Коррекция адреса перемен R1 реверс до начала данных, Rubez-граница кластера, Stp=1, 2, 4, 8; выход из цикла по JZ. | TestRever R1, Rubez, Stp | | | TestReverPN | | Коррекция адреса перемен R1 реверс до начала данных, Rubez-граница кластера, Stp=4,8... | TestReverPN R1, Rubez, Stp | | | TestRubStop | | коррекция адреса перемен R1 до стоп-адр. StpAdr, Rubez-граница кластера | TestRubStop R1, StpAdr ,Rubez | | | VarPlus | | Var1= Var1+Var2. При Var2=0 ничего не происходит. Не портит регистры совсем!! | VarPlus Var1, Var2 | На основе макросов StartVR и VarEAX. | | VarPlus32 | | Var1= Var1+Var2. Не портит регистры совсем! | VarPlus32 Var1, Var2 | Обе переменные должны быть 32 бита - при сложении округляется адрес макросом VarEAX4. Возможна запись VarPlus32 Var1, EAX. | | VarFragPN | | Var1=Var1+ Фрагмент Var2 от текущ до Rubez | VarFragPN Var1,Var2,Rubez | | | ArrFirst | | Находит в EAX первую строку списка Arr1 при наличии, EBX - адрес типа переменной. JL - ошибка. Портит EAX, EBX. | ArrFirst Arr1 | Использует макрос VarByte32. | | DelEl | | Удаляет элемент с позиции Pos1 длиной 8 байт. EAX= адр. 1 удаленного куска EBX= адр. 2 удаленного куска. | DelEl Arr1, Pos1 | | | NewZClast | | Расширяет память и создает NCl нулевых кластеров (только в пределах выделенной, новая память не запрашивается!). | NewZClast NCl | Может вызывать API HeapReAlloc. | | KillVar | | Возврат переменной Var1 в зону 0-кластеров, JL ошибка адреса. | KillVar Var1 | Допустима запись KillVar EAX. | | KillArr | | Удаление списка переменных Arr1. Регистры не портит. | KillArr Arr1 | | | KillDar | | Удаление списка2 переменных Dar1. Регистры не изменяет. | KillDar Dar1 | | | RemVar | | Замена без копирования: Kill Var1, Var1=Var2; | RemVar Var1, Var2 | Возможна запись RemVar Var1, EAX. Удобна для записи результатов функций. | | VarRemove | | Переименование Var2 в Var1 без копирования: KillVar Var1, Var1=Var2, NewVar Var2 | VarRemove Var1, Var2 | | | RemArr | | Замена без копирования: Kill Arr1, Arr1=Arr2; | RemArr Arr1, Arr2 | | | RemDar | | Замена без копирования: Kill Dar1, Dar1=Dar2 | RemDar Dar1, Dar2 | | | ArrNewEl | | Создание нового последнего элемента списка Arr1 как пустой переменной типа SgnStr без регистрации. Вых: EAX=адр нач. кластера новой переменной. Портит EAX. | ArrNewEl Arr1 | Простейший макрос на основе двух вызовов VarEAX4. | | AddEl | | Добавление переменной Var1 типа Sng1 новым последним элементом списка Arr1 | AddEl Arr1, Var1, Sng1 | Простейший макрос на основе VarEAX4. Чаще всего, применяется константа строки: AddEl Arr1, Var1, SgnStr. Есть защита от некорректного списка. | | ResPn | | Сброс текущих параметров M0Lx/M0Pn за нулевую позицию. Вых: EAX - текущий указатель=Начало данных первого кластера, JL- ошибка адреса переменной. | ResPn Var1 | | | MaxPn | | Установка текущих параметров M0Lx/M0Pn в макс. позицию, Stp=шаг цикла. Вых: JZ-конец переменной, EBX=Старший искомый адрес, EAX=младший искомый адрес,ECX=Начало данных кластера конца данных | MaxPn Var1, Stp1 | | | VarFil | | Заполнение переменной Var1 числом NumX | VarFil Var1, NumX | | | VarFill32 | | Заливка переменной Var1 числом NumX32 | VarFill32 Var1, NumX32 | На основе макроса StartVR. | | GetPnLx | | Получение текущих параметров M0Lx/M0Pn: EAX=M0Pn, EBX=M0Lx, JL -выход, если M0Lx < 0 | GetPnLx Var1 | | | SetPnLx | | Установка текущих параметров M0Lx/M0Pn | SetPnLx Arr1, M_Pn, M_Lx | | | LenVar | | (LnVr и EAX)=длина переменной. Портит EAX. JL - шибка. | LenVar Var1, LnVr | | | VarByte32 | | EAX=макс (целый)(0, 1, 2..) индекс 32-битных слов. JL - ошибка. Портит EAX. | VarByte32 Var32 | Делит значение макроса LenVar на 4. Допустима запись VarByte32 EAX. | | GetMaxPos | | EAX=Позиция (длина до) начала последней записи | GetMaxPos Arr1 | | | DefCod32 | | Определяет в регистре Reg1 в юникоде-32/16 латиницу EAX=1, кириллицу EAX=2, расширенную еврокодировку EAX=3, цифры EAX=4, прочее EAX=0,. Другие регистры не изменяет. | DefCod32 Reg1 | | | HighLow | | Определяет в регистре Reg1 заглавные буквы в юникоде-32/16 (в латинице, кириллице и латышском). Другие регистры не изменяет. JG - буква заглавная. JZ - не найдено. | HighLow MACRO Reg1 | | | TestAdr | | Проверка корректности адреса переменной: EAX=Var1, JL - не прошла. Портит EAX. | TestAdr Var1 | Проверка на превышение адреса начала физической памяти кластеров ClstSt. | | Claster4 | | EСX/EBX/EAX: адреса 2/3/4 кластера, JL - ошибка | Claster4 Var1 | | | LenArr | | EAX=макс целый(1,2,3..) индекс. JL - ошибка, JZ - длина 0. Портит EAX. | LenArr Arr1 | Результат макроса LenVar, деленный на 8 (т.е., число строк-индексов). Список можно указывать в регистрах: LenArr REG. | | MaxIndArr | | EAX=макс индекс (0,1,2..). -1: пустой список. | MaxIndArr Arr1 | | | SizePzl | | EAX= индекс(PSize), JL- ошибка. Портит регистр EAX. | SizePzl Pzl1 | Очень быстрый макрос. | | TypePzl | | EAX= тип (PType), JL- ошибка. Портит регистр EAX. | TypePzl Pzl1 | Очень быстрый макрос. | | Root16 | | Корень Nc16 [16.16] степени из числа Num16 [16.16]. | Root16 F16, Num16, Nc16 | Инициализация FINIT не проводится, должна быть внешняя! Результат в ST(0). | | RootFp | | Корень переменной NcF [FPU] степени из числа NumF в ST(0)[FPU]. Результат в ST(0). | RootFp NcF | Инициализация FINIT не проводится, должна быть внешняя! Данные в формате FPU, корень во внешней переменной, само число в ST(0). Результат в ST(0). Используется в функции GeoProg | | Degree16 | | Число Num16 [16.16] в степени Nc16 [16.16]. Nc16, Num16-переменная, F16 переменная = H16. Регистры CPU не использует. | Degree16 F16, Num16, Nc16 | Инициализация FINIT не проводится, должна быть внешняя! Результат в ST(0). | | Degree2 | | Целое число Num1 в целой степени Nc1. Результат в EDX:EAX. Портит EAX, EDX. | Degree2 Num1, Nc1 | Простой цикл на процессоре. Для Num1=10 Nc1 (0,1….18). | | Expriment | | Експремент Exp1[16.16] | Expriment Exp1 | | |
Страница "Макросы." обновлена -
|