assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 102
Текст из файла (страница 102)
Лучше всего для этой цели подходитпакет VC++ версии 6.0 и выше. Основную ценность в нем имеют включаемыефайлы, редактор ресурсов, работающий в составе интегрированной среды разработки, и компилятор ресурсов. Интерес могут представлять также различные утилиты, входящие в состав пакета Visual C++, например Spy++.и Приступать к разработке приложения для системы Windows на ассемблере лучше всего, имея некоторый опыт разработки приложений на языке высокого уровня. Это необходимо для понимания логики работы приложения. Когда понимание логики работы Windows-приложения достигнуто, выбор языка для егореализации приобретает в большей степени техническое значение и определяется постановкой задачи и предполагаемыми условиями ее эксплуатации.• Благодаря поддержке системой Windows консольных приложений можно малыми силами решать серьезные задачи, в том числе и по администрированиюсистемы. Консольным приложениям доступны практически все возможности,предоставляемые Win32 API, при этом для построения приложений не требуется реализовывать какие-то изощренные схемы.Глава 17Архитектураи программированиесопроцессораАрхитектураФорматы данныхСистема командИсключения и их обработкаИспользование отладчикаВ предыдущих главах мы рассматривали команды и алгоритмы обработки целочисленных данных, то есть чисел с фиксированной точкой (см.
главы 5 и 8). Дляобработки числовых данных в формате с плавающей точкой процессоры IA-32содержат специальное устройство, которое является важной частью их архитектуры.Устройства для обработки чисел с плавающей точкой появились в компьютерах давно. С точки зрения архитектуры они выглядели по-разному. Так, в архитектуре ЕС ЭВМ (аналог IBM 360/370) устройство с плавающей точкой былоестественной частью этой архитектуры со своим регистровым пространством и подсистемой команд. Архитектура компьютеров на базе процессоров вначале опиралась исключительно на целочисленную арифметику.
С ростом мощи, а главное,с осознанием разработчиками процессорной техники того факта, что их устройства могут составить достойную конкуренцию своим «большим» предшественникам, в архитектуре компьютеров на базе процессоров стали появляться устройствадля обработки чисел с плавающей точкой. В архитектуре семейства процессоровIntel 80x86 устройство для обработки чисел с плавающей точкой появилось448Глава 17. Архитектура и программирование сопроцессорав составе компьютера на базе процессора 18086/88 и получило название математический сопроцессор (далее просто сопроцессор). Выбор такого названия был обусловлен тем, что, во-первых, это устройство было предназначено для расширения вычислительных возможностей основного процессора, а во-вторых, оно былореализовано в виде отдельной микросхемы, то есть его присутствие было необязательным.
Микросхема сопроцессора для процессора 18086/88 имела название 18087.С появлением новых моделей процессоров Intel совершенствовались и сопроцессоры, хотя их программная модель осталась практически неизменной. Как отдельные (а соответственно, необязательные в конкретной комплектации компьютера)устройства сопроцессоры сохранялись вплоть до модели процессора 1386 и имелиназвание 1287 и 1387 соответственно. Начиная с модели i486 сопроцессор исполняется в одном корпусе с основным процессором и, таким образом, являетсянеотъемлемой частью компьютера.Для чего нужен сопроцессор, какие возможности добавляет он к тому, что делает основной процессор, кроме обработки еще одного формата данных? Перечислим некоторые из них.Я Полная поддержка стандартов IEEE-754 и 854 на арифметику с плавающейточкой.
Эти стандарты описывают как форматы данных, с которыми долженработать сопроцессор, так и набор реализуемых им функций.9i Поддержка численных алгоритмов для вычисления значений тригонометрических функций, логарифмов и т. п. Эта работа сопроцессора выполняется абсолютно прозрачно для программиста, что само по себе очень ценно, так как нетребует от него разработки соответствующих подпрограмм.Обработка десятичных чисел с точностью до 18 разрядов, что позволяет сопроцессору без округления выполнять арифметические операции над целыми десятичными числами со значениями до 1018.ш Обработка вещественных чисел из диапазона 3,37 • 10~4932...1,18 • 10+4932.Нужно отметить, что в последние годы разработчики компьютерной периферии все активнее освобождают центральный процессор от части вычисленийс целью более эффективной реализации специализированных операций.
Оченьярко это проявляется на рынке мультимедийного оборудования, где множестворазработчиков предлагают видеокарты с чипсетами (наборами микросхем), болееэффективно реализующими работу с графикой, чем это делает сам процессор. Несмотря на это дополнение системы целочисленных команд процессора командамисопроцессора предоставляет ряд уникальных свойств и возможностей, пренебрегать которыми было бы опрометчиво.Архитектура сопроцессораВ главе 2 мы определили место сопроцессора в архитектуре компьютера. Аппаратная реализация сопроцессора нас интересует лишь в видимой для программистачасти.
Как и в случае с основным процессором, интерес для нас представляет программная модель сопроцессора. С точки зрения программиста, сопроцессор представляет собой совокупность регистров, каждый из которых имеет свое функциональное назначение (рис. 17.1).Архитектура сопроцессораЗнакРегистры стека сопроцессора RO..R7ПорядокМантисса449Регистр теговTWRоки\\£_6DA8R5111кьV/R7<79 78151464 63Регистр управления CWR15Регистр состояния SWR15Указатель команды IPR47Указатель данных DPR47Рис.
17.1. Программная модель сопроцессораВ программной модели сопроцессора можно выделить три группы регистров.Восемь регистров RO.. .R7 составляют основу программной модели сопроцессора — стек сопроцессора. Размерность каждого регистра — 80 битов. Такая организация характерна для устройств, специализирующихся на обработке вычислительных алгоритмов.
Вспомните, как представляются математическиевыражения с использованием обратной польской записи (ПОЛИЗ). Вычисление такого выражения заключается в выборке с вершины стека очередной операции. Если это двухместная операция, то с вершины стека снимаются два операнда, над которыми и производятся действия в соответствии со снятой ранееоперацией. Более подробно представление выражения в форме ПОЛИЗ мы рассмотрим далее. Реализация численных алгоритмов на основе стека сопроцессора позволяет получить существенный выигрыш в скорости вычислений.Три служебных регистра:п регистр состояния сопроцессора SWR (Status Word Register) отражает информацию о текущем состоянии сопроцессора и содержит поля, позволяющие определить, какой регистр является текущей вершиной стека сопроцессора, какие исключения возникли после выполнения последней команды,каковы особенности выполнения последней команды (некий аналог регистра флагов основного процессора) и т.
д.;П управляющий регистр сопроцессора CWR (Control Word Register) управляетрежимами работы сопроцессора; с помощью полей в этом регистре можнорегулировать точность выполнения численных вычислений, управлятьокруглением, маскировать исключения;15 Зак. 256450Глава 17. Архитектура и программирование сопроцессораD регистр слова тегов TWR (Tags Word Register) используется для контроля засостоянием каждого из регистров RO..
.R7 (команды сопроцессора используют этот регистр, например, для того, чтобы определить возможность записизначений в указанные регистры).ii Два регистра указателей — данных DPR (Data Point Register) и команд IPR(Instruction Point Register) — предназначены для запоминания информации обадресе команды, вызвавшей исключительную ситуацию, и адресе ее операнда.Эти указатели используются при обработке исключительных ситуаций (но недля всех команд).Все эти регистры являются программно доступными. Однако к одним из нихдоступ получить довольно легко, для этого в системе команд сопроцессора существуют специальные команды, а к другим его получить сложнее, так как специальных команд для этого нет, поэтому необходимо выполнять дополнительные действия.Рассмотрим общую логику работы сопроцессора и более подробно охарактеризуем перечисленные регистры.Регистровый стек сопроцессора организован по принципу кольца. Это означает, что среди всех регистров, составляющих стек, нет такого, который является вершиной стека.
Напротив, все регистры стека с функциональной точки зрения абсолютно равноправны. Но, как известно, в стеке всегда должна быть вершина. И онадействительно есть, но является плавающей. Контроль текущей вершины осуществляется аппаратно с помощью трехразрядного поля ТОР регистра SWR (рис. 17.2).В поле ТОР фиксируется номер регистра стека 0...7 (RO.. .R7), являющегося текущейвершиной стека.Регистр состояния SWRbсЗ1514topс2с1соessfреueоеze13 11 1098765432Рис. 17.2. Формат регистра состояния сопроцессора SWRdeie1ОКоманды сопроцессора не оперируют физическими номерами регистров стекаRO...R7. Вместо этого они используют логические номера этих регистров ST(0)...ST(1).
С помощью логических номеров реализуется относительная адресация регистров стека сопроцессора. Если текущей вершиной стека является физическийрегистр RO, то после записи очередного значения в стек сопроцессора его текущейвершиной станет физический регистр R7 (рис. 17.3, а). На рис. 17.3, б показан пример, когда текущей вершиной до записи в стек является физический регистр R3,а после записи в стек текущей вершиной становится физический регистр стека R2.То есть по мере записи в стек указатель его вершины движется по направлениюк младшим номерам физических регистров (уменьшается на единицу)^ Что касается логических номеров регистров стека ST(0).. .ST(1), то, как следует из рисунка,они «плавают» вместе с изменением текущей вершины стека. Таким образом, реализуется принцип кольца.На первый взгляд, такая организация стека кажется странной.
Но, как оказалось, она обладает большой гибкостью. Это хорошо видно на примере передачиАрхитектура сопроцессора451Состояние стека сопроцессора до выполнения операции записи в стекВершина стекаIполе top,j,Физическиеi номерарегистре ) стекасопроце ссораIRO st(0)Физические номерарегистров стекасопроцессора000 |SWR IПоле topSWRIIВершина стекаRO st(5)R1 st(1)R1 st(6)R2 st(2)R2 st(7)R3 st(3)R3 st(0)R4 st(4)R4st(1)R5 st(5)R5 st(2)R6 st(6)R6 st(3)R7 st(7)R7 st(4)tПоп ческие номерарегистров стекас ^процессораtЛогические номерарегистров стекасопроцессораСостояние стека сопроцессора после выполнения операции записи в стекФизические номерарегистров стекасопроцехораSWR IIRO st(7)Вершина стекаIПоле top^1 111 IФизические номерарегистров стекасопроцессораSWRIФRO st(6)R1 st(1)R1 st(7)R2 st(2)R2 st(0)R3 st(3)R3 st(1)R4 st(4)R4 st(2)R5 st(5)R5 st(3)R6 st(4)R6 st(6)R7 st(0)tПоп ческие номераре гистров стекаC(^процессора•JВершина стекаПоле top|010 |^R7st(5)Логические номерарегистров стекасопроцессораРис.