Содержание
Перемножение с суммированием. HL = A * DE + HL ~350 тактов.
Функция перемножает беззнаковые числа заданные в регистрах A и DE и прибавляет результат к содержимому регистра HL. Функция выполняется быстрей чем функция mul, примерно за 350 тактов и может быть использована для доступа к элементам массивов. В том случае если размеры элементов или размерности массивов кратны 2n или являются константами может быть выгодней использовать более другие способы ускоренного умножения. В случае, если требуется более быстрый доступ к элементам массивов с произвольным размером элемента или размерностью может быть целесообразным использовать массивы Айлифа.
Вход:
Выход:
Функция рассчитывает значение ЦИК для области памяти с начальным адресом заданным в регистре IX и длиной в байтах заданной в регистре BC. В регистре DE указывается порождающий многочлен ЦИК. В регистре HL указывается начальное или промежиточное (в случае последовательного рассчёта ЦИК нескольких массивов) значение ЦИК. Результат рассчёта возвращается в регистре HL. В качестве порождающего ЦИК многочлена в телекоммуни кационных протоколах используется рекомендуемое МКТТ значение 1021h.
Результат работы данной функции полностью аналогичен выполнению функции crc16_fast, однако эта функция не использует заранее рассчитанную таблицу и время её работы значительно больше. Рекомендуется использовать функции crc16_init и crc16_fast если требуется вести подсчет ЦИК больших объемов данных.
Вход:
Функция инициализирует таблицу для быстрого подсчета 16-разрядного циклического избыточного кода (ЦИК) функцией crc16_fast. В регистре DE передается адрес массива памяти размером в 512 байт для сохранения рассчитанной таблицы. В регистре BC указывается порождающий многочлен ЦИК. В телекоммуникационных протоколах используется рекомендованное МКТТ значение: 1021h.
Вход:
Выход:
Функция рассчитывает значение ЦИК для области памяти с начальным адресом заданным в регистре 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
Целочисленное деление: HL=DE/BC, DE=DE%BC.
Функция делит число заданное в регистре HL на число заданное в регистре BC, результат помещается в регистр HL, а остаток в регистр DE. В случае деления на 0 в регистре HL записывается ноль, а в регистре DE значение делимого. Функция выполняется примерно за 900 тактов.
Вход:
Выход:
Функция рассчитывает значения кода Флетчера. В регистре IX передается указатель на область памяти, по содержимому которой будет произведен рассчет. В регистре BC передается размер области памяти в байтах. В регистрах HL и DE возвращаются значения 16-разрядного кода Флетчера. Значения 8-разрядного кода могут быть получены из регистров E (старший байт) и L (младший найт).
Это не слишком удачная функция для контроля целостности данных, но работает быстрей функций рассчета КЦК.
Смотрите также: crc16, crc16_init, crc16_fast.
Вход:
Выход:
Функция переводит значение 16-разрядного (двоичного) числа заданного в регистре HL в двоично-десятичный формат. Результат возвращается в регистрах E,H,L (в Е — старшие разряды, в L — младшие).
Вход:
Выход:
Функция переводит значение 32-разрядного (двоичного) числа заданного в регистрах DE и HL (в HL младшие разряды) в двоично-десятичный формат. Результат возвращается в регистрах C,D,E,H,L (в C -- старшие разряды, в L -- младшие).
(HL',HL) = abs (HL', HL)
Функция возвращает в регистрах HL' и HL (в HL' старшие разряды) абсолютное значение 32-разрядного числа со знаком заданного в регистрах HL' и HL (в HL' старшие разряды).
(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' старшие разряды).
(HL',HL) = max ( (HL',HL), (DE',DE) )
Функция возвращает в регистрах HL' и HL (в HL' старшие разряды) максимальное значение от двух 32-разрядных беззнаковых чисел. Первое число задаётся в регистрах HL' и HL (в HL' старшие разряды). Второе число в регистрах DE' и DE (в DE' старшие разряды).
(HL',HL) = min ( (HL',HL), (DE',DE) )
Функция возвращает в регистрах HL' и HL (в HL' старшие разряды) минимальное значение от двух 32-разрядных беззнаковых чисел. Первое число задаётся в регистрах HL' и HL (в HL' старшие разряды). Второе число в регистрах DE' и DE (в DE' старшие разряды).
(DE',DE,HL',HL) = (HL'HL) * (DE',DE)
Функция перемножает беззнаковые 32-разрядные числа и получает 64-разрядный результат. Первый сомножитель задаётся в регистрах HL' и HL (в HL' старшие разряды). Второй сомножитель задаётся в регистрах DE' и DE (в DE' старшие разряды). Результат возвращается в регистрах DE',DE,HL',HL (в DE' -- старшие разряды, в HL младшие).
CF,(HL',HL) = (HL',HL) << A
Функция осуществляет поразрядный сдвиг "влево" 32-разрядного беззнакового числа заданного в регистрах HL' и HL (в HL' — старшие разряды). Число сдвигается на количество разрядов указанное в регистре A. Младшие разряды числа устанавливается в ноль. Старшие разряды сдвигаются в флаг переноса. Результат возвращается в флаге переноса и регистрах HL' и HL (в HL' — старшие разряды).
CF,(HL',HL) = (HL',HL) >> A
Функция осуществляет поразрядный сдвиг "вправо" 32-разрядного беззнакового числа заданного в регистрах HL' и HL (в HL' — старшие разряды). Число сдвигается на количество разрядов указанное в регистре A. Старшие разряды числа устанавливается в ноль. Младшие разряды сдвигаются в флаг переноса. Результат возвращается в флаге переноса и регистрах HL' и HL (в HL' — старшие разряды).
HL = max ( HL, DE )
Функция возвращает в регистре HL максимальное значение от двух 16-разрядных беззнаковых чисел заданных в регистрах HL и DE.
HL = min ( HL, DE )
Функция возвращает в регистре HL минимальное значение от двух 16-разрядных беззнаковых чисел заданных в регистрах HL и DE.
(DE,HL) = DE * BC
Функция перемножает беззнаковые 16-разрядные числа заданные в регистрах DE и BC, и помещает результат в регистры DE и HL. В регистре DE хранятся старшие биты результата. Функция выполняется примерно за 800 тактов процессора. Смотрите также описание функции amul.
HL = abs (HL)
Функция возвращает абсолютное значение от 16-разрядного числа со знаком. Аргумент задаётся в регистре HL и результат возвращается в регистре HL.
HL = 0 - HL
Функция вычитает 16-разрядное беззнаковое число, заданное в регистре HL, из нуля. Результат помещается в регистр HL. Если аргумент функции не равен нулю, то флаг C будет установлен.
Вход:
Выход:
Функция возвращает псевдослучайное число в заданном диапазоне. Минимальное значение возвращаемого случайного числа – 0. Максимальное всегда меньше числа заданного в регистр DE. Результат возвращается в регистре HL. Смотри также описание функции rand.
Выход:
Функция возвращает беззнаковое псевдослучайное число в регистре HL. Возвращаемое число находится в диапазоне 0…65535. Функция выполняется несколько быстрей функции randn. Выполнение функции rand по времени примерно равно 3-м вызовам фунцкии mul, в то время как время выполнения функции randn сопоставимо с 4-мя вызовами функции mul.
Вход:
Функция устанавливает генератор случайных чисел. При установке генератора одним значением генерируемая последовательность псевдослучайных чисел будет всегда повторяться. Аргумент функции передаётся в регистре DE.
CF,HL = HL << A
Функция осуществляет поразрядный сдвиг "влево" 16-разрядного беззнакового числа заданного в регистре HL. Число сдвигается на количество разрядов указанное в регистре A. Младшие разряды числа устанавливается в ноль. Старшие разряды сдвигаются в флаг переноса. Результат возвращается в флаге переноса и регистре HL.
CF,HL = HL >> A
Функция осуществляет поразрядный сдвиг "вправо" 16-разрядного беззнакового числа заданного в регистре HL. Число сдвигается на количество разрядов указанное в регистре A. Старшие разряды числа устанавливается в ноль. Младшие разряды сдвигаются в флаг переноса. Результат возвращается в флаге переноса и регистре HL.