Функции и принципы работы математического сопроцессора

Основные понятия математического сопроцессора. Изучение принципа работы и функций устройства: точное деление, вычисление тригонометрических функций, извлечение квадратного корня и нахождение логарифма. Расчет себестоимости и экономической эффективности.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 15.05.2014
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Введение

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

Целью дипломной работы являются изучение темы:

- изучение функций и принципа работы математического сопроцессора.

Для достижения этой цели необходимо решить ряд задач, а именно:

- изучить основные понятия математического сопроцессора;

- изучить принцип работы математического сопроцессора;

- изучить функции математического сопроцессора;

- рассчитать себестоимость рабочего места и экономическую эффективность;

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

Математический сопроцессор выполняют операции с плавающей запятой, которые потребовали бы больших затрат машинного времени от основного процессора. Выигрыш можно получить только при выполнении программ, написанных с расчетом на использование сопроцессора. Сопроцессоры выполняют такие сложные операции как точное деление, вычисление тригонометрических функций, извлечение квадратного корня и нахождение логарифма в 10-100 раз быстрее основного процессора. Точность результатов при этом значительно выше той, которая обеспечивается вычислителями, входящими в состав самих процессоров. Операции сложения, вычитания и умножения выполняются основным процессором и не передаются сопроцессору.

математический сопроцессор деление тригонометрический

1. Общая часть

1.1 История математических сопроцессоров

С учетом того, что большинство современных приложений и игр требуют огромного количества вычислений именно над вещественными числами (числа с плавающей точкой), то общая производительность процессора зависит от того, насколько быстро он их обрабатывает. Для этих целей в процессоре существует специальный модуль, получивший название Floating-Point Unit (FPU) - модуль вычислений с плавающей точкой. В то же время производительность этого модуля зависит не только от рабочей частоты процессора, но и от его конструктивных особенностей.

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

При работе с вещественными числами существует тот же нюанс, что и в целочисленных операциях - команда не может быть выполнена за один такт ядра процессора. И если в 486-х процессорах для обработки целочисленных команд уже начал использоваться пятиступенчатый конвейер, то FPU был по-прежнему не конвейерного типа, т.е. следующая команда с плавающей точкой всегда должна была дожидаться выполнения предыдущей. Это существенно тормозило работу процессора с мультимедийными приложениями. А последние в то время уже начали стремительно набирать обороты в своих "запросах". Поэтому вполне естественно, что Intel, начиная с процессоров Pentium, стала применять конвейер не только в целочисленных, но и в вещественных операциях. Корпорация AMD, в свою очередь, пошла по несколько иному пути - вместо конвейеризации FPU она начала внедрять в свою продукцию технологию 3DNow, которая также была направлена на повышение производительности в операциях с вещественными числами. Эта технология столкнулась с множеством проблем в своей реализации. Думаю, многие помнят, как AMD K6-2, призванный конкурировать с Pentium II в целочисленных операциях, на процентов тридцать отставал от него в обработке вещественных чисел.

В Athlon'ах и последующих процессорах корпорация AMD перешла на конвейерный тип FPU. Более того, в новых процессорах AMD применила в модуле вычислений с плавающей точкой не только супер конвейеризацию, но и суперскалярность - в одном процессоре стало располагаться, грубо говоря, три модуля FPU, каждый из которых принимает участие в вычислениях с плавающей точкой. Другими словами, с выходом процессоров Athlon/Duron продукция AMD перестала уступать в скорости вычислений над вещественными числами своему конкуренту - корпорации Intel. А это сыграло очень существенную роль в расстановке сил этих извечных соперников на современном процессорном рынке.

FPU (Floating Point Unit) используется для ускорения и упрощения вычислений с плавающей точкой.

Сопроцессор (другое название FPU) ориентирован на математические вычисления - в нем отсутствуют операции с битами, зато расширен набор математических функций: тригонометрические, логарифм и т.д.

До некоторых моделей 80486 FPU исполнялся в виде отдельной микросхемы, устанавливаемой опционально. В некоторых 486 и во всех Pentium (и выше), FPU интегрирован в процессор, поэтому можно считать, что он присутствует в каждом более-менее современном компьютере. Начиная с Pentium Pro FPU имеет дополнительные команды, упрощающие сравнение чисел. В любом случае, если FPU недоступен, или не поддерживает какие-либо ф-ции, то возможна их программная эмуляция.

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

Первым математическим сопроцессором для персонального компьютера IBM стал i8087 производства Intell, который появился в 1980 году. Со временем, помимо чисто Intell-x сопроцессоров, появились сопроцессор и ряда других фирм. CYRIX предлагал один из самых быстрых сопроцессоров, основанных на классической архитектуре. Причем гарантировалась полная совместимость с сопроцессорами Intell. Производительность этой микросхемы несколько выше потому, что все критичные по времени выполнения операции реализованы в данной микросхеме с использованием жесткой логики (аппаратный умножитель, отдельное арифметико-логическое устройство для вычисления мантиссы и т.д.). Повышение производительности особенно заметно при вычислении квадратного корня или тригонометрических функций. Он еще и точнее Intell-го.

Weitek была основана в 1981 году несколькими инженерами, покинувшими Intell. Выполнение простых операций с одинарной точностью на сопроцессоре Weitek происходит менее чем за 200 нс., тогда как сопроцессор, использующий классическую архитектуру, выполняет подобные операции за 1.5 с. Обращение к сопроцессору происходит как бы через ОЗУ. Таким образом, загрузив операнды в область памяти, соответствующей сопроцессору, следующей командой можно уже считывать результат. Применение сопроцессора Weitek имеет смысл только тогда, когда он поддерживается программным обеспечением. В связи с этим сопроцессор Weitek находит достаточно ограниченное применение.

Линейка математических сопроцессоров, выпускаемых компанией Intel для повышения скорости и точности выполнения операций с плавающей запятой. Сопроцессоры имели схожую архитектуру с сопроцессорами Intel 8087, но не были совместимы по разъемам и работали асинхронно с центральным процессором.

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

Они предназначались для линейки процессоров 80286, также некоторые сопроцессоры использовались с процессорами Intel 80386. Более того, до 1987 года, пока не были выпущены математические сопроцессоры Intel 80387, это были единственные сопроцессоры, способные работать с процессорами Intel 80386. Они могли использоваться даже с процессорами Cyrix Cx486SLC, но после выхода сопроцессоров Intel 80387 его использование стало предпочтительнее, так как он выигрывал у Intel 80287 по всем показателям.

В зависимости от модификации, сопроцессоры работали на тактовой частоте - от 5 до 20 МГц. На рис.1 показан математический сопроцессор Intel 80387.

Рис.1 Математический сопроцессор Intel 80387

Линейка математических сопроцессоров, производимых компанией Intel с 1987 года. Сопроцессоры значительно расширяли возможности процессоров 80386 по обработке чисел с плавающей запятой, предоставляя более 50 новых инструкций, и соответствовали требованиям стандарта IEEE 754-1985.

Для процессоров 80386SX разрабатывалась своя серия модификаций сопроцессоров 80387 с индексом SX, так как процессоры 80386SX имели 16-разрядную внешнюю шину данных.

Сопроцессоры 80387 работали на той же частоте, что и процессоры 80386, и поддерживали тактовые частоты - 16, 20, 25 и 33 МГц. Эта линейка сопроцессоров была быстрее сопроцессоров 80287, и программы, разработанные для сопроцессоров 80287, были совместимы с новыми версиями сопроцессоров, так что они быстро вытеснили своих предшественников.

Компания Intel несколько запоздала с выпуском математического сопроцессора, поэтому часто с процессорами 80386 использовались математические сопроцессоры 80287.

Производительность такой связки была значительно меньше возможностей, достигнутых впоследствии связкой 386-ой процессор-387-ой сопроцессор, но на тот момент особого выбора не было. На рис.2 показан математический сопроцессор Intel80387.

Рис.2 Математический сопроцессор Intel80387

Линейка математических сопроцессоров, выпускаемых компанией Intel с сентября 1991 года. На рис.3 показан математический сопроцессор Intel 80487.

Рис.3 математический сопроцессор Intel80487

Использовались совместно с процессорами Intel 486 SX для ускорения обработки операций с вещественными числами.

На самом деле, сопроцессор 80487 был больше, чем сопроцессор. Он представлял собой полноценный процессор Intel 486 DX с несколько измененной распиновкой.

1.2 Математический сопроцессор

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

Рис.1.Математический сопроцессор

Несмотря на то, что практически все процессоры, начиная с 486-го, оснащены встроенным сопроцессором, их быстродействие может изменяться. Исторически сложилось так, что сопроцессоры производства Intel работают быстрее, чем сопроцессоры AMD и Cyrix, однако в последнее время ситуация начинает изменяться.

Модуль операций с плавающей запятой (или с плавающей точкой) - часть процессора для выполнения широкого спектра математических операций над вещественными числами.

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

Математические сопроцессоры называют ещё процессорами с плавающей запятой, потому что они особенно ярко проявляют свои возможности в этой области математики. Числа с плавающей запятой часто используются в научных расчетах и представляются, как правило, мантиссой и ординатой. Преимущество, получаемое от установки математического сопроцессора, зависит от того какие задачи решаются на компьютере. Согласно утверждению Intel сопроцессор может уменьшить время выполнения математических операций, таких как умножение, деление, возведение в степень на 80% и более. Скорость выполнения простых операций, таких как сложение и вычитание практически не уменьшается.

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

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

Микропроцессоры 8088, 80286, 80386 сконструированы так, что они позволяют использовать арифметические сопроцессоры 8087, 80287, 80387 фирмы "Intel"-соответственно. Более поздние модели микропроцессоров имеют встроенные сопроцессоры.

С практической точки зрения, производительность системы, касающейся подготовки текстов и ведения базы данных - функций, не требующих сложных математических расчётов, не может быть улучшена математическим сопроцессором. Сопроцессор и главный микропроцессор могут работать на разных тактовых частотах (от собственных тактовых генераторов).

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

Простым "целочисленным" процессорам для работы с вещественными числами и математическими операциями требуются соответствующие процедуры поддержки и время для их выполнения. Модуль операций с плавающей запятой поддерживает работу с ними на уровне примитивов -- загрузка, выгрузка вещественного числа (из специализированных регистров) или математическая операция над ними выполняется одной командой, за счёт этого достигается значительное ускорение таких операций. Внутри FPU числа хранятся в 80-битном формате с плавающей запятой, для записи же или чтения из памяти могут использоваться:

- вещественные числа в трёх форматах: коротком (32 бита), длинном (64 бита) и расширенном (80 бит).

- двоичные целые числа в трёх форматах: 16, 32 и 64 бита.

- упакованные целые десятичные числа (BCD) числа - длина максимального числа составляет 18 упакованных десятичных цифр (72 бита).

FPU также поддерживает специальные численные значения:

- деморализованные вещественные числа -- числа, которые меньше минимального нормализованного числа. При формировании такого значения в некотором регистре стека в соответствующем этому регистру теге регистра TWR формируется специальное значение (10);

- бесконечность (положительная и отрицательная), возникает при делении на нуль ненулевого значения, а также при переполнениях. При формированиитакого значения в некотором регистре стека в соответствующем этому регистру теге регистра TWR формируется специальное значение (10).

-нечисло, различают два вида нечисел:

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

- спокойные (тихие) нечисла. Сопроцессор может формировать спокойные нечисла в качестве реакции на определённые исключения, например число вещественной неопределённости.

- нуль - в формате с плавающей запятой, нуль также считается специальным значением.

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

Специальный процессор, который настроен на выполнение математических операций и реализует их во много раз быстрее, чем центральный процессор. Таким образом, была получена возможность наращивать производительность центрального процессора за счет специального модуля - математического сопроцессора. Не в пример центральному процессору, математический сопроцессор не держит под управлением основную массу цепей компьютера. Наоборот, вся деятельность математического сопроцессора определяется центральным процессором, который может посылать математическому сопроцессору команды на выполнение программ и формирование результатов. В обычном режиме центральный процессор выполняет все функции компьютера. И лишь, когда встречается задача, с которой лучше справится математический сопроцессор, ему выдаются данные и команды, а центральный процессор ожидает результаты. К таким задачам относятся, например, математические операции между вещественными числами (операции между числами с плавающей запятой), где числа представлены мантиссой и ординатой (десятичная степень числа, определяющая положение десятичной запятой). Если раньше, в компьютерах первых поколений (i80386, i80486) модуль математического сопроцессора устанавливался на материнскую плату в виде отдельного чипа, то в современных компьютерах использование математического сопроцессора, как отдельного чипа, не требуется, поскольку он уже встроен в центральный процессор. Преимущества, которые вы получаете от использования математического сопроцессора, зависят от того, какие задачи решаются на персональном компьютере.

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

1.3 Математический сопроцессор х87

Математический сопроцессор x87 - это специальный набор инструкций для работы с математическими вычислениями, являющийся подмножеством архитектуры процессоров x86. Такое название он получил, потому что первоначальные отдельные математические сопроцессорные чипы имели названия, заканчивающиеся на 87. Как и другие расширения базового набора инструкций процессора, эти инструкции не являются строго необходимыми для построения рабочей программы, но будучи аппаратно реализованными, общие математические задачи они позволяют выполнять гораздо быстрее. Например, в наборе инструкции x87 присутствуют команды для расчета значений синуса или косинуса.

1.4 Математические сопроцессоры Intel семейства x86

Для математических сопроцессоров семейства x86 с 8086,8088 по 386, модуль операций с плавающей запятой был выделен в отдельную микросхему, называемую математическим сопроцессором.

Математический сопроцессор не является полноценным процессором, так как не умеет делать многих необходимых для этого операций (например, не умеет работать с программой и вычислять адреса памяти), являясь всего лишь придатком центрального процессора. Одна из схем взаимодействия центрального процессора и сопроцессора, применяемая, в частности, в x86 сопроцессорах, реализуется следующим образом:

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

- часть командных кодов центрального процессора зарезервирована для сопроцессора, он следит за потоком команд, игнорируя другие команды. Центральный процессор, наоборот, игнорирует команды сопроцессора, занимаясь только вычислением адреса в памяти, если команда предполагает к ней обращение. Центральный процессор делает цикл фиктивного считывания, позволяя сопроцессору считать адрес с адресной шины. Если сопроцессору необходимо дополнительное обращение к памяти (для чтения или записи результатов), он выполняет его через захват шины;

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

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

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

Для процессоров Intel486SX также выпускался сопроцессор Intel487SXно, фактически, он являлся процессором Intel486DX и при его установке процессор Intel486SX отключался.

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

Настоящая интеграция FPU c центральным процессором началась только в процессорах Pentium модели MMX.

1.5 Математические сопроцессоры x86 от сторонних производителей

Широкое распространение в соответствующий период получили сопроцессоры для платформы x86, выпускавшиеся компанией Weitek -- ею были выпущены 1167, 2167 в виде набора микросхем и микросхемы 3167, 4167, для процессоров 8086, 80286, 80386, 80486, соответственно. По сравнению с сопроцессорами от Intel они обеспечивали в 2-3 раза большую производительность, но обладали несовместимым программным интерфейсом, реализованным через технологию memory-mapping. Она сводилась к тому, что основной процессор должен был записывать информацию в те или иные области памяти, контролируемые Weitek-овским сопроцессором (собственно, оперативной памяти там, конечно не было). Конкретный адрес, куда производилась запись, интерпретировался в качестве той или иной команды. Несмотря на несовместимость, сопроцессоры от Weitek были широко поддержаны как разработчиками программного обеспечения, так и производителями материнских плат, предусматривавших на них гнёзда для установки такой микросхемы.

Ряд других компаний также выпускал различные несовместимые математические сопроцессоры, реализуя интерфейс к ним через порты ввода-вывода или прерывания BIOS(базовая система ввода и вывода), но они не получили такого широкого распространения.

Компании-производители клонов выпускали совместимые с 80287 80387 сопроцессоры, работавшие быстрее аналогичных интеловских. Среди этих компаний можно упомянуть Cyrix, AMD, Chips&Technologies (C&T). Иногда система команд этих сопроцессоров расширялась несколькими несовместимыми, например, аналог 80287 от C&T содержал команды для работы с вектором из четырёх значений с плавающей точкой. Серьёзной поддержки от производителей программного обеспечения эти расширенные команды не получили.

Процессоры EMC87 от фирмы Cyrix могли работать как в режиме программной совместимости с Intel 80387, так и в собственном несовместимом режиме программирования. Для них обеспечивалась аппаратная совместимость с разъёмом 80387-го сопроцессора.

В СССР выпускалась микросхема (КМ)1810ВМ87, которая являлась аналогом 8087

1.6 Другие платформы

Аналогично,материнские платы ПК, построенных на процессорах Motorola, до разработки этой фирмой процессора MC68040 (в который сопроцессор был встроен) содержали математический сопроцессор, который предоставлен на рис. 5.

Рис. 5

Как правило, в качестве FPU использовался сопроцессор 68881 16 МГц или 68882 25 МГц. Практически любой современный процессор имеет встроенный сопроцессор.

Компания Weitek также выпускала математические сопроцессоры для платформ 68000 и MIPS.

1.7 Устройство FPU

Все процессоры Intel и AMD, начиная с486DX, имеют встроенный математический сопроцессор, и в отдельном сопроцессоре не нуждаются (за исключением Intel486SX). Тем не менее, термин x87 всё ещё используется для выделения той части инструкций процессора, которая занимается вычислениями с использованием плавающей запятой; компиляторы могут использовать эти инструкции для производства кода, который работает быстрее, нежели тот, что использует вызовы к библиотекам для выполнения операций с плавающей запятой.

Инструкции сопроцессора x87 совместимы со стандартом IEEE-754.

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

Сопроцессор x87 организует свои регистры не как массив, как большинство других архитектур, а как регистровый стек, работающий по принципу обратной польской записи. Это означает, что в один момент времени, только два верхних регистра доступны для проведения операций, а доступ к другим регистрам требует манипуляций со стеком. Хотя такая организация получается и удобной для программистов, она делает трудоёмким построение эффективного кода x87 для компиляторов.

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

1.8 Классификация команд математического сопроцессора

Классификация команд математического сопроцессора:

- команды передачи данных;

- вещественные данные;

- целочисленные данные;

- десятичные данные;

- загрузка констант (0, 1, число Пи, log2(10), log2(e), lg(2), ln(2));

-обмен;

- условная пересылка (Pentium II/III);

- команды сравнения данных;

-анализ;

- c нулём;

- условное сравнение (Pentium II/III);

-арифметические команды;

- вещественные данные: сложение, вычитание, умножение, деление;

- целочисленные данные: сложение, вычитание, умножение, деление;

- вспомогательные арифметические команды (квадратный корень, модуль, изменение знака, выделение порядка и мантиссы);

- трансцендентные команды;

- тригонометрия: синус, косинус, тангенс, арктангенс;

- вычисление логарифмов и степеней;

- команды управления;

-инициализация сопроцессора;

- работа со средой;

- работа со стеком;

- переключение режимов.

1.9 Типы математических сопроцессоров

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

Таблица 1

Главные типы данных и команды математического сопроцессора

Команды

Тип

Разрядность

Загрузка, запоминание, сравнение, сложение, вычитание, умножение, деление

Целое

16,32,64 бит

Загрузка, запоминание

Упакованное

десятичное

18 цифр

Загрузка, запоминание, сложение, вычитание, умножение, деление

Действительное

32,64 бит

Сложение, вычитание, умножение, деление, извлечение квадратного корня и других операций

Промежуточное

действительное

80 бит

1.10 Система команд сопроцессора

Команды передачи данных

Fld источник - загрузка вещественного числа из памяти в вершину стека сопроцессора;

Fst приемник-сохранение вещественного числа из вершины стека сопроцессора в память. Сохранение числа в памяти не сопровождается выталкиванием его из стека, то есть текущая вершина стека сопроцессора не изменяется (поле top не изменяется);

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

Fild источник - загрузка целого числа из памяти в вершину стека сопроцессора;

Fist приемник - сохранение целого числа из вершины стека сопроцессора в память. Сохранение целого числа в памяти не сопровождается выталкиванием его из стека, то есть текущая вершина стека сопроцессора не изменяется;

Fistp приемник - сохранение целого числа из вершины стека в память. Аналогично сказанному выше о команде fstp, последним действием команды является выталкивание числа из стека с одновременным преобразованием его в целое значение.

Fbld источник - загрузка десятичного числа из памяти в вершину стека сопроцессора;

Fbstp приемник - сохранение десятичного числа из вершины стека сопроцессора в области памяти. Значение выталкивается из стека после преобразования его в формат десятичного числа.

Fxch st(i) - обмен значений между текущей вершиной стека и регистром стека сопроцессора st(i).

Команды загрузки констант

Fldz - загрузка нуля в вершину стека сопроцессора;

Fldl - загрузка единицы в вершину стека сопроцессора;

Fldpi - загрузка числа p в вершину стека сопроцессора;

Fldl2t - загрузка двоичного логарифма десяти в вершину стека сопроцессора;

Fldl2e - загрузка двоичного логарифма е в вершину стека сопроцессора;

Fldlg2 - загрузка десятичного логарифма двух в вершину стека сопроцессора;

Fldln2 - загрузка натурального логарифма двух в вершину стека сопроцессора.

Команды сравнения данных

Fcom [операнд_в_памяти] - команда без операндов сравнивает два значения: одно находится в регистре st(0), другое в регистре st(1). Если указан [операнд_в_памяти], то сравнивается значение в регистре st(0) стека сопроцессора со значением в памяти;

Fcomp операнд - команда сравнивает значение в вершине стека сопроцессора st(0) со значением операнда, который находится в регистре или в памяти. Последним действием команды является выталкивание значения из st(0);

Fcompp операнд - команда аналогична по действию fcom без операндов, но последним ее действием является выталкивание из стека значений обоих регистров st(0) и st(1);

Ficom операнд_в_памяти - команда сравнивает значение в вершине стека сопроцессора st(0) с целым операндом в памяти. Длина целого операнда 16 или 32 бита, то есть целое слово и короткое целое;

Ficomp операнд - команда сравнивает значение в вершине стека сопроцессора st(0) с целым операнлом в памяти. После сравнения и установки бит с3-с0 команда выталкивает значение из st(0). Длина целого операнда 16 или 32 бита, то есть целое слово и короткое целое.

Ftst - команда не имеет операндов и сравнивает значения в st(0) со значением 00.

Fucom st(i) - команда сравнивает значения (без учета их порядков) в регистрах стека сопроцессора st(0) и st(i);

Fucomp st(i) - команда сравнивает значения (без учета их порядков) в регистрах стека сопроцессора - в st(0) и st(i). Последним действием команды является выталкивание значения из вершины стека;

Fcompp st(i) - команда сравнивает значения (без учета их порядков) в регистрах стека сопроцессора - в st(0) и st(i). Последние два действия команды одинаковы - выталкивание значения из вершины стека.

Арифметические команды

Целочисленные арифметические команды

Fiadd источник - команда складывает значения st(0) и целочисленного источника, в качестве которого выступает 16- или 32-разрядный операнд в памяти. Результат сложения запоминается в регистре стека сопроцессора st(0);

Fisub источник - команда вычитает значение целочисленного иточника из st(0). Результат вычитания запоминается в регистре стека сопроцессора st(0). В качестве источника выступает 16- и ли 32-разрядный целочисленный операнд в памяти;

Fimul источник - команда умножает значение целочисленного источника на содержимое st(0). Результат умножения запоминается в регистре стека сопроцессора st(0). В качестве источника выступает 16-ти или 32-разрядный целочисленный операнд в памяти;

Fidiv источник - команда делит содержимое st(0) на значение целочисленного источника. Результат деления запоминается в регистре стека сопроцессора st(0). В качестве источника выступает 16- или 32-разрядный целочисленный операнд в памяти.

Fisubr источник - команда вычитает значение st(0) из целочисленного источника. Результат вычитания запоминается в регистре стека сопроцессора st(0). В качестве источника выступает 140 или 32- разрядный целочисленный операнд в памяти;

Fidivr источник - команда делит значение целочисленного источника на содержимое st(0). Результат деления запоминается в регистре стека сопроцессора st(0). В качестве источника выступает 16- или 32-разрядный целочисленный операнд в памяти.

Вещественные арифметические команды

Fadd - команда складывает значение в st(0) и st(1). Результат сложения запоминается в регистре стека сопроцессора st(0);

Fadd источник - команда складывает значения st(0) и источника, представляющего адрес ячейки памяти. Результат сложения запоминается в регистре стека сопроцессора st(0);

Fadd st(i),st - команда складывает значение в регистре стека сопроцессора st(0) со значением в вершине стека st(0). Результат сложения запоминается в регистре t(0).

Fadd st(i),st - команда поизводит сложение вещественных операндов аналогично команде fadd st(i), st. Последним действием команды является выталкивание значения из вершины стека сопроцессора st(0). Результат сложения остается в регистре st(i-1).

Fsub - команда вычитает значение в st(1) из значения в st(0). Результат вычитания запоминается в регистре стека сопроцессора st(0). Результат вычитания запоминается в регистре стека сопроцессора st(0);

Fsub источник - команда вычитает значение источника из значения в st(0). Источник представляет адрес ячейки памяти, содержащей допустимое вещественное число. Результат сложения запоминается в регистре стека сопроцессора st(0);

Fsub st(i),st - команда вычитает значение в вершине стека st(0) из значения в регистр стека сопроцессора st(i). Результат вычитания запоминается в регистре стека сопроцессора st(i);

Fsubp st(i), st - команда вычитает вещественные операнды аналогично команде fsubp st(i),st. Последним действием команды является выталкивание значения из вершины стека сопроцессора st(0). Результат вычитания остается в регистре st(i-1).

Fsubr st(i), st - команда вычитает значения в вершине стека st(0) из значения в регистре стека сопроцессора st(i). Результат вычитания запоминается в вершине стека сопроцессора - регистре st(0);

Fsubrp st(i), st - команда производит вычитание подобно команде fsubr st(i),st. Последним действием команды является выталкивание значения из вершины стека сопроцессора st(0). Результат вычитания остается в регистре st(i-1).

Fmul - команда не имеет операндов. Умножает значения в st(0) на содержимое в st(1). Результат умножения запоминается в регистре стека сопроцессора st(0);

Fmul st(i) - команда умножает значение в st(0) на содержимое регистра стека st(i). Результат умножения запоминается в регистре стека сопроцессора st(0);

Fmul st(i), st - команда умножает значения в st(0) на содержимое произвольного регистра стека st(i). Результат умножения запоминается в регистре стека сопроцессора st(i);

Fmulp st(i), st - команда производит умножение подобно команде fmul st(i), st. Последним действием команды является выталкивание значения из вершины стека сопроцессора st(0). Результат умножения остается в регистре st(i-1).

Fdiv - команда (без операндов ) делит содержимое регистра st(0) на значение регистра сопроцессора st(1). Результат деления запоминается в регистре стека сопроцессора st(0);

Fdiv st(i) - команда делит содержимое регистра st(0) на содержимое регистра сопроцессора st(i). Результат деления запоминается в регистре стека сопроцессора st(0);

Fdiv st(i), st - команда производит деление аналогично команде fdiv st(i), но результат деления запоминается в регистре стека сопроцессора st(i);

Fdivp st(i), st - команда производит деление аналогично команде Fdiv st(i), st. Последним действием команды является выталкивание значения из вершины стека сопроцессора st(0). Результат деления остается в регистре st(i-1).

Fdivr st(i), st -- команда делит содержимое регистра st(i) на содержимое вершины регистра сопроцессора st(0). Результат деления запоминается в регистре стека сопроцессора st(0);

Fdivrp st(i), st -- команда делит содержимое регистра st(i) на содержимое вершины регистра сопроцессора st(0). Результат деления запоминается в регистре стека сопроцессора st(i), после чего производится выталкивание содержимого st(0) из стека. Результат деления остается в регистре st(i-1).

Дополнительные арифметические команды

Fsqrt - вычисление квадратного корня из значения, находящегося в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат вычисления помещается в регистр st(0). Следует отметить, что данная команда обладает определенными достоинствами. Во-первых, результат извлечения достаточно точен, во-вторых, скорость исполнения чуть больше скорости выполнения команды деления вещественных чисел fdiv;

Fabs - вычисление модуля значения, находящегося в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат вычисления помещается в регистр st(0);

Fchs - изменение знака значения, находящегося в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат вычисления помещается обратно в регистр st(0). Отличие команды fchs от команды fabs в том, что команда fchs только инвертирует знаковый разряд значения в регистре st(0), не меняя значения остальных бит. Команда вычисления модуля fabs при наличии отрицательного значения в регистре st(0), наряду с инвертированием знакового ряда, выполняет изменение остальных бит значения таким образом, чтобы в st(0) получилось соответствующее положительное число.

Fxtract - команда выделения порядка и мантиссы значения, находящегося в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат выделения помещается в два регистра стека - мантисса в st(0), а порядок в st(1). При этом мантисса представляется вещественным числом с тем же знаком, что и у исходного числа, и порядком равным нулю. Порядок, помещенный в st(1), представляется как истинный порядок, то есть без константы смещения, в виде вещественного числа со знаком и соответствует величине p формулы A=(±M)*N±(p).

Fscale - команда масштабирования - изменяет порядок значения, находящегося в вершине стека сопроцессора - регистре st(0) на величину в st(1). Команда не имеет операндов. Величина в st(1) рассматривается как число со знаком. Его прибавление к полю порядка вещественного числа в st(0) означает его умножение на величину 2st(0).

Frndint - команда округления до целого значения - округляет значение находящееся в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов.

Команды трансцендентных функций

Fcos - команда вычисляет косинус угла находящийся в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат возвращается в регистр st(0).

Fsin -- команда вычисляет синус угла находящийся в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат возвращается в регистр st(0).

Fsincos -- команда вычисляет синус и косинус угла находящиеся в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат возвращается в регистры st(0) и st(1). При этом синус помещается в st(0), а косинус в st(1).

Fptan -- команда вычисляет частичный тангенс угла находящийся в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат возвращается в регистры st(0) и st(1).

Fpatan -- команда вычисляет частичный арктангенс угла находящийся в вершине стека сопроцессора - регистре st(0). Команда не имеет операндов. Результат возвращается в регистры st(0) и st(1).

Fprem - команда получения частичного остатка от деления. Исходные значения делимого и делителя размещаются в стеке - делимое в st(0), делитель в st(1). Делитель рассматривается как некоторый модуль. Поэтому в результате работы команды получается остаток от деления по модулю. Но произойти это может не сразу, так как этот результат, в общем случае, достигается за несколько производимых подряд обращений к команде fprem. Это происходит, если значения операндов сильно различаются. Физическая работа команды заключается в реализации хорошо известного действия: деления в столбик. При этом каждое промежуточное деление осуществляется отдельной командой fprem. Цикл, центральное место в котором занимает команда fprem, завершается, когда очередная полученная разность в st(0) становится меньше значения модуля в st(1). Судить об этом можно по состоянию флага c2 в регистре состояния SWR:

Если с2=0, то работа команды fprem полностью завершена, так как разность st(0) меньше значения модуля в st(1);

Если с2=1, то необходимо продолжить выполнение команды fprem, так как разность st(0) больше значения модуля в st(1);

F2xm1 - команда вычисления значения функции y=2x-1. Исходное значение x размещается в вершине стека сопроцессора в регистре st(0) и должно лежать в диапазоне -1ЈxЈ1. Результат y замещает x в регистре st(0). Эта команда может быть использована для вычисления различных показательных функций.

Fy12x -- команда вычисления значения функции z=ylog2(x). Исходное значение х размещается в вершине стека сопроцессора, а исходное значение y - в регистре st(1). Значение х должно лежать в диапазоне 0ЈxЈ+Ґ, а значение у - в диапазоне -ҐЈуЈ+Ґ. Перед тем как осуществить запись результата z в вершину стека, команда fy12x выталкивает значение х и у из стека и только после этого производит запись z в регистр st(0).

Fy12xp1 - команда вычисления значения функции z = ylog2(x+1). Исходное значение х размещается в вершине стека сопроцессора - регистре st(0), а исходное значение y - в регистре st(1). ). Значение х должно лежать в диапазоне 0ЈxЈ1-1/Ц2, а значение у - в диапазоне -ҐЈуЈ+Ґ. Перед тем как осуществить запись результата z в вершину стека, команда fy12xp1 выталкивает значение х и у из стека и только после этого производит запись z в регистр st(0).

Команды управления сопроцессором

Wait / fwait - команда ожидания, предназначена для синхронизации работы процессора и сопроцессора.

Finit / fninit - команда инициализации сопроцессора.

2. Специальная часть

2.1 Подключение математического сопроцессора

Если на персональном компьютере выполняется большой объем вычислений, можно увеличить производительность компьютера, подключив к нему арифметический сопроцессор. Для некоторых задач установка сопроцессора может ускорить их решение в десятки раз.

В данное время многие персональные компьютеры продаются с уже установленными сопроцессорами. Чтобы узнать, установлен ли на компьютере сопроцессор, можно воспользоваться любой диагностической программой, например, CheckIt или Microsoft Diagnostics.

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

При выборе математического сопроцессора, необходимо убедится, что он совместим центральным процессором и соответствует стандарту ANSI/IEEE-754-1985. Лучше всего ознакомиться с документацией на системную плату и сопроцессор. В табл.2 перечислены совместимые пары центральных процессоров и арифметических сопроцессоров.

Таблица 2

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

Центральный процессор

Арифметический сопроцессор

80386DX

80387DX, Weitek 3167

80386SX

80387SX

80486SX

80487SX

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

Таблица 3

Модели математических сопроцессоров и их тактовая частота

Математический сопроцессор

Тактовая частота, Мгц

80387DX-16

16

80387DX-20

20

80387DX-25

25

80387DX-33

33

80387DX-40

40

Отключить питание компьютера и открыть корпус. На системной плате нужно найти большую пустую панельку для сопроцессора. Для сопроцессоров 387DX эта панелька имеет квадратную форму. По ее периметру в два или три ряда расположены отверстия выводов. На рис.7 показаны отверстия выводов. Сопроцессоры серии 80387SX имеют планарные корпуса без штырьковых выводов. На рис.8 показана панель для крепления

Рис. 7 Отверстия выводов

Рис. 8. Панель для сопроцессора 80387SX

Вставить арифметический сопроцессор в панель. Обратить внимание, что первый вывод микросхемы сопроцессора должен вставляться в первый вывод панельки. Первый вывод на микросхеме сопроцессора и на панели может выделяться маленькой точкой, стрелкой, треугольником. Иногда первый вывод обозначается закругленным (спиленным) углом на корпусе сопроцессора и панели.

У микросхемы 80387DX только два ряда выводов. Вставить ее в центр панельки, так чтобы внешний ряд отверстий на панельке остался свободным. На рис.8 показан внешний вид сопроцессора, установленного в панель.

Рис. 8 Внешний вид сопроцессора

Неиспользованные выводы предназначены для установки других моделей сопроцессоров, которые имеют большее количество выводов, чем 80387DX. В качестве такого сопроцессора может быть использован, например, Weitek 3167.

Перед тем как вставлять сопроцессор в панель, нужно проверить все его выводы. Если они искривились, аккуратно выпрямите их.

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

Собрать компьютер, закрыть корпус системного блока и включить питание. Теперь проверить работу арифметического сопроцессора. Воспользуйтесь для этого программой CheckIt.

2.2 Принцип работы математического сопроцессора

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

Для вычислений сопроцессор первоначально загружает одно число в один регистр, а второе число - во второй регистр. Затем он читает программную команду, говорящую, какую операцию нужно выполнить над этими двумя числами. Эта команда запускает другую миниатюрную программу, выполняемую внутри чипа сопроцессора. Данная программа и заставляет его найти искомый результат. Множество внутренних команд сопроцессора, предназначенных для выполнения различных операций, понятных сопроцессору, называется его микрокодом (как это имеет место и для простого процессора).

Когда результат получен, его выдача говорит о готовности сопроцессора выполнить следующую программу, которая может приказать ему сделать что-либо с полученным на предыдущем шаге результатом.

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

Сопроцессор не имеет индивидуальной программы, и не может самостоятельно инициировать выборку команды из памяти. Команды сопроцессора записаны вместе с командами центрального процессора и хранятся в памяти. Выборку команды осуществляет только центральный процессор, а команда попадает в оба процессора, но каждый из них выполняет только свои команды. Если выбранная команда оказывается командой центрального процессора, то он выполняет ее обычным образом, если сопроцессор не привлекается. Он игнорирует их. Если выбранная команда - это команда сопроцессора, то действие центрального процессора зависит от специфики команды.

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

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

Для вычислений сопроцессор первоначально загружает одно число в один регистр, а второе число - во второй регистр. Затем он читает программную команду, говорящую, какую операцию нужно выполнить над этими двумя числами. Эта команда запускает другую миниатюрную программу, выполняемую внутри чипа сопроцессора. Данная программа и заставляет его найти искомый результат. Множество внутренних команд сопроцессора, предназначенных для выполнения различных операций, понятных сопроцессору, называется его микрокодом (как это имеет место и для простого процессора).

Синхронизация по командам при работе арифметического сопроцессора.

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


Подобные документы

  • Коды условий после сравнения. Элементарные трансцендентные функции. Формулы для вычисления тригонометрических функций. Команды управления сопроцессора х87. Формулы для вычисления показательный и гиперболических функций. Инициализация сопроцессора х87.

    контрольная работа [36,0 K], добавлен 01.12.2010

  • Анализ процесса обработки информации и выбор структур данных для хранения. Методы решения задачи и разработка основных алгоритмов предметной области. Структурная схема программного продукта. Описание эмуляции команды FSUB математического сопроцессора.

    курсовая работа [172,6 K], добавлен 22.02.2011

  • Представление информации в компьютере, история его развития, принципы работы, основные блоки и дополнительные устройства. Функции микропроцессора и сопроцессора, контроллеров и шин. Блок-схема устройства компьютера, разновидности и применение программ.

    курсовая работа [501,6 K], добавлен 14.12.2010

  • Модель целочисленного MMX-расширения и особенности работы сопроцессора. Отображение ММХ-регистров на регистры стека сопроцессора. Система команд MMX: команды пересылки, сложения и вычитания, сравнения, логических операций, сдвига, упаковки и распаковки.

    презентация [240,3 K], добавлен 11.12.2013

  • Общие сведения о системе Mathcad. Окно программы Mathcad и панели инструментов. Вычисление алгебраических функций. Интерполирование функций кубическими сплайнами. Вычисление квадратного корня. Анализ численного дифференцирования и интегрирования.

    курсовая работа [522,7 K], добавлен 25.12.2014

  • Математические возможности Mathcad и Microsoft Excel. Преобразование алгебраических выражений. Вычисление значения функции. Решение уравнений и систем. Вычисление значения интеграла, производных и пределов. Построение графиков функций. Работа с матрицами.

    курсовая работа [559,5 K], добавлен 15.07.2012

  • Определение возможностей математического пакета и изучение методов вычисления выражений в Mathcad. Возможности построения графиков функций одной переменной. Просмотр и способы построения графика функции одного аргумента и участков двухмерных графиков.

    контрольная работа [384,8 K], добавлен 06.03.2011

  • Создание приложения, которое будет производить построение графиков функций по заданному математическому выражению. Разработка программы "Генератор математических функций". Создание мастера функций для ввода математического выражения, тестирование.

    дипломная работа [1,7 M], добавлен 16.02.2016

  • Технология работы с программой Microsoft Excel, ее функциональные возможности и взаимодействие с другими программами Office. Методика выполнения расчетов, вычисления логарифмических и тригонометрических функции в Excel. Построение графиков и диаграмм.

    контрольная работа [1,2 M], добавлен 05.06.2009

  • Вычисление значений выражений при вещественных типах данных float и double. Нахождение суммы элементов, используя оператор цикла. Вычисление функций с разложением в степенной ряд. Работа со строками. Обработка массивов с использованием функций.

    лабораторная работа [24,3 K], добавлен 09.02.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.