|
|
Макросы.
| Артикул | Наименование | Цена, от | | 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 | | | |
Страница "Макросы." обновлена -
|