Как выполнить нецелочисленное деление с помощью div?

Можно ли как-то поделить например 4 на 5 с помощью div и получить 0.8? Мне сказали что можно, если объединить eax и edx, но либо я делаю что-то не так, либо это не помогает. Я вообще не понимаю как это сделать, если используя div сохраняется только целая часть числа и остаток.Обращался к чатгпт, он не помогает

#include <stdio.h>

int main() {
    unsigned int number = 4;
    unsigned int result;
    unsigned int remainder;

    __asm {
        mov eax, number
        mov edx, eax
        shr edx, 16
        mov bx, 5
        div bx
        movzx eax, ax
        mov result, eax
        mov remainder, edx
    }

    printf("Result: %u\n", result);
    printf("Remainder: %u\n", remainder);

    return 0;
}

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

У меня нет подходящего компилятора, поэтому код будет на C.

Требуется вычислить n/m с точностью p знаков после запятой.

  1. Умножаем n на 10p - после этого деление выдаст нужное количество знаков.
  2. Добавляем к n половину m - после этого деление будет давать округлённый результат.
  3. Делим n на m. Получится число в котором нужно отсчитать p знаков справа и напечатать их в качестве дробной части.
#include <stdio.h>

int main() {
    unsigned n, m, p;

    scanf("%u%u%u", &n, &m, &p);

    for (unsigned i = 0; i < p; ++i) {
        n *= 10;
    }
    n += m >> 1;
    unsigned q = n / m;

    printf("%u\n", q);
}
$ gcc div.c

$ echo 355 113 0 | ./a.out
3

$ echo 355 113 1 | ./a.out
31

$ echo 355 113 2 | ./a.out
314

$ echo 355 113 3 | ./a.out
3142

$ echo 355 113 4 | ./a.out
31416

$ echo 355 113 5 | ./a.out
314159

$ echo 355 113 6 | ./a.out
3141593

$ echo 355 113 7 | ./a.out
31415929

Это способ склонен к переполнениям, обычно десятичные дроби печатают по-другому. Зато его легко переложить на ассемблер без использования строк.

→ Ссылка