Программная модель процессора IntelPentium (IA-32). Программная модель – Регистры. Прикладная модель CPU, страница 2

FISUB                обратные команды вычитания

FIMUL                и деления (операторы меняются местами)

FIDIV                 используется суффикс R (reverse)

Аппаратная поддержка BCD чисел реализована только на уровне команд загрузки FBLD и записи в память FBSTP с выталкиванием из стека.

B – BCD, Binary Coded Decimal

В связи с преобразованием BCD числа в формат с плавающей запятой при выполнении команды FBLD или обратного преобразования, при выполнении команды FBSTP, длительное выполнение этих команд, особенно последней, превосходит длительность любой арифметической команды и сопоставима со сложными трансцендентными командами (логарифм, тригонометрические функции).

Справочные данные по длительности выполнения некоторых команд в тактах процессора для семейства P5:

FBLD            48-58

FBSTP           148-154

FDIV            39

IDIV             46

FPTAN          17-173

FSINCOS      17-137

FYL2X           22-111 (y·log2x)

Аппаратная поддержка чисел с плавающей точкой в коротком и длинном формате реализуется на уровне арифметических команд. При этом 32 или 64х разрядные операнды выбираются из памяти.

Регистры данных FPU организованны в своеобразный регистровый стек.

Принципы организации регистрового стека:

1)  Адресация регистров данных (R0-R7) осуществляется относительно вершины стека. Адрес текущей вершины стека задается 3х битным полем TOP в слове состояния SW (аналог регистра FPSR) и определяет регистр, обозначенный в программе на Assembler ST(0) или просто ST (Stack Top).

Замечание: Assembler не допускает использования регистров данных с аббревиатурой R0-R7, только ST.

2)  При включении в стек, например, по команде загрузки FLD mem, производится предварительный декремент (предекремент) содержимого поля TOP. Стек растет в область младших адресов.

При выполнении обратного действия (пересылка из регистра стека в память FST mem) постинкремента указанного стека, тем не менее, не производится.

Для извлечения операнда из вершины стека после его пересылки в память используется модификация команды FST с добавлением суффикса P – FSTP. По ней после извлечения стека производится смещение в сторону старших адресов.

При выполнении последней команды производится постинкремент поля TOP, т.е. указателя стека. Это является одним из отличий регистрового стека от классического стека реализуемого в памяти.

Другими отличиями являются:

3)  Кольцевая организация стека.

Это означает, что декремент указанного стека TOP=000 имеет результатом «111». Инкремент TOP=111 дает значение «000».

4)  При выполнении арифметических команд допускается явное или неявное обращение к регистрам стека с модификацией или без модификации его вершин.

Неявное обращение предполагает отсутствие адресной части команды (команда состоит из единственного кода операции), в этом случае операнд команды размещается в вершине стека и туда же помещается результат операции.

Примерами безадресных однооперандных команд могут служить:

FSQRT       извлечение квадратного корня из регистра ST(0) → ST(0)

FABS         |ST(0)| → ST(0)

FCHS         изменение знака, - ST(0) → ST(0)

Явная адресация регистров осуществляется относительно текущей вершины стека, например:


TOP=100

FADD ST, ST(S)           складывает содержимое физических регистров

R4+R1 → R4

FADD ST(S), ST           R1+R4 → R1

FADD ST(S), ST

После сложения операндов производится инкремент вершины стека TOP.

Безадресная команда FADDP складывает операнды из вершины стека R4 и следующего регистра R5 (ST и ST(1)) и результат помещает в регистр R5 и инкрементирует указатель вершины, удаляет один из операндов стека, смещает указатель стека на результат операции.

К другим примерам безадресных арифметических команд может служить команда FCOMPP, которая выполняет сравнение операндов из верхних регистров стека ST(0) и ST(1) путем их неразрушающего вычитания и установки признаков сравнения (биты C3-C0) в регистре состояний SR.

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

5)  Возможность изменения вершины стека (инкремент или декремент) специальными командами FPU:

FINCSTP

FDECSTP

Особенности организации регистрового стека FPU ориентированы на эффективную реализацию вычислительных процедур представленных в польской обратной записи.