Регистр признаков. Указатель команды. Указатель операнда. 10.3 Форматы вещественных чисел, используемые сопроцессором. Мантисса
Регистр признаков Регистр признаков содержит восемь 2-х битовых полей TAG0 – TAG7. Содержимое каждого поля характеризует значение соответствующего числового регистра ST(0) – ST(7). По содержимому полей TAG0 – TAG7 можно судить о том, какое число хранится в регистрах ST(0) – ST(7). Возможны следующие значения каждого поля TAG0 – TAG7: 00B – в числовом регистре находится действительное ненулевое число; 01B – в числовом регистре находится нуль; 10B – числовой регистр содержит недействительное число – бесконечность, специальное нечисловое значение NaN (Not a Number) или денормализованное число. 11B – числовой регистр пуст. Если регистр не отмечен как пустой, то при попытке записи в него вырабатывается код недействительной операции (устанавливается бит 0 регистра состояния) и запись в стек не производится. Этот особый случай может быть замаскирован, и тогда запись будет произведена. Для этого нужно установить бит 0 регистра управления, иначе возникновение особого случая вызовет прерывание центрального процессора.
Указатель команды Указатель команды содержит 20-разрядный физический адрес команды, вызвавшей особый случай, а также 11-разрядный код последней выполненной операции. Если при возникновении особого случая использовался операнд, то его адрес заносится в регистр указателя операнда.
Указатель операнда Указатель операнда содержит 20-разрядный физический адрес операнда, использованного командой, вызвавшей возникновение особого случая.
10. 3 Форматы вещественных чисел, используемые сопроцессором Все числа в стеке сопроцессора представляются в действительном формате. Сопроцессор может использовать три формата вещественных чисел: с одинарной точностью, с двойной точностью и с расширенной точностью. Конкретный формат определяется содержимым поля PC (Precision Control) регистра управления.
Каждый из форматов действительных чисел, используемых сопроцессором, содержит поле мантиссы, поле порядка и бит знака. Размер мантиссы и порядка определяется типом формата действительного числа и влияет на точность представления чисел. Чем больше разрядов содержит мантисса, тем точнее представляется число. Чем больше разрядов содержит порядок, тем шире диапазон представляемых чисел. Форматы действительных чисел представлены на рис. 7.
Формат с одинарной точностью
Формат с двойной точностью
Формат с расширенной точностью
Рис. 7. Форматы действительных чисел
Следует отметить, что ухудшение точности не приводит к ускорению работы программы. Поэтому различные форматы следует использовать тогда, когда это целесообразно. Все действительные числа, в независимости от их формата, хранятся в нормализованном виде. Это означает, что мантисса числа имеет значения от 1 до 2. При этом целая часть числа, равная 1, не хранится, так как она заранее известна. Порядок числа определяет степень числа 2, на которое умножается мантисса. При этом для хранения порядка к нему добавляется число 16383 для расширенной точности, 1023 для двойной точности и 127 для одинарной точности. Добавление константы к порядку нужно для того, чтобы полученное значение всегда было положительным, так как сам по себе порядок может быть и отрицательным. При определении в программе вещественных чисел можно использовать директивы определения данных DD и DQ. При инициализации определенных таким образом переменных нужно записывать вещественное число в формате с плавающей точкой в десятичной форме, например 123. 81263. Даже если число не имеет дробной части, его все равно следует записать с десятичной точкой, например 5. 0, иначе число будет интерпретировано транслятором как целое, а не вещественное.
10. 4 Команды пересылки данных и загрузки констант сопроцессора Эти команды позволяют загружать операнды из памяти в стек сопроцессора или извлекать из стека значения и записывать их в память. Некоторые команды загружают в стек сопроцессора константы, такие как 1 или число p. В табл. 14 приведены команды пересылки данных и загрузки констант сопроцессора, их операнды и назначение.
Таблица 14 Команды передачи данных и загрузки констант сопроцессора
При использовании команд с выталкиванием из стека (FSTP, FISTP) число записывается в память и при этом выталкивается из стека сопроцессора. При использовании в качестве операнда ячейки памяти и косвенной формы адресации необходимо указывать тип операнда – конструкция WORD PTR для 16-битного целого числа, DWORD PTR для одинарной точности или для 32-битного целого числа, QWORD PTR для двойной точности или 64-битного целого числа, а также TBYTE PTR для формата с расширенной точностью. Команда FLD может иметь в качестве операнда регистры ST(0) – ST(7), при этом значение соответствующего регистра заносится в вершину стека.
Команда FXCH используется для обмена значениями регистра ST(0) и другого числового регистра сопроцессора. Если команда используется без операндов, меняются значениями регистры ST(0) и ST(1). Если в качестве операнда указан числовой регистр сопроцессора, то меняются значениями регистр ST(0) и указанный регистр. Примеры использования команд: A DW 1. 0 B DD 2. 0 C DQ 3. 0 D DT 4. 0 . . . FLD B MOV BX, OFFSET C FLD QWORD PTR [BX] MOV DI, OFFSET D FLD TBYTE PTR [DI] FILD A MOV SI, OFFSET B FILD DWORD PTR B FILD C . . . FLDZ
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|