цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Язык С. Коды и регистры с плавающей точкой




Язык С. Коды и регистры с плавающей точкой

Автор: Mike(admin) от 9-12-2018, 12:05

Набор инструкций для манипулирования значениями в формате с плавающей точкой является одним из наименее элегантных свойств архитектуры IA32. В первых машинах компании Intel операции со значениями с плавающей точкой выполнялись отдельным сопроцессором, устройством с собственными регистрами и вычислительными мощностями, которое выполняло некоторое подмножество команд.


Язык С. Коды и регистры с плавающей точкой

Этот сопроцессор был реализован в виде отдельных плат, которым были присвоены названия 8087, 80287 и i387, которые служили приложениями, соответственно, процессоров 8086, 80286 и i386. Мощность плат этого поколения технических средств была недостаточна, чтобы устанавливать на одной плате главный процессор и сопроцессор с плавающей точкой. Кроме того, маломощные машины просто обходятся без операций с плавающей точкой и реализуют их с помощью программного обеспечения. Начиная с модели i486, аппаратура, выполняющая операции над величинами в формате плавающей точки, стала неотъемлемой частью центрального процессора архитектуры IA32.


Первый сопроцессор 8087 с большой помпой был представлен в 1980 году. Это было первое устройство FPU на одной плате и первая реализация того, что сегодня известно как плавающая точка IEEE. Функционирующее как сопроцессор устройство перехватывает выполнение операций с плавающей точкой после того, как эти операции достанутся главному процессору. Между главным процессором и устройством FPU минимальная связь. Передача данных с одного процессора на другой требует, чтобы процессор-отправитель записывал данные в память, а принимающий процессор читал эти данные. К тому же, технология компиляции в 1980 году была намного проще, чем сегодня. Многие свойства архитектуры IA32, ориентированные на обработку величин с плавающей точкой, представляют собой трудно решаемую задачу для оптимизирующих компиляторов.


Устройство для выполнения операций с плавающей точкой содержит восемь регистров с плавающей точкой, однако они, в отличие от обычных регистров, трактуются как неглубокий стек.


Вместо прямой индексации регистров большая часть арифметических команд извлекает свои аргументы из стека, вычисляют результат, а затем проталкивают результат в стек. В 1970 году стековая архитектура считалась передовой идеей, поскольку стеки представляют собой простой механизм для вычисления арифметических команд, к тому же они позволяют проводить очень плотное кодирование команд. По мере совершенствования технологии компиляции и в связи с тем, что память, необходимая для кодирования программ, более не считается критическим ресурсом, эти качества потеряли свою былую важность. Для разработчиков компиляторов было бы намного удобнее, если в их распоряжении имелся больший набор удобных для использования регистров для выполнения операций с плавающей точкой.


Если регистры для работы с числами с плавающей точкой организованы в виде стека ограниченных размеров, то компиляторам трудно использовать эти регистры для хранения локальных переменных в процедурах, которые вызывают другие процедуры. При хранении целочисленных локальных переменных некоторые регистры общего назначения могут быть использованы для хранения параметров вызывающей процедуры и, следовательно, для сохранения локальных переменных на протяжении времени исполнения вызова процедуры. Такой вид использования невозможен для регистра плавающей точки в архитектуре IA32, поскольку его идентификация меняется по мере проталкивания данных в стек и выталкивания их из стека.




© digitrode.ru


Теги: язык C




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий