FPU это вам не сказки!

Все микроконтроллеры и процессоры, построенные на ядре ARMv7, имеют в своём составе блок вычисления с плавающей точкой. Это достаточно нехитрый математический сопроцессор, выполняющий несколько простых функций. Хотя вычисление корня всегда было проблемой для обычных камушков. А тут вам пожалуйста.

Но сколько я пишу на ассемблере, ни разу не встречались задачи, где мог бы понадобиться такой сопроцессор.
С плавающей точкой работать приходилось, но всё делалось гораздо проще, без каких-либо проблем с точностью.
Тем не менее, сопроцессор в камушке есть, за него деньги уплачены, давайте что ли включим.

Что бы поднять математический сопроцессор, требуется всего один шаг - установить биты в регистре CPACR.

    MOV32 R0, CPACR
    LDR R1, [R0]
    ORR R1, R1, (0xF << 20)
    STR R1, [R0]

Заработало. Теперь вы математик.

    MOV32 R1, 0x3FDD70A4 @ 1.73
    VMOV S2, R1 @ Передать число в регистр сопроцессора
    MOV32 R1, 0x403D70A4 @ 2.96
    VMOV S3, R1
    VDIV.F32 S1, S2, S3 @ Разделить: S1=S2/S3
    VMOV R1, S1 @ R1 теперь = 0x3F159F23 или ~0.584459 - вот именно, что приблизительно!


Смотрите, не ошибитесь!

Скачайте простой конвертер для IEEE 754.
Существует так же множество онлайн конвертеров.