by fk0 » 27 Dec 2011, 23:15
math.txt:
amul
=====
Перемножение с суммированием. HL = A * DE + HL ~350 тактов
Функция перемножает беззнаковые числа заданные в регистрах A и
DE и прибавляет результат к содержимому регистра HL. Функция
выполняется быстрей чем функция mul, примерно за 350 тактов и
может быть использована для доступа к элементам массивов. В том
случае если размеры элементов или размерности массивов кратны
2^n или являются константами может быть выгодней использовать
более другие способы ускоренного умножения. В случае, если
требуется более быстрый доступ к элементам массивов с
произвольным размером элемента или размерностью может быть
целесообразным использовать массивы Айлифа.
Смотри также mul, div, lmul, ldiv.
crc16
======
Вход:
IX = указатель массив данных
BC = размер массива данных в байтах
DE = коэффициенты многочлена (0x1021 обычно)
HL = начальное значение ЦИК
----
Выход:
HL = значение ЦИК
Функция рассчитывает значение ЦИК для области памяти с
начальным адресом заданным в регистре IX и длиной в байтах
заданной в регистре BC. В регистре DE указывается порождающий
многочлен ЦИК. В регистре HL указывается начальное или
промежиточное (в случае последовательного рассчёта ЦИК
нескольких массивов) значение ЦИК. Результат рассчёта
возвращается в регистре HL. В качестве порождающего ЦИК
многочлена в телекоммуни кационных протоколах используется
рекомендуемое МКТТ значение 1021h.
Результат работы данной функции полностью аналогичен
выполнению функции crc16_fast, однако эта функция не использует
заранее рассчитанную таблицу и время её работы значительно
больше. Рекомендуется использовать функции crc16_init и
crc16_fast, если требуется вести подсчет ЦИК больших объемов
данных.
crc16_init
==========
Вход:
DE = указатель на массив памяти, 512 байт
BC = коэффициенты многочлена (обычно 0x1021)
Функция инициализирует таблицу для быстрого подсчета
16-разрядного циклического избыточного кода (ЦИК) функцией
crc16_fast. В регистре de передается адрес массива памяти
размером в 512 байт для сохранения рассчитанной таблицы.
В регистре BC указывается порождающий многочлен ЦИК. В
телекоммуникационных протоколах используется рекомендованное
МКТТ значение: 1021h.
crc16_fast
============
Вход:
DE = указатель на рассчитанную таблицу ЦИК.
IX = указатель на массив данных
BC = размер массива данных в байтах
HL = начальное значение ЦИК
------
Выход:
HL = значение ЦИК
Функция рассчитывает значение ЦИК для области памяти с
начальным адресом заданным в регистре IX и длиной в байтах
заданной в регистре BC. В регистре DE передается адрес таблицы
предварительно рассчитанной с помощю функции crc16_init. В
регистре HL указывается начальное или промежиточное (в случае
последовательного рассчёта ЦИК нескольких массивов) значение ЦИК.
Результат рассчёта возвращается в регистре HL.
Результат работы данной функции полностью аналогичен
выполнению функции crc16, которая не использует заранее
рассчитанную таблицу, но время её работы значительно больше.
Пример использования функций crc16_init и crc16_fast для
рассчёта ЦИК файла не умещающегося целиком в оперативную память:
ld hl, -512-4096 ; выделили память:
add hl, sp ; 512 байт для таблицы ЦИК
ld sp, hl ; и 4096 для чтения файла
ex de, hl ; адрес таблицы ЦИК = SP+0
ld bc, 0x1021
call crc16_init ; инициализация таблицы ЦИК
ld hl, 0 ; начальное значение ЦИК
push hl
loop:
ld hl, 512
add hl, sp ; адрес буфера файла = SP+512
push hl
call read_file ; считывание части файла
pop ix ; данные: часть файла
ld bc, 4096 ; размер части файла
ld hl, 0
add hl, sp
ex de, hl ; адрес таблицы ЦИК = SP+0
pop hl ; промежуточное значение ЦИК
call crc16_fast
push hl
call eof ; проверка достижения конца файла
jr nz, loop ; ещё есть данные
pop de ; конечное значение ЦИК
ld hl, 512+4096
add hl, sp
ld sp, hl ; освободили память
ex de, hl ; здесь HL = рассчитанное значение ЦИК
ret
div
====
Целочисленное деление: HL=DE/BC, DE=DE%BC.
Функция делит число заданное в регистре HL на число заданное в
регистре BC, результат помещается в регистр HL, а остаток в
регистр DE. В случае деления на 0 в регистре HL записывается
ноль, а в регистре DE значение делимого. Функция выполняется
примерно за 900 тактов.
flatcher
=========
Вход:
IX = указатель на массив памяти
BC = размер массива в байтах
------
Выход:
HL = младшие разряды 16-разрядного кода
DE = старшие разряды 16-разрядного кода
E,L = 8-разрядный код
Функция рассчитывает значения кода Флетчера. В регистре IX
передается указатель на область памяти, по содержимому которой
будет произведен рассчет. В регистре BC передается размер
области памяти в байтах. В регистрах HL и DE возвращаются
значения 16-разрядного кода Флетчера. Значения 8-разрядного
кода могут быть получены из регистров E (старший байт) и
L (младший найт).
Это не слишком удачная функция для контроля целостности
данных, но работает быстрей функций рассчета КЦК.
i2bcd
======
Вход:
HL = двоичное число
------
Выход:
E,H,L = двоично-десятичный эквиэвалент
Функция переводит значение 16-разрядного (двоичного) числа
заданного в регистре HL в двоично-десятичный формат. Результат
возвращается в регистрах E,H,L (в Е -- старшие разряды, в L --
младшие).
l2bcd
======
Вход:
(DE,HL) = двоичное число
------
Выход:
(C,D,E,H,L) = двоично-десятичный эквиэвалент
Функция переводит значение 32-разрядного (двоичного) числа
заданного в регистрах DE и HL (в HL младшие разряды) в
двоично-десятичный формат. Результат возвращается в регистрах
C,D,E,H,L (в C -- старшие разряды, в L -- младшие).
labs
=====
(HL',HL) = abs (HL', HL)
Функция возвращает в регистрах HL' и HL (в HL' старшие
разряды) абсолютное значение 32-разрядного числа со знаком
заданного в регистрах HL' и HL (в HL' старшие разряды).
ldiv
======
(HL',HL) = (HL',HL) / (DE',DE)
(DE',DE) = (HL',HL) % (DE',DE)
Функция делит беззнаковые 32-разрядные числа. Делимое
задаётся в регистрах HL' и HL (в HL' старшие разряды).
Делитель задаётся в регистрах DE' и DE (в DE' старшие разряды).
Результат деления возвращается в регистрах HL' и HL
(в HL' старшие разряды). Остаток от деления возвращается в
регистрах DE' и DE (в DE' старшие разряды).
lmax
=====
(HL',HL) = max ( (HL',HL), (DE',DE) )
Функция возвращает в регистрах HL' и HL (в HL' старшие
разряды) максимальное значение от двух 32-разрядных
беззнаковых чисел. Первое число задаётся в регистрах HL' и HL
(в HL' старшие разряды). Второе число в регистрах DE' и DE
(в DE' старшие разряды).
lmin
=====
(HL',HL) = min ( (HL',HL), (DE',DE) )
Функция возвращает в регистрах HL' и HL (в HL' старшие
разряды) минимальное значение от двух 32-разрядных
беззнаковых чисел. Первое число задаётся в регистрах HL' и HL
(в HL' старшие разряды). Второе число в регистрах DE' и DE
(в DE' старшие разряды).
lmul
=====
(DE',DE,HL',HL) = (HL'HL) * (DE',DE)
Функция перемножает беззнаковые 32-разрядные числа и получает
64-разрядный результат. Первый сомножитель задаётся в регистрах
HL' и HL (в HL' старшие разряды). Второй сомножитель задаётся в
регистрах DE' и DE (в DE' старшие разряды). Результат
возвращается в регистрах DE',DE,HL',HL (в DE' -- старшие разряды,
в HL младшие).
lshl
=====
CF,(HL',HL) = (HL',HL) << A
Функция осуществляет поразрядный сдвиг "влево" 32-разрядного
беззнакового числа заданного в регистрах HL' и HL (в HL' --
старшие разряды). Число сдвигается на количество разрядов
указанное в регистре A. Младшие разряды числа устанавливается
в ноль. Старшие разряды сдвигаются в флаг переноса. Результат
возвращается в флаге переноса и регистрах HL' и HL (в HL' --
старшие разряды).
lshr
=====
CF,(HL',HL) = (HL',HL) >> A
Функция осуществляет поразрядный сдвиг "вправо" 32-разрядного
беззнакового числа заданного в регистрах HL' и HL (в HL' --
старшие разряды). Число сдвигается на количество разрядов
указанное в регистре A. Старшие разряды числа устанавливается
в ноль. Младшие разряды сдвигаются в флаг переноса. Результат
возвращается в флаге переноса и регистрах HL' и HL (в HL' --
старшие разряды).
max
=====
HL = max ( HL, DE )
Функция возвращает в регистре HL максимальное значение от
двух 16-разрядных беззнаковых чисел заданных в регистрах
HL и DE.
min
=====
HL = min ( HL, DE )
Функция возвращает в регистре HL минимальное значение от
двух 16-разрядных беззнаковых чисел заданных в регистрах
HL и DE.
mul
====
(DE,HL) = DE * BC
Функция перемножает беззнаковые 16-разрядные числа заданные в
регистрах DE и BC, и помещает результат в регистры DE и HL. В
регистре DE хранятся старшие биты результата. Функция
выполняется примерно за 800 тактов процессора. Смотри также
описание функции amul.
abs
====
HL = abs (HL)
Функция возвращает абсолютное значение от 16-разрядного числа
со знаком. Аргумент задаётся в регистре HL и результат
возвращается в регистре HL.
negate
=======
HL = 0 - HL
Функция вычитает 16-разрядное беззнаковое число, заданное в
регистре HL, из нуля. Результат помещается в регистр HL. Если
аргумент функции не равен нулю, то флаг C будет установлен.
randn
======
Вход:
DE = максимальное значение случайного числа
----
Выход:
HL = псевдослучайное число
Функция возвращает псевдослучайное число в заданном диапазоне.
Минимальное значение возвращаемого случайного числа -- 0.
Максимальное всегда меньше числа заданного в регистр DE.
Результат возвращается в регистре HL. Смотри также описание
функции rand.
rand
=====
Выход:
HL = 0..65535
Функция возвращает беззнаковое псевдослучайное число в
регистре HL. Возвращаемое число находится в диапазоне 0..65535.
Функция выполняется несколько быстрей функции randn. Выполнение
функции rand по времени примерно равно 3-м вызовам фунцкии
mul, в то время как время выполнения функции randn сопоставимо с
4-мя вызовами функции mul.
srand
=====
Вход:
DE = 0..65535
Функция устанавливает генератор случайных чисел. При установке
генератора одним значением генерируемая последовательность
псевдослучайных чисел будет всегда повторяться. Аргумент функции
передаётся в регистре DE.
wshl
=====
CF,HL = HL << A
Функция осуществляет поразрядный сдвиг "влево" 16-разрядного
беззнакового числа заданного в регистре HL. Число сдвигается на
количество разрядов указанное в регистре A. Младшие разряды
числа устанавливается в ноль. Старшие разряды сдвигаются в флаг
переноса. Результат возвращается в флаге переноса и регистре HL.
wshr
=====
CF,HL = HL >> A
Функция осуществляет поразрядный сдвиг "вправо" 16-разрядного
беззнакового числа заданного в регистре HL. Число сдвигается на
количество разрядов указанное в регистре A. Старшие разряды
числа устанавливается в ноль. Младшие разряды сдвигаются в флаг
переноса. Результат возвращается в флаге переноса и регистре HL.
sqrt
=====
A = sqrt (HL)
Функция вычисляет целочисленное значение квадратного корня
от беззнакового числа заданного в регистре HL, результат
возвращается в регистре A. Функция выполняется примерно за 470
тактов.
string.txt:
Библиотека предоставляет следующие функции:
===========================================
Определение типа символа:
isalnum, isalpha, isascii, isblank, isdigit, islower, isprint,
ispunct, isspace, isupper, isxdigit
Работа с массивами:
memcmp, memmove, swab
Работа со строками:
strcat, strchr, strcmp, strncmp, strcmpi, strncmpi, strcpy, strlen,
strncat, strncpy
Преобразования строк:
strreverse, strlower, strupper
Поиск подстроки:
strglob, strstr
Разбор строк:
strcspn, strpbrk, strrchr, strrpbrk, strrspnp, strsep, strspn, strspnp
Преобразования символов:
tolower, toupper
Преобразования чисел:
atow, htoa, wtoa, ltoa
isalnum
========
ZF = isalnum( A )
Функция устанавливает флаг Z если символ заданный в регистре A
является буквой или цифрой. Функция работает только с ASCII
символами с кодами 32-127 (с буквами латинского алфавита),
национальные алфавиты в текущей версии не поддерживаются.
Содержимое регистров A и HL при вызове функции сохраняется.
isalpha
========
ZF = isalpha( A )
Функция устанавливает флаг Z если символ заданный в регистре
A является буквой. Функция работает только с ASCII символами с
кодами 32-127 (с буквами латинского алфавита), национальные
алфавиты в текущей версии не поддерживаются. При вызове функции
содержимое регистров A и HL сохраняется.
isascii
========
ZF = isascii( A )
Функция устанавливает флаг Z если символ заданный в регистре A
является символом из ASCII набора (коды 0-127). При вызове
функции содержимое регистров A и HL сохраняется.
isblank
========
ZF = isblank( A )
Функция устанавливает флаг Z если символ заданный в регистре A
является пробелом или символом табуляции. Функция работает
только с ASCII символами с кодами 32-127 (с буквами латинского
алфавита), национальные алфавиты в текущей версии не
поддерживаются. При вызове функции содержимое регистров A и HL
сохраняется.
isdigit
========
ZF = isdigit( A )
Функция устанавливает флаг Z если символ заданный в регистре
A является цифрой. Функция работает только с ASCII символами с
кодами 32-127 (с буквами латинского алфавита), национальные
алфавиты в текущей версии не поддерживаются. При вызове функции
содержимое регистров A и HL сохраняется.
islower
========
ZF = islower( A )
Функция устанавливает флаг Z если символ заданный в регистре A
является строчной буквой. Функция работает только с ASCII
символами с кодами 32-127 (с буквами латинского алфавита),
национальные алфавиты в текущей версии не поддерживаются. При
вызове функции содержимое регистров A и HL сохраняется.
isprint
========
ZF = isprint( A )
Функция устанавливает флаг Z если символ заданный в регистре A
является печатным символом. Функция работает только с ASCII
символами с кодами 32-127 (с буквами латинского алфавита),
национальные алфавиты в текущей версии не поддерживаются. При
вызове функции содержимое регистров A и HL сохраняется.
ispunct
========
ZF = ispunct( A )
Функция устанавливает флаг Z если символ заданный в регистре A
печатный и одновременно ни алфавитно-цифровой, ни пробел.
Функция работает только с ASCII символами с кодами 32-127 (с
буквами латинского алфавита), национальные алфавиты в текущей
версии не поддерживаются. При вызове функции содержимое
регистров A и HL сохраняется.
isspace
========
ZF = isspace( A )
Функция устанавливает флаг Z если символ заданный в регистре A
является пробелом, символом табуляции, символом перевода строки
или символом конца листа (коды 0x20, 0x9, 0x0a, 0x0d и 0x0f).
Функция работает только с ASCII символами с кодами 32-127 (с
буквами латинского алфавита), национальные алфавиты в текущей
версии не поддерживаются. При вызове функции содержимое
регистров A и HL сохраняется.
isupper
========
ZF = isupper( A )
Функция устанавливает флаг Z, если символ заданный в регистре
A является заглавной буквой. Функция работает только с ASCII
символами с кодами 32-127 (с буквами латинского алфавита),
национальные алфавиты в текущей версии не поддерживаются. При
вызове функции содержимое регистров A и HL сохраняется.
isxdigit
========
ZF = isxdigit( A )
Функция устанавливает флаг Z, если символ заданный в регистре
A является шеснадцатеричной цифрой. Функция работает только с
ASCII символами с кодами 32-127 (с буквами латинского алфавита),
национальные алфавиты в текущей версии не поддерживаются. При
вызове функции содержимое регистров A и HL сохраняется.
memcmp
======
Вход:
DE = указатель на первый массив
HL = указатель на второй массив
BC = размер сравниваемых массивов
------
Выход:
F по результату, ZF==1 если массивы идентичны
Функция осуществляет побайтовое сравнение содержимого массивов
памяти заданных регистрами DE и HL. Длина массивов указывается
в регистре BC. По результату сравнения устанавливается флаговый
регистр. В частности, флаг Z будет установлен, если массивы
идентичны, иначе флаг Z будет сброшен. Флаги устанавливается
по результату сравнения первого несовпавшего символа обоих
строк следующим образом:
Результат Значения Мнемоника
сравнения флагов условия перехода
-------------------------------------------------
(DE) < (HL) C=1 C
(DE) >= (HL) C=0 NC
memmove
========
Вход:
DE = указатель массива приёмника
HL = указатель массива источника
BC = размер массивов в байтах
Функция перемещает массив памяти с адреса указанного
регистром HL по адресу указанному регистром DE. Длина массива
задаётся регистром BC. Функция корректно работает в том случае,
когда массивы источника и приёмника пересекаются.
strglob
========
Вход:
HL = указатель на строку текста
DE = указатель на строку маски
-------
Выход:
ZF=1 если строка соответствует маске
Функция осуществляет сравнение строки заданной регистром HL
со строкой маски заданной регистром DE. В случае, если строка
соответствует маске флаг Z будет установлен.
Маска может состоять из любых символов (кроме символа с
кодом 0). Некоторые символы интерпретируются особым образом:
* -- означает любое число
любых символов.
? -- означает один любой символ.
strstr
======
Вход:
HL = указатель на строку текста
DE = указатель на искомую строку
-------
Выход:
ZF==1 если подстрока найдена
HL = указатель на найденную подстроку
Функция осуществляет поиск первого вхождения строки заданной
регистром DE в строку заданную регистром HL. Если строка
заданная регистром DE входит в строку заданную регистром HL,
то флаг Z будет установлен и регистр HL будет содержать
указатель на искомую подстроку (часть строки, заданной
регистром HL). Если подстрока не найдена, то флаг Z будет
сброшен.
strlcpy
========
Вход:
DE = указатель на строку приёмник
HL = указатель на строку источник
BC = максимальный размер строки приёмника в байтах
-------
Выход:
HL = указатель на завершающий 0 строки приёмника
Функция копирует строку заданную регистром HL по адресу
заданному регистром DE. Копируется не большее число символов,
чем задано в регистре BC с учётом завершающего нуля.
Таким образом, строка приёмник всегда будет иметь завершающий 0
в конце, а из копируемой строки может быть скопировано только
BC-1 первых символов.
В регистре HL возвращается указатель на последний символ в
массиве приемнике, это всегда завершающий символ с кодом 0.
strlcat
=======
?╚╧─:
DE = ╒╦┴┌┴╘┼╠╪ ╬┴ ╙╘╥╧╦╒ ╨╥╔г═╬╔╦
HL = ╒╦┴┌┴╘┼╠╪ ╬┴ ╙╘╥╧╦╒ ╔╙╘╧▐╬╔╦
BC = ═┴╦╙╔═┴╠╪╬┘╩ ╥┴┌═┼╥ ╙╘╥╧╦╔ ╨╥╔г═╬╔╦┴
-------
?┘╚╧─:
HL = ╒╦┴┌┴╘┼╠╪ ╬┴ ┌┴╫┼╥█┴└▌╔╩ 0 ╙╘╥╧╦╔ ╨╥╔г═╬╔╦┴
ц╒╬╦├╔╤ ╨╥╧╔┌╫╧─╔╘ ╙╠╔╤╬╔┼ ╙╘╥╧╦ ╨╒╘г═ ─╧╨╧╠╬┼╬╔╤ ╙╘╥╧╦╔
╒╦┴┌┴╬╬╧╩ ╥┼╟╔╙╘╥╧═ HL ╙╘╥╧╦╧╩ ╒╦┴┌┴╬╬╧╩ ╥┼╟╔╙╘╥╧═ DE, ╦╧╘╧╥┴╤
┌┴╨╔╙┘╫┴┼╘╙╤ ╫ ╦╧╬┼├ ╙╘╥╧╦╔ ╒╦┴┌┴╬╬╧╩ ╥┼╟╔╙╘╥╧═ HL. э┴╦╙╔═┴╠╪╬┘╩
╥┴┌═┼╥ ╙╘╥╧╦╔ ╬┴┌╬┴▐┼╬╔╤ ╒╦┴┌┘╫┴╘╙╤ ╫ ╥┼╟╔╙╘╥┼ BC. ы ╙╘╥╧╦┼
╬┴┌╬┴▐┼╬╔╤ ┬╒─┼╘ ─╧┬┴╫╠┼╬╧ ╙╘╧╠╪╦╧ ╙╔═╫╧╠╧╫, ▐╘╧ ╥┴┌═┼╥
╥┼┌╒╠╪╘╔╥╒└▌┼╩ ╙╘╥╧╦╔ ╙ ╒▐г╘╧═ ┌┴╫┼╥█┴└▌┼╟╧ ╬╒╠╤ ╬┼ ╨╥┼╫┘╙╔╘
▐╔╙╠╧ ┌┴─┴╬╬╧┼ ╫ ╥┼╟╔╙╘╥┼ BC. ?┼┌╒╠╪╘╔╥╒└▌┴╤ ╙╘╥╧╦┴ ╫╙┼╟─┴ ┬╒─┼╘
┌┴╫┼╥█┼╬┴ ╙╔═╫╧╠╧═ ╙ ╦╧─╧═ 0. ? ╥┼╟╔╙╘╥┼ HL ╫╧┌╫╥┴▌┴┼╘╙╤
╒╦┴┌┴╘┼╠╪ ╬┴ ╨╧╙╠┼─╬╔╩ ╙╔═╫╧╠ ╙╘╥╧╦╔ ╬┴┌╬┴▐┼╬╔╤ (┌┴╫┼╥█┴└▌╔╩ 0).
strcat
=======
Вход:
DE = указатель на строку приёмник
HL = указатель на строку источник
-------
Выход:
HL = указатель на завершающий 0 строки приёмника
Функция производит копирование строки указанной регистром HL в
конец строки указанной регистром DE (происходит объединение
строк). Полученная строка будет всегда завершаться символом с
кодом 0. В регистре HL возвращается указатель на последний
символ строки-приемника (это всегда завершающий 0).
strcpy
=======
Вход:
DE = указатель на строку приёмник
HL = указатель на строку источник
-------
Выход:
HL = указатель на завершающий 0 строки приёмника
Функция копирует строку заданную регистром HL по адресу
заданному регистром DE. Копируются все символы, включая
завершающий нуль. В регистре HL возвращается указатель на
последний символ в строке-приемнике (завершающий 0).
Функция может некорректно работать в случае, если строка приёмник
и строка источник пересекаются. Смотрите функцию memmove для
копиривания пересекающихся областей памяти.
Функция способна переполнить область памяти предназначенную
для строки назначения. Смотрите функции strncpy, strlcpy для
копирования с контролем длины.
strncpy
========
Вход:
DE = указатель на массив приёмник
HL = указатель на строку источник
BC = размер массива приёмника в байтах
-------
Выход:
HL = указатель на последний символ строки приёмника
Функция копирует строку заданную регистром HL по адресу
заданному регистром DE. Копируется не большее число символов,
чем задано в регистре BC.
Если размер строки источника меньше, чем задано в регистре BC,
то массив приёмник будет заполнен до конца символами с кодом 0.
В случае, если длина, без учета завершающего нуля, строки
заданной регистром HL превышает или равна значению переданному в
регистре BC, то строка заданная регистром DE не будет иметь
завершающего нуля.
В регистре HL возвращается указатель на последний символ в
массиве приемнике, это не обязательно символ с кодом 0 (в случае
переполнения строки).
strncat
=======
Вход:
DE = указатель на строку приёмник
HL = указатель на строку источник
BC = максимальное количество копируемых символов
-------
Выход:
HL = указатель на завершающий 0 строки приёмника
Функция производит слияние строк путём дополнения строки
указанной регистром HL строкой указанной регистром DE, которая
записывается в конец строки указанной регистром HL. Будет
скопировано не больше начальных символов, из строки заданной
регистром DE, чем указано в регистре BC. В регистре HL
возвращается указатель на последний символ строки назначения.
Смотрите функцию strlcat для объединения строк с контролем
длины результирующей строки.
strlen
=======
Вход:
HL = указатель на строку
------
Выход:
HL, BC = длина строки
Функция возвращает длину строки без учета завершающего нуля в
регистрах BC и HL. Адрес строки передается в регистре HL.
strchr
=======
Вход:
A = код искомого символа
HL = указатель на строку
------
Выход:
ZF==1 если символ найден
HL = указатель на найденный символ
Функция осуществляет поиск символа заданного регистром A, в
строке заданной регистром HL. В случае успешного нахождения
символа флаг Z будет установлен, а регистр HL будет содержать
адрес найденного символа.
Функция ведет поиск от начала строки к концу (в сторону
увеличения адреса). Смотри функцию strrchr для поиска в обратном
направлении.
strcmp
=======
Вход:
DE = указатель на первую строку
HL = указатель на вторую строку
-------
Выход:
F по результату
Функция сравнивает строки указанные регистрами DE и HL,
результат возвращается в регистре флагов. В случае, если строки
идентичны флаг Z будет установлен. Сравнение выполняется по коду
символа и может быть несправедливым для национальных алфавитов.
Флаги устанавливаются по результату сравнения первого несовпавшего
символа следующим образом:
Результат Значения Мнемоника
сравнения флагов условия перехода
-------------------------------------------------
(DE) < (HL) C=1 C
(DE) >= (HL) C=0 NC
strncmp
=======
Вход:
DE = указатель на первую строку
HL = указатель на вторую строку
BC = максимальный размер строки в байтах
-------
Выход:
F по результату
Функция сравнивает строки указанные регистрами DE и HL,
результат возвращается в регистре флагов. Сравнивается
не больше символов чем указано в регистре BC, если первые
символы строк в количестве указанном в регистре BC равны,
то считается, что строки идентичны. Флаги устанавливаются
по результату сравнения точно также, как и в результате
выполнения функции strcmp.
strcmpi
=======
Вход:
DE = указатель на первую строку
HL = указатель на вторую строку
-------
Выход:
F по результату
Функция сравнивает строки указанные регистрами DE и HL,
результат возвращается в регистре флагов. Сравнение производится
без учёта регистра символов. Сравнение выполняется по коду
символа и может быть несправедливым для национальных алфавитов.
Флаги устанавливаются по результату сравнения точно также, как и
в результате выполнения функции strcmp.
strncmpi
=======
Вход:
DE = указатель на первую строку
HL = указатель на вторую строку
BC = максимальный размер строки в байтах
-------
Выход:
F по результату
Функция сравнивает строки указанные регистрами DE и HL,
результат возвращается в регистре флагов. Сравнивается не больше
символов чем указано в регистре BC, если первые символы строк в
количестве указанном в регистре BC равны, то считается, что
строки идентичны. Сравнение производится без учёта регистра
символов. Сравнение выполняется по коду символа и может быть
несправедливым для национальных алфавитов. Флаги
устанавливаются по результату сравнения точно также, как и в
результате выполнения функции strcmp.
strreverse
===========
Вход:
HL = указатель на строку
Функция переворачивает строку задом-наперёд. Самый первый
символ становится самым последним и наоборот. Завершающего
строку нуля это не касается. Указатель на строку передаётся
в регистре HL.
strlower
=========
Вход:
HL = указатель на строку
Функция переводит строку заданную регистром HL в нижний
регистр символов. Функция работает только с ASCII символами с
кодами 32-127 (с буквами катинского алфавита). Национальные
алфавиты в текущей версии не поддерживаются.
strupper
=========
Вход:
HL = указатель на строку
Функция переводит строку заданную регистром HL в верхний
регистр символов. Функция работает только с ASCII символами с
кодами 32-127 (с буквами катинского алфавита). Национальные
алфавиты в текущей версии не поддерживаются.
strcspn
========
Вход:
HL = указатель на строку текста
DE = указатель на строку искомых символов
-------
Выход:
BC, HL = количество подходящих символов
Функция подсчитывает количество символов от начала строки
заданной регистром HL, не входящих во множество символов
заданных регистром DE.
Для подсчёта символов входящих в множество заданных существует
фунцкия strspn. Для подсчёта символов с конца строки существуют
функции strrcspn и strrspn.
strpbrk
========
Вход:
HL = указатель на строку текста
DE = указатель на строку искомых символов
-------
Выход:
ZF=1 если символ найден
HL = указатель на найденный символ
Функция ведён поиск в строке заданной регистором HL любого из
символов заданных регистром DE. В случае, если поиск заведшён
успешно, флаг Z будет установлен и регистр HL будет содержать
указатель на этот символ.
Поиск ведётся в прямом напрявлении, с начала строки. Для
поиска в обратном направлении, с конца строки, смотрите функцию
strrpbrk.
strrchr
=======
Вход:
A = код искомого символа
HL = указатель на строку
------
Выход:
ZF==1 если символ найден
HL = указатель на найденный символ
Функция осуществляет поиск символа заданного регистром A, в
строке заданной регистром HL. В случае успешного нахождения
символа флаг Z будет установлен, а регистр HL будет содержать
адрес найденного символа.
Функция ведет поиск в обратном направлении, от конца строки к
началу (в сторону уменьшения адреса). Смотри функцию strchr для
поиска в прямом направлении.
strrpbrk
========
Вход:
HL = указатель на строку текста
DE = указатель на строку искомых символов
-------
Выход:
ZF=1 если символ найден
HL = указатель на найденный символ
Функция ведён поиск в строке заданной регистором HL любого из
символов заданных регистром DE. В случае, если поиск заведшён
успешно, флаг Z будет установлен и регистр HL будет содержать
указатель на этот символ.
Поиск ведётся в обратном напрявлении, с конца строки. Для
поиска в прямом направлении, с начала строки, смотрите функцию
strpbrk.
strrspnp
=========
Вход:
HL = указатель на строку текста
DE = указатель на строку искомых символов
-------
Выход:
ZF==1 если символ найден
HL = указатель на найденный символ
Фунцкия осуществляет поиск в строке заданной регистром HL
любого символа отсутствующего в множестве символов заданных
регистром DE. Если такой символ (отсутствующий в строке
задаваемой регистром DE) будет найден, то флаг Z будет
установлен и регистр HL будет указывать на этот символ. В
противном случае флаг Z будет сброшен.
Поиск осуществляется в обратном направлении, с конца строки.
Для поиска символа в прямом направлении, с начала строки,
смотрите функцию strspnp.
strsep
=======
Вход:
HL = указатель на строку текста
DE = указатель на строку-массив разделителей
------
ZF==1 если токен найден
HL = указатель на слово
DE = указатель на следующую за словом строку
Функция осуществляет поиск в строке, заданной регистром HL,
слов, разделённых символами заданными регистром DE. Слова состоят
из символов не являющихся разделителями. После того, как найдено
слово, символ разделителя, следующий за ним, заменяется на
символ с кодом 0. В регистре HL возвращается указатель на начало
найденного слова, а в регистре DE указатель на символ, следующий
за завершающим слово нулём, что позволяет при последовательных
вызовах фунцкии strsep извлечь из строки все слова. Исходная
строка при этом будет разрушена. В случае, если заданная строка
текста состоит только из разделителей флаг Z будет сброшен.
Функция осуществляет просмотр строки в прямом направлении, от
начала к концу. Существует функция strrsep, которая
просматривает строку в обратном направлении, от конце к началу
строки.
Пример использования функции, который выводит все слова
разделённые пробелами или символами пунктуации:
ld hl, string ; исходная строка текста
loop:
ld de, delimiters ; строка разделителей
call strsep
jr nz, endloop ; больше слов нет
push de ; продолжение строки
call printhl ; вывод слова по адресу HL
call prnewln ; перевод строки
pop hl
jr loop
endloop:
ret
delimiters:
db 0x09, " ,.;:?!", 0
string:
db "слово1,слово2 слово3.слово4?слово5", 0
strspn
======
Вход:
HL = указатель на строку
DE = указатель на строку-массив разделителей
-------
BC, HL = количество символов
Функция подсчитывает количество символов от начала строки
заданной регистром HL, входящих во множество символов
заданных регистром DE.
Для подсчёта символов не входящих в множество заданных существует
фунцкия strcspn. Для подсчёта символов с конца строки существуют
функции strrspn и strrcspn.
strspnp
=======
Вход:
HL = указатель на строку текста
DE = указатель на строку-массив разделителей
------
Выход:
ZF==1 если отсутствующий символ найден
HL = указатель на символ отсутствующий в заданном массиве
Функция осуществляет поиск в строке, заданной регистром HL,
любого символа отсутствующего в множестве заданном строкой DE.
В случае, если такой символ найден, флаг Z будет установлен
и регистр HL будет содержать адрес этого символа.
swab
====
Вход:
HL = массив источник
DE = массив приёмник
BC = размер массивов
Функция swab копирует число байтов заданное в регистре BC из
массива источника в массив приёмник, при этом соседние байты
чётные и нечётные (по счёту) байты меняются местами. То-есть,
если в массиве-источнике содержалась строка "12345678", то
после применения функции массив-приёмник будет содержать
строку "21436587".
tolower
========
A = tolower( A )
Символ заданный в регистре A переводится в нижний регистр и
возвращается в регистре A. Функция работает только с ASCII
символами с кодами 32-127 (с буквами латинского алфавита),
национальные алфавиты в текущей версии не поддерживаются.
toupper
========
A = toupper( A )
Символ заданный в регистре A переводится в верхний регистр и
возвращается в регистре A. Функция работает только с ASCII
символами с кодами 32-127 (с буквами латинского алфавита),
национальные алфавиты в текущей версии не поддерживаются.
atow
=====
Вход:
HL = указатель на строку
-----
Выход:
HL = число или указатель на ошибочный символ
DE = указатель на конечный символ
CF=1 -- признак ошибки
Функция преобразует строку, адрес которой передаётся в
регистре HL, в число. Строка должна содержать беззнаковое
целое число в диапазоне 0..65535 записанное в десятичной
системе счисления. Ведущие пробелы игнорируются, а
преобразование заканчивается на первом нецифровом символе.
Число должно состоять минимум из одного цифрового символа.
В случае успешного преобразования в регистре HL возвращается
двоичный эквиэвалент числа, регистр DE будет указывать на символ
строки следующий за числом, а флаг переноса будет сброшен. В
случае, если корректное преобразование строки в число
невозможно, флаг переноса будет установлен, а регистр HL будет
указывать на ошибочный символ.
htoa
=====
Вход:
A = число 0..255
HL = указатель на строку (минимум 3 байта)
----
Выход:
HL = указатель на конец строки
Функция записывает безнаковое число заданное в регистре A в
строку заданную регистром HL, в шестнадцатеричной системе
счисления. Будет записано 2 цифры (ведущий ноль присутствует)
и символ с кодом 0 заканчивающий строку. Таким образом, HL
должен указывать на строку с минимальной длиной в 3 байта.
По завершению функции регистр HL будет указывать на последний
символ строки (завершающий 0).
wtoa
=====
Вход:
BC = число 0..65535
HL = указатель на строку (минимум 6 байт)
------
Выход:
HL = указатель на 0 завершающий строку.
Функция записывает беззнаковое число, заданное в регистре BC,
в строку заданную регистром HL, в десятичной системе счисления.
Ведущие нули не записываются. Может быть записано до 6-и байт,
включая символ с кодом 0 заканчивающий строку. В регистре HL
возвращается указатель на последний символ строки (код 0).
ltoa
=====
Вход:
HL = указатель на строку (минимум 11 байт)
(DE,BC) = 32-разрядное число
-----
Выход:
HL = указатель на последний символ строки
Функция записывает 32-разрядное беззнаковое число в строку, в
десятичной системе счисления. Ведущие нули не записываются.
Число задаётся в регистрах DE и BC (в DE старшие разряды),
указатель на строку задаётся регистром HL. Может быть записано
до 11-и байт, включая символ с кодом 0 заканчивающий строку. В
регистре HL возвращается указатель на последний символ строки
(код 0).
* Origin: зип файл! (2:5030/1559)