Реализовать на ассемблере функцию для работы с числами половинной точности - C (СИ)
Формулировка задачи:
Реализовать на ассемблере функцию для работы с так называемыми
числами половинной точности (формат binary16 стандарта IEEE 754-2008. В прототипах функций, приведённых ниже, обозначается как fp16_t)
-утилита доступа к полям числа:
Чтобы проверить правильность написания программы:
Вводим f = 0x3C00, должно вывести 0x0
Вводим f = 0xBC00, должно вывести 0x1
Вводим f = 0x3555, должно вывести 0x0
Вводим f = 0x39B7, должно вывести 0x0
Вводим f = 0x5640, должно вывести 0x0
Листинг программы
- /*
- * Возвращает 0, если число положительное, и 1, если отрицательное
- */
- int fp16_sign(fp16_t f);
Решение задачи: «Реализовать на ассемблере функцию для работы с числами половинной точности»
textual
Листинг программы
- #include <stdio.h>
- #include <stdint.h>
- typedef uint16_t fp16_t;
- int fp16_sign(fp16_t f)
- {
- int sign = 0;
- __asm(
- "shl $1, %1;"
- "adc $0, %0"
- : "+r" (sign)
- : "r" (f));
- return sign;
- }
- int main()
- {
- fp16_t x;
- scanf("%hx", &x);
- printf("%#x\n", fp16_sign(x));
- return 0;
- }
Объяснение кода листинга программы
- Подключение необходимых заголовочных файлов:
и . - Объявление типа данных, с которым будет работать функция: fp16_t.
- Реализация функции fp16_sign, принимающей аргумент типа fp16_t f.
- Внутри функции объявление переменной sign типа int для хранения результата.
- Использование ассемблерной вставки для реализации функции:
shl $1, %1;
- сдвиг бита знака вправо на 1 позицию.adc $0, %0
- сложение со специальным значением, приводящее к корректному определению знака числа.:
+r` (sign) - синтаксис вставки аргументов в ассемблерную вставку.+r
(sign) - передача переменной sign как аргумента в ассемблерную вставку.:
r` (f) - синтаксис вставки аргументов в ассемблерную вставку.r
(f) - передача аргумента f как временной регистровой переменной в ассемблерную вставку.
- Возврат значения переменной sign из функции.
- В функции main():
- Объявление переменной x типа fp16_t.
- Считывание значения x с помощью функции scanf.
- Вывод значения функции fp16_sign с аргументом x с помощью функции printf.
- Завершение функции main() и программы в целом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д