Архитектура арифметического сопроцессора

Введение

Целью изучения дисциплин «Организация ЭВМ и систем» и «Архитектура ЭВМ и систем» является ознакомление студентов с основными принципами организации аппаратного обеспечения ЭВМ и систем, принципами работы периферийных устройств и их взаимодействия в составе системы.

Изучение архитектуры ЭВМ и принципов функционирования устройств, входящих в состав ЭВМ немыслимо без глубокого освоения приемов программирования на языке ассемблера, так как этот язык максимально полно соответствует архитектуре ЭВМ.

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

Большинство лабораторных работ выполняется на языке ассемблера для процессоров семейства 80х86, краткое описание которого приведено в настоящем пособии. Предполагается, что студент, приступающий к выполнению практикума владеет основами программирования на каком либо языке высокого уровня.

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

АРХИТЕКТУРА ПРОЦЕССОРА 8086

Регистры процессора.

Основу архитектуры центрального процессора составляют регистры. Процессор 8086 имеет 14 шестнадцатиразрядных регистров (см рисунок 1), которые используются для управления исполнением команд, адресации и выполнения арифметических операций. Регистр адресуется по имени. Регистры по функциональному назначению делятся на четыре группы: регистры данных AX, BX, CX, DX; указательные и индексные регистры SP, BP, SI, DI; сегментные регистры CS, SS, DS, ES; указатель команды и регистр флагов IP и FLAGS.

Регистры данных       Индексные и указательные регистры
     
AH AL AX     SP
BH BL BX     BP
CH CL CX     SI
DH DL DX     DI
           
Сегментные регистры       Указатель команд и флаги
         
CS       IP
DS       FLAGS
ES        
SS        

Рис 1. Регистры микропроцессора

Сегментные регистры CS, DS, SS и ES.Регистр CS – содержит начальный адрес сегмента кода. Этот адрес, суммированный со значением смещения в указателе команд (IP), определяет очередную выполняемую команду. Регистр SS – содержит начальный адрес сегмента стека. Регистр DS – содержит начальный адрес сегмента данных. В большинстве случаев, при адресации операндов этот адрес плюс смещение, указанное в инс­трукции, задает адрес переменной. Регистр ES – адресует дополнительный сегмент данных, который можно использовать для размещения данных в больших программах вместе с сегментом, адресуемым регистром DS. Дополнительные сегмент данных используется для адресации памяти в строковых операциях, при этом он содержит строку – приемник результата. Регистр ES ини­циализируется программой на ассемблере.

Регистры данных AX, BX, CX и DX.Регистры данных иногда в литературе называют регистрами общего назначения. Этот термин в применении к данным регистрам нельзя считать корректным, поскольку в некоторых командах эти регистры имеют узкую специализацию. Регистр AX – первичный аккумулятор, используется во всех операциях ввода/вывода, в некоторых операциях со строками и в некоторых арифметических операциях. Регистр BX – базовый регистр, единственный из регистров общего назначения, используемый в индексной адресации. Кроме того, регистр BX используется при вычислениях. Регистр CX – регистр счетчик, он используется в качестве счетчика при организации циклов, в сдвиговых операциях, командах обработки строк. Регистр DX – регистр данных. Используется в некоторых опе­рациях ввода/вывода, в операциях умножения и деления больших чисел совместно с регистром AX. Каждый из регистров данных можно рассматривать либо как один шестнадцатибитный регистр, либо как две восьмибитные «половинки». Так, например, регистр AX имеет две «половинки» - старшую AH и младшую AL. Аналогично и остальные регистры данных. Любой из регистров общего назначения может быть использо­ван для суммирования или вычитания 8- или 16-разрядных величин.

Индексные и указательные регистры.Регистры указателя используются для обращения к данным в сегменте стека. Регистр SP - указатель стека. Используется для временного хранения адресов и иногда данных. Адресует стек совместно с регистром SS. Регистр BP - указатель базы. Обеспечивает ссылки на пара­метры (данные и адреса, передаваемые через стек). Индексные регистры используются для адресации, а также для выполнения операций сложения и вычитания. Регистр SI - индекс источника. Используется в некоторых операциях со строками или символами, аналогичен регистру DS. Регистр DI - индекс приемника. Используется в тех же опе­рациях, что и регистр SI. Аналогичен регистру ES.

Регистр указателя команд IP.Регистр IP используется для выборки очередной команды программы с целью ее исполнения. Адрес команды извлекаемой из памяти определяется сегментным регистром CS и регистром IP. Регистр IP непосредственно не доступен, его можно изменить только косвенно, с использованием команд управления программой.

Регистр флагов FLAGS.Регистр FLAGS содержит девять активных битов (из 16), ко­торые отражают состояние машины и результаты выполнения машин­ных команд (см. рисунок 2).

        OF DF IF TF SF ZF   AF   PF   CF

Рисунок. 2. Формат регистра FLAGS

Регистр FLAGS содержит следующие признаки

OF – флаг переполнения. Равен 1, если возникает арифметическое переполнение.

DF – флаг направления. Задает направление обработки строк: 0 – в сторону увеличения адресов, 1 – в сторону уменьшения адресов.

IF – флаг разрешения прерывания. Прерывания разрешены, если IF=1. Если IF=0, то распознаются лишь немаскированные прерывания.

TF – флаг трассировки. Если TF=1, то процессор переходит в состояние прерывания INT 3 пос­ле выполнения каждой команды. Флаг используется программами-отладчиками для обеспечения пошагового выполнения программы.

SF – флаг знака. SF=1, когда старший бит результата равен 1. Иными словами, SF=0 если результат операции является положительным числом, и SF=1 для отрицательных чисел.

ZF – флаг нулевого результата. ZF=1, если результат равен нулю.

AF – флаг дополнительного переноса. Этот признак устанавливается в 1 во время выполнения команд деся­тичного сложения и вычитания при необходимости выполнения перено­са или заема между полубайтами.

PF – флаг четности. Этот признак устанавливается в 1, если результат имеет четное чис­ло единиц

CF – флаг переноса. Этот признак устанавливается в 1, если имеет место перенос или заем из старшего бита результата; он полезен для произведения операций над числами длиной в несколько слов, которые сопряжены с перено­сами и заемами из слова в слово.

Регистр FLAGS непосредственно недоступен. Большинство команд формируют признаки в результате выполнения и модифицируют регистр FLAGS. Его можно также изменить косвенно командами POPF, IRET, SAHF, а также командами установки и очистки отдельных флагов, прочитать или проанализировать с помощью команд PUSHF, LAHF или командами условного перехода.

Сегменты.

Процессор допускает манипулирование адресным пространством в 1Мб, т.е. 220 байт, однако может манипулировать только 16 битными числами. Поэтому для формирования физических адресов в процессоре реализована сегментная модель памяти. С помощью шестнадцатибитных адресов можно адресовать пространство памяти размеров в 216 байт (64Кбайта или 65535 байт), такая область памяти называется сегментом. Программа может в каждый момент времени использовать три вида сегментов: сегмент кода – содержит машинные команды, адресуется ре­гистром CS; сегмент данных – содержит данные, то есть константы и рабочие области, необходимые программе, адресуется регистром DS; сегмент стека – служит для обслуживания аппаратного стека, структуры данных, используемой при вызове подпрограмм и обработке прерываний, адресуется регистром SS, кроме того предусмотрена возможность использования дополнительного сегмента данных, адресуемого регистром ES. Сегмент описывается базовым адресом сегмента, который хранится в сегментном регистре.

Каждый из упомянутых регистров содержит старшие 16 бит адреса начала сег­мента (базового адреса). Младшие биты адреса всегда считаются равными нулю и поэтому не хранятся, поэтому базовый адрес сегмента имеет адрес кратный 16. Область памяти длинной в 16 бит называется параграфом.

Адрес любого объекта, расположенного в памяти можно описать в виде суммы двух составляющих – базового адреса сегмента и смещения до объекта относительно начала сегмента. Команды выбираются из сегмента кода, смещение команды относительно начала сегмента кода определяется регистром IP – указателем команды. При операциях со стеком данные расположены в аппаратном стеке, смещение вершины аппаратного стека хранится в регистре - указателе стека SP. В операциях манипулирования данными адрес операндов может указываться в команде или храниться в одном из регистров процессора. Способ вычисления адреса по информации указанной в команде называется режимом адресации. Данные выбираются из сегмента данных (сегментный регистр DS) или дополнительного сегмента (сегментный регистр ES).

Для того, чтобы вы­полнить обращение по любому адресу процессор выполняет суммиро­вание адреса, записанного в регистре сегмента, со смещением. При этом, содержимое регистра сдвигается на четыре двоичных разряда влево и дополняется нулевыми битами. Результирующий адрес имеет длину 20 бит, что и позволяет адресовать 1 Мбайт памяти.

Режимы адресации.

Режимы адресации и примеры их использования приведены в таблице 1. Все режиме адресации иллюстрируются на примере команд INC приемник – инкремент (увеличение на 1) приемника или MOV приемник, источник – пересылка содержимого источника в приемник.

Таблица 1.

Режимы адресации процессора 8086

Наименование Обозначение Примечание
Регистровая INC AX Операнд находится в одном из 8 или 16 битных регистров процессора. Самый быстрый способ адресации.
Непосредственная MOV AX,5 Операнд указывается непосредственно в команде. В приведенном примере операнд приемник – регистр, источник – непосредственный операнд. Используется для операций с константами.
Прямая INC [1000] В команде указан адрес переменной в виде смещения относительно начала сегмента данных. Адрес может указываться в численном виде (как в примере) или в символическом. Используется для доступа к статическим переменным.
Косвенная регистровая INC [BP], INC [SI] Адрес хранится и обрабатывается в одном из регистров BX, BP, SI, DI. В случае использования регистра BP - операнд находится в сегмента стека, в остальных случаях в сегменте данных. Используется при адресации динамических переменных по ссылке (указателю).
Базовая со смещением INC [BP + A], INC B[BX] Адрес получается путем суммирования 8-ми или 16-ти битной константы в команде и одного из базовых регистров BX или BP. Используется для доступа к элементам структур (записей).
Индексная INC A[SI], INC [DI + B] Адрес получается путем суммирования 8-ми или 16-ти битной константы в команде и одного из индексных регистров SI или DI. Используется для доступа к элементам массивов. Предполагается, что константа есть адрес начала массива, а регистр содержит индексное выражение.
Базово индексная INC [BX][SI], INC [BP + DI] Адрес вычисляется путем суммирования содержимого базового (BX или BP) и индексного (SI или DI) регистров. В случае использования регистра BP - операнд находится в сегмента стека, в остальных случаях в сегменте данных. Используется при адресации динамических массивов по ссылке (указателю), при этом базовый регистр содержит адрес массива, индексный – индексное выражение.
Базово индексная со смещением INC [BX][SI + 10], INC A[BP + SI], INC X[BX][DI] Адрес получается путем суммирования 8-ми или 16-ти битной константы в команде, одного из базовых (BX или BP) и индексного (SI или DI) регистров. В случае использования регистра BP - операнд находится в сегмента стека, в остальных случаях в сегменте данных. Используется для доступа к элементам динамических массивов структур (записей).
Строковая - Адрес строки источника определяется регистровой парой DS:SI, строки приемника – парой ES:DI.

Стеки.

Во многих случаях программе требуется временно запомнить информацию, а затем считывать ее в обратном порядке. Эта проб­лема в ПК решена посредством реализации стека LIFO ("последний пришел - первый ушел"), называемого также стеком включения/из­влечения (stack - кипа, например, бумаг). Наиболее важное ис­пользование стека связано с процедурами. Стек обычно рассчитан на косвенную адресацию через регистр SP - указатель стека. При включении элементов в стек производится автоматический декре­мент указателя стека, а при извлечении - инкремент, то есть стек всега "растет" в сторону меньших адресов памяти. Адрес последнего включенного в стек элемента называется вершиной сте­ка (TOS). Физический адрес стека формируется из SP и SS или BP и SS, причем SP служит неявным указателем стека для всех операций включения и извлечения, а SS - сегментным регистром стека. Со­держимое SS является самым младшим адресом (границей) области стека и называется базой стека. Первоначальное содержимое SP считается наибольшим смещением, которого может достигать стек.

Одно из назначений стека – передача параметров в подпрограммы. Совокупность параметров размещенных в стеке называется стековым кадром. Регистр BP предназначен, главным образом, для обращений к стековым кадрам.

Прерывания.

Иногда необходимо выполнить одну из набора специальных процедур, если в оборудовании или программе происходит некоторое событие, например, нажата клавиша на клавиатуре или произошло деление на нуль. Сигнал о таком событии называется пре­рыванием, поскольку основной процесс при этом приостанавливает­ся на время выполнения процедуры обработки события. Существует два общих класса прерываний: внутренние и внешние. Первые инициируются состоянием ЦП или командой, а вторые - сигналом, подаваемым от других компонентов системы. Типичные внутренние прерывания: де­ление на нуль, переполнение и т.п., а типичные внешние - это запрос на обслуживание со стороны какого-либо устройства ввода/ вывода.

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

Некоторыми видами прерываний управляют флажки IF и TF, ко­торые для восприятия прерываний должны быть правильно установ­лены. Если условия для прерывания удовлетворяются и необходимые флажки установлены, то микропроцессор завершает текущую коман­ду, а затем реализует последовательность прерывания: текущее значение регистра Flags включается в стек (экви­валентно команде pushf); текущее значение кодового сегмента CS включается в стек (эквивалентно команде push CS); текущее значение указателя инструкции IP включается в стек (эквивалентно команде push IP); сбрасываются флажки IF и TF.

Новое содержимое IP и CS определяет начальный адрес выпол­няемой процедуры прерывания (обслуживание прерывания). Возврат в прерванную программу осуществляется командой, которая извле­кает из стека содержимое для: IP (эквивалентно pop IP); CS (эквивалентно pop CS); Flags (эквивалентно popf).

Двойное слово, в котором находится новое содержимое IP и CS, называется указателем прерывания, или вектором. Каждому ти­пу прерывания назначено число из диапазона 0...255, и адрес указателя прерывания находится путем умножения номера типа на четыре.

Архитектура арифметического сопроцессора.

Типы данных FPU.

Числовой процессор может выполнять операции с семью разными типами данных: три целых двоичных, один целый десятичный и три типа данных с плавающей запятой.

Вещественные числа хранятся, как и все данные, в форме двоичных чисел. Двоичная запись числа с плавающей запятой аналогична десятичной, только позиции справа от запятой соответствуют не делению на 10 в соответствующей степени, а делению на 2. Переведем для примера в двоичный вид число 0,625 = 0,101b. При записи вещественных чисел всегда выполняют нормализацию – умножают число на такую степень двойки, чтобы перед десятичной точкой стояла единица, в нашем случае 0,625 = 0,101b = 1,01b * 2-1.

Говорят, что число имеет мантиссу 1,01 и экспоненту -1. Как можно заметить, при использовании этого алгоритма первая цифра мантиссы всегда равна 1, так что ее можно не писать, увеличивая тем самым точность представления числа дополнительно на 1 бит. Кроме того, значение экспоненты хранят не в виде целого со знаком, а в виде суммы с некоторым числом так, чтобы хранить всегда только положительное число и чтобы было легко сравнивать вещественные числа – в большинстве случаев достаточно сравнить экспоненту. Теперь мы можем рассмотреть вещественные форматы IEEE, используемые в процессорах Intel

  • короткое вещественное бит 31 – знак мантиссы, биты 30 – 23 – 8-битная экспонента + 127, биты 22 – 0 – 23-битная мантисса без первой цифры;
  • длинное вещественное бит 63 – знак мантиссы, биты 62 – 52 – 11-битная экспонента + 1024, биты 51 – 0 – 52-битная мантисса без первой цифры;
  • расширенное вещественное бит 79 – знак мантиссы, биты 78 – 64 – 15-битная экспонента + 16 383, биты 63 – 0 – 64-битная мантисса с первой цифрой (то есть бит 63 равен 1).

Параметры чисел приведены в таблице 3

Таблица 3..

Типы данных FPU

Тип данных Бит Значащих цифр Пределы
Целое слово –32768 ¸ 32767
Короткое целое –2*109 ¸ 2*109
Длинное целое -9*1018 ¸ 9*1018
Упакованное десятичное -99..99 ¸ +99..99 (18 цифр)
Короткое вещественное ±1.18*10-38 ¸ ±3.40*1038
Длинное вещественное 15–16 ±2.23*10-308 ¸ ±1.79*10308
Расширенное вещественное ±3.37*10-4932 ¸ ± 1.18*104932

FPU выполняет все вычисления в 80-битном расширенном формате, а 32- и 64-битные числа используются для обмена данными с основным ом и памятью.

Кроме обычных чисел формат IEEE предусматривает несколько специальных случаев, которые могут получаться в результате математических операций и над которыми также можно выполнять некоторые операции

  • положительный ноль все биты числа сброшены в ноль;
  • отрицательный ноль знаковый бит – 1, все остальные биты – нули;
  • положительная бесконечность знаковый бит – 0, все биты мантиссы – 0, все биты экспоненты – 1;
  • отрицательная бесконечность знаковый бит – 1, все биты мантиссы – 0, все биты экспоненты – 1;
  • денормализованные числа все биты экспоненты – 0 (используются для работы с очень маленькими числами – до 10-16445 для расширенной точности);
  • неопределенность знаковый бит – 1, первый бит мантиссы (первые два для 80-битных чисел) – 1, а остальные – 0, все биты экспоненты – 1;
  • не-число типа SNAN (сигнальное) все биты экспоненты – 1, первый бит мантиссы – 0 (для 80-битных чисел первые два бита мантиссы – 10), а среди остальных бит есть единицы;
  • не-число типа QNAN (тихое) все биты экспоненты – 1, первый бит мантиссы (первые два для 80-битных чисел) – 1, среди остальных бит есть единицы. Неопределенность – один из вариантов QNAN;

Все остальные числа неподдерживаемые.

Остальные форматы данных FPU также допускают неопределенность – единица в старшем бите и нули в остальных для целых чисел, и старшие 16 бит – единицы для упакованных десятичных чисел.

Регистры FPU

FPU предоставляет восемь регистров для хранения данных и пять вспомогательных регистров.

Регистры данных (R0 – R7) не адресуются по именам, как регистры основного а. Вместо этого эти восемь регистров рассматриваются как стек, вершина которого называется ST, а более глубокие элементы – ST(1), ST(2) и так далее до ST(7). Если, например, в какой-то момент времени регистр R5 называется ST (рисунок. 13), то после записи в этот стек числа оно будет записано в регистр R4, который станет называться ST, R5 станет называться ST(1) и т.д.

  Регистровый стек     Тэги
     
R0 З Характеристика Мантисса ST(5)      
R1       ST(6)      
R2       ST(7)      
R3       ST TOP = 3    
R4       ST(1)      
R5       ST(2)      
R6       ST(3)      
R7       ST(4)      
  Регистр состояния          
             
SW B C3 TOP C2 C1 C0 ES SF PE UE OE ZE DE IE          
  Регистр управления          
           
CW ´ ´ ´ ´ RC PC ´ ´ PM UM OM ZM DM IM          
  Слово тэгов          
           
TW Тэг R7 Тэг R6 Тэг R5 Тэг R4 Тэг R3 Тэг R2 Тэг R1 Тэг R0          
             
IP Указатель команды        
             
DP Указатель данных        
                                                     

Рис. 13. Регистры FPU

Регистр состояний SR содержит слово состояния FPU. Формат регистра приведен на рис. . Биты регистра состояний имеют следующее назначение.

В – занятость FPU – этот флаг существует для совместимости с 8087, и его значение всегда совпадает с ES;

ТОР – число от 0 до 7, показывающее, какой из регистров данных R0 – R7 в настоящий момент является вершиной стека;

биты С3, С2, С1, С0 – условные флаги, устанавливаются в результате сравнений и проверок;

ES – общий флаг ошибки – равен 1, если произошло хотя бы одно немаскированное исключение, при этом биты SF, PE, UE, OE, ZE, DE, IE уточняют, какая именно ошибка произошла;

SF – ошибка стека; Если С1 = 1, произошло переполнение ( пыталась писать в непустую позицию в стеке), если С1 = 0, произошло антипереполнение ( пыталась считать число из пустой позиции в стеке);

РЕ –результат не может быть представлен в формате с заданной точностью;

UE – результат слишком маленький;

ОЕ – результат слишком большой;

ZE– выполнено деление на ноль;

DE – выполнена операция над денормализованным числом;

IE – флаг недопустимой операции – произошла ошибка стека (SF = 1) или выполнена недопустимая операция.

Биты С0 – С3 употребляются так же, как и биты, состояния в основном процессоре, – их значения отражают результат выполнения предыдущей команды и используются для условных переходов; команды

fstsw ax

sahf

копируют их значения в регистр FLAGS так, что флаг С0 переходит в CF, С2 – в PF, а С3 – в ZF (флаг С2 теряется).

Биты 0 – 5 отражают различные ошибочные ситуации, которые могут возникать при выполнении команд FPU. Они рассмотрены в описании управляющих регистров.

Регистр управления CR служит для управления режимами работы FPU.

IC – управление бесконечностью (поддерживается для совместимости с 8087 и 80287 – вне зависимости от значения этого бита +);

RC – двухбитное поле управления округлением, возможны четыре режима округления: 00 – к ближайшему числу, 01 – к отрицательной бесконечности, 10 – к положительной бесконечности, 11 – к нулю.

PC – двухбитное поле управления точностью, управляет точностью промежуточных результатов: 00 – одинарная точность (32-битные числа), 01 – зарезервировано, 10 – двойная точность (64-битные числа), 11 – расширенная точность (80-битные числа)

Биты РМ, UM, OM, ZM, DM, IM – маски неточного результата, антипереполнения, переполнения, маска деления на ноль, денормализованного операнда, недействительной операции соответственно.

Биты 0 – 5 регистра CR маскируют соответствующие исключения – если маскирующий бит установлен, исключения не происходит, а результат вызвавшей его команды определяется правилами для каждого исключения специально.

Регистр тегов TW содержит восемь пар бит, описывающих содержание каждого регистра данных, – биты 15 – 14 описывают регистр R7, 13 – 12 – R6 и т.д. Если пара бит (тег) равна 11, соответствующий регистр пуст. 00 означает, что регистр содержит число, 01 – ноль, 10 – нечисло, бесконечность, денормализованное число, неподдерживаемое число.

Регистры FIP и FDP содержат адрес последней выполненной команды (кроме FINIT, FCLEX, FLDCW, FSTCW, FSTSW, FSTSWAX, FSTENV, FLDENV, FSAVE, FRSTOR и FWAIT) и адрес ее операнда соответственно и используются в обработчиках исключений для анализа вызвавшей его команды.

Исключения FPU

При выполнении команд FPU могут возникать шесть типов особых ситуаций, называемых исключениями. При возникновении исключения соответствующий флаг в регистре SR устанавливается в 1 и, если маска этого исключения в регистре CR не установлена, вызывается обычное прерывание INT 10h (если бит NE в регистре центрального а CR0 установлен в 1) или IRQ13 (INT 75h), обработчик которого может прочитать регистр SR, чтобы определить тип исключения (и FIP, и FDP) и команду, которая его вызвала, а затем попытаться исправить ситуацию. Если бит маски наступившего исключения в регистре CR установлен в 1, выполняются следующие действия по умолчанию

  • неточный результат результат округляется в соответствии с битами RC (на самом деле это исключение происходит очень часто. Например дробь 1/6 не может быть представлена точно десятичным вещественным числом любой точности и округляется). При этом флаг С1 показывает, в какую сторону произошло округление 0 – вниз, 1 – вверх;
  • антипереполнение результат слишком мал, чтобы быть представленным обычным числом, – он преобразуется в денормализованное число;
  • переполнение результат преобразуется в бесконечность соответствующего знака;
  • деление на ноль результат преобразуется в бесконечность соответствующего знака (учитывается и знак нуля);
  • денормализованный операнд вычисление продолжается, как обычно;
  • недействительная операция результат определяется из таблицы 12.

Таблица 12. Результаты операций, приводящих к исключениям

Операция Результат
Ошибка стека Неопределенность
Операция с неподдерживаемым числом Неопределенность
Операция с SNAN QNAN
Сравнение числа с NAN C0 = C2 = C3 = 1
Сложение бесконечностей с одним знаком или вычитание – с разным Неопределенность
Умножение нуля на бесконечность Неопределенность
Деление бесконечности на бесконечность или 0/0 Неопределенность
Команды FPREM и FPREM1, если делитель – 0 или делимое – бесконечность Неопределенность и C2 = 0
Тригонометрическая операция над бесконечностью Неопределенность и C2 = 0
Корень или логарифм, если x < 0, log(x+1), если x < -1 Неопределенность
FBSTP, если регистр-SRS пуст, содержит NAN, бесконечность или превышает 18 десятичных знаков Десятичная неопределенность
FXCH, если один из операндов пуст Неопределенность

СИСТЕМА КОМАНД

В таблице П1. приложения 1 приведено описание команд процессора 8086. Заметим, что остальные процессоры семейства 80х86 совместимы с 8086 программно, поэтому приведенный набор команд можно считать базовым для любого из процессоров семейства. Каждая запись таблице содержит информацию о том, какие признаки из регистра FLAGS процессора 8088 и как изменяются, при этом приняты следующие обозначения признаков: ? – неопределен после операции; * – изменился в зависимости от результатов выполнения команды; 0 - всегда сброшен; 1 - всегда установлен.

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

В таблице П2 приложения 2 приведено описание команд арифметического сопроцессора. Каждая запись в таблице содержит указание на тип процессора, в котором реализована данная команда.

Наши рекомендации