Реализовать на ассемблере функцию для работы с числами половинной точности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Реализовать на ассемблере функцию для работы с так называемыми числами половинной точности (формат binary16 стандарта IEEE 754-2008. В прототипах функций, приведённых ниже, обозначается как fp16_t) -утилита доступа к полям числа:
/*
 * Возвращает 0, если число положительное, и 1, если отрицательное
 */
int fp16_sign(fp16_t f);
Чтобы проверить правильность написания программы: Вводим f = 0x3C00, должно вывести 0x0 Вводим f = 0xBC00, должно вывести 0x1 Вводим f = 0x3555, должно вывести 0x0 Вводим f = 0x39B7, должно вывести 0x0 Вводим f = 0x5640, должно вывести 0x0

Решение задачи: «Реализовать на ассемблере функцию для работы с числами половинной точности»

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;
}

Объяснение кода листинга программы

  1. Подключение необходимых заголовочных файлов: и .
  2. Объявление типа данных, с которым будет работать функция: fp16_t.
  3. Реализация функции fp16_sign, принимающей аргумент типа fp16_t f.
  4. Внутри функции объявление переменной sign типа int для хранения результата.
  5. Использование ассемблерной вставки для реализации функции:
    • shl $1, %1; - сдвиг бита знака вправо на 1 позицию.
    • adc $0, %0 - сложение со специальным значением, приводящее к корректному определению знака числа.
    • :+r` (sign) - синтаксис вставки аргументов в ассемблерную вставку.
    • +r (sign) - передача переменной sign как аргумента в ассемблерную вставку.
    • :r` (f) - синтаксис вставки аргументов в ассемблерную вставку.
    • r (f) - передача аргумента f как временной регистровой переменной в ассемблерную вставку.
  6. Возврат значения переменной sign из функции.
  7. В функции main():
    • Объявление переменной x типа fp16_t.
    • Считывание значения x с помощью функции scanf.
    • Вывод значения функции fp16_sign с аргументом x с помощью функции printf.
  8. Завершение функции main() и программы в целом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы