Добавить в корзинуПозвонить
Найти в Дзене
Old Programmer

Ассемблер. Числа с плавающей точкой

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А вот это ссылки на все мои статьи по языку программирования ассемблер. Сегодня рассматриваем интересный вопрос использования команд для чисел с плавающей точкой или команд FPU (floating point unit). Это открывает дополнительную возможность для программирования на ассемблере. Принципы работы с числами с плавающей точкой на ассемблере x86-64 Сопроцессор имеет восемь 80-битных рабочих регистров, представляющих собой стековую кольцевую структуру (стек сопроцессора). Регистры называются R0, R1, … R7, но доступ к ним напрямую невозможен. Каждый регистр может занимать любое положение в стеке. Название стековых (относительных) регистров - st(0), st(1), st(2), st(3), st(4), st(5), st(6), st(7). Кроме того, имеется еще регистр состояния, по флагам которого можно, в частности, судить о результате выполненной операции. Регистр управления содер

Все ссылки на статьи и ролики моего канала Old Programmer:
Программирование. Тематическое оглавление моего Zen-канала (Old Programmer). А вот это ссылки на все мои статьи по языку программирования ассемблер.

Сегодня рассматриваем интересный вопрос использования команд для чисел с плавающей точкой или команд FPU (floating point unit). Это открывает дополнительную возможность для программирования на ассемблере.

Принципы работы с числами с плавающей точкой на ассемблере x86-64

Сопроцессор имеет восемь 80-битных рабочих регистров, представляющих собой стековую кольцевую структуру (стек сопроцессора). Регистры называются R0, R1, … R7, но доступ к ним напрямую невозможен. Каждый регистр может занимать любое положение в стеке. Название стековых (относительных) регистров - st(0), st(1), st(2), st(3), st(4), st(5), st(6), st(7). Кроме того, имеется еще регистр состояния, по флагам которого можно, в частности, судить о результате выполненной операции. Регистр управления содержит в себе биты, влияющие на выполнение команд сопроцессора.

Чтобы показать как работают команды FPU взял две программы. Из программы на языке C (main2000.c) вызывается функция, написанная на языке ассемблера (asm2000.s), которая выполняет действия над числами с плавающей точкой: квадратный корень из суммы двух чисел.

Надо иметь в виду, что числа типа float передаются через регистры xmm0-xmm7, а результат возвращается в xmm0. Поскольку прямого доступа к регистрам сопроцессора нет, то данные мы передаем через переменную vr1 (см. asm2000.s). Результат выводится консоль (см. main2000.c).

И такие сайты есть
И такие сайты есть

Еще одна статья по программированию действий с числами с плавающей точкой здесь. Подписываемся на мой канал о программировании и программистах Old Programmer.

Фрагмент программы asm2000.s
Фрагмент программы asm2000.s