|
Assembler. Введение
Введение
Микропроцессоры корпорации Intel и персональные компьютеры на их
базе прошли не очень длинный во времени, но значительный по существу
путь развития, на протяжении которого кардинально изменялись и
возможности и даже сами принципы их архитектуры. В то же время, внос в
микропроцессор принципиальные изменения, разработчики были вынуждены
постоянно иметь в виду необходимость обеспечения совмести мости новых
моделей со старыми, чтобы не отпугивать потенциального покупателя
перспективой полной замены освоенного или разработанного им
программного обеспечения. В результате современные микропроцессоры типа
Pentium, обеспечивая такие возможности, как 32-битную адресацию почти
неограниченных объемов памяти, многозадачный режим с одновременным
выполнением нескольких программ, аппаратных средства защиты
операционной системы и прикладных программ друг друга, богатый набор
дополнительных эффективных команд и способе адресации, в то же время
могут работать (и часто работают) в режиме первых микропроцессоров типа
8086, используя всего лишь 1 мегабайт оперативной памяти, 16-разрядные
операнды (т. е. числа в диапазоне до 216 - 1 = 65535) и ограниченный
состав команд. Поскольку программирование на языке ассемблера напрямую
затрагивает аппаратные возможности микропроцессора, прежде всего
следует выяснить, в какой степени программист может использовать новые
возможности микропроцессоров в своих программах и какие проблемы
программной несовместимости могут при этом возникнуть. Первые
персональные компьютеры корпорации IBM, появившиеся в 1981 г. и
получившие название IBM PC, использовали в качестве центрального
вычислительного узла 16-разрядный микропроцессор с 8-разрядной внешней
шиной Intel 8088. В дальнейшем в персональных компьютерах стал
использоваться и другой вариант микропроцессора, 8086, который
отличался от 8088 тем, что являлся полностью 16-разрядным. С тех пор
его имя стало нарицательным, и в программах, использующих только
возможности процессоров 8088 или 8086, говорят, что они работают в
режиме 86-го процессора.
В 1983 г. корпорацией Intel был предложен микропроцессор 80286, в
котором был реализован принципиально новый режим работы, получивший
название защищенного. Однако процессор 80286 мог работать и в режиме
86-го процессора, который стали называть реальным.
В дальнейшем на смену процессору 80286 пришли модели 80386, i486 и,
наконец, различные варианты процессора Pentium. Все они могут работать
и в реальном, и в защищенном режимах. Хотя каждая следующая модель была
значительно совершеннее предыдущей (в частности, почти на два порядка
возросла скорость работы процессора, начиная с модели 80386 процессор
стал 32-разрядным, а в процессорах Pentium реализован даже 64-разрядный
обмен данными с системной шиной), однако с точки зрения программиста
все эти процессоры весьма схожи. Основным их качеством является наличие
двух режимов работы - реального и защищенного. Строго говоря, в
современных процессорах реализован еще и третий режим - виртуального
86-го процессора, или V86, однако в плане использования языка
ассемблера этот режим не отличается от обычного режима 86-го
процессора, мы его касаться не будем.
Реальный и защищенный режимы прежде всего принципиально различаются
способом обращения к оперативной памяти компьютера. Метод адресации
памяти, используемый в реальном режиме, позволяет адресовать память
лишь в пределах 1 Мбайт; в защищенном режиме используется другой
механизм (из-за чего, в частности, эти режимы и оказались полностью
несовместимыми), позволяющий обращаться к памяти объемом до 4 Гбайт.
Другое важное отличие защищенного режима заключается в аппаратной
поддержке многозадачности с аппаратной же (т.е. реализованной в самом
микропроцессоре) защитой задач друг от друга.
Реальный и защищенный режимы имеют прямое отношение к работе операционной системы, установленной на компьютере.
В настоящее время на персональных компьютерах типа IBM PC используются
в основном два класса операционных систем (оба - разработки корпорации
Microsoft): однозадачная текстовая система MS-DOS и многозадачная
графическая система Windows. Операционная система MS-DOS является
системой реального режима; другими словами, она использует только
средства процессора 8086, даже если она установлена на компьютере с
процессором Pentium. Система Windows - это система защищенного режима;
она значительно более полно использует возможности современных
процессоров, в частности, многозадачность и расширенное адресное
пространство. Разумеется, система Windows не могла бы рабо-тать с
процессором 8086, так как в нем не был реализован защищенный режим.
Соответственно двум типам операционных систем, и все программное
обеспечение персональных компьютеров подразделяется на два класса:
программы, предназначенные для работы под управлением MS-DOS (их часто
называют приложениями DOS) и программы, предназначенные для системы
Windows (приложения Windows). Естественно, приложения DOS могут
работать только в реальном режиме, а приложения Windows - только в
защищенном.
Таким образом, выражения "программирование в системе MS-DOS",
"программирование в реальном режиме" и "программирование 86-го
процессора" фактически являются синонимами. При этом следует
подчеркнуть, что хотя процессор 8086, как микросхема, уже давно не
используется, его архитектура и система команд целиком вошли в
современные процессоры. Лишь относительно небольшое число команд
современных процессоров специально предназначены для организации
защищенного режима и распознаются процессором, только когда он работает
в за щенном режиме. Поэтому изучение языка ассемблера целесообразно
начинать с изучения архитектуры процессора 8086 или, точнее, того
гипотетического процессора, который как бы объединяет часть архитектур
средств современных процессоров, предназначенных для использования в
реальном режиме, и соответствующих архитектуре процессора 8086. будем
называть этот гипотетический процессор МП 86. Изучению архитектуры и
программирования МП 86 посвящены первые три главы.
Деление программ на приложения DOS и приложения Windows исчерпывают
вопроса о возможных типах программ. Дело в том, что ряд дополнительных
средств, имеющихся в современных процессорах, вполне можно использовать
и в реальном режиме (хотя сама операционная система MS-DOS,
разработанная еще в эпоху процессора 8088, ими пользуется). К этим
средствам относится расширенный состав команд процессоров и, главное,
их 32-разрядная архитектура.
Современные процессоры (начиная с 80386), в отличие от своего
предшественника 8086, являются 32-разрядными. Это дает возможность
программисту использовать в программе 32-разядные операнды (т. е. числа
в диапазоне до 232-1=4 294 967 295), что во многих случаях позволяет
упростить алгоритм программы и повысить ее быстродействие. Программа,
предполагающая работать с 32-разрядными операндами, должна иметь в
своем составе одну из директив .386, .486 или .586, которые разрешают
транс тору использовать дополнительные средства соответствующего
процессе. Включение в программу этой директивы одновременно открывает
доступ и к дополнительным командам и способам обращения к памяти,
отсутствующим в процессоре 8086, что также расширяет возможности
программирования. Эти средства описаны в главе, посвященной расширенным
возможностям современных процессоров.
Особая ситуация возникает, если программист хочет использовать не
только 32-битовые данные, но и 32-разрядные адреса ячеек памяти.
Программы такого рода называются 32-разрядными приложениями (в отличие
от 16-разрядных, в которых все адреса 16-разрядные, хотя дани могут
иметь размер 32 бит). Для создания 32-разрядного приложения в состав
программы необходимо включить (в соответствующем месте) oписатель
use32. Однако следует иметь в виду, что MS-DOS не позволяет пускать
32-разрядные приложения, которые, таким образом, должны 6ыть
приложениями Windows. В то же время приложения Windows обычно
составляются не на языке ассемблера, а на одном из языков высокого
уровня - Паскаль, С или C++, где тип создаваемой программы
(16-разрядная или 32-разрядная) определяется настройками компилятора.
Поэтому вопросы разработки 32-разрядных приложений на языке ассемблера
не вошли в настоящую книгу.
Как известно, система Windows.-допускает запуск приложений DOS
(программ реального режима), организуя для этого так называемый сеанс
DOS, в котором программы фактически выполняются в режиме 86-го
процессора. Кроме этого, в Windows предусмотрена возможность загрузки
компьютера в режиме эмуляции DOS, когда компьютер работает под
уп-равлением варианта DOS, встроенного в систему Windows. Наконец,
ком-пьютер можно сконфигурировать так, чтобы он позволял загружать как
Windows, так и "чистую" DOS (например, MS-DOS 6.22), без всякой
Windows. Каким вариантом загрузки компьютера пользоваться при
проработке настоящей книги - дело вкуса и привычек читателя. Приводимые
в книге примеры в своем большинстве просты, не затрагивают каких-то
специальных системных средств и будут работать в любом режиме.
Последнее замечание не относится только к примеру программы защищенного
режима, приводимому в гл. 4, а также к обработчику прерываний от мыши,
рассматриваемому в гл. 3. Эти программы следует запускать на "чистой"
DOS.
|
Категория: Assembler | Добавил: GL_Loney (19.09.2009)
|
Просмотров: 920 | Комментарии: 1
| Рейтинг: 0.0/0 |
|
Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|