42018

Использование функций деления в ассемблерных файлах

Дата последнего изменения: 06.07.2021 17:14:23

Процессоры 1967ВН028/044 не имеют выделенного набора команд для выполнения операций деления чисел в формате с фиксированной и плавающей точкой. Однако использование ряда других команд (например, команда обратного приближения RECIPS) позволяет реализовать алгоритм деления чисел.

При разработке программы на языке высокого уровня (C/C++) алгоритм деления реализовывается автоматически компилятором clang: в местах выполнения операции деления в зависимости от типов операндов вызывается соответствующая функция деления. Данные функции деления являются скомпилированными и входят в состав библиотеки clib.dlb.

При разработке программы на ассемблере для выполнения операции деления можно либо реализовать собственный алгоритм деления (пример алгоритма приведён в «Руководстве по программированию», пункт 10.2.15 «Обратное приближение (плавающая арифметика)»), либо воспользоваться функциями из библиотеки clib.dlb. В таблице ниже приведены доступные в clib.dlb функции деления. Все функции принимают два аргумента – делимое и делитель, возвращают частное.

Таблица 1 - Описание функций деления из библиотеки clib.dlb

Название функции

Первый аргумент (делимое)

Второй аргумент (делитель)

Возвращаемое значение (частное)

Описание

__DIV32

J4

J5

J8

Деление знаковых 32-битных целочисленных операндов

__DIV32U

J4

J5

J8

Деление беззнаковых 32-битных целочисленных операндов

__DIV64

XR5:4

XR7:6

XR9:8

Деление знаковых 64-битных целочисленных операндов

__DIV64U

XR5:4

XR7:6

XR9:8

Деление беззнаковых 64-битных целочисленных операндов

__FPDIV

XR4

XR5

XR8

Деление операндов в формате с плавающей точкой одинарной точности

__FDDIV

XR5:4

XR7:6

XR9:8

Деление операндов в формате с плавающей точкой двойной точности


Необходимо учитывать, что реализация этих функций следует конвенции о вызовах (документ «ML_ЦППО_Clang_Руководство_пользователя_R_Vx», пункт «4.7. Конвенция вызовов»), поэтому в процессе выполнения функций могут быть изменены значения в регистрах вычислительных модулей, которые относятся к scratch-регистрам:

XR0-XR23, YR0-YR23, J0-J15, K0-K15.

Сохранить статью в PDF

Теги

Была ли статья полезной?