Реализовать на ассемблере функцию для работы с числами половинной точности - 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() и программы в целом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д