/
Tags: журнал домашняя лаборатория
Year: 2008
Text
Д ОМАШ НЯЯ ЛАБОРАТОРИЯ Научно-прикладной и образовательный интернет-журнал Адрес редакции: domlab@inbox.com Статьи для журнала направлять , указывая в теме письма «For journal». Журнал содержит материалы найденные в Интернет или написанные для Интернет. Журнал является полностью некоммерческим. Никакие гонорары авторам статей не выплачиваются и никакие оплаты за рекламу не принимаются . Явные рекламные объявления не принимаются, но скрытая реклама, содержащаяся в статьях, допускается и даже приветствуется. Редакция занимается только оформительской деятельностью и никакой ответственности за содержание статей не несет. Статьи не редактируются, орфография статей является делом их авторов. При использовании материалов этого журнала, ссылка на него не является обязательной , но желательной. Никакие претензии за невольный ущерб авторам, заимствованных в Интернет статей и произведений, не принимаются. Произведенный ущерб считается компенсированным рекламой авторов и их произведений. По всем спорным вопросам следует обращаться лично в соответствующие учреждения провинции Свободное государство (ЮАР). При себе иметь, заверенные местным нотариусом, копии всех необходимых документов на африкаанс, в том числе, свидетельства о рождении, диплома об образовании, справки с места жительства, справки о здоровье и справки об авторских правах (в 2-х экземплярах). Сентябрь 2008 СОДЕРЖАНИЕ Истори: Дилетанты 3 Эволюция 65 До и после динозавров 134 Проставляем даты 163 Вендские жители Земли 171 Биология. Палеонтологическая экскурсия 187 Выбор системы очистки воды 220 Уровень шума 225 Создание USB-устройств 245 Программируемый логический контроллер 268 Заготовка для исследования переходных процессов 292 Микроконсоль для Бейсик-контроллера 295 AVR BASINT 301 Самоучитель по ASSEMBLER 329 Машина времени 573 Анекдоты 662 Информация к размышлению 665 НА ОБЛОЖКЕ Может Гегель был прав, и развитие человечества идет по спирали? В полном соответствии с диалектическим материализмом. По крайней мере, в одной области человеческой деятельности наблюдается четкий виток. Подробности в разделе «История».
ДИЛЕТАНТЫ Дилетантизм (дилетантство) (от лат. delecto — услаждаю, забавляю) — занятие какой-либо деятельностью, например, наукой, искусством, ремеслом без профессиональной подготовки. Дилетант не имеет глубоких знаний о предмете своих занятий, поэтому допускает ошибки. Однако, известны случаи, когда дилетанты добивались определенных успехов.
От редакции: Определение, приведенное выше, было взято из Википедии. Похоже, оно нуждается в некоторых пояснениях. До Первой мировой войны в естественных и других науках не видели особого прока. Конечно, их преподавали в университетах... наряду с философией, богословием и медициной. Для повышения обшей культуры. Там же ими и занимались. И только. В основном естественными и физико-математическими науками (тогда еще не было такого понятия) занимались любители, отнюдь не профессионалы. С точки зрения современной науки они были дилетанты, но именно эти дилетанты и заложили основания почти всех дисциплин современных наук. Не все из них вошли в историю, но о многих упоминается на первых страницах школьных и вузовских учебников. Похоже, большинство из них проживало в Англии, Франции и Германии. Трудно объяснить, почему именно в этих странах, населенных потомками германских племен , находились люди испытывающие острое желание понять, как устроен мир. Они обладали особым любопытством. Ради его удовлетворения они тратили свое свободное время и судные средства на проведение опытов и изысканий. Насущный хлеб они зарабатывали другим ремеслом, хотя среди них попадались и аристократы, вообще не нуждавшиеся в добывании необходимых средств. Не все из них имели образование. Некоторые имели образование далекое от области их интересов. О России в этой связи упоминать не приходится. О существовании светских, не церковных, наук там узнали только благодаря Петру I, также как о западной литературе и искусстве. Чтобы понять разницу менталитетов, достаточно вспомнить, что Иван Грозный и Шекспир1 были практически современниками. После Первой мировой войны отношение стало меняться. Люди, стоящие у власти поняли, что преимущество в военных действиях создается и преимуществом в оружии . Нужно все время усовершенствовать и обновлять его. Нужны были новые идеи. Наука стала делом государственным. И стала нужна промышленникам. Стали появляться первые научно-исследовательские учреждения. Пока в основном в Европе. Большое развитие получила химия. Во время войны власть имущие поняли, что это уже не игрушка для любопытных, а козырная карта для военных игр. Возможно, Эйнштейн был одним из последних ученых-любителей. Основополагающие работы по физике он сделал, будучи клерком, в патентном ведомстве Швейцарии, но свою жизнь он закончил уже профессором физики в США. Примечательно, что если бы его первые статьи попали бы в редакции после второй мировой войны, то их бы уже не приняли. Вердикт: «Слишком субъективно. Да и вообще дилетант». В СССР он бы даже не прошел экспертную комиссию, допускающую статьи к публикации. Времена изменились. Места любителям уже не было. Научные журналы принимали публикации только от работников НИИ. Любители же самостоятельных исследований, скорее всего, были, не везде ведь были НИИ, и не каждый мог окончить ВУЗ. Даже у Эйнштейна были проблемы с учебными заведениями, начиная со школы. По настоящему значение науки оценили во время Второй мировой войны. Немцы и американцы поняли это лучше всех. Американцы опередили немцев в создании атомной бомбы только потому, что многие немецкие ученые иммигрировали в США. 1 Уильям Шекспир: 1564-1616 гг. Иван IV (Грозный): 1530-1584 гг.
А те, кто остались были близки, но не успели. А немецкие ракеты ФАУ? Где потом продолжил свою деятельность фон Вернер? В США. Примечательно что, например, советский генетик Тимофеев-Ресовский во время войны работал в немецком НИИ, хотя и под полицейским надзором2. Он не был евреем, а генетическим исследованиям покровительствовал сам Гитлер. В 1945 г. Тимофеева-Ресовского пригласили возглавить в СССР исследования по генетическим последствиям радиационных поражений. Однако он был "по ошибке" арестован (как репатриант, находивший во время войны на территории Западной Европы) и след его затерялся в ГУЛАГе. Когда в 1947 году его разыскали - он был при смерти от голода. Как специалиста по радиационной генетике, его извлекли из лагеря для работы на закрытом объекте по проблемам радиационной безопасности. Два народа - два подхода. Сразу после победы ученые уже рассматривались как военные трофеи, их специально выискивали в лагерях, как русские, так и американцы. Применение американцами атомной бомбы в Японии отрезвило русских. Они еще достали своих из своих же лагерей. И поместили в «шарашки», добавив туда и немецких специалистов . Многие научные коллективы тогда, еще с довоенного времени, работали в тюремных условиях, в «шарашках»3. Военные - вот кто решал судьбы науки с той поры. Оружие создавали инженеры, они же нуждались в новых идеях и прототипах, и то и другое поставляли ученые. Многие помнят или слышали, что были времена, когда кибернетика считалась буржуазной лженаукой. Но не многие помнят, почему она перестала быть таковой. Дело в том, что американцы стали оснащать свои ракеты класса «Земля-воздух» компактными вычислительными устройствами для управления, и ракеты стали делать в воздухе даже фигуры высшего пилотажа. Истребителю уйти от них стало уже трудно. Советские военные потребовали такого же. И был создан соответствующий институт4. Приклеивать ему обидный ярлык уже было нельзя. Вполне возможно , что и гонения на генетику прекратились по аналогичной причине. Физику и химию никто лженауками не считал, со времен Первой мировой. Вы что-то хотели сказать про Академию Наук? Это административная организация , по сути дела «Министерство науки». Каждое министерство имело свои НИИ, Минвуз, Минобороны, Минмедпром и т.д. И «Миннауки» тоже. Как министерство, Академия наук, состояла из администраторов, хотя и пришедших из научной среды. Кого там только не было, за ее время ее существования в СССР, от академика Трофима Лысенко до академика5 Бориса Березовского. Академия наук всегда делала то, что ей предписывали. Военно-прикладные работы, так военно- прикладные работы. Гонения на генетику, так гонения на генетику. Первых было больше, ибо наступили новые времена, времена «холодной войны». Холодная война. Гонка вооружений. Отставание, отставание, отставание. Гениев и просто талантливых людей уже не хватало. Они не рождаются по заказу Министерства обороны. Да и нужные накопленные гены сбежали вместе с их носите- 2 По воспоминаниям самого Тимофеева-Ресовского, он ходил отмечаться в полицейский участок, но потом ему сказали, что они его хорошо Знают и можно не отмечаться. 3 Система научно-технических тюрем для использования «вредителей» в интересах военного производства. Много военной техники было разработано именно в «шарашках». С 1945 года в них попадали и немецкие специалисты из военнопленных. Система была ликвидирована только после смерти Сталина, постепенно, начиная с 1953 г. 4 В Зеленограде, под Москвой. 5 Вообще-то членкора. Следует Заметить, что Нобелевские лауреаты там тоже были.
лями в Новый и Старый свет, кто успел, а не успевшие «на тот свет», они были просто ликвидированы соответствующими органами в результате многочисленных чисток. Все органы тогда заполняли выходцы из недалекого крестьянства. Создание подходящих условий для накопления нужных генов - Академгородков, просто не успело решить проблему, хотя конечно принесло свои плоды. Не спасало даже популярность профессии исследователя и уважение к «физикам из ящика». Если не умом, тогда числом. Наука стала массовой. И это дало кое-какие результаты, хотя цена их была очень высока. А зарплата в НИИ маленькой. На военных работали все НИИ, и по прямых заказам, и опосредованно. Что-то конечно доставалось и производствам товаров для населения, только при их общей отсталости это было совершенно ни к чему. Надо признать, что большая масса научных сотрудников не имела больших способностей. И ей не хватало, особенно женской части, той увлеченности и научного любопытства, которые отличали любителей и подлинных научных сотрудников. Последние делились на две группы: условные, то есть те, которым для работы были необходимы условия, и безусловные - работающие без всяких условий. Зачастую защита кандидатской была единственной целью, ей же и кончались все научные потуги. Все это рухнуло в одночасье. Перестройка. Конец холодной войне. Научные сотрудники больше не нужны. Одни сменили род занятий. Другие потянулись за рубеж - наука не знает границ, в прямом и переносном смысле. Но и там столько много не нужно. Компаниям и государственным научным учреждениям нужны только самые талантливые. В Америке и Канаде занимающийся наукой - это вечный скиталец из университета в университет, мечтающий о постоянной должности преподавателя или исследователя-разработчика в компании. Зарплата тоже не велика, по тамошним меркам. Желающих жить такой жизнью все меньше и меньше. Состав этого контингента давно уже интернациональный, в основном из слаборазвитых стран, типа России, Индии, Китая. Бизнесмен, юрист, врач, экономист - вот разумный выбор разумного выпускника школы. История любит повторяться. Развитие человечества прошло очередной виток спирали. И опять занятие наукой становится уделом любителей. И опять они могут публиковать свои труды, если не в научных журналах, то хотя бы в интернете. Подождем и посмотрим, что будет дальше. А пока вспомним тех любителей науки, с которых все начиналось. Тех дилетантов. Не всех конечно, только некоторых. Полный список будет слишком велик.
Альберт Эйнштейн (1879-1955) Альберт Эйнштейн родился 14 марта 1879 г. в немецком городе Ульме в небогатой еврейской семье Германа и Паулины Эйнштейн. Будучи ребёнком нерелигиозных родителей, Альберт Эйнштейн посещал католическую начальную школу в Мюнхене и до 12-ти лет был довольно глубоко верующим подростком, хотя и не разграничивал христианское и иудейское вероучения. Однако, чтение научно-популярных книг вскоре сделало его вольнодумцем и навсегда породило в нём недоверие к авторитетам. Мальчик рос замкнутым и необщительным и не демонстрировал каких-либо значительных успехов в школе. Распространённым является мнение, что в детстве Альберт Эйнштейн был не способен к обучению. В качестве доказательств приводятся низкие показатели, которые он демонстрировал в школе, а также то свидетельство, что будущий гений весьма поздно начал ходить и говорить. Однако такая точка зрения оспаривается многими исследователями биографии Альберта Эйнштейна. Действительно, учителя критиковали Эйнштейна (преподаватель немецкого языка даже утверждал, будто из Эйнштейна «никогда не выйдет ничего путного») за медлительность и плохую успеваемость, однако объяснение низкой успеваемости и сложностям в учёбе Эйнштейна следует искать не в лени или плохих способностях ученика, а в элементарной скромности, не восприятии устаревших педагогических методов, применявшихся в немецких школах конца XIX-начала XX веков, возможной дислексии6 или специфической структуре мозга Эйнштейна7. Когда Альберту было пять лет, его отец впервые показал ему компас. Это первое впечатление от знакомства с техникой у Эйнштейна сохранилось на всю жизнь и, как он сам признавал, определило его увлечение разнообразными механизмами и наукой. В 1889 г. знакомый студент-медик познакомил Эйнштейна с классической философией, в частности, с «Критикой чистого разума» Иммануила Канта. Сочинение Канта также в значительной степени побудило будущего учёного к изучению математики, физики и философии. Кроме того, в детстве по настоянию матери он с шести лет начал заниматься игрой на скрипке. Увлечение музыкой также сохранялось у Эйнштейна на протяжении всей жизни, и в 1908 он даже выступал в квинтете музыкантов-любителей (совместно с математиком, полицейским, юристом и переплётчиком). Уже находясь в США в Принстоне, в 1934 Альберт Эйш- нтейн дал благотворительный концерт Моцарта для скрипки в пользу эмигрировавших из нацистской Германии учёных и деятелей культуры. Обучаясь в Луитпольской гимназии, Альберт Эйнштейн впервые обратился к самообразованию: в возрасте 12 лет в 1891 г. он начал самостоятельно изучать математику с помощью школьного учебника по геометрии. Хотя часто утверждается, будто Эйнштейн был некомпетентен в математике, но это также не соответст- 6 Дислексия (греч. 5u<j — «сложность» и греч. As£i<j — «слова» или «словарь») — нарушение чтения . Чтение Замедленное, угадывающее, с фонетическими искажениями; непонимание смысла прочитанного . Встречается довольно редко у девочек (до 10 %) и чаще у мальчиков, хотя многие склонны считать, что девочки, как более старательные, просто тщательнее скрывают свой недостаток. 7 Скорее всего, он, как и многие гении, был инфантилен (не повзрослевшим) по своей природе, о чем он сам писал в своих воспоминаниях.
вует действительности. В гимназии он уже был в числе первых учеников в изучении точных наук, однако, укоренившаяся система механического заучивания материала учащимися, которая, как он сам считал, наносит вред самому духу учёбы и творческому мышлению, как и относительно тираническое отношение учителей к ученикам вызывало у Альберта Эйнштейна неприятие, поэтому он часто вступал в споры со своими преподавателями, продолжавшими считать его бесперспективным учеником. После разорения отца семейства в 1894 г. Эйнштейны переехали из Мюнхена в Италию в Павию близ Милана. Сам Альберт оставался в Мюнхене ещё некоторое время, чтобы окончить все шесть классов гимназии. Не получив аттестата зрелости, в 1895 г. он присоединился к своей семье в Милане. Осенью 1895 г. Альберт Эйнштейн прибыл в Швейцарию, чтобы сдать вступительные экзамены в Высшее техническое училище (Eidgenossische Technische Hochschule) в Цюрихе и стать преподавателем физики. Блестяще проявив себя на экзамене по математике, он в то же время провалил экзамены по ботанике и французскому языку, что не позволило ему поступить в Цюрихский Политехникум. Однако директор училища посоветовал молодому человеку поступить в выпускной класс школы в Аарау (Швейцария) , чтобы получить аттестат и повторить поступление. В Аарау Альберт Эйнштейн посвящал своё свободное время изучению электромагнитной теории Максвелла. В сентябре 1896 г. он весьма успешно сдал все, за исключением экзамена по французскому языку, выпускные экзамены в кантональной школе Аарау, и получил аттестат, а в октябре 1896 г. был принят в Высшее техническое училище (так называемый Политехникум; нем. Eidgenossische Technische Hochschule) в Цюрихе на педагогический факультет. Здесь он познакомился с родившейся в Венгрии сербской студенткой факультета медицины Милевой Марич, впоследствии ставшей его женой. В этом же году Эйнштейн отказался от своего гражданства и стал апатридом. Чтобы получить швейцарское гражданство, ему требовалось выплатить 1000 швейцарских франков, однако бедственное материальное положение его семьи не позволило ему сделать это во время учёбы. Стиль и методика преподавания в Политехникуме обнаруживали существенные различия с закостеневшей и авторитарной прусской школой, поэтому дальнейшее обучение давалось Альберту куда проще. Однако определённые трудности всё же возникали. В частности, за годы учёбы в Цюрихе у Эйнштейна предельно осложнились отношения с возглавлявшим кафедру физики профессором В. Г. Вебером (однофамильцем знаменитого физика Вильгельма Эдуарда Вебера). Вебер, занимательный лектор и одарённый экспериментатор, оставался чересчур консервативным в своём неприятии новых теорий в электротехнике. В частности, Вебер негативно относился к теории поля Максвелла, будучи сторонником концепции дальнодействия, и в этом плане у него возникали разногласия с молодым учеником, который интересовался трудами Майкельсона и независимо, не зная об опытах Майкельсо- на, предложил собственную интерференционную методику, но из-за несогласия преподавателя так и не смог провести задуманные им опыты. В 1900 Эйнштейн закончил Политехникум, получив диплом преподавателя математики и физики. Хотя его успеваемость не была образцовой, однако, он серьёзно заинтересовался целым рядом наук, в том числе геологией, биологией, историей культуры, литературоведением, политической экономией. Хотя в следующем, 1901, году Эйнштейн получил и гражданство Швейцарии, но вплоть до весны 1902 не был способен найти постоянное место работы, он мог лишь подрабатывать, заменяя учителя в Винтеруре. В армию он призван не был из-за плоскостопия и расширения вен. Вследствие отсутствия заработка Альберт Эйнштейн буквально голодал,
не принимая пищу по несколько дней подряд. Впоследствии это стало причиной болезни печени, с которой учёный жил до конца жизни. Несмотря на лишения, преследовавшие его в 1900—1902 гг. , Эйнштейн находил время для дальнейшего изучения физики. В 1901 г. берлинские «Анналы физики» опубликовали его первую статью «Следствия теории капиллярности» (Folgerungen aus den Capillaritatserscheinungen) , посвященную анализу сил притяжения между атомами жидкостей на основании теории капиллярности. На некоторое время Эйнштейну удалось устроиться учителем математики и физики в Шафхаузене, в пансионате для иностранцев, поступавших в высшие учебные Заведения Швейцарии. Один из друзей Эйнштейна, математик Марсель Гроссман, бывший одновременно и отцом одного из его учеников, рекомендовал Эйнштейна на должность эксперта третьего класса в федеральное Бюро патентования изобретений с окладом 3500 франков в год. Великий физик работал в Бюро патентов Швейцарии с июля 1902 по октябрь 1909, занимаясь преимущественно патентованием изобретений, связанных с электромагнетизмом. С 1903 он был постоянным работником Бюро. Характер работы позволял Эйнштейну посвящать свободное время исследованиям в области теоретической физики. 6 января 1903 Эйнштейн женился на двадцатисемилетней Милеве Марич. Влияние Милевы Марич, дипломированного математика, на труды её мужа до нашего времени остаётся нерешённым вопросом. Тем не менее, их брак был скорее интеллектуальным союзом, и сам Альберт Эйнштейн называл свою жену «созданием, равным мне, таким же сильным и независимым, как и я». Между Эйнштейном и Марич всегда существовало определённое расстояние, так как великий учёный часто нуждался в одиночестве для проведения своих исследований. Интересно, что советский физик Абрам Фёдорович Иоффе, лично знакомый с Эйнштейном, назвал последнего в некрологе Эйнштейном-Маричем, и этот факт часто приводится в качестве доказательства совместности научной деятельности выдающегося физика и его жены. Тем не менее, высказываются предположения, что Иоффе добавил к фамилии Эйнштейна фамилию его жены только потому, что считал это традицией, принятой в Швейцарии . Ещё в 1904 «Анналы физики» получили от Альберта Эйнштейна ряд статей, посвященных изучению вопросов статистической механики и молекулярной физики. Они были опубликованы в 1905, открыв так называемый «Год чудес» (лат. Annus Mirabilis), когда четыре статьи Эйнштейна совершили революцию в теоретической физике, дав начало теории относительности которая была разработана на основании "теории относительности" в геометрии, созданной Николаем Лобачевским, (в которой Эйнштейн заменил частицы событиями и рассматривал «материю» не как часть конечного материала мира, но просто как удобный способ связывания событий воедино) и перевернув представления о фотоэффекте и броуновском движении. Физическое сообщество в целом согласно с тем, что три из них заслуживали Нобелевской премии (которая в итоге досталась Эйнштейну лишь за работу по фотоэффекту — довольно примечательный факт, если учесть, что учёный лучше всего известен именно благодаря его теории относительности, тогда как ему так и не удалось согласовать её положения с квантовой механикой). В 1924 молодой индийский физик Шатьендранат Бозе в кратком письме обратился к Эйнштейну с просьбой помочь в публикации статьи, в которой выдвигал предположение, положенное в основу квантовой статистики. Бозе предложил рассматривать свет в качестве газа фотонов. Эйнштейн пришёл к выводу, что эту же статистику можно использовать для атомов и молекул в целом. В 1925 Эйнштейн
опубликовал статью на немецком языке, в которой излагал модель Бозе, применимую к системам тождественных частиц с целым спином, называемых бозонами. На основании данной квантовой статистики, известной ныне как статистика Бозе — Эйнштейна, двое физиков ещё в середине 20-ых годов теоретически обосновали существование пятого агрегатного состояния вещества — конденсата Бозе — Эйнштейна . Суть «конденсата» Бозе — Эйнштейна состоит в переходе большого числа частиц идеального бозе-газа в состояние с нулевым импульсом при температурах, приближающихся к абсолютному нулю, когда длина волны де Бройля теплового движения частиц и среднее расстояние между этими частицами сводятся к одному порядку. Начиная с 1995, когда первый подобный конденсат был получен в университете Колорадо, учёные практически доказали возможность существования конденсатов Бозе — Эйнштейна из водорода, лития, натрия, рубидия и гелия. Аутентичные наброски данной теории, выполненные Эйнштейном, были обнаружены в библиотеке Лейденского университета в августе 2005. Занимаясь разработкой статистики Бозе — Эйнштейна, Альберт Эйнштейн одновременно содействовал Эрвину Шрёдингеру в разработке уравнения Шрёдингера, объясняющего свойства волн де Бройля с позиций классической механики, что соответствовало статистике Больцмана. Вместе с тем, Эйнштейн считал, что исследования в данном направлении сочетания классической и квантовой моделей идеального газа менее перспективны, чем дальнейшее развитие статистики Бозе — Эйнштейна, поэтому отказался от соавторства. По мере нарастания экономического кризиса в Веймарской Германии усиливалась политическая нестабильность, содействовавшая усилению антисемитских и националистических настроений. В результате, усилилась и травля одного из величайших учёных современности со стороны антисемитских и консервативных кругов, называемых самим Эйнштейном «Компанией теории антиотносительности Ltd». После прихода к власти нацистов в 1933 физик покинул Германию навсегда, выехав в Соединённые Штаты Америки. В скором времени в знак протеста против преступлений фашизма он отказался от немецкого гражданства и членства в Прусской и Баварской Академиях наук. После переезда в США Альберт Эйнштейн получил должность профессора физики в недавно созданном институте фундаментальных исследований в Принстоне, штат Нью-Джерси. В Принстоне он продолжал работу над исследованием проблем космологии и созданием единой теории поля, призванной объединить теорию гравитации и электромагнетизм. В США Эйнштейн мгновенно превратился в одного из самых известных и уважаемых людей страны, получив репутацию гениальнейшего учёного в истории, а также олицетворения образа «рассеянного профессора» и интеллектуальных возможностей человека вообще. Ежедневно он получал множество писем разнообразного содержания. Будучи естествоиспытателем с мировым именем, он оставался доступным, скромным, нетребовательным и приветливым человеком. Физик, перевернувший представления человечества о Вселенной, Альберт Эйнштейн умер 18 апреля 1955 в 1 час 25 мин. в Принстоне от аневризмы аорты. Не воспринимая никаких форм культа личности, он запретил пышное погребение с громкими церемониями, для чего пожелал, чтобы место и время захоронения не разглашались. 19 апреля 1955 без широкой огласки состоялись похороны великого учёного, на которых присутствовало всего 12 самых близких друзей. Его прах был сожжён в крематории Юинг-Симтери, а пепел развеян по ветру...
Константин Эдуардович Циолковский (1857-1935) Константин Эдуардович Циолковский родился в Ижевске. Его отец, Эдуард Игнатьевич, был польским дворянином среднего достатка, а мама, Мария Ивановна Юмашева, имела татарские корни. Так что гены будущего ученого были поистине "гремучей смесью". В возрасте девяти лет Костя Циолковский заболел скарлатиной и после осложнений оглох. Через четыре года после этого умерла его мама. Эти две трагедии во многом определили сценарий жизни будущего ученого. Дело в том, что Костя был вынужден учиться самостоятельно, дома, поэтому он рос очень замкнутым ребенком. Единственными друзьями мальчика были книги. Его особенно привлекали математика, физика и космос. В 16 лет Циолковский поехал в Москву, где три года изучал химию, математику, астрономию и механику. Общению с окружающим миром помогал специальный слуховой аппарат. Однако жизнь в Москве была достаточно дорогой, Циолковский, несмотря на все усилия, не смог обеспечить себя достаточными средствами, так что в 1876 году отец отозвал его в Вятку. Там он сдал экзамены, получил диплом учителя и начал преподавать в школе в Боровске, расположенном в 100 километрах от Москвы. Там же он женился на Варваре Ефграфовне Соколовой. Находясь вдали от основных научных центров России, Циолковский, оставаясь глухим, решил самостоятельно проводить исследовательские работы в интересовавшей его области - аэродинамике. Он начал с того, что разработал основы кинетической теории газов. Он отослал свои расчеты в Русское физико-химическое общество в Петербурге и вскоре получил ответ от Менделеева: кинетическая теория газов уже открыта... 25 лет назад. Но Циолковский пережил это известие, ставшее для него как ученого ударом, и продолжил исследования. В Петербурге заинтересовались одаренным и неординарным учителем из Вятки и пригласили его войти в состав вышеупомянутого общества. В 1892 году Константин Циолковский был переведен учителем в Калугу. Там он также не забывал о науке, об астронавтике и аэронавтике. В Калуге Циолковский построил специальный туннель, который позволил бы измерять различные аэродинамические показатели летательных аппаратов. Поскольку Физико-химическое общество не выделило ни копейка на его эксперименты, ученому пришлось использовать семейные средства для проведения исследований. К слову, Циолковский на свои средства построил более 100 экспериментальных моделей и протестировал их - не самое дешевое удовольствие! Через некоторое время общество все таки обратило внимание на калужского гения и выделило ему финансовую поддержку - 470 рублей, на которые Циолковский построил новый, усовершенствованный туннель. В ходе аэродинамических экспериментов Циолковский все больше стал обращать внимание на космические проблемы. В 1895 году была опубликована его книга "Грезы о земле и небе", а через год вышла статья о других мирах, разумных существах с других планет и об общении землян с ними. В том же 1896 году Циолковский приступил к написанию своего главного труда "Исследование космического пространства с помощью реактивного двигателя". В этой книге были затронуты проблемы использования ракетных двигателей в космосе - навигационные механизмы, поставка и транспортировка топлива и др.
Первые пятнадцать лет XX века были, пожалуй, самыми тяжелыми в жизни ученого. В 1902 году его сын Игнатий покончил жизнь самоубийством. В 1908 году во время разлива Оки его дом затопило, многие машины, экспонаты были выведены из строя, а многочисленные уникальные расчеты утеряны. В Физико-химическом обществе не оценили значимость и революционность представленных Циолковским железных моделей. С приходом к власти большевиков ситуация частично изменилась - разработки Циолковского стали интересны новой власти, которая оказала ему значительную материальную поддержку. В 1919 году Циолковский был избран в социалистическую Академию (будущую Академию наук СССР), а 9 ноября 1921 год ученому была дарована пожизненная пенсия за заслуги перед отечественной и мировой наукой. Эту пенсию выплачивали до 19 сентября 1935 года - в тот день величайший человек, Константин Эдуардович Циолковский умер в ставшем ему родным городе Калуге.
Оливер Хевисайд (1850—1925) Хевисайд родился в Англии, лондонском районе Камден. Будущий учёный был низкоросл, рыж и в молодости страдал скарлатиной. Болезнь оказала на него тяжёлое влияние, и Хевисайд остался глуховат. Несмотря на то, что хорошо учился (в 1865 году был пятым из 500 учеников) , Оливер бросил школу в 16 лет и стал изучать азбуку Морзе и электромагнетизм . Хевисайд стал телеграфистом, сначала в Дании, а потом в Англии Great Northern Telegraph Company. Он продолжал учиться и в 1872 году, работая старшим телеграфистом в Ньюкасле, начал исследования электричества. В 1874 году Оливер оставил эту должность и работал в одиночестве в доме своих родителей. Здесь он разработал теорию линий передачи (также известную как «телеграфные уравнения»). Хевисайд математически доказал, что равномерно распределённая ёмкость телеграфной линии минимизирует одновременно затухание и искажение. Если ёмкость достаточно велика и сопротивление изоляции не слишком велико, в линии не будет искажений, и все частоты будут затухать одинаково. Уравнения Хевисайда способствовали дальнейшему развитию телеграфной связи. В 1880 году Хевисайд исследовал скин-эффект в телеграфных линиях передачи и переписал результаты Максвелла из их первоначальной неуклюжей формы в терминах современного векторного анализа, таким образом, сведя системы из 20-ти уравнений с 12-тью переменными к четырём дифференциальным уравнениям, известным как уравнения Максвелла. Четыре уравнения Максвелла описывают природу неподвижных и движущихся заряженных частиц и магнитных диполей, и отношения между ними, а именно электромагнитную индукцию. Между 1880 и 1887 годами, Оливер Хевисайд разрабатывал операционное исчисление (он ввёл обозначение D для дифференциального оператора), метод решения дифференциальных уравнений с помощью сведения к обыкновенным алгебраическим уравнениям, который по началу вызвал бурную полемику из-за отсутствия строгого обоснования. Тогда он произнёс известную фразу: «Математика есть наука экспериментальная, определения появляются последними». Это было ответом на критику за использование ещё не вполне определённых операторов. В 1887 году Хевисайд предложил добавить катушки индуктивности к трансатлантическому телеграфному кабелю (увеличив тем самым собственную ёмкость) для коррекции возникавших искажений. По политическим причинам этого сделано не было. Позднее Михаил Пупин разработал способ увеличения дальности передачи для телефонных линий с помощью установки удлинительных катушек через определённые интервалы вдоль линии передачи. Этот метод следовал идеям Хевисайда. В двух работах 1888 года и 1889 года Хевисайд вычислил деформацию электрического и магнитного полей вокруг движущегося заряда, а также эффекты вхождения заряда в плотную среду. Он предсказал излучение Вавилова — Черенкова и вдохновил Фитцжеральда предложить понятие так называемого сокращения Лоренца — Фитцжеральда.
В 1889 году, после исследований Джозефом Джоном Томсоном электрона, Хеви- сайд начал работу над концепцией электромагнитной массы. Хевисайд считал её настолько же настоящей, как и массу материальную, способной производить такие же эффекты. Вильгельм Вин позднее проверил результат Хевисайда для малых ускорений . В 1891 году Британское Королевское Общество признало вклад Хевисайда в математическое описание электромагнитных явлений, присвоив звание Члена Королевского Общества. В 1905 году Хевисайд стал почётным доктором Университета Гёттингена. В 1902 году Хевисайд предсказал существование в ионосфере слоя Кеннелли — Хевисайда. Предположения Хевисайда включали способы передачи радиосигналов в обход кривизны земной поверхности. Существование ионосферы было подтверждено в 1923 году. Предсказания Хевисайда, вместе с теорией излучения Планка, возможно, повлияли на прекращение попыток обнаружить радиоизлучение Солнца и других астрономических объектов. Какая бы ни была причина, по всей видимости попыток не было в течение 30 лет, до изобретения в 1932 году Карлом Янским радиоастрономии. Будучи всю жизнь не в ладах с научным сообществом, в последние годы учёный стал весьма эксцентричен. Хотя в молодости Хевисайд активно занимался велосипедным спортом, на шестом десятке лет его здоровье серьёзно ухудшилось. В этот период Хевисайд подписывал корреспонденцию своим именем с инициалами W.O.R.M (червь), хотя эти буквы ничего не обозначали. Хевисайд начал красить ногти в розовый цвет и использовать гранитные глыбы вместо домашней мебели. Хевисайд умер в Торки, Девон, и похоронен на кладбище Пейнтон. Большая часть признания пришла к нему после смерти.
Поль Эмиль Лекок де Буабодран (1838-1912) Французский химик Поль Эмиль Лекок де Буабодран родился в г. Коньяк в семье винодела. Образование получил, самостоятельно занимаясь по программе Политехнической школы. С 1854 г. работал в винодельческой фирме своего отца в Коньяке, где создал хорошо оборудованную химическую лабораторию, в которой проводил свои экспериментальные исследования. В 1875 г. работал в Париже в лаборатории Шарля Вюрца. После 1895 г. из-за плохого состояния здоровья практически прекратил научную деятельность. В 1878 г. стал членом-корреспондентом Парижской академии наук. Основные работы посвящены изучению и систематизации спектров минералов и неорганических веществ. В 1875 г. открыл в пиренейской цинковой обманке новый элемент галлий, существование которого было предсказано Д.И.Менделеевым в 1870 г., и получил его в виде металла. После опубликования сообщения об этом открытии в "Докладах Парижской Академии наук" Менделеев, сопоставив свойства галлия и предсказанного им экаалюминия, направил Лекоку де Буабодрану письмо, в котором указал на ошибку в определении плотности галлия. Лекок де Буабодран узнал о существовании Менделеева только из его письма. Буабодран усомнился в правильности предсказания и склонен был отрицательно отнестись к нему, так как по его измерениям удельный вес нового металла был равен 4.7 г/см3, тогда как Менделеев указал на 5.9-6.0 г/см3. Лекок де Буабодран всё же последовал совету Менделеева и провёл тщательную очистку нового металла. Повторив свои определения, он убедился в правоте Менделеева; из скептика Лекок де Буабодран превратился в горячего приверженца периодического закона. "Я полагаю, - писал он, - что нет необходимости настаивать на исключительной важности подтверждения теоретических взглядов Д.Менделеева относительно плотности нового элемента". Открытие галлия стало первым толчком ко всеобщему признанию периодического закона, одним из "укре- пителей" которого Менделеев позже назвал Лекока де Буабодрана. Лекок де Буабодран внес большой вклад в изучение химии редкоземельных элементов, широко используя спектральные методы. Он открыл элементы самарий (1879), гадолиний и диспрозий (1886).
Грегор Иоганн Мендель (1822—1884) Иоганн родился вторым ребенком в крестьянской семье смешанного немецко- славянского происхождения и среднего достатка, у Антона и Розины Мендель. В 1840 Мендель окончил шесть классов гимназии в Троппау (ныне г. Опава) и в следующем году поступил в философские классы при университете в г. Ольмюце (ныне г. Оломоуц). Однако материальное положение семьи в эти годы ухудшилось, и с 16 лет Мендель сам должен был заботиться о своем пропитании. Не будучи в силах постоянно выносить подобное напряжение, Мендель по окончании философских классов, в октябре 1843, поступил послушником в Брюннский монастырь (где он получил новое имя Грегор) . Там он нашел покровительство и финансовую поддержку для дальнейшего обучения. В 1847 Мендель был посвящен в сан священника. Одновременно с 1845 года он в течение 4 лет обучался в Брюннской теологической школе. Августинской монастырь св. Фомы был центром научной и культурной жизни Моравии. Помимо богатой библиотеки, он имел коллекцию минералов, опытный садик и гербарий. Монастырь патронировал школьное образование в крае. Будучи монахом, Мендель с удовольствием вел занятия по физике и математике в школе близлежащего городка Цнайм, однако не прошел государственного экзамена на аттестацию8 учителя. Видя его страсть к знаниям и высокие интеллектуальные способности, настоятель монастыря послал его для продолжения обучения в Венский университет, где Мендель в качестве вольнослушателя проучился четыре семестра в период 1851-53, посещая семинары и курсы по математике и естественным наукам, в частности, курс известного физика К. Доплера. Хорошая физико-математическая подготовка помогла Менделю впоследствии при формулировании законов наследования. Вернувшись в Брюнн, Мендель продолжил учительство (преподавал физику и природоведение в реальном училище), однако вторая попытка пройти аттестацию учителя вновь оказалась неудачной9. С 1856 Мендель начал проводить в монастырском садике (шириной в 7 и длиной в 35 метров) хорошо продуманные обширные опыты по скрещиванию растений (прежде всего среди тщательно отобранных сортов гороха) и выяснению закономерностей наследования признаков в потомстве гибридов. В 1863 он закончил эксперименты и в 1865 на двух заседаниях Брюннского общества естествоиспытателей доложил результаты своей работы. В 1866 в трудах общества вышла его статья "Опыты над растительными гибридами", которая заложила основы генетики как самостоятельной науки. Это редкий в истории знаний случай, когда одна статья знаменует собой рождение новой научной дисциплины. Почему принято так считать? Работы по гибридизации растений и изучению наследования признаков в потомстве гибридов проводились десятилетия до Менделя в разных странах и селекционерами, и ботаниками. Были замечены и описаны факты доминирования, расщепления и комбинирования признаков, особенно в опытах французского ботаника Ш. Он Завалил биологию и геологию. 9 И опять он Завалил биологию.
Нодена. Даже Дарвин, скрещивая разновидности львиного Зева, отличные по структуре цветка, получил во втором поколении соотношение форм, близкое к известному менделевскому расщеплению 3:1, но увидел в этом лишь "капризную игру сил наследственности". Разнообразие взятых в опыты видов и форм растений увеличивало количество высказываний, но уменьшало их обоснованность. Смысл или "душа фактов" (выражение Анри Пуанкаре) оставались до Менделя туманными. Совсем иные следствия вытекали из семилетней работы Менделя, по праву составляющей фундамент генетики. Во-первых, он создал научные принципы описания и исследования гибридов и их потомства (какие формы брать в скрещивание, как вести анализ в первом и втором поколении). Мендель разработал и применил алгебраическую систему символов и обозначений признаков, что представляло собой важное концептуальное нововведение. Во-вторых, Мендель сформулировал два основных принципа, или закона наследования признаков в ряду поколений, позволяющие делать предсказания. Наконец, Мендель в неявной форме высказал идею дискретности и бинарности наследственных задатков: каждый признак контролируется материнской и отцовской парой задатков (или генов, как их потом стали называть), которые через родительские половые клетки передаются гибридам и никуда не исчезают. Задатки признаков не влияют друг на друга, но расходятся при образовании половых клеток и затем свободно комбинируются у потомков (законы расщепления и комбинирования признаков). Парность задатков, парность хромосом, двойная спираль ДНК - вот логическое следствие и магистральный путь развития генетики 20 века на основе идей Менделя. Хотя труды Общества, где была опубликована статья Менделя, поступили в 120 научных библиотек, а Мендель дополнительно разослал 40 оттисков, его работа имела лишь один благосклонный отклик - от К. Негели, профессора ботаники из Мюнхена. Негели сам занимался гибридизацией, ввел термин "модификация" и выдвинул умозрительную теорию наследственности. Однако он усомнился в том, что выявленные на горохе законы имеет всеобщий характер и посоветовал повторить опыты на других видах. Мендель почтительно согласился с этим. Но его попытка повторить на ястребинке, с которой работал Негели, полученные на горохе результаты оказалась неудачной. Лишь спустя десятилетия стало ясно почему. Семена у ястребинки образуются партеногенетически, без участия полового размножения. Наблюдались и другие исключения из принципов Менделя, которые нашли истолкование гораздо позднее. В этом частично заключается причина холодного приема его работы. Начиная с 1900, после практически одновременной публикации статей трех ботаников - X. Де Фриза, К. Корренса и Э. Чермака-Зейзенегга, независимо подтвердивших данные Менделя собственными опытами, произошел мгновенный взрыв признания его работы. 1900 считается годом рождения генетики. Вокруг парадоксальной судьбы открытия и переоткрытия законов Менделя создан красивый миф о том, что его работа оставалась совсем неизвестной и на нее лишь случайно и независимо, спустя 35 лет, натолкнулись три переоткрывателя. На самом деле, работа Менделя цитировалась около 15 раз в сводке о растительных гибридах 1881, о ней знали ботаники. Более того, как выяснилось недавно при анализе рабочих тетрадей К. Корренса, он еще в 1896 читал статью Менделя и даже сделал ее реферат, но не понял в то время ее глубинного смысла и забыл . Стиль проведения опытов и изложения результатов в классической статье Менделя делают весьма вероятным предположение, к которому в 1936 пришел английский математический статистик и генетик Р. Э. Фишер: Мендель сначала интуитивно проник в "душу фактов" и затем спланировал серию многолетних опытов
так, чтобы озарившая его идея выявилась наилучшим образом. Красота и строгость числовых соотношений форм при расщеплении (3:1 или 9:3:3:1), гармония, в которую удалось уложить хаос фактов в области наследственной изменчивости, возможность делать предсказания - все это внутренне убеждало Менделя во всеобщем характере найденных им на горохе законов. Оставалось убедить научное сообщество. Но эта задача столь же трудна, сколь и само открытие. Ведь знание фактов еще не означает их понимания. Крупное открытие всегда связано с личностным знанием, ощущениями красоты и целостности, основанных на интуитивных и эмоциональных компонентах. Этот внерациональный вид знания передать другим людям трудно, ибо с их стороны нужны усилия и такая же интуиция. Судьба открытия Менделя - задержка на 35 лет между самим фактом открытия и его признанием в сообществе - не парадокс, а скорее норма в науке. Так, спустя 100 лет после Менделя, уже в период расцвета генетики, подобная же участь непризнания в течение 25 лет постигла открытие Б. Мак-Клинток мобильных генетических элементов. И это несмотря на то, что она, в отличие от Менделя, была ко времени своего открытия высоко авторитетным ученым и членом Национальной Академии наук США. В 1868 Мендель был избран настоятелем монастыря и практически отошел от научных занятий. В его архиве сохранились заметки по метеорологии, пчеловодству, лингвистике. На месте монастыря в Брно ныне создан музей Менделя; издается специальный журнал "Folia Mendeliana".
Джеймс Прескотт Джоуль (1818— 1889) родился 24 декабря, 1818 года в английском городке Салфорде, расположенном вблизи Манчестера. Он был вторым из пяти детей в семье состоятельного владель- пивоваренного завода. В детстве Джеймс был слабым стеснительным ребёнком, у которого были проблемы с позвоночником. Эти обстоятельства, ограничивающие его активность, стали причиной того, что он предпочёл науку физической деятельности. Несмотря на то, что позже проблема с позвоночником уже не так беспокоила его, это отразилось на всей его жизни. До пятнадцати лет Джеймс обучался дома. Затем он стал работать на пивоваренном заводе, принадлежащем его семье. Тем не менее, он и его старший брат продолжали брать частные уроки в Манчестере. С 1834 по 1837 год, известный английский химик Джон Далтон преподавал им химию, физику, научный метод и математику. Джеймс с благодарностью признавал, что Далтон сыграл основную роль в том, что он стал учёным. «Именно в результате его преподавания у меня появилось желание увеличить запас моих знаний с помощью оригинальных исследований» - говорил Джоуль. Когда их отец заболел, Джеймс и его брат начали заниматься делами на пивоваренном заводе, поэтому у Джеймса не было возможности посещать университет. Но, несмотря на это, его заветным желанием было продолжать изучать науку, и поэтому он создал у себя дома лабораторию, в которой и начал проводить свои эксперименты каждый день до и после работы. В 1839 году Джоуль начал ряд экспериментов, в которых он исследовал механическую работу, электричество и теплоту. В 1840 году он послал свою работу "Об образовании Теплоты с помощью Вольтовского (Гальванического) Электричества" в Королевское Научное Общество в Лондоне — наверное, самое престижное общество британских учёных. В своей работе он показал, что количество производимой теплоты за секунду в проводе с электрическим током равно квадрату тока (I) умноженного на сопротивление (R) провода, (это выражено формулой, P=I2R). Эта зависимость известна как закон Джоуля (количество теплоты, выделяющееся в проводнике с током, прямо пропорционально квадрату силы тока, сопротивлению проводника и времени прохождения тока). Работа Джоуля не вызвала большого энтузиазма в Королевском Научном Обществе, и было опубликовано лишь краткое изложение полученных им данных. В 1843 году Джоуль вычислил количество механической работы, которое необходимо для образования эквивалентного количества теплоты. Эта величина была названа "механическим эквивалентом теплоты". Он снова передал данные своих наблюдений на рассмотрение — но на этот раз Британской Ассоциации Развития науки. И опять его работа не вызвала восторженной реакции. Несколько ведущих научных журналов также отказались опубликовать данные исследований Джоуля. Многие учёные сомневались, стоит ли принимать его работу, но Джоуль терпеливо отстаивал свои позиции. Очень часто требуется время для того, чтобы но- Джеимс Прескотт Джоуль
вые идеи получили своё признание, особенно если автором этих идей является непрофессионал в данной области. Данные, полученные Джоулем, бросали вызов калорической теории, которой придерживалось большинство физиков того времени. Согласно той теории, теплота считалась жидким веществом. Другим камнем преткновения для принятия результатов исследований Джоуля было то, что учёным было трудно поверить в невероятную точность его измерений. Но в своих экспериментах Джоуль проявлял упорство и изобретательность. Эти свойства его характера очень помогли ему избежать ошибок и получить гораздо более точные результаты по сравнению с результатами предыдущих экспериментов. Работе Джоуля относительно теплоты, электричества и механической работы не придавали большого значения вплоть до 1847 года. На его работу обратил внимание Вильям Томсон. (Томсон, который позже стал известен как лорд Кельвин, был известным учёным). Несмотря на то, что в то время ему было всего лишь 23 года, Томсон уже был Профессором Физики при Университете в Глазго. Томпсон признал, что работа Джоуля вписывалась в объединяющую модель, которая уже тогда начинала появляться в физике, и он с восторгом одобрил работу Джоуля, (фактически, работа Джоуля сделала существенный вклад в процесс объединения отдельных разделов физики). Другими учёными, которые с энтузиазмом одобрили работу Джоуля, были Майкл Фарадей и Джордж Стоукс. Одобрение нескольких выдающихся учёных открыло дверь для Джоуля, которая раньше была для него закрытой. Королевское Научное Общество готовилось пересмотреть своё отношение к работе Джоуля. В 184 9 году, на слушании Королевского Научного Общества Джоуль прочитал свою работу под названием "О механическом Эквиваленте Теплоты" вместе с Фарадеем, который был его поручителем. В следующем году Королевское Научное Общество опубликовало материалы Джоуля, и он был избран членом этого престижного общества. Принцип сохранения энергии, лежащий в основе работы Джоуля, положил начало новой научной дисциплине, известной как термодинамика. Несмотря на то, что Джоуль не был первым учёным, который предложил этот принцип, он был первым, кто продемонстрировал обоснованность этого принципа. И хотя Томсон и ряд других учёных позже внесли огромный вклад в термодинамику, Джоуль по праву считается главным основателем термодинамики. Он показал, что " работа может превращаться в теплоту с четким соотношением работы к теплоте, и что теплоту можно обратно преобразовать в работу". Принцип сохранения энергии Джоуля лёг в основу первого закона термодинамики. Этот закон говорит о том, что энергию нельзя ни создать, ни уничтожить, но её можно изменять из одной формы в другую. Это значит, что общее количество энергии (включая материю) во Вселенной постоянно. В своей работе, имевшей огромное значение и опубликованной в 1848 году, Джоуль стал первым учёным, который подсчитал быстроту (скорость) молекул газа . Эта ранняя работа о кинетической теории газов была позже продолжена другими учёными, в особенности выдающимся шотландским физиком Джеймсом Максвеллом. Джоуль был одним из первых учёных, который обратил внимание на необходимость в условных единицах электричества, и он решительным образом рекомендо-
вал создание таковых. Эта стандартизация была позже сделана под руководством Максвелла Британской Ассоциацией Развития Науки. В 1872 году Джоуль стал Президентом Британской Ассоциации и находился на этой должности до 1887 года. В знак признания огромного вклада Джоуля в изучение связи теплоты и механического движения, единица энергии (или работы) в физике была позже названа "Джоулем". В 1852 году Джоуль начал работать вместе с Томсоном. Эти два учёных идеально дополняли друг друга — Джоуль, точный и изобретательный экспериментатор, которому не доставало лишь более углубленных знаний в математике, и Томсон, талантливый физик, сильный в математике, который занимался развитием теории, лежащей в основе физики. К сожалению, в 1854 году после шести лет брака жена Джоуля умерла, и он остался один с маленькими детьми. Вскоре после этого семья Джоуля продала пивоваренный завод. В то время Джоуль жил относительно уединенно. Именно тогда он смог больше времени посвящать научной работе. На протяжении следующих восьми лет Джоуль вместе с Томсоном работали над несколькими важными экспериментами для подтверждения некоторых предсказаний в новой научной области, термодинамике. Наиболее известные эксперименты касались снижения температуры, связанного с расширением газа без выполнения внешней работы. Это охлаждение газов, которое происходит по мере их расширения, известно как "Эффект Джоуля-Томсона". Этот принцип лёг в основу развития холодильной промышленности. Во время совместной работы с Томсоном Джоуль кротко взялся за практическую роль экспериментального исследования теоретических проблем, поднимаемых Томсоном. Это была менее престижная роль в плодотворном сотрудничестве, но Джоуля больше интересовало достижение важных результатов, чем получение признания . Однако следует помнить, что Джоуль и сам уже ранее внёс огромный теоретический вклад. Как говорит Х.Д. Стеффенс, описывая биографию Джоуля: «Несомненно, он был больше, чем "просто замечательный экспериментатор". Его эксперименты отображали и придали форму его предположениям, а его предположения смело противостояли распространенным научным теориям и подразумевали новый, точный порядок во вселенной». Джоуль показал удивительную ясность в донесении, исполнении, описании и объяснении своих экспериментов. В отличие от многих учёных, Джоулю было не свойственно следовать ведущим в тупик путями или делать неверные наблюдения. В большинстве случаев, его черновики были достаточно понятными и разборчивыми для того, чтобы опубликовать их без предварительной проверки. Это свидетельствовало о чрезвычайной ясности его ума. С 1872 года состояние Здоровья Джоуля ухудшилось, но он всё же продолжал немного работать. Он умер 11 октября 1889 года в английском городке Сейле, недалеко от Чешира.
Эварист Галуа (1811—1832) Родился 26 октября 1811 в местечке Бур-ла-Рен близ Парижа. В 1823 после ос- ся революционной деятельностью, и в конце концов попал в тюрьму, где пробыл несколько месяцев. Уже в мае 1832 его бурная жизнь подошла к концу: он был убит на дуэли, в которую его вовлекла какая-то любовная история. Накануне дуэли он написал резюме своих открытий и передал записку одному из друзей с просьбой сообщить о них ведущим математикам. Записка заканчивалась словами: «Ты публично попросишь Якоби или Гаусса дать заключение не о справедливости, а о значении этих теорем. После этого, я надеюсь, найдутся люди, которые сочтут нужным расшифровать всю эту путаницу». Насколько известно, письмо Галуа не попало ни к Якоби, ни к Гауссу. Математические круги узнали о нем лишь в 1846, когда Лиувилль напечатал большую часть трудов ученого в своем журнале. Все они занимали лишь 60 страниц небольшого формата! А содержали изложение теории групп - ключ к современной алгебре и современной геометрии (в это время Коши только начал публиковать свои работы по теории групп); первую классификацию иррациональностей, определяемых алгебраическими уравнениями, - учение, которое сейчас кратко называется теорией Галуа; проблемы, о которых мы теперь говорим как об абелевых интегралах. В теории Галуа прояснялись такие старые вопросы, как трисекция угла, удвоение куба, решение кубических и биквадратных уравнений и уравнений любых степеней в радикалах. Им установлены условия сводимости решения таких уравнений к решению системы других алгебраических уравнений более низких степеней. Значение Галуа было до конца осознано лишь благодаря Трактату о подстановках (Trait des substitutions, 1870) К.Жордана и последующим работам Клейна и Ли. Теперь объединяющий подход Галуа признан одним из самых выдающихся достижений математики XIX в. новательнои домашней подготовки под руководством матери поступил в четвертый класс лицея Людовика Великого в Париже. Свою первую работу, посвященную периодическим непрерывным дробям, Галуа опубликовал в 1828, еще будучи учеником лицея. Он намеревался поступить в Политехническую школу, но дважды проваливался на вступительном экзамене. Сам он объяснял это тем, что заданные ему вопросы были слишком детскими, чтобы отвечать на них. Наконец, в 1830 он был принят в Нормальную школу, но уже в 1831 исключен из нее за «непозволительное поведение». В особенности ему ставилось в вину его «невыносимое высокомерие». Галуа с энтузиазмом занял-
Чарльз Дарвин (1809-1882) Отец Чарльза, Роберт Уорринг, имел врачебную практику. Он был сыном известного тогда поэта и ученого Эразма Дарвина. Мать Дарвина, Сусанна, родила мужу двух сыновей (Чарльз был младшим). Она умерла, когда Чарльзу было всего 7 лет. 1818 год - младший Дарвин поступает в начальную школу. 1819 год - Дарвин переходит в гимназию доктора Бетлера. Известно, что будущий великий ученый не входил в число первых учеников1. Основными предметами в гимназии были латынь, древнегреческий и другие языки, а также словесность. Показывая весьма посредственные результаты в изучении гуманитарных предметов, Дарвин увлекается естественными науками. Он собирал коллекции минералов и насекомых, составлял гербарии. 1825 год - Дарвин поступает в Эдинбургский Университет, собираясь (возможно, по настоянию отца) стать медиком. 1827 год - пройдя всего два курса обучения, Дарвин оставляет Университет и поступает в Кэмбридж, собираясь стать священником. Здесь он также не достиг особых успехов. При этом вместе с натуралистами, с которыми познакомился еще во время учебы в Эдинбургском университете, Дарвин собирает морских животных и изучает их. Он посещает сообщества натуралистов, принимает в них активное участие, много читает о природе. Так появляется первая научная работа Чарльза Дарвина, которая, впрочем, не была опубликована. К завершению учебы в Кембридже в 1831 году Дарвин имел уже статус натуралиста-коллектора. Один из друзей порекомендовал Чарльза капитану Фитцрою, который согласился взять молодого ученого с собой в кругосветное путешествие. 1831 - 1836 годы - Чарльз Дарвин совершает кругосветное путешествие на корабле «Бигль». Это путешествие дало ему богатейший материал для последующей работы. Помимо природы, Дарвин делает наблюдения по этнографии и антропологии . Вскоре после возвращения Дарвин2, совместно с группой других ученых- натуралистов издает книгу «Зоология путешествия Бигля». Собрав за время плавания множество коллекций, Дарвин был просто не в состоянии обработать их все самостоятельно, потому и пришлось привлекать соавторов. В указанную книгу вошли следующие разделы: ископаемые и современные млекопитающие, птицы, пресмыкающиеся и земноводные, насекомые. Сам Дарвин писал раздел, посвященный геологии . Эти слишком мягко сказано. 2 В некотором смысле он был безработным, но в 1838-1841 Дарвин был секретарем Лондонского геологического общества.
1839 год - Дарвин переезжает в Лондон и женится на своей кузине Эмме Веджвуд. Всего за время брака у Чарльза и Эммы родилось десять детей. Трое из них умерли в раннем возрасте, некоторые другие были болезненны. Дарвин объяснял это тем, что он с женой состоит в близком родстве. Эта теория нашла свое отражение в некоторых поздних работах ученого. В этом же году напечатано первое издание «Дневника изысканий» - произведения, ставшего первым в ряду многих, написанных по впечатлениям и результатам путешествия. В этой книге Дарвин обращается не только к зоологии и ботанике, но и к политическим и этнографическим вопросам. В частности, описывает тяжелое положение южноамериканских индейцев. 1839 - 1843 годы - в этот промежуток времени выходит пять томов одного из самых значительных трудов Дарвина «Зоология». 1842 год - появляется работа Чарльза Дарвина «О строении и распределении коралловых рифов». В этом же году из-за слабого здоровья ученый переселяется с семьей в имение Доун (графство Кент). Кроме того, 1842-м годом датирована первая рукопись Дарвина, посвященная теории эволюции. 1844 год - публикуется исследование Дарвина «Геологические наблюдения над вулканическими островами». 1845 год - выходит второе, расширенное, издание «Дневника изысканий». 184 6 год - Дарвин издает еще одну книгу, которая называлась «Геологические исследования в Южной Америке». Все последние работы были написаны по материалам исследований, проведенных во время кругосветного путешествия. Кроме упомянутых узкоспециальных работ в этот же период была опубликована книга Дарвина «Путешествие вокруг света на корабле Бигль» в двух томах. Книга подкупала интересным содержанием и простотой изложения. Благодаря своим работам Дарвин стал известным ученым. Первая половина 1850-х годов - Дарвин успешно изучает подкласс усоногих раков , издает несколько монографий, посвященных этой группе животных. Работы эти имели огромное значение для биологии. 1858 год - в печати появляется первая статья, посвященная теории эволюции. 1859 год - в свет вышел главный труд Чарльза Дарвина, получивший название «Происхождение видов путём естественного отбора, или Сохранение благоприятст- вуемых пород в борьбе за жизнь». 1868 год - опубликован второй фундаментальный труд Дарвина, посвященный теории эволюции, а именно двухтомник «Изменение домашних животных и культурных растений». Эта книга обычно рассматривается как дополнение к «Происхождению видов...». 1871 год - выходит третье научное произведение Дарвина на тему эволюции. Это была книга «Происхождение человека и половой отбор». Именно Здесь ученый привел и подробно рассмотрел множество доказательств своей теории происхождения человека от животных.
1872 год - Дарвин публикует дополнение к предыдущей работе «Выражение эмоций у человека и животных». В течение жизни Дарвин получил множество наград от различных научных сообществ Великобритании. 19 апреля 1882 года - Чарльз Дарвин умирает в своем имении Доун.
Николя Леонар Сади Карно (1796-1832) итического деятеля и математика Лазара Карно и дядя Мари- Франсуа Сади Карно, бывшего президентом Франции. Сади Карно получил хорошее домашнее образование. В 1812 году блестяще закончил лицей Карла Великого и поступил в Политехническую школу — лучшее на тот момент учебное заведение Франции. В 1814 году он ее закончил шестым по успеваемости и был направлен в Инженерную школу в городе Мец. После завершения которой в 1816 году был распределен в инженерный полк, где провел несколько лет. В 1819 году выиграл конкурс на замещение вакансии в Главном штабе корпуса в Париже и перебрался туда. В Париже Карно продолжил обучение. Посещал лекции в Сорбонне , Коллеж де Франс, Консерватории Искусств и Ремёсел. Там он познакомился с химиком Никола Клеманом, занимавшимся изучением газов. Общение с ним вызвало интерес у Карно к изучению паровых машин. И в 1824 году вышла первая и единственная работа Сади Карно — «Размышления о движущей силе огня и о машинах, способных развивать эту силу» (Reflexions sur la puissance motrice du feu et sur les machines propres a developper cette puissance). Эта работа считается основополагающей в термодинамике . В ней был произведен анализ существующих в то время паровых машин, и были выведены условия, при которых КПД достигает максимального значения (в паровых машинах того времени КПД не превышал 2 %) . Помимо этого там же были введены основные понятия термодинамики: идеальная тепловая машина (см. Тепловая машина), идеальный цикл (Цикл Карно), обратимость и необратимость термодинамических процессов. В 1828 году Карно оставил военную службу. Он много работал, при том, что в 1830 году произошла очередная французская революция. Умер Карно в 1832 году от холеры. По правилам все его имущество, в том числе и бумаги, было сожжено. Таким образом, его научное наследие было утрачено. Уцелела только одна записная книжка — в ней сформулировано Первое начало термодинамики.
Опостен Жан Френель (1788-1827) Один из величайших физиков XIX столетия, родился в Брольи (в Нормандии) в семье архитектора Френеля, одного из строителей Шербург- ского рейда. Френель медленно развивался, восьми лет еле умел читать и лишь в 1801 г. поступил в центральную школу в Кане; в 1804 г. Френель перешел в политехническую школу в Париже, где необыкновенными успехами в математике вскоре обратил на себя внимание преподавателей, в особенности знаменитого Лежандра, с которым потом соединяла его тесная дружба. Из политехнической школы Френель перешел в школу путей сообщения. Получив звание инженера, Френель, по поручению правительства, более 8 лет деятельно занимался инженерными работами в Вандее, Дроме и Иль-е-Вилене. Френель был убежденный роялист и потому отставлен был в 1815 г. Наполеоном от должности, и переселился в Париж, где продолжал пребывать под полицейским надзором. К этому времени относится начало знаменитых работ Френеля по теории света, составивших эпоху в истории физики и продолжавшихся до 1824 г. При втором возвращении Бурбонов Френель снова получил место инженера по надзору за мостовыми Парижа, должность репетитора в политехнической школе, а позже Занял и должность секретаря комиссии маяков. В 1823 г. Френель был избран в члены парижской академии наук, в 1825 г. в члены лондонского королевского общества, которое затем в 1827 г. удостоило его высшей награды - медали Румфор- да. Здоровье Френеля всегда было слабым; упорные труды надорвали его здоровье и в 1824 г. он, вследствие кровохаркания, должен был оставить место репетитора в политехнической школе. Последние годы жизни Френель посвятил усовершенствованию маячного освещения. В 1827 г. Френеля перевезли в Билль д'Авре (у Парижа), где он и скончался 14 июля 1827 г. Первую свою работу по дифракции света Френель передал парижской академии в 1815 г. ; в следующие 2 года он дал ряд дополнений к ней и 29 июля 1818 г. представил академии сводку всех своих исследований по дифракции в виде работы "Memoire sur la difiraction de la lumiere". Отчет об этой работе поручен был Арого и Пуансо; из них первый с восторгом приветствовал исследование молодого ученого, и, под влиянием Арого, работа Френеля награждена была в 1819 г. премией академии. Ученый мир находился в то время под влиянием работ Био, который с большим остроумием давал объяснение явлений дифракции, исходя из представлений Ньютоновой теории истечения. Тем более поразила всех работа Френеля, который воспользовался почти забытой теорией волнообразного распространения световых колебаний в эфире. Объяснение явления дифракции с точки зрения волнообразной теории дано было еще Юнгом (1804 г.), но последний ошибочно предполагал, что дифракция является следствием интерференции лучей непосредственно прошедших и лучей отраженных от края препятствия. Френель же, воспользовавшись принципом Гюйгенса, ввел в рассмотрение волны, исходящие из всякой точки отверстия, и явление дифракции объяснил совокупным действием всех этих волн на эфирные частицы. Расчет этого совокупного действия представлял значительные математические трудности, которые Френель блестяще преодолел . Теория Френеля была столь совершенна, что даже противник его Био, всеми силами стремившийся поддержать теорию истечения, должен был признать, что Френелю удалось "в своих формулах теперь и навсегда установить взаимозависимость этих явлений" (дифракции). Применение Юнгова принципа интерференции дало затем Френелю возможность объяснить старое противоречие между прямоли-
нейным распространением света и принципом Гюйгенса. Упомянутые выше работы Френеля не подорвали еще значения теории истечения; последняя могла почти столь же стройно объяснить дифракцию, но она не сумела вовлечь в свою систему явления поляризации, которые Френель в своих последующих работах блестяще истолковал с точки зрения эфирной теории. В то время открыты были Араго явления хроматической поляризации и с 1816 по 1819 г. Френель один и совместно с Араго исследует эти явления, рассматривая их как интерференцию поляризованного света. Основной результата Френеля, что лучи, поляризованные в перпендикулярных плоскостях, не могут интерферировать привел его к в высшей степени важному выводу - к предположению о поперечности световых колебаний. Это предположение было очень смело и на него обрушились Лаплас, Пуассон и другие, которые не могли допустить возможность поперечных колебаний в однородной среде, обладающий свойствами жидкости. Между тем это предположение оказывалось до того плодотворным при объяснении всех явлений поляризации, что Френель не отказался от него, но в ряде работ (1821 г.) старается возможно внимательно и точно обосновать его. В мемуаре о двойном лучепреломлении Френель объясняет явления в одноосных и двуосных кристаллах, предполагая в них упругость эфира по разным направлениям неодинаковой, вычисляет форму волны в двуосных кристаллах; для подтверждения своих выводов он производит исследования над упругостью и показывает, как однородные тела, под влиянием сжатия, могут сделаться двупре- ломляющими. Этот мемуар по поручению академии рассматривала в 1822 г. комиссия из Араго, Ампера и Фурье, которая, признав чрезвычайную важность работ Френеля, все же не могла согласиться с предположением о поперечности световых колебаний. Еще раньше (1817 - 1818) при рассмотрении явления полного внутреннего отражения Френель пришел к представлению об поляризованных эллиптически и по кругу лучах и в 1825 г. блестяще применил их к объяснению открытого Био явления вращения плоскости поляризации в кварце и некоторых жидкостях. Френель умер, не дождавшись полной победы эфирной теории над теорией истечения; окончательный поворот в этом направлении наступил после 1830 г. и уже в сороковых годах истекшего столетия теория истечения была совершенно забыта. Работы Френеля напечатаны в мемуарах парижской академии и в 30-х годах почти все появились в переводе в "Poggendorfs Annalen der Physik". В 1866 - 70 г. акад. издала полное собрание сочинений Френеля в 3 т. Работы Френеля по маячному делу относятся почти все к последним годам его жизни и завершились введением в французких маяках ступенчатых стекол и особенно сильных горелок; ступенчатые стекла в настоящее время применяются везде.
Джон Дальтон (1766—1844) Джон Дальтон родился 6 сентября 1766 г. в семье деревенского ткача- квакера и пошел в школу только в 12 лет. Научное образование он получил самостоятельно, так как двери Оксфорда и Кембриджа тогда были открыты только для членов англиканской церкви, и уже к 15 годам достиг таких успехов, что получил место преподавателя математики в школе города Кендала. 14 В 1793 году он становится преподавателем натуральной философии (так в английских колледжах называлась физика) и математики в колледже города Манчестера, где знаменитый социалист-утопист Роберт Оуэн вводит его в состав Манчестерского литературного и философского общества. Членом этого общества позднее был другой знаменитый манчесте- рец - Джоуль, а в XX в. на заседании этого общества Эрнст Резерфорд сделал доклад о своих опытах , приведших к открытию ядерной модели атома. Дальтон в 1800 г. становится секретарем общества, а с 1817 г. его председателем. Наблюдая за атмосферными явлениями, Дальтон заинтересовался составом воздуха. Изучение состава и свойств воздуха привело его к открытию газовых законов : - названный его именем, закон независимости парциальных давлений компонентов смеси (1801) ; - за несколько месяцев до Гей-Люссака, он установил закон теплового расширения газов (1802) ; - закон растворимости газов в жидкостях (1803). Эти законы стали важными вехами на пути создания теории состава газов - физической атомистики. Приняв гипотезу о различной величине атомов газов, окруженных тепловой оболочкой, Дальтон объяснил такие физические явления, как расширения газов при нагревании, характер диффузии газов, зависимость их давления от внешних условий. В 1803 году Дальтон, руководствуясь атомистической гипотезой, вывел закон кратных отношений и доказал его на примере углеводородных соединений - метана и этилена. Различие в величине атомов газов привело Дальтона к необходимости допустить и различную их массу (вес). Так от физической атомистики он перешел в 1803 г. к созданию химической атомистики. Основными положениями химической атомистики Дальтона были следующие: 1. Материя состоит из мельчайших частиц - неделимых атомов, которые не создаются и не разрушаются. 2. Все атомы одного элемента одинаковы по величине и имеют одинаковую массу (вес) . 3. Атомы различных элементов обладают различной массой и размерами. 4. Сложные частицы ("сложный атом") состоят из определенного числа входящих в это вещество различных атомов. 5. Масса сложной частицы определяется суммой масс составляющих ее атомов элементов.
Положив в основу своей атомистической теории представление об относительном атомном весе (массе), Дальтон ввел в химию количественную характеристику атомов и тем самым окончательно доказал их материальность. Атомная масса стала в дальнейшем одной из основных характеристик веществ. Дальтон считал, что атомы различных элементов имеют неодинаковые размеры и массу. Ошибочно приняв, что в состав молекулы воды входит один атом кислорода , он неправильно определил атомные веса кислорода и азота. Но Дальтон первым составил таблицу атомных весов В 1803 г. Дальтон составил первую таблицу относительных атомных и молекулярных масс веществ и ввел химическую символику, правда, не совсем удачную и Замененную в химии более удобной символикой Берцелиуса (1779 - 1848). За единицу он принял атомную массу водорода. В этой таблице впервые были установлены относительные массы водорода, кислорода, азота, углерода, аммиака, оксидов серы, азота и других веществ. Заслуга Дальтона в развитии химии огромна: он впервые сделал атомистику основой химических знаний и наметил верный путь количественного определения состава веществ. Джон Дальтон также внес вклад в развитие медицины, впервые детально описав в 1794 году дефект зрения цветной слепоты (в дальнейшем получивший название дальтонизма), от которого страдал он и его брат. Умер Дальтон в Манчестере 27 июля 1844 года.
Иеремия Вениамин Рихтер (1762-1807) Немецкий химик Иеремия Вениамин Рихтер родился в Хиршберге, в Силезии. В молодости семь лет он служил в корпусе военных инженеров, а с 1785 г. изучал математические и философские науки в Кенигсбергском университете, где слушал лекции Иммануила Канта от которого воспринял многие философские и естественнонаучные идеи. Будучи по профессии инженером- строителем, Рихтер ещё до поступления в университет интересовался химией и физикой; химию он изучал по «Химическому словарю» Макёра. С 1794 г. работал пробирщиком в Брес- лау, затем при управлении Берлинского горного округа. С 1798 г. - химик фарфоровой мануфактуры в Берлине. Иностранный член-корреспондент Петербургской АН (с 1800). В своих научных работах Рихтер стремился отыскать математические зависимости в химических реакциях. В 1793 г. он опубликовал работу «Начала стехиометрии, или способ измерения химических элементов», в которой показал, что при образовании соединений элементы вступают во взаимодействие в строго определённых пропорциях, впоследствии названных эквивалентами. Ввёл понятие «стехиометрия»; Рихтер произвел его от греческих слов stoicheion - основание, элемент и metreo - измеряю, что должно было означать измерение соотношений, в которых химические элементы реагируют друг с другом. Привёл первые в истории химии количественные уравнения реакций. Однако работы Рихтера оставались вне поля зрения его современников до 1802 г., когда немецкий химик Г. Э. Фишер составил на основе данных Рихтера таблицу химических эквивалентов, которую привёл в комментариях к немецкому переводу книги К. Л. Бертолле «Исследование законов сродства в химии» (1806). Открытия Рихтера положили начало бурному развитию количественных исследований в химии, способствовали обоснованию химической атомистики, оказали влияние на исследования У. Г. Волластона и Й. Я. Берцелиуса.
Клод Луи Бертолле (1748—1822) в Таллуаре (Савойя). Изучал медицину в Туринском университете, где в 1770 получил степень доктора. Работая в аптеках, увлекся химией и в 1772 переехал в Париж для совершенствования своего образования. Посещал лекции в Парижском университете, получил место помощника в исследовательской лаборатории университета. С 1794 Бертолле - профессор химии в Нормальной школе и Политехнической школе. В 1796 - представитель наполеоновской миссии в Италии, а в 1798-1799 - участник Египетской экспедиции Бонапарта. В Египте Бертолле изучал образование природной соды и основал в Каире исследовательский институт. На него был возложен контроль за подготовкой вывозимого из Египта сырья для химической промышленности . Из экспериментальных работ Бертолле наиболее значительны те, что связаны с изучением хлора. Он применил на практике открытое К.Шееле белящее действие хлора для отбеливания тканей, воска, бумаги (1785). Метод Бертолле вскоре вытеснил все другие способы обесцвечивания тканей. Изучая действие хлора на различные вещества, Бертолле получил соли хлорноватой и хлорноватистой кислот, в том числе хлорновато-кислый калий (бертолетову соль), взрывчатое вещество, которое можно было использовать вместо селитры при изготовлении пороха. В 1786 он установил состав синильной кислоты, а затем другой бескислородной кислоты - сероводорода. В 1786-1787 Бертолле вместе с Г.Де Морво, А.Лавуазье и А.Фуркруа участвовал в создании новой химической номенклатуры. Наблюдая за условиями образования соды в соляных озерах во время египетской экспедиции, пришел к выводу, что направление химических реакций зависит от массы веществ и таких физических свойств, как летучесть, растворимость, упругость, а также от условий, в которых эти реакции протекают. Это привело его к идее химического сродства, которое Бертолле считал пропорциональным массам реагирующих веществ. Свои представления о химическом сродстве ученый изложил в труде Опыт химической статики (Essai de statique chimique , 1803). Поставив большое количество опытов, Бертолле показал, что реакции не идут до конца в направлении, указываемом известными таблицами о сродстве. Имеет место и обратное взаимодействие, так что между взятыми и полученными веществами устанавливается устойчивое состояние, которое Бертолле, употребив термин из области механики, назвал равновесием. Эти представления позднее получили строгое математическое выражение в виде закона действующих масс и явились основой учения о подвижном химическом равновесии . В 1807 Бертолле поселился в Аркёйе близ Парижа, где устроил собственную лабораторию и основал Аркёйское научное общество, членами которого были П.Лаплас, А.Гумбольдт, Л.Гей-Люссак и др. Бертолле получил от Наполеона титул графа и был назначен сенатором округа Монпелье (1804), что не помешало ему как члену сената голосовать в 1814 за отставку Наполеона. После Реставрации он сумел сохранить все привилегии и получил титул пэра Франции. Умер Бертолле в своем поместье Аркёй близ Парижа 6 ноября 1822. Родился 9 декабря 1748
Антуан Лоран Лавуазье (1743—1794) Антуан Лоран Лавуазье родился в семье адвоката 28 августа 1743 года. Первые годы жизни ребенок провел в Париже, в переулке Пеке, окруженном садами и пустырями. Мать его умерла, родив еще девочку, в 1748 году, когда Антуану Лорану было всего пять лет. Первоначальное образование он получил в коллеже Маза- рини. Эта школа была устроена кардиналом Мазарини для знатных детей, но в нее принимали экстернов и из других сословий. Она была самой популярной школой в Париже. Антуан учился отлично. Как многие из выдающихся ученых, он мечтал сначала о литературной славе и, находясь еще в коллеже, начал писать драму в прозе «Новая Элои- за», но ограничился только первыми сценами. По выходе из коллежа Лоран поступил на факультет права, — вероятно, потому, что его отец и дед были юристами и эта карьера начинала уже становиться традиционной в их семействе: в старой Франции должности обыкновенно передавались по наследству. В 1763-м Антуан Лоран получил степень бакалавра, в следующем году — лиценциата прав. Но юридические науки не могли удовлетворить его безграничной и ненасытной любознательности. Он интересовался всем — от философии Кондильяка до освещения улиц. Он впитывал знания, как губка, всякий новый предмет возбуждал его любопытство, он ощупывал его со всех сторон, выжимая из него все, что возможно. Вскоре, однако, из этого разнообразия начинает выделяться одна группа знаний, которая все более и более поглощает его: естественные науки. Не оставляя своих занятий правом, Антуан Лоран изучал математику и астрономию у Лакайля, очень известного в то время астронома, имевшего небольшую обсерваторию в коллеже Мазарини; ботанику — у великого Бернара Жюсье, с которым вместе гербаризировал; минералогию — у Гэтара, составившего первую минералогическую карту Франции; химию — у Руэля. Первые работы Лавуазье были сделаны под влиянием его учителя и друга Гэтара . Гэтар предпринял ряд экскурсий. Лавуазье был его сотрудником в течение трех лет, начиная с 1763 года, и сопровождал его в поездках или «экскурсиро- вал» один. Плодом этой экскурсии явилась его первая работа — «Исследование различных родов гипса». После пяти лет сотрудничества с Гэтаром, в 1768 году, когда Лавуазье исполнилось 25 лет, он был избран членом Академии наук. В 1769 году произошло событие, в будущем предопределившее трагический конец ученого. Антуан Лавуазье вступил в генеральный откуп товарищем откупщика Бо- дона, уступившего ему третью часть своих доходов. Откупная система с полным основанием была ненавидима народом, но личная деятельность Лавуазье по откупу была вполне безупречна, как показал его биограф Гримо, опираясь на подлинные документы. Участие в откупе не было для Ла-
вуазье синекурой; оно требовало постоянных разъездов, отнимало у него много времени и внимания. Устроившись в материальном отношении, Антуан Лавуазье вскоре женился на дочери генерального откупщика Польза. Женитьба Лавуазье была до некоторой степени избавлением для его невесты. Дело в том, что ее важный родственник, генерал-контролер (министр финансов) Террэ, от которого зависел Польз, во что бы то ни стало, хотел выдать ее за некоего графа Амерваля, обнищалого дворянина, славившегося своими кутежами, скандалами и буйным характером и желавшего поправить свои финансы женитьбой на богатой мещаночке. Польз наотрез отказался от этой чести и так как Террэ настаивал, то откупщик решил поскорее выдать дочь замуж, чтобы прекратить всякий разговор о графе. Он предложил ее руку Лавуазье, и последний согласился. В 1771 году Антуану Лавуазье было 28 лет, а его невесте — 14. Несмотря на молодость невесты, брак оказался счастливым. Лавуазье нашел в ней деятельную помощницу и сотрудницу в своих занятиях. Она помогала ему в химических опытах, вела журнал лаборатории, переводила для мужа работы английских ученых. Даже сделала рисунки для одной из книг. В жизни Антуан Лавуазье придерживался строгого порядка. Он положил себе За правило заниматься наукой шесть часов в день: от шести до девяти утра и от семи до десяти вечера. Остальная часть дня распределялась между занятиями по откупу, академическими делами, работой в различных комиссиях и так далее. Один день в неделю посвящался исключительно науке. С утра А. Лавуазье запирался в лаборатории со своими сотрудниками, тут они повторяли опыты, обсуждали химические вопросы, спорили о новой системе. Здесь можно было видеть славнейших ученых того времени — Лапласа, Монжа, Лагранжа, Гитона Морво, Маккера. Лаборатория Лавуазье сделалась центром тогдашней науки. Он тратил огромные суммы на устройство приборов, представляя в этом отношении совершенную противоположность некоторым из своих современников. Значительную часть больших доходов, которые Лавуазье получал от откупа, он тратил на научные опыты. Для своих исследований он не щадил средств: например, опыты над составом воды стоили ему 50000 ливров. Он добивался самой тщательной постановки опытов и стремился к устройству наиболее точных и совершенных приборов: в этом отношении научная техника во Франции обязана ему многим. В 1775 году министр Тюрго, преобразовав пороховое дело во Франции, назначил Лавуазье одним из четырёх управляющих этим делом (фр. regisseurs des poudres). Благодаря энергии Лавуазье производство пороха во Франции к 1788 году более чем удвоилось (с 1600 тысяч франков оно дошло до 3700 тысяч франков в год). Лавуазье организует экспедиции для отыскания селитряных местонахождений, ведёт исследования, касающиеся очистки и анализа селитры; приёмы очистки селитры, разработанные Лавуазье и Боме, дошли и до нашего времени. По инициативе Лавуазье, академия наук в 1773 году назначает премию за лучшую работу, касающуюся способа наиболее выгодного производства селитры; программа работы была детально разработана самим Лавуазье. Пороховым делом Лавуазье управлял до 1791 года. Он жил в пороховом арсенале; здесь же помещалась и его лаборатория, из которой вышли почти все его химические работы. Лаборатория Лавуазье была одним из главных научных центров Парижа того времени. В ней сходились представители различных отраслей знания,
для обсуждения научных вопросов, сюда же приходили и начинающие молодые работники науки учиться у Лавуазье. Помимо научных работ, занятий по откупу и по управлению пороховым арсеналом, Лавуазье принимал участие в различных комиссиях или по поручению академии, или по поручению правительства. Так, например, в 1783 году Лавуазье составляет, по поручению академии, доклад о «месмеризме», в 1784 году — доклад об «аэростатах». Все отчёты Лавуазье обнаруживают его необыкновенное уменье смотреть в корень дела, носят печать ясного, дисциплинированного, уравновешенного ума и вместе с тем обличают натуру благородную, опиравшуюся в своей деятельности на широкие гуманные принципы, принципы общего блага. Эти принципы проглядывают нередко и в научных его трудах, но главным образом проявляются в исследовании тюрем, предпринятом им, в министерство Некке- ра, по поручению академии, и в его деятельности, направленной на улучшение положения земледельческого класса. В 1783-1788 годах Лавуазье состоял членом общества и комитета земледелия в Париже. В целом ряде докладов он указывает на необходимость изменить положение земледельческого класса податной реформой и распространением лучших способов земледельческой культуры. Состоя в 1787 году представителем третьего сословия в Орлеанском провинциальном собрании, он выступает и там с докладами об изменении натуральной дорожной повинности, об организации различного рода благотворительных учреждений для народа, страховой кассы на случай обеднения и старости и т. п. Став с 1778 года владельцем собственного имения, Лавуазье занялся агрономическими опытами, из желания, главным образом, прийти на помощь соседним землевладельцам, подав им «примеры агрикультуры, основанной на лучших принципах». В 1788 году Лавуазье мог уже представить в комитет земледелия отчёты о плодотворных результатах своих агрономических опытов. По его почину устраиваются школы пряжи и тканья; до того времени лён и пенька в сыром виде шли за границу, откуда Франция получала готовое полотно; Лавуазье широко пропагандирует способ беления тканей хлором, открытый Бертол- ле; настаивает на необходимости устроить около Парижа опытное поле для агрономических экспериментов; составляет инструкции провинциальным собраниям, касающиеся самых разнообразных сельскохозяйственных вопросов. Как результат основательного знакомства Лавуазье с экономическим положением родины явился его мемуар, касающийся вычисления территориальных богатств Франции. Мемуар был представлен Лавуазье национальному собранию в 1791 году и имел целью дать основание наиболее рациональному расчёту налогов, какие страна может выплачивать, не изнемогая под их бременем. Во время революции Лавуазье состоял членом «Национального Казначейства», в котором установил строгий и образцовый порядок. Эти обязанности он нёс безвозмездно. В 1790 году Национальное Собрание поручило академии наук выработать рациональную систему мер и весов. Для этой цели была организована комиссия, в которой Лавуазье принимал постоянное участие в качестве её секретаря и казначея; кроме того, ему вместе с Гюйо было поручено определить вес в пустоте единицы объёма дистиллированной воды при 0 °С; а впоследствии вместе с Борда Лавуазье определял расширение меди и платины, для устройства нормального метра. С 1791 года Лавуазье принимал участие в «совещательном бюро искусств и ремёсел» , имевшем задачей указывать правительству на полезные для страны техни-
ческие изобретения и поощрять наградами лучшие из них. Плодом участия Лавуазье в совещательном бюро осталась записка, касающаяся организации народного просвещения. Хотя в 1791 году откуп был уничтожен, но нападки революционных газет на откупщиков не прекратились. В 1793 году депутат Бурдон потребовал в Конвенте немедленного ареста и предания суду бывших участников откупа, не дожидаясь срока, назначенного для ликвидации дел. Лавуазье, вместе с другими откупщиками, был заключён в тюрьму, в конце ноября 1793 года, и Конвент постановил отдать его на суд революционного трибунала. Ни петиция от совещательного бюро, ни всем известные заслуги перед родиной, ни научная слава не спасли Лавуазье от смерти. «Республика не нуждается в учёных», заявил председатель, трибунала Коффиналь в ответ на петицию бюро. Лавуазье был обвинён в участии «в заговоре с врагами Франции против французского народа, имевшем целью похитить у нации огромные суммы, необходимые для войны с деспотами», и присужден к смерти. «Палачу довольно было мгновения, чтобы отрубить эту голову» — сказал Лагранж по поводу казни Лавуазье, — «но будет мало столетия, чтобы дать другую такую же»...
Никола Леблан (1742-1806) Никола Леблан - французский химик-технолог. Родился в Ивуа-ле-Пре, департамент Шер. Биографических сведений о Леблане почти не сохранилось. Известно, что он изучал медицину, слушал лекции по химии Г. Руэля в Ботаническом саду Парижа. С 1780 г. работал врачом в Орлеане. В годы французской революции управлял пороховыми и селитряными производствами Арсенала, занимал ряд выборных должностей в революционных органах. Основные работы посвящены промышленному синтезу неорганических веществ. Разработал новые способы получения селитры и сульфата магния. В 1787-1789 гг. разработал промышленный способ получения соды из поваренной соли путём перевода её в глауберову и прокаливания последней с углём и мелом. В 1791 г. получил патент на этот метод и построил в компании с управляющим имениями герцога Орлеанского завод по производству соды в Сен-Дени. Во время Французской революции в 1793 г. герцог Орлеанский был казнен, собственность его конфискована, а содовый завод национализирован. После решения Конвента о ликвидации патентов и ограничении производства соды (1794) Леблан разорился. Покончил жизнь самоубийством. Производство соды по способу Леблана было распространено во многих странах Европы. Во второй половине XIX века этот метод был вытеснен более экономичным аммиачным способом производства соды, изобретённым бельгийским инженером- химиком Э. Сольве. Французское химическое общество учредило медаль Леблана, вручаемую за выдающиеся заслуги в области химии.
Карл Вильгельм Шееле (1742—1786) Шведский химик Карл Вильгельм Шееле родился в Штральзунде в Померании, которая тогда входила в состав Швеции, в семье пивовара и торговца зерном. Шееле учился в частной школе в Штральзунде, но уже в 1757 г. переехал в Гётеборг. Поскольку родители не имели средств для того, чтобы дать ему высшее образование (Карл быль седьмым сыном в семье) , он стал учеником аптекаря и активно занимался самообразованием. Работая в аптеке, Шееле достиг большого искусства в химическом эксперименте. Проработав восемь лет в Гётеборге, Шееле переехал в Мальме, где смог по вечерам заниматься научными исследованиями в лаборатории аптекаря. Затем Шееле работал в аптеках Стокгольма (1768-1769) , Упсалы (1770-1774) и, наконец, в 1775 г. приобрёл аптеку в Чё- пинге, где и занимался исследованиями до конца жизни. Слава Шееле как выдающегося экспериментатора распространилась далеко за пределы Швеции; прусский король Фридрих II приглашал его занять кафедру химии в Берлинском университете, однако Шееле отклонил приглашение. В 1775 г. за выдающиеся достижения в области химии он был избран действительным членом Шведской королевской Академии наук, став единственным учёным, который удостоился этой части, не имея высшего образования. Работы Шееле охватывают многие области химии. В 1769 г. он предложил способ получения фосфора; в 1771 г. получил раствор плавиковой кислоты. В 1774 г. Шееле выделил в свободном виде хлор, марганец и оксид бария; детально описал свойства хлора. В 1775 г. открыл мышьяковистый водород и мышьяковую кислоту, в 1777 г. получил и исследовал сероводород и другие сернистые соединения. В том же году одновременно с Ф.Фонтана обнаружил способность свежепрокалённого древесного угля поглощать газы. В 1777 г. был опубликован его труд «Химический трактат о воздухе и огне», где он описал получение и свойства «огненного воздуха» и указал, что атмосферный воздух состоит из двух «видов воздуха»: «огненного» - кислорода и «флогистированного» - азота (Шееле до конца жизни оставался сторонником теории флогистона). Однако приоритет открытия кислорода принадлежит Джозефу Пристли, который описал его в 1774 г. независимо от Шееле. В 1778 г. Шееле открыл два новых металла - молибден и вольфрам. Им выделены и описаны свыше половины известных в XVIII в. органических соединений, в т.ч. виннокаменная (1769), молочная (1780), мочевая (1776), циануровая, бензойная и слизевая кислоты, этиловые эфиры уксусной, бензойной и др. кислот. В труде «Исследования и заметки об эфире» (1782) Шееле дал определение термина «эфир» и описал способы получения эфиров, отметив, что их образование проходит лучше при добавлении уксусной кислоты. В 1782 г. он выделил синильную кислоту из жёлтой кровяной соли и высказал предположение о том, что она может быть получена действием аммиака на раскалённый уголь. Шееле впервые описал способы выделения щавелевой, лимонной (1784), яблочной (1785) и пирогалловой (1786) кислот .
Шарль Огтостен де Кулон (1736—1806) Шарль Огтостен Кулон родился в Ангулеме, который находится на юго-западе Франции. Его отец, Анри Кулон, в свое время пытавшийся сделать военную карьеру, к моменту рождения сына стал правительственным чиновником. Ангулем не был постоянным местом жительства семьи Кулонов, через некоторое время после рождения Шарля она переехала в Париж. Мать Шарля, урожденная Катрин Баже, происходившая из знатного рода де Сенак, хотела, чтобы ее сын стал врачом. Исходя из итого замысла, она выбрала учебное заведение, которое поначалу посещал Шарль Огтостен — Коллеж четырех наций, известный также как Коллеж Мазарини . Дальнейшую судьбу Кулона определили события, которые произошли в жизни его семьи. Анри Кулон, не обладавший, видимо, серьезными способностями в финан- совой области, разорился, пустившись в спекуляции, вследствие чего был вынужден уехать из Парижа на родину, в Монпелье, на юг Франции. Там проживало много влиятельных родственники, которые могли помочь неудачливому финансисту. Его супруга не желала последовать за мужем и осталась в Париже вместе с Шарлем и с младшими сестрами. Однако юный Кулон недолго прожил с матерью. Его интерес к математике настолько возрос, что он объявил о решении стать ученым. Конфликт между матерью и сыном привел к тому, что Шарль Кулон покинул столицу и переехал к отцу в Монпелье. Двоюродный брат отца Луи, занимавший видное положение в Монпелье, знал многих членов Королевского научного общества города. Вскоре обществу он представил своего племянника Шарля. В феврале 1757 года на заседании Королевского научного общества молодой любитель математики прочел свою первую научную работу «Геометрический очерк среднепропорциональных кривых». Поскольку работа заслужила одобрение членов общества, то вскоре начинающий исследователь был избран адъюнктом по классу математики. В дальнейшем Шарль Кулон принимал активное участие в работе общества и представил еще пять мемуаров — два по математике и три по астрономии. Его интерес к астрономии был вызван наблюдениями, которые он проводил вместе с другим членом Общества Монпелье — де Раттом. Шарль участвовал в наблюдениях кометы и лунного затмения, результаты которых он и представил в виде мемуаров. Интересовали Кулона и теоретические вопросы астрономии: одна из его работ была посвящена определению линии меридиана. В феврале 1760 года Шарль поступил в Мезьерскую школу военных инженеров. На его счастье, в школе работал преподаватель математики аббат Шарль Боссю, ставший впоследствии известным ученым. Сблизившись с Боссю во время учебы в Мезьере на почве интереса к математике, Кулон в течение многих лет поддерживал с ним дружеские отношения Еще одним важным источником знаний, пригодившихся в дальнейшем Шарлю Кулону
в научной работе, были лекции по экспериментальной физике, которые летом 1760 года начал читать в школе известный французский естествоиспытатель аббат Нол- ле. В ноябре 1761 года Шарль окончил Школу и получил назначение — в крупный порт на Западном побережье Франции — Брест. Затем он попал на Мартинику. За восемь лет, проведенных там, он несколько раз серьезно болел, но каждый раз возвращался к исполнению своих служебных обязанностей. Болезни эти не прошли бесследно, после возвращения во Францию Кулон уже не мог чувствовать себя совершенно здоровым человеком. Несмотря на все эти трудности, Кулон очень хорошо справлялся со своими обязанностями. Его успехи в деле строительства форта на Монтгарнье были отмечены повышением в чине - в марте 1770 года он получил чин капитана — по тем временам это можно было рассматривать как очень быстрое продвижение по службе. Вскоре Кулон вновь серьезно заболел и, наконец, подал рапорт с прошением о переводе во Францию. После возвращения на родину Шарль Кулон получил назначение в Бушей. Здесь он завершает исследование, начатое еще во время службы в Вест-Индии. Хотя Кулон с присущей ему скромностью относил себя к «остальным работникам», в действительности многие идеи, сформулированные им в первой же научной работе, до сих пор рассматриваются специалистами по сопротивлению материалов как основополагающие . По традиции того времени весной 1773 года Кулон представил свой мемуар в Парижскую академию наук. Он зачитал мемуар на двух заседаниях Академии в марте и апреле 1773 года. Работа была воспринята с одобрением. Академик Боссю, в частности, писал: «Под этим скромным названием мсье Кулон охватил всю архитектурную статику. .. Повсюду в его исследовании мы отмечаем глубокое знание анализа бесконечно малых и мудрость в выборе физических гипотез, а также в их применении. Поэтому мы полагаем, что эта работа вполне заслуживает одобрение Академии и достойна публикации в Собрании работ иностранных ученых». В 1774 году Кулона переводят в крупный порт Шербур. Кулон был рад этому назначению — он считал, что именно в портовом городе военный инженер может найти наилучшее применение своим знаниям и способностям. В Шербуре, где Шарль Кулон служил до 1777 года, он занимался ремонтом ряда фортификационных сооружений. Эта работа оставляла достаточно свободного времени, и молодой ученый продолжил свои научные исследования. Основной темой, которой интересовался в это время Кулон, была разработка оптимального метода изготовления магнитных стрелок для точных измерений магнитного поля Земли. Эта тема была задана на конкурсе, объявленном Парижской академией наук. Победителями конкурса 1777 года были объявлены сразу двое — шведский ученый ван Швинден, уже выдвигавший работу на конкурс, и Кулон. Однако для истории науки наибольший интерес представляет не глава мемуара Кулона, посвященная магнитным стрелкам, а следующая глава, где анализируются механические свойства нитей, на которых подвешивают стрелки. Ученый провел цикл экспериментов и установил общий порядок зависимости момента силы деформации кручения от угла закручивания нити и от ее параметров: длины и диаметра.
Малая упругость шелковых нитей и волос по отношению к кручению позволяла пренебречь возникающим моментом упругих сил и считать, что магнитная стрелка в точности следует за вариациями склонения. Это обстоятельство и послужило для Шарля Кулона толчком к изучению кручения металлических нитей цилиндрической формы. Результаты его опытов были обобщены в работе «Теоретические и экспериментальные исследования силы кручения и упругости металлических проволок», законченной в 1784 году. Картина деформаций, нарисованная Кулоном, конечно, во многих своих чертах отличается от современной. Однако общая причина возникновения неупругих деформаций — сложная зависимость сил межмолекулярного взаимодействия от расстояния между молекулами — указана Кулоном правильно. Глубину его идей о природе деформаций отмечали многие ученые XIX веке, в том числе такие известные, как Юнг. Постепенно Шарль Кулон все сильнее втягивался в научную работу, хотя нельзя сказать, что он безразлично относился к своим обязанностям военного инженера. В 1777 году Кулона снова переводят, теперь на восток Франции в небольшой городок Салэн. В начале 1780 года он уже в Лилле, и везде Кулон находит возможность для проведения научных исследований. В Лилле Шарль Кулон прослужил недолго. Сбылась его мечта — в первой половине сентября 1781 года военный министр объявил о переводе Кулона в Париж, где он должен был заниматься инженерными вопросами, связанными с печально известной крепостью-тюрьмой Бастилией. 30 сентября он был награжден Крестом Святого Людовика. Оправдались и его надежды, связанные с Парижской академией наук. 12 декабря 1781 года Кулон был избран в академию по классу механики. Переезд в столицу означал не только изменение места службы и круга обязанностей. Это событие привело к качественному изменению тематики научных исследований Кулона Шарль Кулон провел цикл опытов, в которых изучил важнейшие особенности явления трения. Прежде всего, он исследовал зависимость силы трения покоя от продолжительности контакта тел. Им было установлено, что у одноименных тел, например дерево — дерево, продолжительность контакта сказывается незначительно. При контакте разноименных тел коэффициент трения покоя возрастает в течение нескольких суток. Кулон также отметил так называемое явление застоя: сила, необходимая для перевода тел, находящихся в контакте, из состояния покоя в состояние относительного движения, значительно превосходит силу трения скольжения. Своими опытами Шарль Кулон заложил основы изучения зависимости силы трения скольжения от относительной скорости соприкасающихся тел. Особое значение работы Кулона для практики состоит в том, что при проведении экспериментов он использовал большие нагрузки, близкие к тем, что встречаются в реальной жизни: их масса доходила до 1000 кг. Эта особенность исследований Кулона обусловила долгую жизнь его результатов — данные измерений, содержавшиеся в мемуаре «Теория простых машин», использовались инженерами на протяжении почти целого столетия. В области теории заслуга Кулона состоит в создании достаточно полной механической картины трения. К исследованиям на эту тему он вернулся через десять лет. В 1790 году Кулон представил в академию мемуар «О трении в острие опоры». В нем ученый исследовал трение, возникающее при верчении и катании. А в 1784 году Кулон занялся
вопросом о внутреннем трении в жидкости. Ученый сумел дать его более полное решение много лет спустя, в работе 1800 года, которая называлась «Опыты, посвященные определению сцепления жидкостей и закона их сопротивления при очень медленных движениях». Особенно тщательно Кулон исследует зависимость силы сопротивления от скорости движения тела. В его опытах скорость движения тела варьируется от долей миллиметра до нескольких сантиметров в секунду - в итоге Шарль Кулон приходит к выводу, что при очень малых скоростях сила сопротивления пропорциональна скорости, при больших скоростях она становится пропорциональной квадрату скорости. Исследование кручения тонких металлических нитей, выполненное Кулоном для конкурса 1777 года, имело важное практическое следствие — создание крутильных весов. Этот прибор мог использоваться для измерения малых сил различной природы, причем он обеспечил чувствительность, беспрецедентную для XVIII века. Разработав точнейший физический прибор, Кулон стал искать ему достойное применение. Ученый начинает работу над проблемами электричества и магнетизма. Его семь мемуаров представляют реализацию редкой для XVIII века по широте программы исследований. Важнейшим результатом, полученным Кулоном в области электричества, было установление основного закона электростатики — закона взаимодействия неподвижных точечных зарядов. Экспериментальное обоснование знаменитого «закона Кулона» составляет содержание первого и второго мемуаров. Там ученый формулирует фундаментальный закон электричества: «Сила отталкивания двух маленьких шариков, наэлектризованных электричеством одной природы, обратно пропорциональна квадрату расстояния между центрами шариков» . В третьем мемуаре Кулон обратил внимание на явление утечки электрического заряда. Основным результатом стало установление экспоненциального закона убывания заряда с течением времени. В следующем, одном из самых коротких мемуаров серии Кулон рассмотрел вопрос о характере распределения электричества между телами. Он доказал, что «электрический флюид распространяется во всех телах в соответствии с их формой». Пятый и шестой мемуары посвящены количественному анализу распределения заряда между соприкасающимися проводящими телами и определению плотности заряда на различных участках поверхности этих тел. Применительно к магнетизму Шарль Кулон пытался решить те же задачи, что и для электричества. Описание экспериментов с постоянными магнитами составляет существенную часть второго мемуара и практически весь седьмой мемуар серии. Ученому удалось уловить некоторые своеобразные черты магнетизма. В целом, однако, общность полученных Кулоном результатов в области магнетизма гораздо меньше, чем общность закономерностей, установленных для электричества. Таким образом, Кулон заложил основы электростатики и магнитостатики. Им были получены экспериментальные результаты, имеющие как фундаментальное, так и прикладное значение. Для истории физики его эксперименты с крутильными весами имели важнейшее значение еще и потому, что они дали в руки физиков метод определения единицы электрического заряда через величины, использовавшиеся в механике: силу и расстояние, что позволило проводить количественные исследо-
вания электрических явлений. Последний мемуар Кулона из серии по электричеству и магнетизму был представлен в Парижскую академию наук в 1789 году. В декабре 1790 года Кулон подал прошение об отставке. В апреле следующего года его прошение было удовлетворено, и он начал получать пенсию в размере 2240 ливров в год, которая, правда, через несколько лет была значительно уменьшена. К концу 1793 года политическая обстановка в Париже еще более обострилась. Поэтому Шарль Кулон решил перебраться подальше от Парижа. Он вместе с семьей переезжает в свое поместье близ Блуа. Здесь ученый проводит почти полтора года , спасаясь от политических бурь. Кулон жил в деревне до декабря 1795 года Возвращение в Париж произошло после избрания Кулона постоянным членом отделения экспериментальной физики Института Франции — новой национальной академии. Когда именно Кулон стал семейным человеком, неясно. Известно лишь, что жена ученого Луиза Франсуаза, урожденная Дезормо, была значительно моложе его. Официально их брак был зарегистрирован лишь в 1802 году, хотя первый сын Кулона, названный в честь отца Шарлем Опостеном, родился в 1790 году. Второй сын, Анри Луи, родился в 1797 году. Последние годы жизни он посвящает организации новой системы образования во Франции. Поездки по стране окончательно подорвали здоровье ученого. Летом 1806 года он заболел лихорадкой, с которой его организм уже не смог справиться. Кулон скончался в Париже 23 августа 1806 года. Шарль Кулон оставил довольно значительное наследство супруге и сыновьям. В знак уважения к памяти о Кулоне оба его сына были определены на государственный счет в привилегированные учебные заведения.
Джозеф Пристли (1733—1804) Английский химик, философ и общественный деятель Джозеф Пристли родился в Филдхеде (близ Лидса, графство Йоркшир) в семье ткача. В юности Пристли изучал теологию и даже читал проповеди в протестантской общине. В 1752 г. он поступил в Духовную академию в Девентри, где кроме теологии занимался философией, естествознанием, изучил языки - французский, итальянский, латинский, немецкий, древнегреческий, арабский, сирийский, халдейский, древнееврейский. В 1755 г. Пристли стал священником, однако в 1761 г. был обвинен в свободомыслии и стал преподавателем языков в Уоррингтонском университете . Здесь Пристли впервые прослушал курс химии и настолько увлёкся ею, что оставил прежние занятия и приступил к изучению естествознания и проведению химических экспериментов. По предложению Бенджамена Франклина, американского учёного и будущего президента США, Пристли в 1767 г. написал монографию «История учения об электричестве» . За эту работу Пристли был избран почётным доктором Эдинбургского университета. Тогда же Пристли приступил к своим химическим экспериментам. Учёный заинтересовался прежде всего пневматической химией; он начал изучать «воздух», выделяющимся при брожении и не поддерживающим дыхания и горения. В 1771 г. Пристли сделал замечательное открытие: он подметил, что зелёные растения на свету продолжают жить в атмосфере этого газа и даже делают его пригодным для дыхания. Классический опыт Пристли с живыми мышами под колпаком, где воздух «освежается» зелеными ветками, вошёл во все элементарные учебники естествознания и лежит у истоков учения о фотосинтезе. Этот «связанный воздух» - углекислый газ - За 15 лет до Пристли открыл Джозеф Блэк, но более подробно изучил его и выделил в чистом виде именно Пристли. В 1772-1774 гг. Пристли детально исследовал полученный им при взаимодействии поваренной соли и серной кислоты «солянокислый воздух» - хлористый водород, который он собрал над ртутью. Действуя разбавленной азотной кислотой на медь, получил «селитряный воздух» - окись азота; на воздухе этот бесцветный газ бурел, превращаясь в диоксид азота. Пристли же открыл и закись азота. Следующим его открытием был «щелочной воздух» - аммиак. Крупнейшим вкладом Пристли в химию газов стало открытие им кислорода, сделанное летом 1774 г. Учёный наблюдал выделение кислорода при нагревании без доступа воздуха оксида ртути, находящегося под стеклянным колпаком, с помощью линзы. Газ Пристли собирал в ртутную пневматическую ванну. В собранный газ Пристли из любопытства внес тлеющую свечу, которая вспыхнула необыкновенно ярко. Пристли счёл полученный им газ «дефлогистированным воздухом», который особенно хорошо поддерживает горение из-за своей большей по сравнению с обычным воздухом способности поглощать флогистон. Через два месяца после открытия кислорода Пристли, приехав в Париж, познакомил с результатами своих опытов Лавуазье. Французский химик, активно занимавшийся исследованиями процессов горения, тотчас понял громадное значение открытия Пристли, и использовал его для создания своей кислородной теории. Пристли же, напротив, оставался убеждённым сторонником флогистонной теории и защищал свои представления даже после того, как кислородная теория Лавуазье, получила всеобщее признание.
Помимо занятий химией, Пристли принимал активное участие в политической жизни. Он выступал против английского колониального господства в период Войны За независимость в Северной Америке 1775-1783 гг. , восторженно приветствовал Великую французскую революцию, был активным членом Общества друзей революции. 14 июля 1791 г. , когда Пристли со своими единомышленниками собрались в его доме, чтобы отметить годовщину взятия Бастилии, толпа сожгла его дом, где находились лаборатория и библиотека. Пристли перебрался в Лондон, а в 1794 г. эмигрировал в США, в Нортамберленд, штат Пенсильвания, где провёл последние десять лет своей жизни.
Генри Кавендиш (1731-1810) Генри Кавендиш родился 10 октября 1731 г. в Ницце, где у его отца был свой особняк. По происхождению он принадлежал к самой высокой английской знати: со стороны отца его дедом был герцог Девонширский, а со стороны матери - герцог Кентский. Среди ученых по родовитости с Кэвендишем можно сравнить только основателя квантовой механики принца Луи де Бройля. Образование Кэвендиш получил в частной школе, а в 174 9 г. поступил в Кембриджский университет. Но проучился в университете только три года и бросил его, не получив даже степени бакалавра. В последующие годы Кэвендиш объездил всю Европу, а затем поселился в Лондоне и занялся физическими исследованиями. Свою первую выдающуюся научную работу "О составных частях воздуха" Кэвендиш все-таки опубликовал. В ней он установил, что воздух является смесью нескольких газов, один из которых горючий (Лавуазье впоследствии назвал его "кислородом"). В дальнейшем Кэвендиш открыл водород, более того он установил, что вода (жидкость) представляет собой химическое соединение двух газов (впоследствии известных как "водород" и "кислород"). Все эти результаты "переоткрыл" французский физик Лавуазье спустя почти 30 лет. Путем тончайших измерений Кэвендиш установил, что в воздухе кроме кислорода и азота имеется еще один газ, составляющий 1/120 часть объема воздуха. Это открытие повторил спустя 120 (!) лет английский физик лорд Релей, который назвал этот газ аргоном. В 1771 г. Кэвендиш построил тончайший измерительный инструмент - крутильные весы и открыл закон электростатического притяжения зарядов, который через 14 лет "переоткрыл" Ш.Кулон. Но крутильные весы пригодились Кэвендишу для других целей: в 1797 г. он измерил силу гравитационного притяжения между двумя металлическими шарами и экспериментально установил гравитационную постоянную. После этого вычисление массы Земли и планет стало легкой задачкой. Опыты с электрическими зарядами были любимым направлением деятельности Кэ- вендиша. Он занимался конденсаторами и описал распределение зарядов в конденсаторах. Он занимался изучением прохождения электрического тока в жидкостях, установил, что сила тока зависит и от расстояния между электродами, и от концентрации солей, и от других факторов. Поскольку приборов для измерения силы тока не было, то Кэвендиш измерял ток по... болевому ощущению при прохождении тока через палец - чем сильнее боль, чем больше ток. В 1773 г. Кэвендиш сформулировал закономерность, которую затем назвали законом Ома. Занимаясь научными исследованиями (даже трудно перечислить, что он успел сделать) , Генри Кэвендиш прожил долгую жизнь - он умер 10 марта 1810 г. Он оставил после себя богатейшую научную библиотеку и большое количество дневников и записей, которые постепенно начали разбирать исследователи. Только тогда англичане начали понимать, какой это был первоклассный ученый. Но по- настоящему великое имя Кэвендишу создал другой великий английский ученый Джеймс Клерк Максвелл. Он сам разбирал записи Кэвендиша, повторял его эксперименты, а в 1879 г. опубликовал книгу о великом соотечественнике. Большинство научных работ Кавендиша не публиковалось вплоть до 1921 года, и даже сейчас несколько ящиков, заполненных рукописями и приборами, назначение
которых не поддается определению, остаются неразобранными. А то немногое, что известно, выглядит весьма необычно. Кавендиш проводил научные эксперименты, на целые столетия опережая своё время. Так, например, он рассчитал отклонения световых лучей, обусловленные массой Солнца, За 200 лет до Альберта Эйнштейна, и расчёты его почти совпадают с эйнштейновскими. Он точно вычислил массу нашей планеты и был в состоянии выделять лёгкие газы из атмосферного воздуха. В то же время он ничуть не заботился ни о публикации своих работ, ни о каком- либо признании учёным миром. Генри Кавендиш был невероятно странным человеком. Он мог бы прославиться уже при жизни, ведь только в области электричества он открыл закон Кулона на 14 лет раньше, чем сам Кулон, а закон Ома - на 54 года раньше, чем сам Ом. Но...Кэвендиш принципиально не печатал результаты своих исследований, они стали известны намного позже, когда другие ученые их напечатали. Будучи весьма родовитым и богатым человеком, Кэвендиш уединился в своем имении, не хотел ни с кем видеться, более того, он принципиально не хотел видеть женщин. Своим служанкам и горничным он оставлял записки в условленных местах. Той служанке, которой удавалось случайно увидеть барина, грозило немедленное увольнение. Завещание учёного содержало категорическое требование, чтобы склеп с его гробом сразу после похорон был наглухо замурован, а снаружи не было никаких надписей, указывающих, кто в этом склепе похоронен. Так и было сделано. Ка- вендиша похоронили 12 марта 1810 года в соборе в Дерби. Ни осмотра тела, ни вскрытия трупа не производили. И ни одного достоверного портрета Кавендиша тоже не сохранилось. В настоящее время имя Кэвендиша носит прославленная физическая лаборатория в Кембридже, а также ряд школ и других учебных заведений.
Бенджамин Франклин (1706-1790) Американский просветитель, государственный деятель и ученый, родился в Бостоне (шт. Массачусетс) 17 января 1706. Учился в местной школе до 10 лет, затем работал в свечной мастерской отца и типографии старшего брата. В 17 лет переехал в Филадельфию, где нашел работу в типографии. В 1724 был послан в Лондон для закупки типографского оборудования. В 1727 основал собственное дело, в 1729-1748 издавал «Пенсильванскую газету», в 1732-1758 - ежегодник «Альманах бедного Ричарда». Служил секретарем Пенсильванской ассамблеи в 1736-1751, был членом ассамблеи от Филадельфии в 1751-1764, почтмейстером Филадельфии в 1737-1753, заместителем генерального почтмейстера колоний в 1753-1774. Франклин самостоятельно изучил французский, испанский, итальянский языки, освоил латынь. В 1727 организовал дискуссионный клуб «Джунто»; много времени посвящал научным опытам. Заинтересовался явлением электричества в 1746, когда в филадельфийскую библиотеку прислали «электрическую трубку». Для проверки гипотезы о сходстве молнии и электричества Франклин летом 1752 провел знаменитый эксперимент с воздушным змеем, благодаря которому и стал известен как ученый. Из этого эксперимента впоследствии родилась идея молниеотвода, а затем и общая теория электрических явлений, а также связанная с ней новая терминология (понятия положительного и отрицательного электричества, проводника, батареи и т.п.). Франклин объяснил принцип действия лейденской банки и роль диэлектриков, явление растекания капель масла по поверхности воды и эффект увеличения скорости звука в воде. Он первым назвал Гольфстрим Гольфстримом и стал пионером его научного исследования. Изобрел «электрическое колесо» и лампу для уличных фонарей, экономную «Франклиновскую печь» и способ электрического поджигания пороха, бифокальные очки и уникальный музыкальный инструмент . В области философии поддерживал концепцию естественных и неотъемлемых прав человека. Предложил т.н. «трудовую» теорию стоимости и знаменитое определение человека как животного, создающего орудия труда. Отстаивал идеи разума, свободы и демократии, организовал первую в Америке публичную библиотеку (1731), Американское философское общество (1743), Филадельфийскую академию (1751), ставшую основой Пенсильванского университета. В 1776 г. был направлен в качестве посла во Францию с целью добиться союза с нею против Англии, а также займа. Был избран членом академии многих стран, в том числе и Российской академии наук (1789 г.) Один из авторов американской Конституции (1787 г.). Автор афоризма «Время — деньги» (из «советов молодому купцу», 1748 г.). Изобрел кресло-качалку и получил патент на конструкцию. Изобрел громоотвод и отказался его патентовать. Франклин скончался 17 апреля 1790 г. На его похороны собралось около 20 тыс. человек.
Готфрид Вильгельм фон Лейбниц (164 6—1716) Готфрид Вильгельм родился в семье профессора философии морали (этики) лейп- ^^^^^^^^^^^^^^^^^^^^^Ш цигского университета Фридриха Лейбница и Катери- ^^^^^^^^^^^^^^^^^^^^^Ш ны Шмюк. Когда мальчику было 8 лет, его отец умер, оставив после себя большую личную библиотеку. Свободный доступ к книгам и врождённый талант позволили молодому Лейбницу уже к 12 годам самостоятельно изучить латынь и взяться за изучение греческого языка. В 15-летнем возрасте (1661) Готфрид сам поступил в тот же Лейпцигский университет, где когда- то работал его отец. В свою бытность студентом он познакомился с работами Кеплера, Галилея и других учёных. Спустя 2 года переходит в Иенский университет, где изучает математику. Затем возвращается в Лейпциг изучать право, но получить докторскую степень там не удалось. Расстроенный отказом, Лейбниц отправился в Нюрнбергский университет в Альтдорфе, где успешно защищает диссертацию на соискание степени доктора права. Диссертация была посвящена разбору вопроса о запутанных юридических случаях. Защита состоялась 5 ноября 1666 года; эрудиция, ясность изложения и ораторский талант Лейбница вызывают всеобщее восхищение. В этом же году он написал первое из своих многочисленных сочинений: «О комбинаторном искусстве». Опередив время на два века, 20-летний Лейбниц задумал проект математизации логики. Будущую теорию (которую он так и не завершил) он называет «всеобщая характеристика». Она включала все логические операции, свойства которых он ясно представлял. Закончив обучение, он устраивается советником курфюрста Майнцского по юридическим и торговым делам. Еще во время своего пребывания в Нюрнберге Лейбниц познакомился случайно с бывшим министром майнцского курфюрста Иоганном Христианом фон Бойенбургом. Курфюрст Майнца, Иоганн Филипп фон Шёнбронн, взял молодого Лейбница к себе на службу в 1670 году. Лейбниц был назначен ревизионным канцелярским советником. Служба продолжалась недолго, в начале 1672 года Лейбниц с важной дипломатической миссией покинул Майнц, в конце того же года умер фон Бойенбург, а в начале следующего - и сам курфюрст. Работа требовала постоянных разъездов по всей Европе; в ходе этих путешествий он подружился с Гюйгенсом, который согласился обучать его математике. В это время Лейбниц изобретает собственную конструкцию арифмометра, гораздо лучше паскалевского — он умел выполнять умножение, деление и извлечение корней. Предложенные им ступенчатый валик и подвижная каретка легли в основу всех последующих арифмометров. 1668: По некоторым данным, Лейбниц вступил в тайное общество розенкрейцеров . Во время своего пребывания в Нюрнберге, он, в любом случае, был знаком с некоторыми членами этой загадочной организации. В частности, к этому обществу принадлежал его родственник, Юстин Якоб Лейбниц, занимавший пост сеньора Ми-
нистерства духовных дел. 1673: Лейбниц в Лондоне, где на заседании Королевского общества демонстрирует свой арифмометр и избирается членом Общества. От Ольденбурга, президента Общества, он получает изложение ньютоновских открытий: анализ бесконечно малых и теория бесконечных рядов. Сразу оценив мощь метода, он сам начинает его развивать. В частности, он вывел первый ряд для числа п: 7Г 1 1 1 1 4 ~ ~ 3 + 5 ~ 7 + 9~ 1675: Лейбниц завершает свой вариант математического анализа, тщательно продумывает его символику и терминологию, отражающую существо дела. Почти все его нововведения укоренились в науке. Лишь термин «интеграл» ввёл Якоб Бер- нулли (1690), сам Лейбниц вначале называл его просто суммой. По мере развития анализа выяснилось, что символика Лейбница, в отличие от ньютоновской, отлично подходит для обозначения многократного дифференцирования , частных производных и т. д. На пользу школе Лейбница шла и его открытость , массовая популяризация новых идей, что Ньютон делал крайне неохотно. 1676: вскоре после смерти курфюрста Майнцского Лейбниц переходит на службу к герцогу Брауншвейг-Люнебургскому (Ганновер), которую не оставил до конца жизни. Он одновременно советник, историк, библиотекарь и дипломат. По поручению герцога составляет историю рода Гвельфов-Брауншвейгов; за 40 лет трудов Лейбниц успел довести её до 1005 года. Лейбниц продолжает математические исследования, открывает «основную теорему анализа», обменивается с Ньютоном несколькими любезными письмами, в которых просил разъяснить неясные места в теории рядов. Уже в 1676 году Лейбниц в письмах излагает основы математического анализа. Объём его переписки колоссален . 1682: основал научный журнал Acta Eruditorum, сыгравший значительную роль в распространении научных знаний в Европе. Привлекает к исследованиям братьев Бернулли, Якоба и Иоганна. 1698: умирает герцог Брауншвейгский. Его наследник оставляет Лейбница на службе, но относится к нему пренебрежительно. 1700: Лейбниц основывает Берлинскую Академию наук и становится её первым президентом. Избирается иностранным членом Парижской Академии наук. В 1697 году, во время путешествия Петра I по Европе, русский царь познакомился с Лейбницом. Это была случайная встреча в ганноверском замке Коппен- брюк. Во время торжеств 1711, посвященных свадьбе наследника престола Алексея Петровича с представительницей правящего ганноверского дома, принцессой Бра- уншвейгской Софией Христиной, состоялась их вторая встреча. На этот раз встреча имела заметное влияние на императора. В следующем году Лейбниц имел более продолжительные встречи с Петром, и, по его просьбе, сопровождал его в Теплиц и Дрезден. Это свидание было весьма важным и привело в дальнейшем к одобрению Петром создания Академии наук в Петербурге, что послужило началом развития научных исследований в России по западноевропейскому образцу. От Петра Лейбниц получил титул тайного юстиции советника и пенсию в 2000 гульде-
нов. Лейбниц предложил проект научных исследований в России, связанные с ее уникальным географическим положением, таких, как изучение магнитного поля Земли, отыскание пути из Арктики в Тихий океан. Также Лейбниц предложил проект движения за объединение церквей, которое должно было быть создано под эгидой русского императора. 1708: вспыхнул давно тлеющий нелепый приоритетный спор с Ньютоном. 1716: смерть Лейбница. За его гробом шёл только его личный секретарь. Лейбниц стал первым гражданским лицом Германии, которому был воздвигнут памятник .
Сэр Исаак Ньютон (1643—1727) Исаак Ньютон родился 4 января 1643 года в деревушке Вулсторп, около города Грантем, на восточном побережье Англии в семье небогатого фермера, вскоре после смерти отца. Его отец, по сведеньям отчима Исаака, был «чудным, диким и слабым человеком». Мать Ньютона, происходившая из уважаемой в округе семьи, характеризовалась как «женщина исключительных достоинств и доброты» . Родился Исаак, был необычайно хилым и маленьким, и никто не надеялся, что он выживет. Но вопреки всем предсказаниям, он дожил до глубокой старости, отличаясь хорошим здоровьем. Маленького Исаака воспитывала бабушка, поскольку через три года после его рождения его мать вторично вступила в брак и уехала в другой город. В сельской школе Вулсторпа он получил навыки чтения, письма и счёта. В 12 лет мальчика отдали в городскую школу в Грантеме, где он поселился у городского аптекаря Кларка. С детства Исаак любил строить сложные механические игрушки, модели различных машин, солнечные и водяные часы, воздушные змеи и разноцветные бумажные фонарики. В школьные годы он был скрытен, застенчив, избегал шумного общества своих сверстников, но при этом был очень самолюбив. Имеются свидетельства о том, что Ньютон хорошо рисовал, и даже писал стихи. Своим первым физическим опытом Ньютон считал измерение силы ветра во время бури в 1658 году. Сначала он прыгал по направлению ветра, а потом - против. Измерив длину прыжков в первом и во втором случаях, он высчитал силу ветра. В то время аптеки мало, чем отличались от алхимической лаборатории, и у юноши появился интерес к занятиям химией и алхимией, которые привили ему вкус к экспериментам, требующим аккуратности, точности и «чутья». В дальнейшем Ньютон сам шлифовал зеркала и линзы для своих опытов по оптике, превосходя лучших лондонских мастеров. В то же время Исаак увлекался решением сложных математических задач. Это увлечение склонило его родственников к мысли дать ему университетское образование. В 1661 году Ньютон поступает в Тринити-колледж (колледж Святой Троицы) Кембриджа на унизительных правах «сабсайзера» — так назывались бедные студенты, не имевшие возможности платить за свое содержание и поэтому обязанные прислуживать богатым студентам. В течение двух лет Ньютон изучал математику, геометрию, тригонометрию, древние языки — латинский, греческий и еврейский, а также богословие. В сохранившихся документах Тринити-колледжа отмечается прилежность и аккуратность студента И.Ньютона. В 1664 году он становится «действительным студентом», в начале 1665 года получает степень бакалавра вместе с другими 25 студентами Тринити-колледжа. Похоже на то, что значительную часть своих математических открытий Ньютон сделал ещё студентом, в «чумные годы» 1664—1666. В то время, в 1665 году, в Англии свирепствовала эпидемия чумы, от которой умирали тысячи людей. Чтобы
избежать заражения, Ньютон уехал в родной Вулсторп, где погрузился в научную работу. В 23 года он уже свободно владел методами дифференциального и интегрального исчислений, включая разложение функций в ряды и то, что впоследствии было названо формулой Ньютона-Лейбница. Тогда же, по его утверждению, он открыл закон всемирного тяготения, точнее, убедился, что этот закон следует из третьего закона Кеплера. Кроме того, Ньютон в эти годы доказал, что белый цвет есть смесь цветов, вывел формулу «бинома Ньютона» для произвольного рационального показателя (включая отрицательные), и др. Все эти эпохальные открытия были опубликованы на 20-40 лет позже, чем были сделаны. Ньютон не гнался за славой. Стремление открыть истину было у него главной целью. 1667: эпидемия чумы отступает, и Ньютон возвращается в Кембридж. Избран членом Тринити-колледжа, а в 1668 году становится магистром. В 1669 году Ньютон избирается профессором математики, преемником Барроу. Барроу пересылает в Лондон сочинение Ньютона «Анализ с помощью уравнений с бесконечным числом членов», содержавшее сжатое изложение некоторых наиболее важных его открытий в анализе. Оно получило некоторую известность в Англии и за ее пределами. Ньютон готовит полный вариант этой работы, но найти издателя так и не удаётся. Он был опубликован лишь в 1711 году. Продолжаются эксперименты по оптике и теории цвета. Ньютон исследует сферическую и хроматическую аберрации. Чтобы свести их к минимуму, он строит смешанный телескоп-рефлектор (линза и вогнутое сферическое зеркало, которое полирует сам). Всерьёз увлекается алхимией, проводит массу химических опытов. 1672: демонстрация рефлектора в Лондоне — всеобщие восторженные отзывы. Ньютон становится знаменит и избирается членом Королевского общества (британской Академии наук). Позже усовершенствованные рефлекторы такой конструкции стали основными инструментами астрономов, с их помощью были открыты иные галактики, красное смещение и др. Разгорается полемика по поводу природы света с Гуком, Гюйгенсом и другими. Ньютон даёт зарок на будущее: не ввязываться в научные споры. 1680: Ньютон получает письмо Гука с формулировкой закона всемирного тяготения, послужившее, по признанию первого, поводом его работ по определению планетных движений (правда, потом отложенных на некоторое время), составивших предмет «Начал». Впоследствии Ньютон по каким-то причинам, быть может, подозревая Гука в незаконном заимствовании каких-то более ранних результатов самого Ньютона, не желает признавать здесь никаких заслуг Гука, но потом соглашается это сделать, хотя и довольно неохотно и не полностью. 1684—1686: работа над «Математическими началами натуральной философии» (весь трёхтомник издан в 1687 году). Приходит всемирная слава и ожесточённая критика картезианцев: закон всемирного тяготения вводит дальнодействие, несовместимое с принципами Декарта. 1696: Ньютон получил должность смотрителя Монетного двора (этому, очевидно, способствовало то, что Ньютон в 1670-1680-х годах активно интересовался алхимией и трансмутацией металлов). Ньютону было поручено руководство перечеканкой всей английской монеты. Ему удалось привести в порядок расстроенное мо-
нетное дело Англии, за что он получил в 1699 г. пожизненное высокооплачиваемое звание директора Монетного двора. В том же году Ньютон избран иностранным членом Парижской АН. 1699: начало открытого приоритетного спора с Лейбницем, в который были вовлечены даже царствующие особы. Эта нелепая распря двух гениев дорого обошлась науке — английская математическая школа вскоре увяла на целый век, а европейская — проигнорировала многие выдающиеся идеи Ньютона, переоткрыв их много позднее. На континенте Ньютона обвиняли в краже результатов Гука, Лейбница и астронома Флемстида, а также в ереси. Конфликт не погасила даже смерть Лейбница (1716). 1703: Ньютон избран президентом Королевского общества, которым управлял двадцать лет. 1705: королева Анна возводит Ньютона в рыцарское достоинство. Отныне он сэр Исаак Ньютон. Впервые в английской истории звание рыцаря присвоено за научные заслуги. Последние годы жизни Ньютон посвятил написанию «Хронологии древних царств», которой занимался около 40 лет, и подготовкой третьего издания «Начал». В 1725 году здоровье Ньютона начало заметно ухудшаться (каменная болезнь), и он переселился в Кенсингтон неподалёку от Лондона, где и скончался ночью, во сне, 20 (31) марта 1727 года.
Христиан Гюйгенс фон Цюйлихен (1629—1695) Христиан Гюйгенс, голландский математик, астроном и физик, создатель волновой теории света, открыл истинную форму колец Сатурна, и выполнил оригинальные работы в области динамики - исследовал результаты действия на тела различным образом приложенных сил. # 4 Гюйгенс происходил из зажиточной семьи, принадлежавшей к среднему классу. Его отец Константин Гюйгенс , дипломат, латинист и поэт, дружил и переписывался со многими выдающимися и умнейшими людьми своего времени, включая философа и ученого Рене Декарта . С юных лет Христиан демонстрировал выдающиеся способности к механике, математике и черчению. Некоторые из его упражнений по геометрии произвели впечатление и на Декарта, который время от времени посещал дом Гюйгенсов. В 1645 году Гюйгенс поступил в Лейденский университет, где изучал юриспруденцию и математику. Два года спустя он поступил в Бредский колледж - в самую сердцевину недовольных философией Декарта. Хотя Гюйгенс позднее и отверг некоторые принципы Декарта, включая теорию расширения тел, он всегда утверждал, что в науке механическим объяснениям должна отводиться существенная роль, что, в конечном счете, наложило отпечаток на все его дальнейшие математические интерпретации, как оптических явлений, так и гравитации. В 1655 году Гюйгенс впервые посетил Париж, где знатное происхождение, богатство, и культурное поведение открыло ему двери в дома самых верхних слоев интеллигенции и общественных деятелей. Во время своего второго визита в Париж в 1660 году он лично познакомился с Блезом Паскалем, с кем он уже состоял в переписке по поводу математических проблем. Гюйгенс к тому времени уже приобрел Европейскую репутацию своими математическими публикациями, особенно "De Circuli Magnitudine Inventa" от 1654 года, и открытием в 1659 истиной формы колец Сатурна, что стало возможным при помощи усовершенствованного телескопа, для линз которого он применил придуманный им новый метод шлифовки и полировки линз. Используя этот же усовершенствованный телескоп, он в марте 1655 года обнаружил спутник Сатурна, а в 1656 году сумел рассмотреть структуру туманности Ориона. Астрономические интересы Гюйгенса требовали точных измерений времени, что повлекло за собой изобретение конструкции часов, в которых в качестве регулирующего механизма используется маятник, как это описано в его "Horologium..." (1658). В 1666 Гюйгенс стал одним из членов-основателей Французской Академии наук, что предоставляло ему большую пенсию, чем для простых членов академии, а также деньги на построение собственной квартиры. За исключением случайных визитов в Голландию он с 1666 по 1681 год жил в Париже, где и познакомился с немецким философом и математиком Готфридом Вильгельмом Лейбницем, последующую дружбу с которым он поддерживал до конца своей жизни. Основным событием Парижского периода жизни Гюйгенса стала публикация в 1673 году его книги "Horologium Oscillatorium". Эта блестящая работа содержала теорию математических кривых, а также точные решения таких проблем динамики, как получение формулы периода колебаний математического маятника, вращение тел относительно неподвижных осей и законы действия центробежных сил при равномерном движении
по окружности. Некоторые результаты были даны без доказательств в качестве приложений, и не были опубликованы Гюйгенсом до его смерти. Вращение трактовалось на удачном использовании принципа, что в любой системе отсчета центр тяжести должен всегда находиться в покое. Ранее Гюйгенс применял этот же принцип к решению проблемы столкновений, для которой он еще в 1656 году получил точное решение для случая абсолютно упругих тел, хотя результаты оставались неопубликованными до 1669 года. Однажды блестящая логика "Horologium Oscillatorium..." повлияла на Луи XIV, который высказывал мысли против Гюйгенса во время войны Франции с Голландией, который несмотря ни на что продолжал оставаться в Париже. Гюйгенс никогда не отличался хорошим здоровьем, болезни часто вызывали рецидивы и осложнения, одно из которых (в 1670 году) было настолько серьезным, что он серьезно опасался за свою жизнь. Тяжелая болезнь в 1681 году толкнула его на возвращение в Голландию, где он предполагал оставаться только временно. Но смерть в 1683 году его покровителя Жана-Батиста Кольбера, главного консультанта Луи XIV, и чрезвычайно реакционная политика Луи, которая достигла своей высшей точки изданием в 1685 году Нантского эдикта, предоставлявшего определенные свободы протестантам, не способствовали его возвращению в Париж. Гюйгенс в 1689 году посетил Лондон, где встретился с Исааком Ньютоном и прочитал лекции по его собственной теории гравитации перед членами Королевского Общества. Но, хотя он и не вступал в прямую публичную дискуссию с Ньютоном - а это очевидно из корреспонденции Гюйгенса особенно с Лейбницем - и, несмотря на его восхищение математической гениальностью "Principia...", он считал теорию тяготения коренным образом неприемлемой, если она лишена любого механического объяснения. Его собственная теория, опубликованная в 1690 году в книге "Discours de la cause de la pesanteur" ("Соображения о причинах тяготения") , и переизданная в 1669 году, содержала механическое объяснение тяготения, основанное на декартовых вихрях. Книга Гюйгенса "Trait de la Lumire" ("Монография о свете"), в основном, завершенная к 1678 году, также была опубликована только в 1690 году. В ней он снова высказывал необходимость механических объяснений в трактованиях природы света. Но его прекрасные объяснения отражения и преломления света - далеко превосходившие Ньютоновы - были полностью свободными от механических объяснений и базировались исключительно на Гюйгенсовском принципе вторичных волновых фронтов. Гюйгенс имел большой талант математика, но не был гением. Ему иногда доставляли трудности в понимании новые методы Лейбница, но он восхищался Ньютоном из-за своей любви к обобщающим методам. Почти все 18-е столетие его работы, касающиеся динамики и теории света, затмевались работами того же Ньютона. В области тяготения его теории никогда не рассматривались серьезно и в настоящее время представляют только исторический интерес. Но его теория вращающихся тел и вклад в теорию света имеют непреходящее значение. Забытые до начала 19-го века последние сегодня считаются одним из наиболее блестящих и оригинальных вкладов в современную науку, и люди всегда будут помнить принцип, носящий его имя. Последние пять лет жизни Гюйгенса были отмечены непрерывными болезнями, острыми чувствами одиночества и меланхолии. В марте 1695 года он окончательно поправил свое завещание и после мучительных страданий скончался.
Роберт Бойль (1627—1691) Родился в старинной аристократической семье Ричарда Бойля, графа Корка. Первые годы жизни ребенка были не слишком счастливыми. Трех лет от роду он потерял мать, был хилым и болезненным. По существовавшей тогда в аристократических семьях традиции, когда Роберту исполнилось 8 лет, его отдали в Итонский колледж, одно из престижных закрытых учебных заведений Англии. Но отец через три года забрал его оттуда, чтобы направить для продолжения учебы в Европу, в Швейцарию. В Женеве Роберт в течение двух лет изучал математику, философию и юриспруденцию. Потом он предпринял длительное путешествие по Европе, в частности, по Италии, где он с увлечением знакомился с произведениями искусства. 17-ти лет Бойль возвращается в Англию. Потеряв к этому времени и отца и став круглым сиротой, он поселяется у своей сестры, но скоро переезжает в унаследованное им поместье Стальбридж в графстве Дорсетшир. Там он прожил восемь лет и, по-видимому, там он и начал заниматься экспериментированием, хотя ни одной работы за эти годы он не опубликовал. В 1654 начинается новый период в жизни Бойля. Он переезжает в Оксфорд, один из признанных центров тогдашней науки. Будучи состоятельным человеком, Бойль оборудует лабораторию и вместе со своим ассистентом, юным Робертом Гуком, будущим прославленным ученым и членом Королевского общества, приступает в 1655 к опытам. До 1668 Бойль остается директором и научным руководителем этой лаборатории , Появившаяся в 1660 книга, итог этой работы, сразу стала классической. В ней описывался воздушный насос, изобретенный Бойлем и позволивший провести многочисленные эксперименты, и один из основных результатов, вошедший в физику под названием закона Бойля - вывод о том, что давление постоянной массы газа при постоянной температуре обратно пропорционально занимаемому им объему. Этот закон также известен как "Закон Бойля-Мариотта", но Эдм Мариотт установил его лишь в 1676, а опубликовал в 1679. После 1660 интересы Бойля все больше перемещаются в сторону химии. Исследования великого ученого положили начало рождению новой химической науки. Бойль считал, что химия призвана стать одной из основополагающих наук в философии. Если для его современников химия была лишь искусством, помогающим аптекарям готовить лекарства, а алхимикам - искать философский камень, то для Бойля она была самостоятельной наукой со своими собственными задачами и методами. Он прекрасно понимал громадное значение химических знаний для изучения явлений природы и развития ремесел. Бойль был великолепным экспериментатором и неутомимым наблюдателем, что позволило ему сделать открытия в различных областях химии. Круг его интересов был очень широк. Исследуя экстракты различных растений, он заметил, что настои фиалок, лакмусового лишайника и др. изменяют свой цвет под действием кислот и щелочей.
Уже тогда Бойль назвал эти вещества индикаторами. До сегодняшнего дня для определения кислотности растворов современные химики используют изобретенную Бойлем индикаторную бумагу. При исследовании настоя дубильного орешка в воде Бойль обнаружил, что с солями железа он образует раствор черного цвета, который может быть использован в качестве чернил. По разработанным им рецептам почти на протяжении века производились высококачественные черные чернила. Его многолетние исследования показали, что при воздействии на вещества различными реактивами одни из них давали окрашенные растворы, другие выделяли газы с характерными запахами, третьи образовывали окрашенные осадки. Процессы разложения веществ и идентификацию полученных продуктов с помощью характерных реакций Бойль назвал анализом. Систематизируя многочисленные цветные реакции и реакции осаждения, Бойль положил начало развитию аналитической химии. Многие из описанных им реакций до сих пор используются в качественном анализе для определения того или иного вещества. На протяжении практически всей своей научной деятельности внимание Бойля привлекал процесс горения. Ученый обнаружил, что при обжиге металлов зола всегда была тяжелее взятого металла. Бойль сделал ряд открытий, но так и не смог дать правильного объяснения горению, так как, подобно многим ученым того времени, считал, что в огне содержится особый элемент "теплород". Он доказал, что при дыхании и при горении расходуется только часть воздуха. Бойль занимался изучением фосфора. Он впервые синтезировал фосфорную кислоту , газ фосфин и описал их свойства. Разрабатывая лучшие методы получения фосфора, он в 1680 получил белый фосфор, который долгое время называли фосфором Бойля. Бойль внес огромный вклад в развитие теоретических основ химической науки. Он предпринял попытку систематизировать химические вещества, разделить их на группы в соответствии с их свойствами. В книге "Химик-скептик" (1661) он развил свои идеи о химических элементах, изложил основы корпускулярной теории строения вещества применительно к химии. Бойль критиковал учение Аристотеля и алхимиков и пытался объяснить превращения химических веществ на основе атомистических представлений. Элементами Бойль считал простые тела, которые не могут быть получены из других тел. Многие из его учеников и помощников стали впоследствии известными учеными: Вильгельм (Гийом) Гомберг, Ричард Таунли, Иоганн Бехер и др. Бойль ввел в лабораторную практику весы, хотя и небольшой точности (от 1 до 0,5 грана, т. е. 60-30 мг) и разработал способ взвешивания. В 1665 Бойль избирается почетным доктором физики Оксфордского университета, а через 3 года - членом Королевского общества. Еще в Оксфорде Бойль много внимания уделял организации "Философской коллегии", где происходило общение ученых, где они делали доклады и обсуждали их. В Лондоне он принимал активное участие в использовании опыта работы этой
"коллегии" в Королевском обществе и даже в 1680 был избран его президентом, но отказался от этой чести. Бойль опубликовал результаты своих трудов более чем в двух десятках книг, во множестве статей. Его работы получили известность во многих научных центрах Европы. Все книги Бойля написаны по-английски, этим он разрушил традицию издавать научные книги на латинском языке.
Иоганн Рудольф Глаубер (1604—1670) Иоганн-Рудольф Глаубер родился в 1604 году, а юность его пришлась на время опустошительных религиозных войн в Германии. Годы странствий по разоренному отечеству, невзгоды и болезни - и вот, наконец, счастье улыбнулось настойчивому и любознательному юноше: он стал помощником Нойштадтского аптекаря Айснера. За год работы Глаубер набрался опыта и знаний и смог поступить на работу в одну из аптек в Вене. Но Тридцатилетняя война (1618-1648) продолжалась, и молодому аптекарю пришлось переехать сначала в Зальцбург, потом в Кассель, после этого - в Париж. Наконец, в 1644 году Глаубер, который уже стал авторитетным ученым и получил известность как один из искуснейших аптекарей своего времени, был приглашен занять должность управляющего графской аптекой в Гисене. Вот где развернулся его талант химика-исследователя! Именно здесь Глауберу удалось получить из железного купороса весьма чистую серную кислоту, нагревая в реторте кристаллы FeS04'7H20 и отгоняя полученный продукт - "купоросное масло", которое, как выяснилось, могло растворять не только медь, но и медные руды. Позднее, уже в Амстердаме, Глаубер стал использовать для получения серной кислоты также квасцы КА1(SO4) г 12Н20 и "белый витриол" - цинковый купорос ZnS04'7H20, которые ведут себя при нагревании аналогично железному купоросу. Он разработал и способ получения азотной кислоты HNO3 взаимодействием серной кислоты с селитрой KNO3. Концентрированная азотная кислота ("спиритус нитри") оказалась чрезвычайно едкой жидкостью, которая растворяла все металлы (и железо - "марс", и медь - "венеру", и серебро - "луну"), только золото ("солнце") оставалось в азотной кислоте неизменным. Глаубер владел еще одним важным секретом - способом получения "спиритус са- лис" - соляной кислоты НС1 из поваренной соли при действии серной кислоты. Нагревание этой смеси давало бесцветный удушливый газ с резким запахом (хло- роводород), который при поглощении водой давал соляную кислоту. И еще одно несомненное достижение Глаубера - в том, что нагреванием смеси азотной кислоты и нашатыря - хлорида аммония NH4C1 - он получил "царскую водку" - смесь азотной и соляной кислот, которая растворяет даже золото. Переселившись в маленький городок Китцингер близ Амстердама, неутомимый алхимик-аптекарь продолжал свои изыскания, и вскоре научился получать концентрированную уксусную кислоту СН3СООН из винного (этилового) спирта С2Н5ОН... Иоганн Рудольф Глаубер известен не только исследованиями способов получения кислот. На его счету и выделение знаменитой "глауберовой соли" - сульфата натрия Na2S04'10Н2О, и получение множества неизвестных ранее солей - нитратов и хлоридов, выделение аммиака NH3, получение сульфата аммония (NH4)2S04 ("саль аммиак секретум глаубери"), который он использовал как минеральное удобрение в своем саду. Сохранились сведения о том, что великий аптекарь первым выделил и использовал в медицинских целях фенол СбН5ОН (карболовую кислоту) и ряд растительных алкалоидов, успешно занимался стекловарением и разработал способы получения цветного стекла...
В теоретическом плане Глаубер был сторонником ятрохимии и последователем Парацельса. В его сочинениях, опубликованных в семи томах под названием "Glauberi opera omnia" (Амстердам, 1661), содержатся зачатки учения о химическом сродстве. Называя причину, побуждающую вещества к химическим изменениям, сродством (affinitas), Глаубер основывался на мнении древних философов, что соединение, слияние может происходить только тогда, когда соединяющиеся вещества имеют нечто общее, среднее. Глаубер, подобно большинству современников, верил в возможность превращения неблагородных металлов в золото и существование эликсира жизни, секрет приготовления которого он якобы открыл и который продавал по весьма высокой цене. Тем не менее, Глаубер относится к числу тех представителей рациональных течений в алхимии, довольно значительные экспериментальные успехи которых заложили основы для научной химии.
Пьер Ферма (1601-1665) Пьер Ферма родился на юге Франции в городке Бомон-де-Ломань, где его отец - Доминик Ферма - был "вторым консулом", т. е. чем- то вроде помощника мэра. Метрическая запись о его крещении от 20 августа 1601 года гласит: "Пьер, сын Доминика Ферма, буржуа и второго консула города Бомона". В колледже Пьер приобрел хорошее знание языков: латинского, греческого, испанского, итальянского. Ферма славился как тонкий знаток античности, к нему обращались за консультацией по поводу трудных мест при изданиях греческих классиков. Но Ферма направил всю силу своего гения на математические исследования. И все же математика не стала его профессией. Ферма избирает юриспруденцию. Степень бакалавра была ему присуждена в Орлеане. С 1630 года Ферма переселяется в Тулузу, где получает место советника в Парламенте (т. е. суде) . В 1631 году Ферма женился на своей дальней родственнице с материнской стороны - Луизе де-Лонг. У Пьера и Луизы было пятеро детей, из которых старший , Самюэль, стал поэтом и ученым. Ему мы обязаны первым собранием сочинений Пьера Ферма, вышедшим в 1679 году. Ни одно из его сочинений не было опубликовано при жизни. Однако нескольким трактатам он придал вполне законченный вид, и они стали известны в рукописи большинству современных ему ученых. Одной из первых математических работ Ферма было восстановление двух утерянных книг Аполлония "О плоских местах". Крупную заслугу Ферма перед наукой видят, обыкновенно, во введении им бесконечно малой величины в аналитическую геометрию, подобно тому, как это, несколько ранее, было сделано Кеплером в отношении геометрии древних. Он совершил этот важный шаг в своих относящихся к 1629 году работах о наибольших и наименьших величинах, - работах, открывших собою тот ряд исследований Ферма, который является одним из самых крупных звеньев в истории развития не только высшего анализа вообще, но и анализа бесконечно малых в частности. До Ферма систематические методы вычисления площадей разработал итальянский ученый Кавальери. Но уже в 1642 году Ферма открыл метод вычисления площадей, ограниченных любыми "параболами" и любыми "гиперболами". Им было показано, что площадь неограниченной фигуры может быть конечной. Ферма одним из первых занялся задачей спрямления кривых, т. е. вычислением длины их дуг. Он сумел свести эту задачу к вычислению некоторых площадей. Дальнейший успех методов определения "площадей", с одной стороны, и "методов касательных и экстремумов" - с другой, состоял в установлении взаимной связи этих методов. 18 октября 1640 года Ферма высказал следующее утверждение: Для любого простого р и целого а, (ар — а) делится на р. Это утверждение получило название малой теоремы Ферма. Оно является основным во всей элементарной теории чисел.
В задаче второй книги своей "Арифметики" Диофант поставил Задачу представить данный квадрат в виде суммы двух рациональных квадратов. На полях, против этой задачи, Ферма написал: "Наоборот, невозможно разложить ни куб на два куба, ни биквадрат на два биквадрата и вообще ни в какую степень, большую квадрата, на две степени с тем же показателем. Я открыл этому поистине чудесное доказательство, но эти поля для него слишком узки". Это и есть знаменитая Великая теорема. Великая теорема стоит на первом месте по числу данных ей неверных доказательств . Сам Ферма оставил доказательство Великой теоремы для четвертых степеней. В прошлом веке Куммер, занимаясь Великой теоремой Ферма, построил арифметику для целых алгебраических чисел определенного вида. Это позволило ему доказать Великую теорему для некоторого класса простых показателей п. В настоящее время справедливость Великой теоремы проверена для всех показателей п меньше 5500. Ферма первым пришел к идее координат и создал аналитическую геометрию. Он занимался также задачами теории вероятностей. Ферма принадлежит открытие закона распространения света в средах. Применив свой метод максимумов и минимумов , он нашел путь света и установил, в частности, закон преломления света. Пьер Ферма скончался 12 января 1665 года во время одной из деловых поездок.
Георгий Агрикола (14 94—1555) Немецкий учёный в области горного дела и металлургии Георг Агрикола [настоящая фамилия Бауэр (Bauer); лат. agricola - земледелец, перевод немецкого слова Bauer] родился в Глаухау. Получил медицинское образование в Лейпцигском университете; продолжил изучение медицины и химии в университетах Болоньи, Венеции, Падуи. В 1518-1522 гг. преподавал в школе в Цвикау (с 1520 г. директор), а в 1522-1523 гг. - в Лейпцигском университете. В 1527 г. Агрикола поселился в качестве практического врача в Йоахимстале в Богемии (ныне Яхимов, Чехия). Переселившись в 1531 г. в Хемниц, он посвятил себя горному делу и металлургии, получил от саксонского курфюрста Мо- рица годовое содержание и готовую квартиру, а впоследствии занял в Хемнице место городского врача и был бургомистром. В этом же городе он и умер 21 ноября 1555 г. Агрикола был первым систематическим минералогом в Германии. Принимая во внимание морфологические признаки ископаемых, он различал простые и сложные минералы и разделял первые на земли, конкреции, камни и металлы. Эта система легла в основание всех дальнейших минералогических работ до XVIII столетия включительно. Агрикола в своих работах обобщил многовековой опыт выплавки металлов из руд, разработал основы химической оценки и переработки серебряных, медных и свинцовых руд; описал производство висмута. Одну из своих книг Агрикола посвятил получению солей (селитры, квасцов, купороса, поваренной соли) и производству стекла. Описывая пробирное искусство (определение содержания драгоценного металла в сплаве - пробы), Агрикола подверг критике как цели алхимиков , так и способы осуществления ими химических операций. Вместе с итальянским учёным Ваноччо Бирингуччо (1480-1539) и французским естествоиспытателем Бернаром Палисси (1499-1589) Агрикола явился одним из основателей т.н. технической химии, ставшей своего рода промежуточным этапом между алхимией и научной химией. Помимо прочего, Агрикола в 154 6 г. обнаружил, что окрашивание пламени может служить характеристикой сжигаемого вещества; одним из первых проследил влияние условий труда на Здоровье работающих. Главный труд Агриколы "De re metallica" (русское название "12 книг о металлах"), законченный в 1550 г. и опубликованный в 1556 г. , многократно переиздавался и вплоть до середины XX века использовался при обучении металлургов и минералогов.
Ликбез ЭВОЛЮЦИЯ Мортон Дженкинс АДАПТИВНАЯ РАДИАЦИЯ Адаптивная радиация — это процесс эволюционного образования видов от одного общего предка. Основу этой концепции заложил французский ученый Жорж Кювье (1769—1832). Он сделал вывод, что с течением длительного периода времени организмы разделились на группы, некоторые из которых являются частью современной классификационной системы. Это представление радикально отличалось от общепринятой в то время аристотелевской концепции «лестницы жизни» (Scala Naturae), которая распределяла все организмы по ступеням, от простейших — в самом низу, до самых сложных (человек) — на вершине. Классический пример адаптивной радиации — дарвиновы вьюрки. Клювы различных видов приспособлены к определенному виду пищи, в зависимости от экологической ниши, в которой они обитают. Они варьируются от массивных клювов птиц, питающихся семенами, и изогнутых клювов тех, кто кормится нектаром цветов, до тонких и стройных клювов насекомоядных. Предполагается, что все эти прекрасно приспособленные виды произошли от менее специализированного предка, случайно
оказавшегося на островах. Изоляция, свойственная организмам изменчивость и борьба за доступные экологические ниши привели к адаптивной радиации, которую открыл Дарвин. Этот процесс ярко проявляется среди пресмыкающихся и птиц, живущих на Галапагосских островах. Если брать высший таксономический уровень, то окаменелые останки свидетельствуют о том, что первые примитивные плацентарные млекопитающие появились в начале эоцена, 58 миллионов лет назад. Среди них был отряд креодонтов (Creodontfl), разделившийся на несколько семейств хищных, в том числе и морских млекопитающих. Сюда же следует отнести больших беззубых китов, имеющих в высшей степени специализированное устройство, фильтрующее пищу (китовый ус) , которое позволяет им выцеживать мелких ракообразных из морской воды. Некоторые из этих китов весят до 20 тонн. Зубатые киты, такие, как кашалот, питаются в основном глубоководными кальмарами, а дельфины приспособились питаться рыбой. См. также статьи «Кювье, Жорж», «Дарвиновы вьюрки», «Ниша». АЛЛОПАТРИЧЕСКОЕ ВИДООБРАЗОВАНИЕ Способ возникновения новых видов зависит от географического расположения. Большинство видов появляется в результате аллопатрического видообразования (алло — другой, патрис — родина), то есть в результате географического разделения некогда единой популяции. Популяция каким-либо образом делится на несколько групп, каждая из которых идет по своему эволюционному пути, пока они не расходятся настолько, что скрещивание между ними становится невозможным. Известный зоолог Эрнст Майр дал следующее определение термина «вид»: «Вид — это группа скрещивающихся или обладающих такой возможностью популяций , которая репродуктивно изолирована от других подобных групп». В небольшой популяции, переселившейся на новое место, могут быстро произойти изменения, связанные с ограниченным количеством особей, такие, как дрейф генов и эффект основателя. Особи этой популяции также ограждены от потока генов со стороны исходной популяции. • Популяции могут разделиться двумя основными способами: Одна небольшая группа особей (а семена растений или беременная самка) отделяется от остальной популяции, и ее потомки оказываются на новом месте. Например, дарвиновы вьюрки оказались в генетической изоляции не только от исходной популяции, но и друг от друга, поскольку на разных островах образовались их видоизмененные формы. • Географическое явление (например, некий огромный барьер) разделило группу на две подгруппы, которые пошли по своему пути развития. Например, два разных вида североамериканских белок, обитающих по разным сторонам Большого каньона в Колорадо, были некогда одной популяцией, разделенной огромным проломом. См. также статьи «Дарвиновы вьюрки», «Эффект основателя», «Дрейф генов», «Географическая изоляция», «Репродуктивная изоляция», «Симпатрическое видообразование» АЛЛОПОЛИПЛОИДИЯ Так называется тип полиплоидной мутации, при которой комбинируются хромосомы двух или более видов. Аллополиплоиды обычно возникают от удвоения хромосом гибрида двух видов; такое удвоение обычно приводит к плодовитости гибрида
(амфиплоидия). Качества гибрида, то есть сила и приспособляемость, передаются аллополиплоидами последующим поколениям, и такие организмы успешно выживают. Наиболее распространенным типом гибридов является аллотетраплоид, который обладает двумя наборами генов от каждого растения-родителя. Русский цитогене- тик Карпеченко (1928) получил новый вид и даже род растений, скрестив разные виды — редьку (Raphinus) и капусту (Brassica) . Эти виды близки друг другу и принадлежат к одному семейству крестоцветных (Cruciferae), представителем которого является и горчица. Каждое растение имеет диплоидный набор из 18 хромосом, но хромосомы редьки содержат некоторые гены, которые не встречаются в хромосомах капусты и наоборот. Гибрид Карпеченко имел в каждой клетке по 18 хромосом, девять от редьки и девять от капусты. Во время мейоза разные наборы генов не могут образовать пары, и гибрид не дает потомства. Однако, помимо обычных генов, образовывались немногочисленные 18-хромосомные гаметы, и в поколении F2 появлялось несколько аллотетраплоидов. Они были полностью плодородными, так как два набора хромосом от редьки и два от капусты обеспечивали образование парных гомологичных хромосом во время мейоза. Аллотетраплоид, или амфидиплоид, получил научное название Paphanobrassica. У этого растения корни напоминали капустные, а листья были как у редьки, но, к сожалению, он не имел экономической ценности. Однако на его примере удалось продемонстрировать принцип образования плодовитых межвидовых и межродовых гибридов. По меньшей мере половина из природных полиплоидов — аллополиплоиды, например культурная пшеница. Она имеет 42 хромосомы, представляющие полный диплоидный набор из 14 хромосом от каждого из трех предков. См. также статью «Мутация». АРХЕОПТЕРИКС Птицы, несомненно, произошли от вымерших типов рептилий. До 1990 годов археологи называли самой ранней птицей археоптерикса (Archaeopteryx lithographica). Его название буквально означает «древнее крыло из литографского камня» и образовано от archaeo — древний, pteryx — крыло и lithographica — обработанный известняк для особого вида печати (литографии). При жизни археоптерикс весил до 270 грамм, а площадь его крыльев составляла 480 квадратных сантиметров, то есть он был размером приблизительно с сороку. У археоптерикса был длинный хвост, как у ящерицы, челюсти, похожие на клюв, острые зубы, но его ключицы были объединены и образовывали вилочковую кость, как у птиц; при этом он был покрыт перьями, похожими на перья современных птиц. Он обитал во время триасовой эпохи, около 140 миллионов лет назад. Окаменелое перо археоптерикса было найдено в 1860 году в обработанном известняке из Золенгофена (Бавария); год спустя научное название ему дал Гермон фон Мейер. В том же году здесь был найден почти целый окаменелый скелет. Сейчас он находится в естественно-историческом отделе Британского музея, куда попал благодаря хранителю музея Ричарду Оуэну, купившему его за 700 фунтов стерлингов. Второй, более полный образец, был найден в 1877 году. Его приобрел Музей Гумбольдта, где он находится до сих пор (так называемый «берлинский экземпляр») . По всей видимости, в юрский период на территории современной Баварии было много мелких грязевых водоемов, куда попадали древние птицы и со време-
нем превращались в окаменелости. За последние 140 лет было обнаружено еще семь окаменелых остатков археоптерикса. В 1994 году крестьяне китайской провинции Ляонин нашли сотни окаменелых остатков древних птиц. Одна из них была названа Confuciusornis sanctus, то есть святая птица Конфуция, и предположительно жила она раньше археоптерикса. В 1996 году были обнаружены останки другой птицы, протоархеоптерикса (Protoarchaeopteryx), которые заставили усомниться в том, что именно археоптерикс был предком современных птиц. Про- тоархеоптерикс, скорее всего, древнее археоптерикса на 30 миллионов лет. См. также статью «Оуэн, Ричард». АУТОПОЛИПЛОИДИЯ Так называется тип полиплоидной мутации, при котором умножается набор хромосом только одного вида (ауто — само, полиплоос — многократный, эйдос — образ , набор хромосом). Аутополиплоиды могут возникать от слияния диплоидных гамет одного и того же вида; такие гаметы образуются вследствие неразделения хромосом при мейозе (тип деления клеток, при котором образуются половые клетки) . Либо они образуются вследствие неразделения хроматид во время развития оплодотворенной яйцеклетки. Гибрид, получившийся в результате аутополиплои- дии, может быть плодовитым или стерильным, в зависимости от набора хромосом. Гибриды с четным количеством гомологичных хромосом (4, 6, 8,.. 28) будут плодовитыми , потому что их хромосомы могут образовывать пары при мейозе. Когда при мейозе образуется нередуцированная диплоидная гамета (2х), она может слиться с нормальной гаплоидной гаметой (х), что приведет к появлению триплоидного потомства. Слияние двух нередуцированных гамет (2х) приведет к появлению аутотетраплоида. Триплоиды могут также возникать от скрещивания ди- плоидов и тетраплоидов. Еще один источник — отсутствие веретена при митозе, что дает прямое удвоение соматических хромосом и ведет к появлению полиплоидной клетки. От удвоенной клетки могут образовываться клетки с набором 4х, 6х или 8х, а затем они образуют полиплоидные части растений, которые имеют набор 2х, Зх или 4х. Аутополиплоиды имеют набор всегда гомологичных друг другу хромосом . Хризантема (Chrysanthemum), чистотел (Ranunculus ficaria), гиацинт (Hyacinthus orientalis) и некоторые разновидности яблок сорта пепин (Malus pumila) — представители именно этого типа полиплоидов. Благодаря искусственно вызванной аутополиплоидии появились более сильные и выносливые разновидности культивируемых растений, таких, как помидоры и сахарная свекла. См. также статьи «Аллополиплоидия», «Мутация». БИОГЕНЕЗ Биогенез — гипотеза, утверждающая, что все живое происходит только от живого. Сегодня это положение считается очевидным, но потребовалось более 300 лет, чтобы оно утвердилось вместо гипотезы абиогенеза. В начале XVIII века ученые, как те, что верили в биогенез, так и те, что верили в абиогенез, для экспериментального доказательства своих теорий использовали один и тот же материал, а именно, настой сухой травы, который легко было получить, приготовить и исследовать при помощи постоянно усовершенствовавшихся микроскопов. Измельченную сухую траву кипятили в течение 10 минут в воде и затем выставляли на воздух. В первые несколько дней жидкость оставалась стерильной. Спустя неделю жидкость становилась мутной, в ней появлялись живые организмы. Приверженцы абиогенеза и биогенеза сходились во мнении, что кипячение воды убивало любые живые существа, которые могли в ней находиться. Следовательно, заключа-
ли они, живые существа могли развиваться в воде только после того, как она остыла. Сторонники теории абиогенеза объясняли, что живые существа зарождались из сухой травы и воды. Им казалось недостоверным утверждение сторонников теории биогенеза, что в воздухе могут содержаться споры, проникающие в жидкость после ее охлаждения. Приверженцы теории биогенеза предполагали, что споры превращались в активные живые организмы. По всей видимости, говорили они, чистый воздух представляет собой сложную смесь, и каждый раз, когда человек делает вдох, внутрь него попадает множество странных существ! Время показало, что они оказались правы. • Те, кто верили в биогенез, пришли к выводу, что если оградить сосуд с кипяченым настоем от контакта с воздухом, то микробы в нем не зародятся. Проверить это предположение пытался еще в 1711 году Луи Жобло (1645— 1723), но окончательно подтвердить гипотезу биогенеза удалось лишь великому биологу Луи Пастеру (1822— 1895). Он доказал, что: все наблюдения и эксперименты по получению живых существ из неживых материалов оказались ложными; • ни один эксперимент не показал, что возможно спонтанное самозарождение организмов. См. также статью «Самозарождение жизни». БИОГЕНЕТИЧЕСКИЙ ЗАКОН КАК СВИДЕТЕЛЬСТВО ЭВОЛЮЦИИ Сходство в развитии эмбрионов позвоночных подтолкнуло ученых второй половины XIX века к тщательному изучению этого вопроса. Впервые наличие связи между развитием эмбриона и вида предположил известный эмбриолог Карл Эрнст фон Бэр (современник Дарвина). Однажды он заметил, что, рассматривая заспиртованные зародыши позвоночных, помещенные в сосуды без этикеток, не может точно уста- вид проходит стадии своих древних предков и восходит по эволюционному древу. На ранних стадиях эмбрионального развития все позвоночные демонстрируют значительное сходство, что указывает на их происхождение от общего предка. Схожесть касается не только внешних черт, но и строения таких важных внутренних структур, как сердце и артериальная система. Однако в наши дни к идее эм- новить, к какому классу животных они относятся. Это с равным успехом могли быть зародыши ящериц, птиц или млекопитающих, поскольку на ранней стадии развития сходство между ними оказалось потрясающим. Его исследования позволили сделать вывод, что развитие отдельного эмбриона повторяет стадии эволюционного развития группы, к которой принадлежит этот индивид. Таким образом, ученые пришли к выводу, что возможно проследить этапы эволюционного процесса, изучая развитие эмбрионов. Спустя приблизительно 50 лет после начала исследований Бэра другой известный биолог, Эрнст Геккель, предложил свою теорию рекапитуляции. Основная идея которой состоит в том, что онтогенез повторяет филогенез, то есть развитие отдельного индивида повторяет эволюцию всего вида. Это все равно, что сказать, будто в процессе эмбрионального развития инди-
брионального сходства подходят с осторожностью. Хотя биогенетический закон в целом верен, старые взгляды на то, что зародыш человека во время раннего развития проходит через стадии рыб, земноводных и рептилий, являются чересчур упрощенным толкованием сложной эмбриологии высших животных. См. также статьи «Биогеографические свидетельства эволюции», «Сравнительная анатомия», «Ископаемые свидетельства эволюции», «Геккель, Эрнст Генрих». БИОГЕОГРАФИЧЕСКИЕ СВИДЕТЕЛЬСТВА ЭВОЛЮЦИИ Изучая современное распределение членов группы, а также окаменелых остатков предков, мы можем получить много свидетельств эволюции и последующего распространения животных и растений по всему миру. Существует много примеров подобного рода; один из самых хорошо документированных — семейство верблюжьих. Лама и ее родственники, викунья и гуанако, распространены в Южной Америке. Ареалы распространения верблюдов находятся в Северной Африке, в Аравии и Азии. Они постепенно расселились по разным регионам из одной общей точки происхождения этого семейства. В наши дни сохранилось только два вида — лама ( Lama) и верблюд ( Camelus), хотя в прошлом их было гораздо больше. Идентифицировано по крайней мере 25 ископаемых родов верблюжьих. Появившись в верхнем эоцене (около 50 миллионов лет назад), все они, кроме одного рода, обитали в Северной Америке. Единственные останки, найденные за пределами Северной Америки, датируются плейстоценом (2 миллиона лет назад) и принадлежат ныне живущим видам или палеоламе (Paleolama), вымершему виду южноамериканской ламы. Несмотря на современное распределение членов семейства верблюжьих, изначальным регионом их распространения , несомненно, была Северная Америка. Позже они переселились в Азию, эволюционировав в одногорбого и двугорбого верблюдов (дромадер и бактриан), и в Южную Америку, став предками лам, викуний и гуанако. Собраны также хорошие свидетельства распространения сумчатых. Предположительно изначально они появились в Южной Америке и Австралии, которые когда-то были единым материком. Австралия отделилась от основного массива суши до того , как развились современные плацентарные млекопитающие. Процесс эволюционного развития необязательно охватывает целые континенты. Часто для того, чтобы популяции растений или животных перешли из одного географического региона в другой, требуются миллионы лет и наличие путей сообщения . При дрейфе материков эти пути сообщения меняются и исчезают. Некогда удалившаяся группа может оказаться в изоляции — за океаном, высокими горами или территориями с неблагоприятным климатом. См. также статьи «Адаптивная радиация», «Сравнительная анатомия», «Дрейф материков», «Ископаемые свидетельства эволюции», «Естественный отбор», «Биогенетический закон как свидетельство эволюции». БРУМ, РОБЕРТ Роберт Брум (1866—1951) — выдающийся ученый, внесший значительный вклад в развитие палеонтологии, особенно палеонтологии рептилий и предков человека. В 1925 году шотландец Брум отправился в качестве врача в Южную Африку, где инспектировал отдаленные поселения. Одновременно с этим он успешно занимался палеонтологией и за свои исследования даже получил медаль Лондонского королевского общества. В 1934 году в возрасте 68 лет Брум оставил медицинскую деятельность и начал работать в Трансваальском музее в Претории. Научные занятия подтолкнули его к решению найти дополнительные свидетельства существования австралопитека
(Australopithecus africanus обезьяна из Африки). В 1920 годах останки этого существа были найдены в известняке из каменоломен, и Брум тоже решил поискать там же удачи. Однажды в воскресный день 1936 года он поехал осматривать известняковые пещеры в Стрекфонтейне, близ Иоганнесбурга. Он узнал, что управляющий каменоломен, мистер Барлоу, однажды работал в районе, где были найдены останки обезьяноподобного существа, и сохранил их для продажи туристам. Владелец каменоломен даже составил небольшой буклет об окрестностях Иоганнесбурга — «Приезжайте в Стрекфонтейн и найдите недостающее звено». Странное пророчество сбылось на самом деле, и его исполнил Брум. 17 августа 1936 года Барлоу протянул ему окаменелый остаток мозга, который, как выяснилось, принадлежал австралопитеку. В этот день и на следующий Брум обнаружил отпечаток верхней части черепа и его основания, а также части лобной и боковых костей. Его искренняя радость от находки выражена следующими словами: «Приступить к поискам черепа взрослого австралопитека и найти таковой череп или, по крайней мере, принадлежащий его родственнику, всего за три месяца — это рекорд, которым мы с полным правом можем гордиться. А отправиться в Стрекфонтейн и найти то, что искали за девять дней — это еще лучше». Неутомимый доктор Брум скончался в 1951 году в возрасте 85 лет, до последнего момента сохраняя интерес к жизни и палеонтологии. ВЕЛИКОЕ ВЫМИРАНИЕ Наиболее известное вымирание из всех массовых случаев приходится на конец мелового периода, около 65 миллионов лет назад. Предполагается, что причиной его послужило столкновение Земли с гигантской кометой, но когда в начале 1980 годов это мнение впервые было высказано, многие ученые отнеслись к нему скептически . Неоспоримые свидетельства этого события удалось предоставить Луису Алваресу и его сыну, Уолтеру Алваресу. В тонком слое глины, отделяющем меловые отложения мезозойской эры от отложений кайнозойской эры, они нашли высокое содержание иридия. Впервые они обнаружили эту прослойку в центре Италии, а позднее в Мексике, Антарктиде и Тунисе. И везде, где ученые исследовали границу мел- палеоцен, они находили повышенное содержание иридия. Этот элемент содержится в глубоких слоях мантии, но редко на поверхности. Иногда он появляется на поверхности в результате вулканической активности, но также содержится в метеоритах и кометах. На полуострове Юкатан в Мексике был найден кратер Чикшулуб, который вполне мог быть следом столкновения с небесным телом. Возникновение такого кратера можно объяснить столкновением с астероидом около 10 километров в диаметре. В 1996 году нашлись доказательства, что роковой астероид врезался в полуостров под углом 20—30° с южной стороны, вызвав дождь расплавленных обломков на северо-западе. В результате возникло огромное облако расплавленной и превращенной в пар горной породы, сжигающее все на своем пути по направлению на запад Северной Америки. Фрагменты горных пород и метеорита могли быть выброшены в атмосферу и снова выпасть на поверхность в виде мелких метеоритов, усиливая эффект разрушения. Сильный порыв ветра унес большую часть атмосферы Земли в космическое пространство. Компьютерные модели свидетельствуют о том, что ветры достигали скорости по меньшей мере 500 километров в час, а остатки горения образовали 70 миллиардов тонн сажи, что равнозначно сгоранию 25% всего органического материала планеты. См. также статью «Катастрофы».
виды Существует почти столько же определений термина «вид», сколько самих видов. Проблемы с определением возникают, потому что с точки зрения таксономии видом называются организмы, обладающие особыми морфологическими признаками, которые описываются по некоторым мертвым типичным представителям. Однако в природе виды различаются во времени и пространстве; существуют градации в форме, что приводит к неясности, где заканчивается один вид и начинается другой. Например, американский певчий воробей, распространенный в США, имеет много местных разновидностей, различающихся по оперению и свисту. Но все эти разновидности принадлежат к одному виду так же, как и люди разных рас. Они могут скрещиваться и давать смешанное потомство. Именно возможность скрещиваться и объединяет организмы одного вида, ограничивая их от представителей других видов. Расы и разновидности дают плодовитое потомство, что невозможно у видов. Наиболее продуктивное определение вида, которое используется в биологии, дано известным зоологом Эрнстом Майром: «Вид — это группа скрещивающихся или обладающих такой возможностью популяций , которая репродуктивно изолирована от других подобных групп». Такое определение, конечно же, не подходит к самооплодотворяющимся организмам или организмам, размножающимся неполовым путем. Тем не менее такие группы тоже обычно называются видами, потому что они состоят из очень похожих друг на друга организмов. Таким образом, виды — это крупнейшие группы организмов с общим генофондом. Всего на Земле в настоящее время существует около 3 миллионов таких групп, но их число и признаки со временем изменяются. Некоторые из этих видов находятся в устойчивой связи с окружающей средой, другие вымирают, а третьи развиваются и образуют новые виды. С развитием новых генных технологий, таких, как генетический анализ, определение общего генофонда становится более плодотворным методом выделения видов, нежели субъективные таксономические методы, основанные на внешних признаках . См. также статью «Генетический анализ». ГАЛАПАГОС, ОСТРОВА Чарлз Дарвин посетил острова Галапагос в 1835 году во время кругосветной экспедиции на корабле «Бигл». Там ему пришла идея о естественном отборе. Острова Галапагос получили свое название от испанского слова galapago — черепаха; иногда их также называли Заколдованными островами. Это группа островов вулканического происхождения, лежащая в 580 милях к западу от побережья Эквадора, обладает уникальной экосистемой животных, которые за время изоляции развили различные специализированные приспособления. Дарвин писал о них: «Нигде больше не найдешь маленький мир с такими обитателями». Там встречаются морские игуаны до полуметра длиной, питающиеся водорослями; их Дарвин называл «демонами тьмы, черными, как пористые камни, по которым они ползают». Он обнаружил гигантских черепах, различающихся по размеру панцирей и способу добывания пищи, в зависимости от того острова, на котором они обитают. Эти гигантские черепахи уже не живут в глубине островов, хотя там находят их ископаемые останки. Сегодня на Галапагосах существует десять различных пород черепах (изначально там было по меньшей мере 15 разновидностей, но за последние 400 лет 5 из них исчезли по вине людей). И только одна порода, потомок вида, который некогда обитал на острове Пинта, обитает сейчас на воле. Остальные разновидности содержатся на исследовательской станции имени Чарлза Дарвина на острове Санта-Крус.
В 1957 году группа ученых в сотрудничестве с защитниками окружающей среды и журналом «Лайф» предложила сделать некоторые из островов заказниками, в которых сохранялись бы уникальные фауна и флора. Была образована станция имени Чарлза Дарвина, служащая международным исследовательским центром. Пожалуй, самым известным наблюдением Дарвина является изучение островных птиц, прежде всего вьюрков. Дарвин обнаружил 13 разновидностей, которые произошли от общего предка, прибывшего с Большой Земли. Он предположил, что птицы колонизировали острова в основном в процессе адаптации, которая позволила им эксплуатировать доступные пищевые ресурсы. См. также статьи «Дарвинизм», «Дарвиновы вьюрки», «Естественный отбор», «Экспедиция «Бигла»». ГЕККЕЛЬ, ЭРНСТ ГЕНРИХ Эрнст Генрих Геккель (1834—1919) — известный немецкий натуралист, пропагандировавший теорию Дарвина и первый составивший генеалогическое древо животного мира. Он родился в Потсдаме; в 1862 году стал профессором сравнительной анатомии и директором Зоологического института в Йене. Основную часть жизни провел в Йене, за исключением экспедиций и поездок с курсом лекций. В то время в ученом мире велось много споров по поводу работы «Происхождение видов», которую Дарвин опубликовал в 1859 году. Геккель стал убежденным сторонником этой теории и сделал многое для популяризации идей дарвинизма в Германии. Он известен, прежде всего тем, что сформулировал биогенетический закон и теорию рекапитуляции. Впервые свои взгляды на процесс формирования индивида (онтогенез) еще в 1828 году изложил Карл Эрнст фон Бэр; в 1863 году последовало более подробное исследование Иоганнеса Мюллера. Однако именно Геккель интерпретировал законы развития эмбрионов с точки зрения эволюционной теории и расширил границы первоначальных идей, так что начиная с 1 года авторство этих законов стали приписывать ему. Биогенетический закон гласит, что эмбрион любого вида повторяет в своем развитии основные этапы эволюции своего вида или, выражаясь научным языком, что «онтогенез повторяет филогенез». Карл Эрнст фон Бэр в своей публикации писал, что ранние стадии развития зародыша животных не повторяют поздние стадии развития животных, находящиеся на нижних ступенях формирования, а соответствуют ранним стадиям развития этих животных. Геккель в своей теории рекапитуляции утверждал, что у эмбриона повторяются признаки поздних этапов развития взрослых животных. В качестве примера он приводил жаберный карман эмбриона птицы, который якобы повторяет по структуре жаберные щели взрослых рыб. Данная теория рекапитуляции оказалась ложной, поскольку жаберный карман эмбриона птицы имеет сходство с жаберными щелями эмбрионов рыб. См. также статьи «Дарвинизм», «Биогенетический закон как свидетельство эволюции» . ГЕНЕТИЧЕСКИЙ АНАЛИЗ В 1980 годах профессор Алек Джеффрис из Лестерского университета доказал наличие многочисленных участков ДНК, которые не следует считать кодом аминокислот. Эти участки назвали минисателлитные ДНК. Тысячи ДНК разбросаны по всем хромосомам; возможно, это результат ошибок при воспроизведении ДНК. Количество раз, которое повторяются эти участки, почти уникально для каждого индивида. Если изучить участки ДНК, то можно получить генный профиль человека .
Шанс, что два человека имеют один и тот же генный профиль, равен одной миллионной, если только они не однояйцовые близнецы. Генный профиль получают следующим образом: 1. Из любой ткани выделяют клетки. 2. Из ядра клеток выделяют ДНК. 3. ДНК разрезают на фрагменты при помощи рестрикционных ферментов. 4. Фрагменты отделяют друг от друга при помощи электрофореза. Это процесс, при котором смесь взвешенных частиц в электропроводящем растворе подвергают действию электрического поля. Электрически заряженные ДНК движутся к противоположно заряженным электродам: позитивно заряженные движутся к катоду, а негативно заряженные — к аноду. Скорость передвижения различна и зависит от размеров фрагмента. 5. Фрагменты переносят на нейлоновую мембрану и подвергают так называемому саузерн-блоттингу. Нейлоновая мембрана помещается между гелем и листами промокательной бумаги. Фрагменты ДНК переходят в мембрану. 6. На мембрану наносят гидроокись натрия. Она разделяет ДНК на отдельные нити, не повреждая последовательности оснований. 7. Фрагменты ДНК идентифицируются посредством ДНК-зонда. Это часть ДНК с базовым основанием, комплементарным (взаимно дополняющим) к основанию минисателлитной ДНК. Зонд метят радиоактивным индикатором, который оставляет следы на рентгеновской пленке. 8. Рентгеновскую пленку помещают на мембрану и проявляют. В результате получают рисунок полосок, похожий на штрих-код товара. По ним видно, где Зонд соединился с ДНК. ГЕОГРАФИЧЕСКАЯ ИЗОЛЯЦИЯ Географические барьеры оказывали основное влияние на образование новых видов. Если особи одной популяции не могут достичь особей другой популяции, то они не скрещиваются. Дрейф материков, образование гор и вулканическая активность часто создавали барьеры, разделявшие представителей одного вида. В озерах , представляющих собой остатки более крупных пресных водоемов, развивались различные подвиды рыб. Возьмем для примера радужную форель, обитающую в США. Все современные подвиды произошли от одного вида, который когда-то мог дос-
тичь любой точки водоема, ныне поделенного на отдельные озера и реки. В Великобритании сохранилась озерная форель, оказавшаяся в некоторых изолированных озерах, сохранившихся после таяния ледника. В Австралии распространение разнообразных сумчатых и отсутствие плацентарных млекопитающих произошло в результате физического отделения материка от остальных частей света. Сумчатые возникли в Северной Америке, затем распространились по Южной Америке и Европе. Но в Северной Америке и в Европе они вымерли, потому что не могли выдержать конкуренции с плацентарными. Однако из Южной Америки они пересекли Антарктиду и достигли Австралии. При отсутствии конкуренции со стороны плацентарных они образовали большое количество современных видов благодаря дивергенции и адаптивной радиации. Острова возникают различными способами, такими, как прибрежная эрозия, вулканическая активность или образование кораллов, но в любом случае окружающая среда оказывает глубочайшее воздействие на эволюцию организмов. Естественный отбор приводит к быстрому изменению и разветвлению «иммигрантов». Естественный отбор привел к образованию форм, значительно отличающихся от тех видов, что обитали изначально на островах, например дарвиновы вьюрки. См. также статьи «Адаптивная радиация», «Аллопатрическое видообразование», «Дрейф материков», «Дарвиновы вьюрки», «Галапагос, острова», «Естественный отбор», «Ниша», «Репродуктивная изоляция». ГЕОХРОНОЛОГИЧЕСКАЯ ШКАЛА Арией Папеп- аркей perbd -(500 -4000 -3500 Мезо- арнЕй п—I—г -3000 Нео- аряей П роге розой Палвп протерший on- Рн- Стнг- Мезопроте розой -2500 -2000 |Кал lend -1500 Экт- Ншпрп- гераэпй -1000 Фа иг розой ПалЕП- ^еэо-К- -500 eon eta he розой era Палеозой Мбэшезй Кайнозой perbd Кембрий т 1 1 1 1 г Орда вин 1—1—1—1—1—1 Силур г п Дввпн 1—1—1—1—1—1— Каменноугольный 1—1—1—1—1—1— Пермь 1—1—1—1—1—1 Триас —1—1—1—1— Юра —1—1—1—1—1— Мел 1—1—1—1—1 1—1—1—н Палеоген 1—1 1 1 1—1 Неоген Ч—1— -500 400 -300 -200 -100 0 era Кайнозой perbd Палеоген Неоген epoch Палеоцен Эоцен Оп иго иен Миоцен Плио- ЦЭН П -60 -50 -40 -30 -20 -10 Геохронологическая шкала. (Для того, чтобы запомнить последовательность периодов, составляющих фанерозой - кембрий, ордовик, силур, девон, карбон, пермь, триас, юра, мел, палеоген, неоген, антропоген - студенты испокон веков пользуются мнемонической фразой: «Каждый отдельный студент должен купить поллитра. Ты, Юрик, мал - подожди немного, а то»).
ГИНКГО ДВУЛОПАСТНЫЙ В свое время появление группы саговниковых растений создало настоящий эволюционный прорыв. Эти растения внешне напоминают пальму и имеют большие стволы с жесткими листьями у основания. Около 120 миллионов лет назад они были широко распространены по всей планете, но сегодня встречаются только в тропических и субтропических регионах. Это одни из первых семенных растений. Близкий родственник древних саговниковых вполне может претендовать на роль самого древнего растения в мире и с полным правом называться живым ископаемым. Это гинкго двулопастный (Ginkgo biloba), единственный уцелевший вид семейства и отдела гинкговых, современник динозавров. Он имеет уникальные вееровидные двулопастные листья, окаменелые останки которых встречаются в отложениях пермского периода (286—245 миллионов лет назад). По всей видимости, эти растения появились в каменноугольный период (360—286 миллионов лет назад). На территории Великобритании гинкго сохранялся до середины третичного периода (около 50 миллионов лет назад). Во время юрского периода (около 200 миллионов лет назад) он достиг наивысшего расцвета и распространился по всему миру. Этому во многом способствовал тот факт, что его семена долгое время могут находиться в морской воде, не теряя жизнеспособности. Но с тех времен ареал его распространения постепенно сокращался, и в настоящее время, по всей видимости, в диком виде он уже не встречается. Известные гинкговые деревья лондонского Кьюгарденз были посажены в 1760 году. В Китае и Японии гинкго с незапамятных времен сажали возле храмов. Вероятно, он и сохранился только потому, что китайцы считали его священным растением. Сегодня его можно встретить во многих городах, в парках или даже на улицах в качестве зеленых насаждений, поскольку он хорошо переносит болезни, загрязнения воздуха и устойчив к насекомым-вредителям. Название «гинкго» является в некотором роде этимологической загадкой. Предполагается, что оно происходит от искаженного японского «гинко», соответствующего двум китайским иероглифам со значением «серебряный плод», что указывает на плоды этого дерева, похожие на сливы. Их семена часто продаются на китайских рынках в виде соленых орешков. См. также статью «Живые ископаемые». ДАРВИН, ЧАРЛЗ Теория эволюции обычно связывается с именем Чарлза Дарвина, который в конце 1850 годов предложил на рассмотрение ученому миру свою гениальную гипотезу естественного отбора. Дарвин родился в английском городе Шрусбери в семье состоятельного доктора. В местной частной школе он получил обычное для того времени образование, в которое входило заучивание стихов на латинском и греческом языках, а также классическая история и география. В учебный план естественная история не входила, и потому он удовлетворял свой интерес в этой области, читая книги. В сарае сада он проводил эксперименты и гулял по окрестностям, ловил рыбу, охотился и собирал минералы, камни и насекомых. Его отец относился к этим занятиям неодобрительно. «Ленивого» мальчика отослали в Эдинбург изучать медицину. Вид двух операций, проведенных без обезболивания, вызвал в нем отвращение, и через два года, когда стало ясно, что медицина не для него, 17-летний юноша вернулся в Шрусбери. Семья решила, что он должен стать священником, и в 1828 году он начал изучать богословие в Кембридже. Но Чарлз по-прежнему не проявлял особого интереса к учебе и только сердил отца, которому не нравились образ жизни его сына и его друзья.
Окончив в 1831 году обучение со скромной степенью бакалавра, Дарвин уже приготовился принять посвящение, но вмешался случай. По совету своего профессора и наставника, Джона Хенслоу, Дарвин записался в кругосветную экспедицию на военном корабле королевского флота «Бигл» в качестве неоплачиваемого натуралиста . Это был поворотный пункт в его жизни, потому что отплыл из Англии неизвестный молодой человек без особых целей в жизни, а вернулся гениальный наблюдатель природы. Наблюдения и выводы, сделанные им во время путешествия, легли в основу одной из самых знаменитых в истории человечества книг. В 1859 году Дарвин опубликовал труд «Происхождение видов путем естественного отбора, или сохранение благоприятствуемых пород в борьбе за жизнь», более известный как «Происхождение видов». См. также статьи «Дарвинизм», «Экспедиция «Бигла»». ДАРВИНИЗМ Дарвинизм — это предложенная Дарвином теория, объясняющая механизм эволюционного развития. Она утверждает, что в любой популяции организмов с различными признаками только наиболее приспособленным удается выжить и произвести потомство . Менее приспособленные к условиям окружающей среды особи погибают, не оставив потомства. Поэтому неблагоприятные признаки, которыми обладают менее приспособленные особи, не передаются по наследству и исчезают, а благоприятные признаки становятся более распространенными. С течением времени характерные черты вида меняются, и это приводит к образованию нового вида. Слабость теории Дарвина состоит в том, что она не объясняет причины изменчивости, на основе которой действует естественный отбор. В то время полагали, что признаки родителей смешиваются во всем потомстве. Этот недостаток теории был восполнен работами Грегора Менделя и его описанием дискретной наследственности . Другая слабость дарвинизма состояла в том, что Дарвин не мог доказать теорию на практике. Он был знаком с принципами искусственного отбора, но ничего не мог знать о генах, так как труды Менделя признали только в 1900 году. Из многотысячелетнего опыта человечества известно, что благодаря отбору животных и растений с желаемыми признаками можно вывести новые разновидности. Дарвин продемонстрировал применение принципов искусственного отбора на примере получения новых пород голубей в графстве Кент. По всей видимости, это было единственное экспериментальное свидетельство в пользу его теории естественного отбора. Он сделал вывод, что природа может действовать как человек и направлять отбор организмов. Дарвин предположил, что этот процесс носит более случайный и непредсказуемый характер, чем искусственный отбор под надзором людей. См. также статьи «Искусственный отбор животных», «Искусственный отбор растений», «Дарвин, Чарлз», «Дарвиновы вьюрки», «Менделизм», «Естественный отбор», «Естественный отбор под влиянием хищников». ДАРВИНОВЫ ВЬЮРКИ В 1835 году Чарлз Дарвин, находясь в составе экспедиции на борту корабля «Бигл», посетил острова Галапагос. Вьюрки, которых он там обнаружил, позже назвали «дарвиновыми», поскольку наблюдение за этими птицами послужило одним из толчков к составлению теории эволюции методом естественного отбора. Предков этих вьюрков предположительно занес на эти острова сильный ветер, и, оказавшись на неосвоенной территории, они эволюционировали в несколько различных разновидностей, заполнив пустые ниши, имеющиеся на островах. Во многих аспек-
тах их жизни можно наблюдать процесс дивергенции от общего предка и различные приспособления к условиям обитания. Эти вьюрки характерны исключительно для Галапагосов. За исключением одного вида, к северо-западу, нигде в мире они больше не встречаются. Их предки прибыли сюда из Южной Америки, в 600 милях к востоку. Внешне дарвиновы вьюрки не особо интересны — они имеют серовато-коричневую окраску, с черными пятнами у некоторых самцов, и среди 14 видов (из которых Дарвин открыл 13) наблюдается очень мало вариаций, за исключением строения клюва и рациона. Это как раз и необычно, так как на материке вьюрки отличаются преимущественно по оперенью, а не по строению тела. Формы клювов связаны с типом пищи, которую потребляют вьюрки. Они варьируются от твердых до мягких, и от них зависит выживание вьюрков в той или иной нише. На Галапагосах мало других видов птиц, и потому предки вьюрков не встретили особой конкуренции. Там, где есть конкуренция, например на морском побережье, вьюркам не удалось занять эти ниши. По всей видимости, из-за конкуренции с хищными птицами, вьюрки не стали питаться мясом, хотя один вид потребляет кровь олуш, сидящих на гнездах, и питается яйцами. Ниша дятлов была занята одним из вьюрков, который при помощи кактусовой колючки выковыривает личинок жуков из коры деревьев. См. также статьи «Галапагос, острова», «Естественный отбор», «Ниша», «Экспедиция «Бигла»». ДАРТ, РАЙМОНД Когда в 1924 году южноафриканский анатом австралийского происхождения, Раймонд Дарт, рассматривал окаменелости в кусках известняка, собранных управляющим карьера Туанга (место львов) на северо-востоке пустыни Калахари, он обнаружил окаменелый череп ребенка. Этот объект стал одним из самых важных доказательств происхождения человека из Африки. Дарт как раз собирался уйти из дома, чтобы быть шафером на свадьбе друга, когда решил взглянуть на куски известняка и окаменелости, которые ему доставили в тот день. То, что он увидел, чрезвычайно его поразило; позже он заявил, что обнаружил «недостающее звено» между обезьянами и человеком и, следовательно, нашего прямого предка. Эти останки назвали ребенком Дарта. В свое время Дарта называли еретиком, потому что тогда считалось, будто первым шагом на пути эволюционного расхождения людей от обезьян было развитие крупного мозга. Черты ребенка из Туанга были прямо противоположными: у него была небольшая черепная коробка (указывающая на маленький мозг), а также челюсти и зубы, похожие на человеческие. До открытия Дарта родиной человечества называли Азию, но Дарт и Луис Лики развеяли этот миф. Эксперты-антропологи 1920 годов опровергли теорию Дарта о том, что ребенок из Туанга, так называемый австралопитек ( Australopithecus africanus — южная африканская обезьяна), является предком людей. Дарт расстроился и почти прекратил поиски родины гоминидов. В каменоломнях больше не находили останков, похожих на останки ребенка из Туанга. В 1990 годах было сделано предположение, что в то место ребенка притащила хищная доисторическая птица, поскольку отметки на его черепе могли быть оставлены когтями или клювом. И только Роберт Грум в 1938 году опроверг заключение экспертов и доказал правоту Дарта. См. также статьи «Брум, Роберт», «Лики, Луис». ДИНОЗАВРЫ Во время триасового периода (245—202 миллиона лет назад) пресмыкающиеся архозавры (правящие ящеры) эволюционировали в четыре основные группы: два отря-
да динозавров, птерозавров и крокодилов. Две группы динозавров (ящеротазовые и птицетазовые) были в не более близких отношениях между собой, чем с крокодилами или птерозаврами. Так что термин «динозавр» хотя и широко используется в популярной литературе, не является научным определением какой-либо специфической таксономической группы. Слово «динозавр» образовано от греческих слов deinos — ужасный и sauros — ящер. Его придумал в 1842 году Ричард Оуэн, директор Лондонского музея естественной истории. Наши знания о двух группах динозавров весьма ограничены, поскольку нам приходится полагаться только на изучение окаменелых остатков. Больше всего мы знаем о тех животных, которые обитали в болотах или рядом с реками, потому что тела, попавшие во влажную землю, вероятнее всего, становятся окаменело- стями. Что же касается тех, кто обитал в глубине суши или в горах, то о них нам известно меньше. Так, нам известно о существовании четвероногих птицета- зовых динозавров с рогами и шипами на шее. Их тяжелые черепа были найдены в отложениях древних рек и болот, куда их смыли горные потоки. Интересно, что черепа динозавров, обитающих в болотах, сохранились хуже, поскольку обычно они были легче и быстро ломались. Возможно, самое ранее упоминание остатков динозавров — китайское описание «костей дракона», сделанное более 1700 лет назад; американские индейцы использовали окаменелые кости и зубы в качестве амулетов. Первое научное описание динозавра — мегалозавра — сделал в 1824 году англичанин Уильям Бакленд, профессор геологии Оксфордского университета. Это было животное 7 метров в длину с тремя огромными когтями на задних ногах. У него были клыки для разрывания мяса на куски и череп, по всей видимости, располагался на S-образном изгибе короткой шеи, как у птиц. К концу 1920 годов окаменелые останки динозавров были найдены на всех материках. См. также статьи «Птицетазовые динозавры», «Ящеротазовые динозавры», «Оуэн, Ричард».
ДРЕЙФ ГЕНОВ Иногда эта концепция называется «эффект Сьюэлла-Райта», в честь предложивших ее двух популяционных генетиков. После того как Мендель доказал, что гены являются единицами наследственности, а Харди и Вайнберг продемонстрировали механизм их поведения, биологи поняли, что эволюция признаков может происходить не только посредством естественного отбора, но и случайно. Дрейф генов зависит от того, что изменение частоты аллелей в малых популяциях обусловлено исключительно случаем. Если число скрещиваний невелико, тогда реальное соотношение различных аллелей гена может сильно отличаться от рассчитанного на основе теоретической модели. Дрейф генов — это один из факторов, нарушающих равновесие Харди-Вайнберга. На большие популяции со случайным скрещиванием огромное воздействие оказывает естественный отбор. В этих группах отбираются особи с адаптивными признаками, а другие безжалостно отсеиваются, и популяция методом естественного отбора становится более приспособленной к окружающей среде. В малых популяциях идут другие процессы и на них влияют другие факторы. Например, в малых популяциях велика вероятность случайного изменения частоты генов. Такие изменения не вызваны естественным отбором. Понятие дрейфа генов очень важно для малых популяций, поскольку они имеют малый генофонд. Это значит, что случайное исчезновение или появление аллеля гена у потомства приведет к значительным изменениям в генофонде. В больших популяциях такие колебания не приводят к заметным результатам, поскольку уравновешиваются большим числом скрещиваний и притоком генов со стороны других особей. В малых популяциях случайные события могут привести к эффекту «бутылочного горлышка». Согласно определению, под дрейфом генов понимают случайные изменения генных частот, вызванные малой численностью популяции и нечастым скрещиванием. Дрейф генов наблюдается среди малых популяций, например, у островных переселенцев, у коала или больших панд. См. также статьи «Эффект «бутылочного горлышка»», «Равновесие Харди- Вайнберга», «Менделизм», «Естественный отбор». ДРЕЙФ МАТЕРИКОВ В 1912 году немецкий ученый Альфред Вегенер предположил, что около 200 миллионов лет назад все материки Земли составляли единый массив суши, который он назвал Пангеей. В последующие 200 миллионов лет Пангея разделилась на несколько материков, которые стали постепенно перемещаться по направлению к их современному положению. Эта идея не получала широкой поддержки до 1960 годов, когда были получены доказательства теории Вегенера. Наиболее убедительное свидетельство основано на магнетизме потоков лавы. Когда поток лавы застывает , то металлические частицы в лаве ориентируются в направлении магнитного поля Земли. Поэтому геологи могут определить направление север—юг, каким оно было в то время, а также бывшую широту этого участка. Исходя из этого, можно составить карту древней Земли и увидеть, как материки располагались раньше. Конечно, дрейф материков продолжается и в наши дни. Геологи давно знали, что поверхность Земли представляет собой подвижную кору, постоянно изменяющуюся, сжимающуюся и вспучивающуюся под воздействием огромных глубинных сил. Известно, что эти изменения затрагивают громадные куски земной коры, которые называются тектоническими плитами. Одни края этих плит выталкиваются наружу, другие опускаются. Там, где плиты сталкиваются, возникают складки — горные цепи. Когда такие горные массивы возникают на дне океана, они вытесняют воду и океан расширяется. При помощи сверхточных инструмен-
тов, расположенных на спутниках, ученые узнали, что Великобритания удаляется от Северной Америки со скоростью 5 сантиметров в год. Представление о дрейфе материков (тектонике плит) необходимо для изучения распространения и эволюции жизни на нашей планете. Эта теория объясняет, почему останки тропических животных находят в Антарктиде и почему животный мир Австралии и Южной Америки отличается от животного мира других континентов. Дрейф материков отделяет популяции друг от друга именно таким образом, который способствует видообразованию и закладывает основы для дальнейшего независимого развития групп примитивных организмов. Пангея начала разделяться в триасовом периоде (225 миллионов лет назад), и уже к концу мезозойской эры (65 миллионов лет назад) материки занимали приблизительно то же положение, что и сегодня. ДЮБУА, ЭЖЕН В 1891 году Эжен Дюбуа (1858—1940) обнаружил на Яве останки древнего гоми- нида, названного «Яванский человек» или Homo erectus — человек прямоходящий. Сейчас считается, что ему 1,8 миллиона лет. В 1877 году в возрасте 19 лет Дюбуа начал изучать анатомию и естественную историю в Амстердамском университете. Через несколько лет он решил найти настоящие останки древнего обезьяноподобного человека и предположил, что искать их следует в Вест-Индии. На его решение, по всей видимости, повлияли работы Геккеля, прославленного немецкого биолога того времени. Дюбуа обратился к правительству Нидерландов с просьбой выделить средства на научную экспедицию в восточные голландские владения. Разумеется, предложение неизвестного ассистента профессора отправить дорогостоящую экспедицию на поиски воображаемого существа не вызвало доверия у правительства, и оно ответило отказом. Однако Дюбуа не сдался и записался докто-
ром на военный корабль нидерландского флота. В возрасте 29 лет, оставив преподавание анатомии в Амстердамском университете, вместе с женой и ребенком он отправился в голландские владения в Вест-Индии. Там он сделал одно из величайших открытий в истории человечества — нашел «недостающее звено». Драгоценную окаменелость обнаружили работники, и сам Дюбуа не видел, как ее извлекали из-под земли. Это была часть черепа; Дюбуа показалась, что она слишком большая, чтобы быть черепом обезьяны и слишком маленькая, чтобы быть черепом человека. В мае 1892 года в 13 метрах от первой находки было обнаружено бедро, принадлежавшее, скорее всего, той же особи. На основании остатков Дюбуа сделал предположение, что это было прямоходящее человекообразное существо и потому этого обезьяночеловека назвали Homo erectus. Но когда Дюбуа вернулся домой, его открытие подвергли жестоким насмешкам. Правота ученого подтвердилась только в 1930 годах. См. также статью «Геккель, Эрнст Генрих». ЕСТЕСТВЕННЫЙ ОТБОР Естественным отбором считается процесс, который Дарвин назвал «борьба за существование», при котором наиболее приспособленные организмы выживают, а наименее приспособленные погибают. Согласно положениям дарвинизма, естественный отбор в популяции с изменчивыми признаками приводит к эволюции и образованию новых видов. Некоторые индивиды, более приспособленные и более удачливые в плане размножения, передают свои черты потомству, и, таким образом, количество индивидов с удачными признаками растет с каждым поколением. Дарвин полагал, что по природе индивиды обладают различной способностью к размножению и что природа сама регулирует необходимые в том или ином окружении признаки организмов. • Логика дарвиновской теории основывалась на наблюдениях и выводах. Сформулировать его теорию позволили три основных наблюдения и два вывода: Первое наблюдение было высказано в работе Мальтуса «Опыт о законе народонаселения» : организмы имеют тенденцию размножаться в геометрической прогрессии —2, 4 , 8, 16, 32 и так далее. • Второе наблюдение заключалось в том, что количество особей одного вида в течение долгого времени остается более или менее постоянным. • Первый вывод, сделанный на основе этих наблюдений: в природе идет постоянная борьба за выживание. Организмы, победившие в этой борьбе, получают шанс на воспроизведение потомства. • Третье наблюдение заключалось в том, что организмам свойственна изменчивость . • Второй вывод касался положения о естественном отборе: некоторые индивиды получают больше шансов воспроизвести потомство, чем остальные. Их положительные признаки, скорее всего, передаются другим поколениям, а неблагоприятные признаки менее удачливых животных со временем исчезают. Опровергнуть теорию Дарвина возможно только на основе более совершенных наблюдений и рассуждений. См. также статьи «Дарвинизм», «Неодарвинизм». ЕСТЕСТВЕННЫЙ ОТБОР ПОД ВЛИЯНИЕМ ХИЩНИКОВ Чарлз Дарвин осознавал важность размера популяции при определении выживаемости индивидов, соревнующихся между собой за ограниченное число ресурсов удовлетворения основных потребностей, в особенности за пищу. В этом процессе
немалую роль играют и хищники; Было проведено много исследований роли хищников в естественном отборе. Наиболее примечательное из них — исследование наземных улиток рода цепея (Сераеа). В Великобритании распространены только два вида — бурогубая улитка (С. nemoralis), и белогубая улитка (С. hortensis). Бурогубый вид отличается большим разнообразием, цвет его раковины может принимать три различных оттенка — коричневый, розовый и желтый. Отметки на раковинах также различны — от полного отсутствия отметин до пяти черных полос с промежуточными формами. Белогубая улитка имеет обычно желтую раковину, при этом у нее либо вовсе нет отметок, либо пять отдельных полос, промежуточные формы встречаются крайне редко. У обоих видов цвет раковины и количество отметок зависят от генов. Исследования бурогубых улиток в различных средах обитания, таких, как луга и леса, показали, что существует прямое соответствие между желтыми раковинами и зеленым фоном. В темных местах, например в живой изгороди или в чаще букового леса, пропорция желтых раковин постепенно сходит к нулю. Полосы на раковинах также находятся в прямой зависимости от окружения. Чем более пестрое и темное окружение (например, в лесу), тем больше полос на раковине. Главный враг бурогубых улиток — певчий дрозд. В середине апреля растительность имеет в основном бурый цвет, и желтые раковины считаются недостатком. К концу апреля желтый становится нейтральным цветом на фоне растительности, а к середине мая он преобладает. Это очевидный пример отбора по видимым внешним признакам — определенный рисунок раковины обеспечивает маскировку на фоне определенной растительности. Однако белогубые улитки имеют разную окраску и узоры и могут обитать в той же местности, что и бурогубые. На них охотятся те же хищники, но частоты их генов могут сильно отличаться. В буковых лесах почти все бурогубые улитки не имеют полос, тогда как белогубые в основном имеют полосатые желтые раковины. ЖИВЫЕ ИСКОПАЕМЫЕ Изучая окаменелости, можно сделать вывод, что ни один вид не сохраняется вечно — средний срок распространения отдельного вида длится от одного до десяти миллионов лет. Из всех видов, когда-либо обитавших на Земле, 99,9% являются вымершими, поэтому случаи так называемых живых ископаемых крайне редки. Живым ископаемым называется живой организм, который не отличается в основных чертах от организмов, изученных по окаменелым остаткам. Это современные организмы с анатомическими или физиологическими признаками, которые присутствовали у их вымерших предков. Часто они встречаются в очень удаленных, ограниченных и почти не изменившихся средах обитания. Поэтому их эволюция протекала крайне медленно. К этой категории принадлежат магнолия, гинкго двулопастный, двоякодышащие рыбы, некоторые моллюски, вроде наутилуса и лингулы, и целакант (латимерия). Все живые ископаемые не обязательно считаются переходным звеном от одного типа животных к другому, но некоторые сочетают признаки разных групп и свидетельствуют об их происхождении от общего предка. • В качестве примера приведем следующие виды: Перипатус (Peripatus), совмещающий признаки, свойственные членистоногим и кольчатым червям. • Неопилина (Neopilina), которая может быть переходным звеном между кольчатыми червями и моллюсками. • Ланцетник (Amphioxus), который представляет собой связующее звено между позвоночными и беспозвоночными. Изучение живых ископаемых помогает проверить уже имеющиеся данные о связи между различными группами организмов, а также сверить реконструкцию вымерших
животных на основе ископаемых остатков. Конечно же, эти современные животные и растения не совсем идентичны их ископаемым предкам, но они с полным правом могут называться живыми ископаемыми, поскольку многие их признаки сохранились с древнейших времен и похожи на признаки вымерших организмов. Иногда их называют реликтовыми видами (от лат. relictus — остаток). См. также статьи «Целакант», «Гинкго двулопастный», «Ланцетник», «Лингула», «Наутилус», «Неопилина», «Перипатус». ЗАКОН ХАРДИ-ВАЙНБЕРГА Однажды в 1908 году во время обеда генетик Реджинальд Кранделл Паннет и его старый друг Г. X. Харди из Оксфордского университета заговорили, как обычно, о генетике. Паннет сказал, что слышал критическое замечание по поводу теории Менделя, найти ответ на которое он не может. Согласно этому замечанию, если ген коротких пальцев был бы доминантным, а ген длинных пальцев рецессивным, тогда с каждым поколением число особей с короткими пальцами становилось бы все меньше и меньше. Через несколько поколений, как сказал критик, ни у кого в Британии не осталось бы длинных пальцев. Паннет не согласился с таким выводом, но не мог объяснить, почему он неверен. Харди сказал, что ответ ему кажется довольно легким и что он может написать несколько формул прямо на салфетке. Он доказал удивленному Паннету, что при определенной частоте генов нормальных или коротких пальцев относительное количество особей с длинными или короткими пальцами остается одинаковым в каждом поколении, если только не принимать во внимание естественный отбор и другие внешние влияния, которые могли бы привести к изменению частоты генов (частотой генов называется соотношение генов различного вида). Харди подумал, что эти расчеты довольно тривиальны и их не стоит публиковать, но Паннет настоял на том, чтобы они были запечатлены не только на столовой салфетке. Приблизительно в то же время многие развивали эту идею, в том числе и немецкий врач Вильгельм Вайнберг. Поэтому этот принцип был назван Законом Харди-Вайнберга. На самом деле его высказал еще раньше американец У. Е. Касл, но его имя, как ни странно, не попало в учебники. Принцип можно выразить следующим образом: При отсутствии внешних сил, изменяющих частоту генов в популяции, и при условии случайного скрещивания, частота каждого аллеля (какой она является во втором поколении) стремится оставаться постоянной в любом поколении. Этот принцип положен в основании концепции равновесия Харди-Вайнберга. См. также статью «Равновесие Харди-Вайнберга». ИЗМЕНЧИВОСТЬ ПОД ВЛИЯНИЕМ ВНЕШНИХ УСЛОВИЙ Негенетические факторы могут оказывать такое же влияние на организм, как и гены, ответственные за те или иные признаки. Согласно законам наследственности, гены определяют возможное строение представителя вида, а не то, какое он приобретет в действительности. Так, растение может унаследовать гены высокого роста, но на почве, бедной питательными веществами, оно, скорее всего, останется маленьким. Фенотип организма (его внешний вид) зависит от сочетания наследственных признаков и условий окружающей среды. Рассмотрим простой пример. Представим, что щенки восточно-европейской овчарки имеют гены, унаследованные от общих родителей. Если проследить за рос-
том щенков, отданных в различные семьи, то часто можно заметить, что некоторые из них становятся не такими большими и сильными, как остальные их братья и сестры. Причина может заключаться в генах или в неправильном питании и уходе за ними. Другими словами, внешняя среда оказывает не менее значительное воздействие на фенотип, чем наследственность. Изменяя условия среды, мы можем изменить фенотип. С другой стороны, щенки декоративной породы корги никогда не вырастут выше щенков овчарки, сколько их не корми. Но небольшая разница в росте щенков одной породы может быть обусловлена генетически. В одинаковых условиях за разницу в росте ответственны гены. Хорошо известен эффект, который оказывает улучшение питания на фенотип людей. Еще в 1950 годах проводились исследования зависимости фенотипа от питания среди японских детей. Две группы мальчиков росли в разных условиях: некоторые родились и воспитывались в США, где условия в то время были лучше, а другие в Японии (с тех пор условия в Японии значительно улучшились). Те, кто рос в Америке, были в любом возрасте выше тех1, кто рос в Японии. Улучшение питания и жизненных стандартов в Японии привело к тому, что сейчас дети в ней выше тех, что росли в период с 1900 по 1952 годы. То же самое произошло и в Великобритании — современные дети выше своих бывших сверстников, живших 60 лет назад. ИНДУСТРИАЛЬНЫЙ МЕЛАНИЗМ Теория эволюции, предложенная Чарлзом Дарвином, испытывала недостаток доказательств. Он не мог привести пример эволюционного изменения, имевшего места в настоящий момент, но за время его жизни действительно произошел процесс, приведший к значительным изменениям одного вида. Это был так называемый «индустриальный меланизм» (изменение цвета бабочек). Впервые его механизм был продемонстрирован на примере березовой пяденицы (Biston betularia). Точные данные относительно изменений в популяциях этого вида представил в 1950 годах биолог Кетлуэлл. Его исследования продемонстрировали ход эволюции на примере изменения формы одного вида в результате естественного отбора. Существуют три разновидности окраски пяденицы березовой. Типичная форма — крапчатая, с черными пятнышками, которые иногда образуют черные линии. Другая, называемая «карбонария», — черная или меланическая форма с повышенным содержанием меланина, пигмента черного цвета. Третья форма, переходная — крапчатая с белыми пятнами, которую еще иногда называют «инсулярия». До эпохи индустриальной революции меланическая разновидность была очень редкой формой мутации. Затем, когда города и окружающая их местность начали покрываться слоем сажи от сжигаемого угля, который применяли на фабриках и при отоплении домов, меланическая форма стала более распространенной, и в некоторых местах крапчатая разновидность просто исчезла. Сажа не только делала темными стволы деревьев, но и убивала лишайники, на фоне которых крапчатая разновидность была незаметной. В таких условиях типичная разновидность хорошо смотрелась на фоне темных деревьев, и ее легко распознавали хищники. Черная разновидность получила преимущество; она смогла выжить и дать потомство. Этот феномен коснулся 10% из приблизительно 700 видов больших бабочек Британии и привел к увеличению соотношения темных разновидностей в популяциях. Во всех случаях бабочки днем отдыхали на коре деревьев или на темных предметах. Однако не следует полагать, что таким образом образовался новый вид, так как светлая и темная разновидности могли скрещиваться и давать потомство. Тем не менее этот феномен доказал, что признаки животных могут изменяться под действием естественного отбора, вызванного изменениями среды. В 1956 году был 1 Китайцы в США тоже выше ростом, чем в Китае. Кормить надо лучше.
принят закон о контроле над загрязнением воздуха и были образованы «бездымные зоны». С тех пор ситуация изменилась в противоположную сторону, и светлая разновидность стала вновь более распространенной. См. также статью «Естественный отбор». ИСКОПАЕМЫЕ Ископаемые — это останки вымерших организмов или отпечатки их следов в камне . Большинство ископаемых находят в виде твердых частей скелета, поскольку мягкие ткани и органы умерших животных либо поедаются другими животными, либо разлагаются. В процессе так называемого окаменения минеральные соли из окружающих пород постепенно заменяют твердый органический материал. Органический материал может также раствориться, оставив отпечаток в окружающих его горных породах. Окаменелые следы, такие, как отпечатки ног динозавров или ходы и норы червей, также предоставляют ценные сведения об исчезнувших организмах. К ископаемым относят и окаменелые экскременты , копролиты. Иногда организмы сохраняются иным образом, например многочисленные насекомые, попавшие в смолу древних деревьев и сохранившиеся в янтаре. В Сибири часто находят останки замерзших мамонтов, иногда настолько хорошо сохранившиеся, что можно даже изучать содержимое желудка. Когда их впервые обнаружили путешественники на собачьих упряжках, то собаки могли даже есть мясо этих вымерших животных. • Изучая ископаемые останки животных, можно прийти к следующим выводам: Сначала появились простейшие формы жизни, которые существовали в течение сотен миллионов лет до того, как в процессе эволюции появились более совершенные формы. • Если ископаемые останки расположить в хронологическом порядке, то становится очевидным ход эволюционного развития. Изменения в структуре можно объяснить как приспособление к изменившимся условиям в результате давления отбора на организмы с прежней формой. • Вымирание — настолько частое явление, что в наши дни в животном мире представлено лишь небольшое количество видов, произошедших от вымерших предков. Часто находят множество прекрасно сохранившихся окаменелостей, представляющих ход эволюционного развития определенных групп организмов, например аммониты и морские ежи. Для этих животных существует большое число переходных форм. См.также статьи «Ископаемые свидетельства эволюции», «Периодически нарушаемое равновесие». ИСКОПАЕМЫЕ СВИДЕТЕЛЬСТВА ЭВОЛЮЦИИ Надежные доказательства эволюции можно получить, изучая тысячи окаменелых остатков животных и растений, которые палеонтологи и геологи обнаруживают в горных породах. Они говорят нам о том, как развивалась жизнь на Земле в течение миллионов и миллиардов лет. Они также повествуют и об изменениях самой
Земли. Например, в пустыне Вайоминг, которая в наше время находится выше уровня моря более чем на милю, встречаются останки сотен типов рыб, которые некогда населяли море, плескавшееся в этом районе. Дальше к югу, в Аризоне, есть пустыня, где находят окаменевшие деревья, произраставшие в густых лесах миллионы лет назад. Это доказательство больших климатических изменений, имевших место в прошлом. Когда-то климат здесь был мягким и влажным, но затем превратился в засушливый. Окаменелости образовались и сохранились до нашего времени благодаря случайному стечению обстоятельств. Обычно организмы поедаются другими организмами или разлагаются. Возможность обнаружить окаменелые останки довольно невелика, еще менее вероятно обнаружить серию остатков, показывающих процесс эволюционного преобразования одного вида в другой. Однако бывают примеры почти полного процесса развития. Обычно это окаменелости животных с раковинами, скелетом или зубами. Например, в осадочных породах возрастом 60 миллионов лет были найдены останки четырехпалого существа размером с кошку. Затем обнаруживались останки их видоизменяющихся потомков, увеличивавшихся в размере. Последняя ступень этого развития — современная лошадь, близкие предки которой попадаются в сравнительно молодых отложениях. Похожую эволюционную последовательность можно проследить и для слона, жирафа, верблюда. Обнаружены более подробные свидетельства эволюции некоторых беспозвоночных, включая моллюсков и иглокожих . Окаменелые останки неоспоримо доказывают, что жизнь на Земле за миллионы лет постепенно изменялась, один вид превращался в другой. В наше время уже не приходится серьезно сомневаться в истинности теории эволюции и в том, что она происходила всегда, начиная с зарождения жизни. См. также статьи «Биогеографические свидетельства эволюции», «Сравнительная анатомия», «Биогенетический закон как свидетельство эволюции». ИСКУССТВЕННЫЙ ОТБОР ЖИВОТНЫХ На протяжении многих тысяч лет люди высоко ценили породистых животных. Такие животные получились в результате искусственного отбора. Главная цель искусственного отбора — вывести животных с определенными желаемыми признаками; скотоводы, например, желали получить коров, которые бы давали больше молока, охотники — хороших собак, которые служили бы им помощниками. Но вплоть до недавних пор этот отбор носил случайный, несистематический характер. До опытов Грегора Менделя, проведенных в 1860 годах, никто ничего не знал о законах наследственности, поэтому новые породы выводились путем проб и ошибок, хотя результат часто получался неплохой. Все современные породы кур произошли от дикого предка, обитающего в джунглях Дальнего Востока, предками домашних свиней были кабаны, предками коров — дикие быки, а жирной индейки, приготавливаемой на Рождество, — довольно худая птица, на которую когда-то охотились переселенцы в Новой Англии. В качестве примера важности и эффективности искусственного отбора (селекции) можно привести историю с улучшением индийских пород коров. В течение многих столетий за индийскими коровами почти никто не ухаживал, и они стали полудикими. Надои молока резко снизились. Таких животных можно увидеть и сегодня. Индусы считают коров священными животными и позволяют им свободно ходить по улицам поселков в поисках пищи. На государственных фермах решили улучшить местные породы. Для начала их стали хорошо кормить, но это не привело к значительному увеличению надоев. Проблема заключалась в том, что коровы — довольно нервные животные и легко пугаются, когда их пытаются доить. Но через несколько лет искусственного отбора вывели менее восприимчивых коров, ко-
торые позволяли доить себя людям. Через 20 лет надои возросли втрое. Сегодня для получения желаемых пород научные принципы отбора сочетают с искусственным осеменением. ИСКУССТВЕННЫЙ ОТБОР РАСТЕНИЙ Одним из пионеров селекции (искусственного отбора) растений был американец Лютер Бербанк. Он вывел многочисленные новые сорта растений. Пожалуй, самым известным его вкладом в селекцию растений является улучшение сортов картофеля. Однажды в 1871 году Бербанк осматривал картофельное поле в Массачусетсе и заметил плод, выросший на одном из растений. Хотя картофель обычно имеет цветы, у него бывает довольно мало плодов. Новые растения выращивают, как правило, из клубней, а не из семян. Бербанк сохранил семена и посадил их. Затем он исследовал картофелины, выросшие из этих семян. Они отличались от растения к растению. Некоторые были большими, другие маленькими; одни семена дали много клубней, а другие мало. Клубни одного из растений были самыми многочисленными, большими и ровными. Он выбрал их для дальнейшего размножения неполовым путем. Получившаяся разновидность картофеля была названа именем Бербанка, и вскоре этот сорт стал распространенным на всей территории США. Успех Бербанка послужил примером массового отбора, при котором из многих представителей вида для селекции выбирается одно растение. Массовый отбор — это, вероятно, самый древний вид искусственного отбора растений. Древние люди для посева всегда оставляли самые лучшие семена урожая. Именно от них, скорее всего, можно было получить потомство с желаемым набором признаков. Так, через несколько поколений из диких растений возникали культурные. Зерновые растения, например, были выведены из диких злаков. Предком кочанной капусты, а также цветной, брюссельской и брокколи, было дикое растение морского побережья . Методом массового отбора можно также получить сорта, невосприимчивые к болезням. Представим, например, что на пшеничном поле распространился вредный грибок. Погибли почти все растения, кроме двух-трех. На следующий год из этих здоровых растений выросли новые. И опять на них напал грибок, только на этот раз выжило больше растений. На следующий год все повторилось снова; с каждым годом выживало все больше приспособленных растений и таким образом был выведен сорт пшеницы, невосприимчивый к грибку. ИХТИОЗАВРЫ Пожалуй, самыми известными морскими рептилиями триасового и юрского периодов (245—144 миллионов лет назад) являются ихтиозавры. Внешне они выглядели как современные дельфины с рыбообразным телом и, похожим на акулий, спинным плавником. Их конечности приспособились к водной среде обитания и превратились в плавники; хвост тоже стал мощным хвостовым плавником. По остаткам можно проследить развитие нескольких родов ихтиозавров от длинного и узкого мик- созавра (Mixosaurus) триасового периода через дельфинообразного ихтиозавра (Ichthyosaurs) и, похожего на меч-рыбу, эвринозавра (Eurhinosaurus) юрского периода до беззубого офтальмозавра (Ophthalmosaurus). Все они были активными охотниками, питались рыбой и предками кальмаров. Плавники ихтиозавров в виде весла были специализированным органом, прекрасно приспособленным для развития высокой скорости передвижения в толще воды. Они были усилены скоплением пальцевых костей, которое не походит на обычное распределение пальцев в конечности рептилий. Исходя из этого факта, можно предположить, что ихтиозавры унаследовали свою обтекаемую форму непосредст-
венно от предков-земноводных, минуя стадию сухопутных пресмыкающихся. Их приспособление к морской жизни было настолько совершенным, что они даже рожали живых детенышей, не выходя на сушу для того, чтобы отложить яйца. Их вымирание в конце мезозойской эры (около 65 миллионов лет назад) было частично вызвано конкуренцией со стороны более новых морских животных. Свидетельства о существовании этих морских рептилий были получены еще в начале XIX века. Англичанку Мэри Эннинг (1799—1847) из Лайм-Регис можно назвать первым профессиональным коллекционером окаменелостей. Она собирала окаменелости среди местных прибрежных утесов и продавала их туристам. В 1811 году она случайно наткнулась на несколько огромных окаменелых костей и продала их Эдварду Хоуму, профессору анатомии Лондонского университета. Он не смог опознать останки, и только через семь лет выяснилось, что это кости вымершей рыбообразной рептилии. Первым эту версию выдвинул Жорж Кювье, но назвал ископаемое ихтиозавром в 1818 году В. Кёниг. В 1820 годах было найдено еще несколько подобных образцов. См. также статью «Кювье, Жорж». КАТАСТРОФЫ Жизнь на Земле не раз подвергалась опасностям, которые грозили уничтожить ее навсегда. Не менее пяти раз наступали такие моменты, когда исчезало большинство живых организмов планеты. В настоящее время можно сказать, что мы находимся в шестом периоде массового вымирания. Только на этот раз вымирание представляет собой результат человеческой деятельности, то есть внутренних, а не внешних сил. За 3,5 миллиарда лет глобальная экосистема претерпела много кризисов и в самые критические моменты была близка к полному исчезновению. Около 250 миллионов лет назад жизнь была на грани вымирания. За относительно короткий геологический срок вымерло по крайней мере 96% видов. Из всех видов, когда-либо обитавших на Земле, 99,9% вымерли. Часто создается впечатление, что их вымирание ускорили внешние природные катаклизмы. Среди них можно назвать столкновение с многочисленными астероидами и кометами, которые вызывали появление пылевых облаков и приводили к климатическим изменениям, превращая Землю то в раскаленную пустыню, то в ледяную тундру. Наша планета также пережила значительные колебания уровня океанов и периоды повышенной вулканической активности , вызванной смещением земных пластов. Пять основных катастроф таковы: • Поздний ордовик (440 миллионов лет назад) — вымерло около 85% видов. • Поздний девон (365 миллионов лет назад) — две волны крупного вымирания морских видов, отделенных друг от друга миллионом лет. • Поздняя пермь (251 миллион лет назад) — вымирание около 96% видов. Это было крупнейшее вымирание в истории жизни, в результате исчезли почти все зверообразные пресмыкающиеся, которые до этого были хозяевами планеты на протяжении 80 миллионов лет.
• Поздний триас (205 миллионов лет назад) — вымерло около 76% видов (в основном морских). • Поздний мел (65 миллионов лет назад) — вымерло от 75 до 80% видов. Это наиболее известное вымирание, поскольку оно явилось концом эпохи динозавров, которые до этого были хозяевами планеты на протяжении 140 миллионов лет. См. также статьи «Дрейф материков», «Динозавры». КЛАДИСТИКА Кладистика — это метод описания путей эволюционного развития с помощью науки о классификации (таксономии). Одна из школ таксономии придерживается схемы, первоначально предложенной немецким энтомологом Вилли Хеннингом в 1950 годах и развитой Найлсом Элдриджем и Джоэлом Кракрафтом. Она основывается на положениях генеалогии, которая пытается проследить происхождение современных организмов от их предков и составить их генеалогическое древо. Термин «кладистика» Хеннинг составил на основе греческого слова «кладос», что значит «ветвь, отросток». Основная группа, или таксон, называется в кладистике «кла- дон»; считается, что все организмы одного кладона произошли от одного общего предка. Важное предположение при составлении родословных линий (кладограмм) заключается в том, что ни одно из ныне существующих животных не является предком другого вида современных животных. Следовательно, два разных современных вида животных могут быть связаны только общим предком. Кладограммы составляются на основе определенного количества совместных признаков, которые считаются гомологичными и, следовательно, указывают на общее эволюционное происхождение. Более того, эти схожие признаки являются отправной точкой для выделения отдельной ветви кладограммы. Таким образом, кладограммы представляют собой схемы регулярно ветвящихся линий, похожие на схемы семейной родословной. Похожие схемы раньше применялись для составления родословных дворянских родов и назывались «фамильное дерево». Каждое ответвление начинается в том месте, когда появляется отдельный признак, передаваемый группе организмов, связанных между собой родством. Кладо- нам с общими признаками даются названия групп животных или растений. Группа может быть очень большой — значительная часть фауны — или очень маленькой, такой, как род, в который входит десяток видов, но принцип их выделения одинаков. При составлении кладограмм самая большая трудность состоит в том, чтобы определить в самом ли деле признак, по которому организмы объединяют в одну группу, считается гомологичным. Если одни представители кладона обладают общими признаками с организмами, не входящими в него, то они, по всей видимости, не являются унаследованными от общего предка и называются примитивными признаками. КЛЕЙДОИЧЕСКОЕ ЯЙЦО Эволюционный скачок между земноводными и преся^кающимися стал возможен, по видимому, только благодаря развитию особого типа яйца, которое можно было откладывать на сушу (так называемое клейдоическое или амниотическое яйцо). Это основной признак, по которому земноводные отличаются от пресмыкающихся. Такое яйцо позволило производить потомство вне воды и, следовательно, дало предпосылку к тому, чтобы позвоночные вышли из водной среды обитания и распространились по всей суше. Во-первых, образовалась твердая оболочка вокруг яйца, которая предотвращала его обезвоживание. Во-вторых, появился желток, который поддерживал рост зародыша и позволял молодым рептилиям появляться из
яйца уже в сформировавшейся форме. В-третьих, система оболочек внутри яйца образовывала миниатюрный «водоем», в котором мог развиваться эмбрион, и мешок для продуктов выделения. • Вместе с этим произошла эволюция экскреторной (выделительной) физиологии, которая стала полностью отличаться от физиологии водных животных. Беспозвоночные и рыбы, которые постоянно обитают в воде, выделяют токсичный аммиак. Он получается из избыточных аминокислот, потребляемых белков, в результате простых биохимических реакций. Аммиак растворяется в большом количестве воды, в которой обитают эти животные. Но в яйце, которое откладывается на сушу, эмбрион не может выжить, если будет выделять ядовитый аммиак — накопление этого химического вещества внутри оболочки яйца окажется фатальным. Поэтому развился ряд более сложных химических реакций, при котором выделяется безвредная и нерастворимая мочевая кислота, хранящаяся внутри яйца до тех пор, пока из него не вылупится детеныш. Развитие клейдоического яйца привело к следующим последствиям: Устранение стадии головастика с жабрами. Пресмыкающиеся появляются из яйца похожими на взрослых особей; при этом не происходит никакого метаморфоза (как у земноводных). • Развитие способа внутреннего оплодотворения. Половые клетки уже не выделяются в воду, так как оплодотворение происходит внутри организма, до того как вокруг эмбриона в яйцеводе образуется относительно непроницаемая оболочка яйца. КОНВЕРГЕНЦИЯ Конвергенция (конвергентная эволюция) — это возникновение сходства в строении у далеких по происхождению групп организмов в результате обитания в аналогичных экологических условиях. Примером конвергенции может служить развитие крыльев у позвоночных и насекомых — так различные группы животных, независимо друг от друга, приспособились к передвижению в воздухе. Крылья у этих животных можно назвать аналогичными образованиями, тогда как крылья птиц и летучих мышей произошли от одной и той же пятипальцевой конечности и, следовательно, являются гомологичными образованиями. Когда у родственных животных возникают сходные черты в результате обитания в аналогичных условиях, например развитие похожих конечностей у китов и тюленей, то это называется «параллельная эволюция» . Отдельные организмы занимают определенные экологические ниши в экосистемах. Для того чтобы выжить в определенном окружении, животные должны обладать определенными признаками, которые возникают благодаря естественному отбору. Очевидно, что крупное животное с острыми хищными клыками не сможет жить на дереве, питаясь орехами, плодами и ягодами. Идеально приспособленное к жизни на дереве животное должно быть маленьким, чтобы ветви выдержали его вес. Такому животному необходимы длинные пальцы и когти, чтобы цепляться за ветви, и точное стереоскопическое зрение, чтобы оценивать расстояние для прыжка. Одним из лучших примеров конвергенции является адаптивная радиация австралийских сумчатых млекопитающих, которые заняли на своем материке многие ниши, в остальных частях света свойственные плацентарным млекопитающим. Там существуют сумчатые эквиваленты муравьедов, кротов, землероек, котов и мышей, обладающих значительным внешним сходством с их плацентарными « собратьями ». См. также статьи «Естественный отбор», «Ниша», «Пятипальцевая конечность».
коэволюция Взаимодействие между растениями и животными в процессе эволюции породило интересный феномен, называемый «коэволюция». Этот термин обычно относят к двум (или более) видам, эволюционные изменения которых оказались на пользу обоим. Широко известна связь между птицами и некоторыми растениями. На некоторых растениях образуются плоды, которые обеспечивают птиц пищей; птицы же разносят семена, содержащиеся внутри этих плодов. В процессе эволюции появились яркие, красивые плоды с сочной и питательной мякотью, которые привлекают птиц, распространяющих семена. Опыление цветов с помощью насекомых привело к изменениям в строении обеих сторон. Форма и оттенки цветов, запахи и нектар — все это существует для того, чтобы привлечь насекомых и оставить на их теле пыльцу, которую они перенесут на другие цветы. Некоторые специалисты определяют термином «коэволюция» любые черты, которые образовались в результате постоянно действующих отношений, служивших давлением отбора. В экосистемах существует тесная связь между животными и растениями. В процессе эволюции организмы развивали механизмы, призванные защитить их от конкуренции и уничтожения, например у растений выработались ядовитые вещества — токсины. Но тесно связанные с ними животные, особенно травоядные, выработали защиту против этих токсинов. В этом отношение интересно взаимодействие между различными видами плодовых мушек дрозофил (Drosophila) и кактусом (Lophocereus schottii), который производит токсичные алкалоиды. Кактус оказался ядовитым для восьми видов дрозофил, но Drosophila pachea выработала вещество, устраняющее влияние яда, и может откладывать яйца в гниющие стебли кактуса. В Великобритании способность вырабатывать высокотоксичный цианистый водород (цианогенез) выработалась у многих видов цветов, папоротников и грибов, независимо друг от друга. Личинки же некоторых насекомых поедают цианогенные и ацианогенные растения. Они вырабатывают вещества, которые нейтрализуют яд. КРЕАЦИОНИЗМ • Креационисты (от лат. creatio — творение, сотворение мира) по-разному объясняют происхождение мира, но все они опираются на Книгу Бытия или другие священные тексты. Некоторые полагают, что мир был создан за шесть суток и что все ныне живущие народы считаются потомками Ноя. Другие готовы признать, что так называемые дни творения, описанные в Книге Бытия, можно сопоставить с геологическими эрами, если только помнить о том, что эволюционное развитие происходило с Божественного промысла. Те, кто не придерживаются христианских догм, считают такое учение реакционным и лишний раз демонстрирующим неуместность христианского подхода в науке. Другие ученые совмещают христианские и научные взгляды. Все гипотезы креационистов можно изложить следующим образом: Христиане верят, что Бог представляет собой активную силу, действующую как естественным, так и сверхъестественным образом. Бог — единственный творец мира, хотя Он, конечно, мог действовать посредством мутаций, естественного отбора и так далее. • В Библии сказано, что люди созданы приблизительно так же, как и другие животные, но только «по образу Божьему». Нет причин полагать, что процесс духовного сотворения должен был создать из нас особый вид с физическими и психологическими чертами, но христиане верят, что именно он от-
личает нас от других живых существ и связывает нас с Богом посредством души. • Люди, созданные «по образу Божьему», могут утратить это особое состояние . Это положение снимает одно из противоречий между христианством и эволюционной теорией: предположение о том, что эволюция продолжается, и что люди могут видоизменяться и дальше. Основная часть возражений против дарвинизма в наши дни исходит как раз от креационистов, а не от ученых, хотя возникло новое научно-креационистское учение. В 1932 году в Великобритании было основано «Движение протеста против эволюции», ставящее целью распространение научной информации в пользу библейской теории сотворения мира и доказательство ложности эволюционной теории при помощи научных фактов. К 1970 году количество его членов достигло 850, и оно приобрело больший авторитет после того, как в 1963 году в США было основано Креационистское научно-исследовательское общество, в 1970 году Креационистский научно-исследовательский институт. Дальнейшее развитие креационизма в Великобритании ознаменовало создание в 1972 году Научного объединения имени Ньютона. КЮВЬЕ, ЖОРЖ Жорж Кювье (1769—1832) — выдающаяся фигура в зоологии начала XIX века; будучи реформатором сравнительной анатомии и палеонтологии, он внес неоценимый вклад в развитие теории эволюции. Будущий самый яркий и влиятельный ученый Франции родился в Монбельяре (Эльзас). Получив образование в академии Штутгарта , он стал домашним учителем в богатом нормандском семействе. Здесь он занимался изучением морских животных и собирал материал, вошедший впоследствии в его книгу «Царство животных», опубликованную в 1830 году. Он стал другом Тесье, известного французского ученого, который устроил его на работу в Парижский ботанический сад. В то же время Кювье читал лекции по сравнительной анатомии в университете; в них он высказывал новые идеи в области зоологии. В 1795 году Кювье занял несколько высоких постов в только что основанном в Париже музее естественной истории. Позже он опубликовал научный труд об окаменелых костях и одним из первых использовал окаменелости для доказательства существования вымерших видов. Кювье был приверженцем креационизма, с которым он совместил теорию катастроф, полагая, будто новые формы жизни создавались после очередной катастрофы. Его исследования в Парижском бассейне доказали существование в прошлом экзотических животных. Эти окаменелости и другие, в том числе и гигантские останки, присланные ему из Южной Америки, бесспорно, подтверждали теорию вымирания. В 1818 году он посетил Англию, где осматривал множество окаменелых останков динозавров, но смерть помешала ему опубликовать свои наблюдения. Одним из величайших достижений Кювье стало опознание в 1801 году останков первого из обнаруженных птерозавров. Никто раньше не видел останков такого животного, но Кювье, вооружившись знаниями сравнительной анатомии, установил, что это было летающее пресмыкающееся. Он назвал его «птеродактиль» (что значит крыло-палец) и по строению его челюстей и зубов предположил, что вымершее животное питалось насекомыми. См. также статьи «Креационизм», «Птерозавры». ЛАЙЕЛЬ, ЧАРЛЗ Чарлз Лайель (1797—1875) начал карьеру в качестве адвоката, учился в Оксфорде, а затем в Линкольн-Инне. Практику он начал в 1825 году. Но еще в Оке-
форде он заинтересовался геологией, увлекшись лекциями Уильяма Бакленда, и его адвокатская деятельность не продлилась более двух лет. Еще в 1819. году он стал членом Линнеевского и Геологического обществ. Поэтому не удивительно, что основную часть жизни он посвятил геологии. Собрав материал в третичных отложениях Франции и Италии, Лайель написал свой основной труд «Принципы геологии». В нем он популяризовал взгляд униформистов . Это работа чрезвычайно заинтересовала Чарлза Дарвина и оказала влияние на формирование его идей естественного отбора и эволюции. Фактически Лай- ель стал одним из тех людей, что вдохновили Дарвина на публикацию «Происхождения видов» в 1859 году. В 1835 году Лайеля выбрали президентом Геологического общества. Три года спустя он закончил книгу «Элементы геологии», которая вскоре стала классическим трудом по стратиграфии и палеонтологии. Он возражал против теории катаклизмов , выдвинутой Кювье, и основным аргументом в этом споре был тот факт, что силы, определяющие внешний облик Земли (ветры, ледники, эрозия, землетрясения и вулканы), действовали в прошлом так же, как и в наше время, продолжая непрерывно оказывать влияние на поверхность планеты. Лайель часто путешествовал по Европе и Америке и написал несколько книг на основе наблюдений, сделанных в разных странах. В 1848 году он был удостоен дворянского звания, в 1864 году получил титул баронета. Его теории, благодаря публикациям, получили признание во всем мире, и принципы униформизма, которые он проповедовал, легли в основание современной геологической теории. В идеях Ламарка он находил много непоследовательных мыслей; особенно он возражал против того положения, что виды претерпевают постоянные изменения. См. также статьи «Кювье, Жорж», «Дарвин, Чарлз», «Дарвинизм», «Ламаркизм», «Естественный отбор». ЛАМАРК, ЖАН БАТИСТ Жан Батист Ламарк (1744—1829) при жизни был довольно популярен, но впоследствии его эволюционную теорию раскритиковали и предали забвению. Как многие сыновья бедных землевладельцев, Ламарк готовился к карьере священника. При посвящении ему дали имя Жан Батист, но после смерти отца, в возрасте 17 лет, он оставил колледж и поступил на военную службу. Когда его часть находилась на Средиземноморском побережье, Ламарк заинтересовался ботаникой, а после ранения, когда ему пришлось подать в отставку, посвятил ей все свои силы. Опубликованный в 1778 году труд «Флора Франции» принес ему широкую известность, и в 1781 году его назначили королевским ботаником, что позволило ему путешествовать по всей Европе. Сначала Ламарк интересовался исключительно ботаникой, но с 1788 года, приступив к работе в Королевском ботаническом саду, он начал заниматься и зоологией. После революции ботанический сад был реорганизован в Музей естественной истории, где Ламарк стал профессором. Ламарк специализировался по беспозвоночным (он сам изобрел этот термин) и их классификации, взяв труд Линнея за основу и разделив «насекомых» и «червей» на группы, которые до сих пор применяются в современной таксономии. Его семитомный труд по естественной истории беспозвоночных, публиковавшийся с 1815 по 1822 год, заложил основы современной биологии беспозвоночных. Фактически именно Ламарк придал слову «биология» современный смысл. Занятия классификацией привели к наблюдению сходства и родства всего живого. Свои идеи по этому поводу Ламарк начал публиковать с 1801 года. Его основная работа «Философия зоологии», опубликованная в 1809 году, была посвящена изложению теории родственных отношений между животными и возможности изменения видов с течением времени, то есть, выражаясь современным языком, их эволюции. Теория Ламарка (ламаркизм) не получила особого признания при его
жизни, да и его последователи, в том числе Чарльз Дарвин, относились к ней критически. Он умер в бедности и похоронен в могиле без надгробия. Его дочь составила горькую эпитафию — «Потомки будут помнить тебя». См. также статьи «Дарвинизм», «Ламаркизм», «Линней, Карл». ЛАМАРКИЗМ В 1809 году Жан Батист Ламарк опубликовал свою основную работу «Философию зоологии». В ней он попытался доказать, что различные органы тела появились в результате необходимости или исчезли, когда окружающая среда изменилась, и необходимость в этих органах отпала. Ламарк полагал, что приобретенные признаки наследуются потомством, и если использование органа продолжается в течение долгого времени, то появляется новый вид. По этой причине он решил, что все живые организмы можно расположить по ветвям и показать, как одни виды постепенно переходят в другие. Классический пример теории Ламарка (и одновременно самая известная ошибка в биологии) — это рассуждение о том, как жираф приобрел длинную шею. Ламарк утверждал, что в каждом поколении жирафы старались все дальше и дальше вытянуть шею, желая достать до вершин деревьев, и Потому этот признак передавался следующему поколению. К сожалению, Ламарк никогда не пытался продемонстрировать, как один вид постепенно превращается в другой на основании наследования приобретенных черт. Его идеи не приняли, как не приняли и другие, более современные идеи о том, как одни виды образуются от других. В то же время известный ученый Жорж Кювье предложил свою теорию эволюции, во многом менее прогрессивную, чем у Ламарка, но авторитет Кювье был настолько велик, что об идеях Ламарка забыли на многие годы. Ламаркизм опирался на общепринятые представления XIX века о превосходстве человека над другими животными. Согласно этой теории, улучшение среды обитания индивидов вело к улучшению самого вида. В конце 1890 годов Август Вейсман (1834—1914) изучал природу половых клеток и пришел к выводу, что наследственность не зависит от окружения. Он утверждал, что преемственность жизни содержится именно в этих клетках, а не в организме в целом. Работы Грегора Менделя и Хуго де Фриза подтвердили ошибочность взглядов Ламарка. Однако идеи Ламарка подготовили почву для теории эволюции, разработанной Чарлзом Дарвином. См. также статьи «Кювье, Жорж», «Дарвинизм», «Менделизм». ЛАНЦЕТНИК Первое упоминание о ланцетнике относится к 1774 году. Его нашли у берегов британского полуострова Корнуэлл и отослали на анализ немецкому натуралисту Петеру Симону Палласу. Тот дал краткое описание животного в примечании к своей книге, ошибочно причислив его к морским слизням и назвав его Limax lanceolatus. Полвека спустя английский натуралист Джонатан Коуч обнаружил в Корнуэлле живой экземпляр и поместил его в аквариум с морской водой для наблюдения. В то время предполагали, что это примитивная рыба и Коуч назвал его Amphioxus — острый с обоих концов. Но обычно его называли «ланцетник2». На морском побережье Великобритании он встречается редко, но в Китае, особенно в Тайваньском проливе, он настолько распространен, что его употребляют в пищу. Родственная связь ланцетника с остальными представителями фауны — самая интересная черта этого 10-сантиметрового и довольно невзрачного существа. Он чем-то напоминает не до конца развившееся позвоночное с трубчатым спинным мозгом над поддерживающей его хордой (спинной струной) и скоплением мышц у хвоста, как у рыб. В то же время у него отсутствует позвоночник, челюсти и 2 Поскольку его внешний вид напоминает ланцет - хирургический инструмент.
вообще любые кости. У него также нет ни мозга, ни глаз, ни других органов чувств, связанных с мозгом3. Следовательно, его нельзя определить как настоящее позвоночное, хотя среди беспозвоночных он больше всего напоминает позвоночное . ,-востовон плавит: I ПИНЧОИ плавник Хорда № потом пии на я мереная трубка Брюшной плавник Атриопор Гонада П«-мё>ючмый Жаберные Предротибая воронка вырост кишечника щели со щупальцами По сути, ланцетник считается настоящим живым ископаемым, так как останки животных такого типа находят в отложениях кембрийского периода (540—505 миллионов лет назад). Они часто встречаются среди других остатков в сланце Бёрд- жесс канадских Скалистых гор. Об одном из таких ископаемых под названием Pikaia идет речь в известной книге Стефана Джея Гоулда «Удивительная жизнь». Предполагается, что Pikaia был самым древним из известных предшественников позвоночных. См. также статьи «Сланец Бёрджесс», «Живые ископаемые». ЛИКИ, ЛУИС Луис Лики (1903—1972) родился в колониальной Кении в семье миссионеров. Детство он провел в Кении, но затем уехал в Англию и изучал антропологию в колледже св. Иоанна Кембриджского университета. После завершения образования он более 40 лет занимался поисками свидетельств ранней истории человечества в Восточной Африке. Его интересовал промежуток времени от сравнительно недавних стоянок первобытных людей до эпохи происхождения человека. Его самым известным вкладом в науку считается отождествление родины человечества с Африкой. Первые экспедиции Лики состоялись в 1920 годах, но первую значительную находку он обнаружил в 1931 году в Олдовайском ущелье, в Танзании. Причиной приезда в это ущелье стало стремление разгадать загадку так называемого олдо- вайского человека — человеческого скелета, обнаруженного немецким ученым Гансом Реком в 1913 году. Рек полагал, что скелету миллион лет, но Лики доказал, что это относительно современный человек. С тех пор Луис Лики и его вторая жена Мэри постоянно занимались тщательными поисками в этом ущелье вплоть до 1960 годов. Они нашли тысячи остатков животных и сотни каменных орудий труда. Именно Мэри обнаружила окаменелость, совершившую переворот в науке и прославившую семью неутомимых ученых. В 1959 году, после 30 лет кропотливых поисков в Олдовайском ущелье, она нашла окаменелый череп зинджантропа. Он походил на те черепа, что некогда нашли Раймонд Дарт и Роберт Брум (останки австралопитека) . Кости выглядели достаточно массивными и крепкими. Это доисторическое существо получило научное название Zinjanthropus boisei (от арабского 3 И, тем не менее, у него есть образования, являющиеся их предшественниками. Например, в переднем конце спинного мозга имеется сетчатая формация, с помощью которой он обрабатывает сигналы внешней среды. В процессе эволюции к ней добавлялись все новые структуры, так что она присутствует и у человека.
названия Восточной Африки — зиндж и от фамилии спонсора экспедиции Чарлза Бойса). Калий-аргоновый анализ показал, что черепу около 1,8 миллионов лет. В средствах массовой информации его прозвали «человек-щелкунчик» из-за чрезвычайно развитых челюстей и зубов. После этой находки в Олдовайском ущелье начались серьезные раскопки, продолжавшиеся до самой смерти Луиса от сердечного приступа в 1972 году. См. также статью «Дарт, Раймонд». ЛИНГУЛА При отсутствии изменений в окружающей среде некоторые виды могут эволюционировать до такой степени, что приспособятся к ней до полного совершенства. Они могут не изменяться в течение долгого времени; мутации будут вызывать некоторые преобразования в отдельных особях, но эти виды быстро вымрут, поскольку по определению будут менее приспособлены к среде обитания. Такие виды на самом деле существуют в природе. Возьмем, например, современного представителя плеченогих лингулу (от лат. Lingula — язычок), который остается прежним на протяжении 500 миллионов лет. Некоторые существующие виды лингулы почти совершенно идентичны их предкам, обитавшим в кембрийский и ордовикский периоды. Поэтому их можно назвать живыми ископаемыми. Лингулы принадлежат к небольшой группе морских беспозвоночных — плеченогим или бра- хиоподам (Brachiopoda). Члены этой группы внешне напоминают двустворчатых моллюсков, поскольку имеют две створки раковины, но на этом сходство заканчивается. У них разный механизм питания и эволюционная история. Ныне живущие брахиоподы редко превышают 5 сантиметров в длину, всего на разных широтах и глубинах теплых морей их меньше 300 видов. Большинство обитает на континентальном склоне , но порой их находят и у берегов. Среди ископаемых остатков известно более 30 000 видов брахиопод; некоторые из них достигали в длину 30 сантиметров. В ордовикский период (505—403 миллионов лет назад) плеченогие были так же многочисленны и разнообразны, как современные моллюски. В разных частях света встречаются целые пласты горных пород, составленные исключительно из остатков этих животных. Помимо простого фильтрующего механизма питания, одна из причин, по какой лингулы дожили до сегодняшнего дня, заключается в том, что они могут жить в среде, бедной кислородом. Немногие животные способны выжить в такой среде, и потому у них было мало конкурентов, в том числе и хищников. У лингулы имеется мускульный стебелек, который может сокращаться и вытягиваться. С помощью него она зарывается в ил. Десятки видов лингул распространены в регионе Индийского и Тихого океанов, особенно у берегов Японии, Южной Австралии и Новой Зеландии. В некоторых местах их употребляют в пищу. См. также статью «Живые ископаемые».
ЛИННЕЙ, КАРЛ Карл Линней (1707—1778) родился в Росхульте, небольшом городке на юге Швеции. Его отец хотел, чтобы Карл стал священником, если только ему не понравится профессия сапожника. Но с детства Линней увлеченно составлял коллекции, гулял по окрестностям, восхищаясь разнообразием растений и животных. Местный врач заметил его интерес к естественной истории и посоветовал поступить в университет. Из-за недостатка денег Линней не мог закончить образование в Швеции и в конечном итоге переехал в Голландию. Там он написал свою знаменитую работу «Система природы» (Systema Naturae), состоящую всего из 12 листов ин-фолио. Она явилась своего рода «пропуском» в научный мир — известные ученые признали ее, и это позволило Линнею совершить путешествия по Англии и Франции и встретиться со многими уважаемыми учеными того времени. В конечном итоге он стал профессором естественной истории Упсальского университета. Величайшим вкладом Линнея в науку явилось составление классификации растений и животных, согласно простому логическому принципу. Каждому виду он дал особое название из двух латинских слов (бинарное название). Например, животным, сильно похожим друг на друга, таким, как лев, тигр и леопард, он дал общее (родовое) имя Felis. Затем каждое животное получило особое (видовое) имя. Так, лев — это Felis leo, тигр — Felis tigris, а леопард — Felis pardus. Любовь к латинским названиям, по всей видимости, заставила его изменить и собственное имя — в публикациях он подписывался Carolus Linnaeus. Линнея часто критиковали за высокомерие и тщеславие. Эти качества заметны и в его гордом девизе: Deus creavit — Linnaeus disposuit («Бог сотворил, Линней распределил»). Хотя в своей классификации Линней ограничивался только некоторыми внешними анатомическими признаками растений и животных, он, тем не менее, заставил по-новому отнестись к систематизации живого мира и заложил основы современной строго логичной научной классификации. Таким образом, он подтолкнул ученых заняться вопросом происхождения видов, и именно этот вопрос приобрел особую важность для науки столетие спустя, во второй половине XIX века. ЛЮСИ В рождественский вечер 1974 года Дональд Джохансон и его коллега Том Грэй обнаружили фрагмент кости руки гоминида, выступающий из скалистого склона близ Гадара (Эфиопия). Поблизости они обнаружили другие фрагменты костей, и вскоре оказалось, что перед ними останки скелета. Через три недели тщательных исследований было собрано около 40% скелета женской особи гоминида. Эти останки по каталогу значились как «AL 2881-1, частичный скелет», а их научное название — Australopithecus afarensis — южная обезьяна издалека . Однако среди ученых он более известен как Люси, поскольку ее первооткрыватели настолько обрадовались, обнаружив эти останки, что отметили это событие, выпив пива и прослушав свою любимую песню «Люси в небе с алмазами» в исполнении «Битлз». * Люси жила около 3 миллионов лет назад. Это наиболее v сохранившийся из найденных образцов австралопитека. Детальная реконструкция остатков показала, что ее рост составлял 120 сантиметров, что соответствует росту современного шестилетнего ребенка. Она весила
около 60 фунтов (27,2 килограммов), что меньше массы современного шимпанзе. По зубам определили, что она умерла в конце второго или начале третьего десятка жизни, так как в ее челюстной кости присутствует один коренной зуб. Род определили по скелету похожему на человеческий; строение ног и бедер предполагает , что она передвигалась на двух ногах. Верхняя часть скелета походит более на скелет обезьяны — длинные руки и мощная грудная клетка указывают на то, что она легко могла лазить по деревьям. Большинство палеонтологов относят гоминидов к одной группе австралопитеков. Они походили на шимпанзе, но обладали человеческими чертами, в том числе и позвоночником, который отходил вниз от мозга, а не назад, как у обезьян. Зубы совмещают человеческие и обезьяньи признаки. Предполагалось, что Люси — наиболее древний из гоминидов, но в 1994 году были обнаружены останки еще более древнего вида, Ardipithecus ramidis. Его возраст оценивается в 4,4 миллиона лет. МАНТЕЛЛ, ГИДЕОН Одним из первых людей, нашедших свидетельства существования доисторических рептилий, был Гидеон Мантелл (1790—1852) . Это был врач и любитель- палеонтолог. Согласно легенде, однажды весенним днем 1822 года доктор Мантелл посетил одного своего пациента. Пока он осматривал больного, его жена, Мэри Энн, вышла прогуляться по недавно отремонтированной дороге. Она заметила что- то блестящее в куче камней, которыми мостили дорогу. При более близком осмотре блестящие предметы оказались окаменелыми зубами. Гидеон Мантелл не видел ранее ничего подобного. Он решил, что зубы принадлежали травоядному животному, поскольку были источены в результате пережевывания. Сравнить их можно было разве что с зубами слона или носорога. С помощью поставщиков камней он обнаружил место, откуда происходила эта находка — каменоломня Тилгейт-Форест. Возраст этих пород в каменоломне составлял около 130 миллионов лет, что намного раньше распространения крупных млекопитающих. Зубы сохранились с мезозойской эры, эпохи пресмыкающихся. Мантелл послал зубы и некоторые окаменелые кости ног, которые позже нашел в этой каменоломне, двум самым известным авторитетам того времени: Жоржу Кювье в Париж и Уильяму Бакленду, профессору геологии Оксфордского университета. Но никто из них не посчитал, что им прислали останки вымерших рептилий. Несмотря на отрицательные отзывы, Мантелл настаивал на своей гипотезе и старался найти среди музейных коллекций древних и современных образцов нечто, напоминающее его находки. Спустя три года ему показали скелет современной южно-американской игуаны, хранящийся в музее Королевского хирургического колледжа в Лондоне. На нижней челюсти у нее были уменьшенные подобия тех зубов, что некогда были обнаружены благодаря случайности. Мантелл опубликовал описание находки и назвал ископаемое животное игуанодоном. См. также статью «Кювье, Жорж». МЕНДЕЛИЗМ Классическая генетика названа в честь Грегора Менделя. Менделизм — это исследование наследственности путем экспериментов по выращиванию растений и разведению животных. Впервые такие эксперименты Мендель провел в 1860 годах. Изучаемые признаки обычно контролируются одним геном и демонстрируют простые доминантные или рецессивные взаимоотношения между аллелями. В многочисленном потомстве от скрещивания подсчитывается доля различных фенотипов (совокупности внешних признаков, определяемых генами) и на их основе устанавливается
генотип родителей. Подобные работы впервые дали понять, что наследование имеет дискретную природу, а не является простым смешиванием признаков. Мендель сформулировал два закона, объясняющие механизм наследования, который он наблюдал на примере обычного огородного, или садового, гороха (Psium sativum). Первый закон, Закон расщепления, гласит, что любой признак существует в двух факторах, которые находятся в клетках тела (соматических клетках) , но только один из них передается отдельной гамете (половой клетке). Второй закон, Закон независимого распределения признаков, утверждает, что распределение этих факторов в гамете случайно. Следовательно, при наличии нескольких пар факторов, каждая пара разделяется независимо. Мендель назвал эти факторы, ответственные за проявление признаков растений, «зародышевые единицы». Сегодня они известны как гены (так их впервые в 1909 году назвал датский ученый Вильгельм Иогансен). Различные формы генов именуются аллелями (сокращенно от аллеломорфных паров генов). Известно, что клетка с полным набором хромосом данного вида (диплоидная клетка) содержит два алле- ля любого конкретного гена. Каждый аллель содержится в одной из двух гомологичных хромосом (хромосомы, которые образуют пары во время образования клетки) . Гамете (яйцеклетке или сперматозоиду) передается только одна из двух гомологичных хромосом. Таким образом, Закон расщепления был подтвержден. Мендель рассматривал факторы наследственности как отдельные независимые частицы, но сейчас известно, что они составляют хромосомы. Закон независимого распределения относится только к тем парам аллелей, которые находятся в разных хромосомах . МУТАГЕНЫ Мутагены — это факторы внешней среды, увеличивающие вероятность мутаций и приводящие к наследственным изменениям. Радиация Организмы постоянно подвергаются различным типам радиационного облучения. Диапазон электромагнитного излучения простирается от длинных радиоволн до космических лучей с очень короткой длиной волны. Количество энергии, содержащейся в излучении, увеличивается по мере уменьшения длины волн и на определенном этапе лучи начинают проникать внутрь живых клеток. Ультрафиолетовое излучение обладает менее эффективной способностью проникать внутрь клеток, чем высокоэнергичные лучи, но при этом ДНК легко изменяется под его воздействием, что приводит к структурным повреждениям на молекулярном уровне и вызывает такие последствия, как рак кожи. Излучение с длиной волны меньшей, чем у ультрафиолетового, называется «ионизирующее излучение». Его уровень энергии настолько высок, что электроны под воздействием лучей сходят с орбит атомов и образуют положительно заряженные ионы. Ионы, а также содержащие их молекулы, химически более активны, чем нейтральные атомы. Этот тип радиации может воздействовать на ДНК и хромосомы, но мутации, вызываемые им, не наследуются, если только они не произошли в органах, производящих половые клетки. Все организмы в той или иной степени подвергаются низкому уровню облучения космическими лучами и радиоактивными веществами Земли, которые встречаются в горных породах, выходящих на поверхность. Дополнительное облучение вызывается из-за использования человеком радиоактивных изотопов, например, рентгеновских лучей в медицине и выбросов радиоактивных отходов атомного реактора. Химические вещества Начиная с 1945 года список мутагенных химических веществ постоянно пополня-
ется, причем многие из них обладают канцерогенными свойствами (вызывают рак). Часто мутагены используют в сельском хозяйстве Для улучшения роста злаковых культур и повышения урожая. Так, например, колхицин вызывает удвоение хромосом в клетках и приводит к увеличению роста растении. См. также статьи «Искусственный отбор растений», «Мутация». МУТАЦИЯ Мутация — это непредвиденное изменение наследственных свойств организма в результате перестроек и нарушений отдельных генов или хромосом. Хотя термин «мутация» обычно используется именно в этом смысле, исторически он имел более широкое значение, включающее изменения порядка и структуры хромосом. Мутации предоставляют «сырой» материал для эволюции и считаются основой изменчивости представителей популяции, на базе которой и осуществляется естественный (или искусственный) отбор комбинаций генов, наиболее приспособленных к окружающей среде. Многие мутации могут быть нейтральными или «молчащими» (то есть не оказывающими заметного влияния на организм). Вредные мутации становятся очевидными, поскольку изменяют выживаемость организма. Мутации происходят случайно, но их могут вызывать различные факторы внешней среды. Спонтанные мутации возникают в результате ошибок при репликации; разные гены могут подвергаться мутации с различной частотой. • Многие обусловленные мутации могут возникать в результате влияния на организм факторов внешней среды (мутагенов), таких, как: Рентгеновские лучи. Вызывают нарушения в цепочках ДНК, что приводит к перестановкам (блоковые мутации) и удалению фрагментов. • Ультрафиолетовые лучи. Вызывают точечные мутации, включая замену оснований, вставки и удаление. • Химические вещества. Включают: аналоги оснований, которые подставляются вместо нормальных оснований при синтезе ДНК, что приводит к ошибочному спариванию; реактивы, которые добавляют в химические группы или удаляют их из нормальных оснований, что приводит к ошибочному спариванию во время репликации ДНК (например, бензол, формалин, четыреххлористый углерод) . Гены мутируют с определенной частотой, которая зависит от вида генов — некоторые из них обладают весьма высокой частотой спонтанной мутации. Большинство мутаций происходит в соматических клетках (клетках тела) и не наследуется. Те мутации, что совершаются в половых клетках, могут наследоваться. См. также статью «Мутагены». НАПРАВЛЕННАЯ ЭВОЛЮЦИЯ Против теории эволюции Дарвина было выдвинуто несколько возражений, в том числе и то, что концепция изменчивости признаков и естественного отбора не объясняет, почему некоторые организмы эволюционировали в определенном направлении, как если бы их развитие было каким-то образом направлено ко вполне определенной цели. Представление о том, что в своем развитии организмы преследуют какую-то цель, не ново. В теорию Ламарка входило предположение о том, что все организмы обладают стремлением к усовершенствованию. Но оно было отвергнуто Дарвином при работе над первым изданием «Происхождения видов». Позже высказывались соображения, что эволюция некоторых животных, например лошадей (в направлении
увеличения роста и сокращения количества пальцев), была каким-то образом предопределена заранее. Стремление родственных групп организмов развиваться в одном и том же направлении, независимо от естественного отбора, следует считать основным положением в теории ортогенеза. Поскольку эта теория предполагает , что эволюция происходит независимо от естественных законов, ее нельзя проверить экспериментально. Таким образом, теория ортогенеза противостоит общепринятой теории эволюции, неодарвинизму. Однако некоторые положения ортогенеза пришлись по душе креационистам, которые нашли в них подтверждение своим идеям о надзоре Творца над своим творением и о наличии Божественного плана. Популярности теории ортогенеза в постдарвиновскую Викторианскую эпоху способствовал недостаток окаменелостей, подтверждающих теорию эволюции. Теперь нам известно, что почти все примеры пря- монаправленной эволюции, в том числе и эволюция лошади, представляют собой более сложные, включающие адаптивную радиацию по нишам. Многие из боковых ветвей вскоре исчезли, но некоторые животные выжили, и долгое время обитали в разных частях света. Как только появлялась особая вариация, шансы на развитие в том же направлении значительно увеличивались. См. также статьи «Дарвинизм», «Ламарк Жан Батист», «Ламаркизм», «Естественный отбор», « Неодарвинизм ». НАУТИЛУС Основной интерес, проявляемый биологами к наутилусу (Nautilus — кораблик), заключается в том, что это единственный ныне живущий представитель большой группы головоногих моллюсков с многокамерной раковиной (аммонитов), широко распространенных в раннекембрийский и позднемеловой периоды (475 миллионов лет назад). Этот период времени охватывает самую сложную и обширную стадию развития беспозвоночных. После долгой эпохи доминирования среди морских животных в мезозое (45—65 миллионов лет назад) их число неожиданно сократилось и ныне среди головоногих моллюсков можно назвать только осьминогов, кальмаров и каракатиц. Аммониты названы по имени древнеегипетского бога Амона, изображавшегося с витыми рогами на голове. По прекрасно сохранившимся окаменелостям хорошо изучены тысячи их исчезнувших видов. Начиная с триасового периода (245 миллионов лет назад) быстро появлялись новые семейства, роды и виды. Их различают по форме и рисунку завитков, особенно по типу соединения витков раковины. Сегодня существует, по крайней мере, шесть видов наутилуса, обитающих на умеренных глубинах в юго-западной части Тихого океана. Наутилус плавает преимущественно ночью, используя принцип реактивного движения. Несмотря на то, что раковина по сравнению с телом моллюска довольно тяжела, ее поддерживает газ в пустых камерах. Из-за того, что центр плавучести располагается ниже центра тяжести, тело наутилуса всегда направлено вниз, подобно тому, как корзина воздушного шара всегда находится ниже самого воздушного шара.
Несмотря на то, что раковины наутилуса были известны еще в XVI веке, само животное не было как следует изучено до 1831 года, когда Ричард Оуэн, сотрудник Королевского хирургического колледжа в Лондоне, не составил описание экземпляра , доставленного ему из Тихого океана. Живой экземпляр был изучен лишь полтора века спустя. В 1962 году профессор Оксфордского университета Анна Биддер посетила Новую Каледонию, где изучала наутилусы, содержащиеся в аквариуме. С тех пор их успели снять в естественной среде обитания при помощи подводной камеры. См. также статьи «Живые ископаемые», «Оуэн, Ричард». НЕОДАРВИНИЗМ Неодарвинизм — это основанная Чарльзом Дарвином теория эволюции методом естественного отбора, согласованная с современной теорией генетики, которая берет начало в работах Грегора Менделя, и усовершенствованная в соответствии с исследованиями современных генетиков. Эти исследования ответили на многие вопросы, которые были в свое время поставлены до теории Дарвина, и на которые без знания генетики ответить было просто невозможно. Суть неодарвинизма заключается в том, что приспособление организмов к среде обитания совершается благодаря естественному отбору, который действует на основе наследования изменяющихся мелких признаков, большинство из которых изначально неадаптивны. Основной источник изменчивости — мутации, которые сохраняются и передаются посредством механизма дискретной наследственности. Изменения в генном наборе различных популяций, при условии географической изоляции и ограничения дрейфа генов, в конечном итоге приводят к образованию нового вида. Хотя давление отбора всегда, как правило, очень велико, образование новых видов — процесс чрезвычайно медленный. Критики неодарвинизма утверждают, что он не может объяснить периоды ускоренного видообразования, чередующиеся с периодами замедления эволюционной активности. Но их можно объяснить тем, что в истории планеты периоды экологического равновесия чередовались с периодами быстрых изменений окружающей среды. Однако медлительность, присущая механизму видообразования, каким его понимает неодарвинизм, породило представление о крупных мутациях4, приводящих к большим фенотипическим изменениям, которые, возможно, тоже сыграли свою роль в эволюции. Наряду с проблемой больших скачков в ходе эволюции существует проблема так называемых переходных стадий. Такие стадии должны предшествовать адаптированным структурам, доказавшим в конце концов свою надежность. Например, предполагается, что развитию глаза предшествовали стадии «полуразвитого глаза», то есть ряд приспособлений, фокусирующих свет переменной яркости, но не формирующих изображение. Однако любое образование, увеличивающее способность воспринимать свет переменной яркости, будет преимуществом, так как оно позволит воспринимать тень и движения и будет способствовать выживанию. См. также статьи «Неодарвинизм», «Менделизм», «Мутация», «Репродуктивная изоляция». НЕОПИЛИНА Моллюски (улитки, устрицы, кальмары и слизни) считаются в высшей степени приспособленными и широко распространенными организмами, поскольку их предок выработал эффективную Защиту в виде раковины. Их общим предком мог быть при- Сейчас мы уже Знаем, что может быть горизонтальный перенос генов, приводящий к макромутациям.
митивный моллюск пилина (Pilinfl), останки которого находят в отложениях кембрийского периода и который имел простую раковину в виде колпачка. Предполагалось, что такие формы исчезли около 350 миллионов лет назад, но в 1952 году в глубинах Тихого океана были обнаружены представители вида, очень похожего на древнего моллюска. На взгляд неспециалиста, неопилина (Neopilina) — довольно невзрачное животное, какой-то моллюск, около 2 сантиметров в диаметре, но для экспертов в области малакологии ее обнаружение явилось одним из величайших открытий XX века. У нее имеются жабры, расположенные парами, и двусторонне симметричное тело (различаются правая и левая половины), что необычно для моллюсков, но характерно для кольчатых червей. Кроме того, что это живое ископаемое, по всей видимости, указывает на общее происхождение настоящих кольчатых червей и моллюсков, обстоятельства его обнаружения тоже довольно удивительны. В 1952 году датское глубоководное исследовательское судно «Галатея» подняло с глубины в 3600 метров близ побережья Коста-Рики первые экземпляры этого животного . Ничего подобного среди ныне живущих животных не видели, а поскольку их подняли с большой глубины, то оставалось только догадываться об их образе жизни. Шесть лет спустя у берегов Перу был обнаружен второй вид; а в 1962 году у берегов Калифорнии еще один. Через девять лет нашли и четвертый вид, на этот раз в Аденском заливе. Исходя из этого, можно предположить, что род не- опилин широко распространен по всему миру. Самое удивительное, что они в течение долгого времени никому не попадались на глаза. Начиная с 1872 года, когда судно королевского флота Великобритании «Челленджер» пустилось в трехлетнее плавание, были проведены десятки глубоководных исследований во всех морях с использованием самых лучших аппаратов. Но за 80 лет тщательных поисков обнаружить неопилин не удавалось. См. также статью «Живые ископаемые». НЕОТЕНИЯ Форма тела, которую в конечном итоге принимает взрослый организм, контролируется при помощи генов и может подвергаться естественному отбору в процессе роста. Гены определяют как природу признаков взрослого организма, так и скорость, с какой они проявляются, включая стадию полового созревания. Убыстрение процесса полового созревания может привести к тому, что взрослый организм будет сохранять признаки молодого. Способность организмов размножаться на ранней стадии развития (например, раннее половое созревание в личиночной стадии) называется «неотения». В 1920 годах Уолтер Гарстанг и другие ученые предположили, что неотения оказывает влияние на эволюционные изменения. Они выдвинули гипотезу, что хордовые (животные с хордой, предшественники позвоночных) произошли от зрелых личинок иглокожих (беспозвоночных с покрытой шипами кожей) типа морских ежей. Существует много случаев, подтверждающих, что развитие неотении сыграло важную роль в эволюции, особенно в эволюции примитивных земноводных. Один из широко известных примеров — мексиканский аксолотль. Он может размножаться в стадии водной личинки и завершать жизненный цикл, не выходя из воды. Другой пример, тоже из земноводных, это протеи, обитающие в Европе и США. Эти примеры, хотя и интересны с биологической точки зрения, ничего не говорят широкой публике. Однако в 1970 годах Б. Кэмпбелл предложил неординарное
толкование этого феномена, которое касается всех живых организмов планеты. Он отнес явление неотении ко всему человеческому роду. Ограниченный волосяной покров и бледность кожи европеоидной расы может быть результатом прерванного развития волосяных мешочков и связанных с ними клеток, производящих пигмент меланин. Относительно большой мозг и отсутствие надбровных дуг может быть характеристикой ранней стадии развития обезьян, так же, как и увеличенная скорость роста волос на голове по сравнению с остальными частями тела и увеличенный объем полушарий мозга при рождении по сравнению с другими органами. См. также статью «Естественный отбор». НИША Это слово происходит от итальянского nicchia и означает углубление, в котором что-то находится. В экологии оно приобрело дополнительное значение — место, занимаемое организмом в окружающей среде. В это понятие входит функциональная роль организма в сообществе. Термин «ниша» также подразумевает все связи между популяциями, сообществами и экосистемой, в которой находится организм. В число этих связей входят следующие приспособления: • экологическая амплитуда устойчивости ко всем неживым ограничивающим факторам среды; • способность пользоваться пищей внутри среды; • изменения, позволяющие выжить на территории, где обитает организм; • способность выжить внутри определенной популяционной структуры. Каждая популяция занимает определенную экологическую нишу, которая определяет основные структуры, физические и поведенческие приспособления популяции. Различные сообщества в очень похожих экосистемах, для которых характерны сходные среды, часто аналогичны по своей структуре и могут занимать ниши, которые в основных своих чертах абсолютно идентичны. Приспособления популяций в этих нишах могут внешне быть очень схожими, даже если эти популяции совершенно не родственны друг другу. Если два вида занимают одну нишу, то между ними возникает конкуренция, которая длится до тех пор, пока один вид не вымещает другой. Схожие ниши в разных районах могут занимать разные виды. Например, африканская лань занимает ту же нишу, что и евразийский марал Евразии. И напротив, один тип организмов может путем адаптивной радиации занять несколько разных ниш, например дарвиновы вьюрки на Галапагосах. Когда два вида сосуществуют на одной территории, то можно предположить, что они взаимодействуют со средой по-разному (занимают разные ниши). В лесу, например, водятся различные виды птиц, питающихся семенами, но каждый из них, на самом деле использует среду обитания по-своему. См. также статьи «Дарвиновы вьюрки», «Галапагосы, острова». ОТБОР Естественный отбор — это процесс, сокращающий в популяции пропорцию организмов , относительно неприспособленных к выживанию, и увеличивающих пропорцию организмов с фенотипом, близким к оптимальному, для определенной среды и уровня конкуренции. Здесь важен высокий показатель выживаемости, поскольку он предоставляет организму возможность произвести потомство и передать свои гены следующим поколениям, внести их в общий генофонд. Большинство фенотипических признаков определяются генами и имеют тенденцию к нормальному распределению в популяции. Положение оптимального фенотипа определяет основной тип отбора.
Существуют три основных типа отбора, которые приводят к улучшению признаков популяции при определенном наборе условий. Они таковы: 1. Стабилизирующий естественный отбор. Достигает цели, отсекая крайние проявления признаков. 2. Направленный естественный отбор. Приводит к распространению одной крайней степени признака. 3. Дизруптивный (раскалывающий) естественный отбор. Приводит к распространению крайних проявлений признаков, отсекая среднее. Хотя и можно поделить отбор на данные типы, следует помнить, что все они, тем не менее, считаются различными аспектами одного общего процесса. Тот факт, что некоторые организмы менее приспособлены (то есть они обладают меньшей выживаемостью и/или способностью дать потомство), означает, что те, от кого зависит выживание популяции, конкурируют с организмами, которые все более и более становятся похожими на них. Если направленный естественный отбор постепенно ликвидирует одну крайность фенотипического ряда, то в конечном итоге наступит момент случайного распределения оптимального фенотипа. Тогда в действие приводится стабилизирующий отбор, поддерживающий устойчивое положение . Первый тип отбора (стабилизирующий) можно пояснить на примере роста людей. Если в каком-то обществе важно иметь средний рост, то очень высокие или низкие люди будут страдать от определенных неудобств. Это называется «высокое давление отбора». См. также статьи «Искусственный отбор животных», «Искусственный отбор растений», «Естественный отбор». ОУЭН, РИЧАРД Ричард Оуэн (1804—1892) — известный анатом и палеонтолог, родился в Ланкастере . Он изучал медицину сначала в Эдинбургском университете, а затем в больнице св. Варфоломея в Лондоне. По совету своих наставников он занялся научными исследованиями и работал в музее Королевского хирургического колледжа, составляя многочисленные каталоги. В 1832 году он опубликовал трактат о наутилусе и следующие 50 лет посвятил изучению сравнительной анатомии многих животных, в особенности птиц. Он применял свои анатомические знания в таком трудном деле, как восстановление облика вымерших животных по разрозненным окаменелым остаткам и внес весомый вклад в развитие палеонтологии и изучение эволюции. Свое мастерство анатома Оуэн совершенствовал, препарируя животных, умерших в лондонском зоопарке. Его реконструкции вымерших рептилий часто напоминали гигантские варианты современных видов. Одним из основных вкладов Оуэна в научный лексикон стало изобретение слова «динозавр». Он составил его в 1842 году из двух греческих корней deinos — ужасный и sauros — ящер. В канун нового 1853 года он вместе с компанией, состоящей из 21 ученого, устроил праздничный ужин в Лондонском хрустальном дворце внутри одной из реконструированных им огромных моделей динозавра. В 184 9 году он стал хранителем Королевского хирургического музея, а в 1856 году — заведующим отделом естественной истории Британского музея. В этой должности он многое сделал для открытия отдельного Музея естественной истории в лондонском Южном Кенсингтоне. На приобретение первого экспоната, почти полной окаменелости археоптерикса, он потратил денег в два раза больше, чем позволял ежегодный бюджет музея. Оуэн продолжал работать до 1884 года, когда он вышел в отставку и уехал в Ричмонд. Несмотря на огромную работоспособность и трудолюбие, некоторые из выводов Оуэна оказались ложными. Он много писал о сравнительной анатомии и палеонтологии позвоночных, будучи пионером в этой области. Он был настроен против
дарвиновской теории эволюции и отрицал возможность происхождения человека и приматов от одного общего предка. См. также статьи «Археоптерикс», «Дарвинизм», «Динозавры». ПЕКИНСКИЙ ЧЕЛОВЕК Пекинский человек — один из возможных ранних предков современного человека, возраст остатков которого составляет около 1,8 миллиона лет. Первое свидетельство его существования было получено в виде окаменелых зубов, которые известный немецкий палеонтолог Макс Шлоссер купил в пекинской аптеке. Во время геологических исследований в Китае в 1921 году палеонтологи, по крайней мере из семи стран пытались обнаружить останки древнего человека близ деревни Чжо- укоудянь. Среди этих преданных своему делу ученых были швед Й. Гуннар Андерс- сон и канадец Дэвидсон Блэк. В 1926 году они обнаружили окаменелые зубы в заброшенной каменоломне близ Пекина и идентифицировали их как останки пекинского человека. Блэк дал научное название этому раннему звену или ветви человеческой эволюции: Sinanthropus pekinensis (синантроп), что значит китайский человек из Пекина. С 1927 по 1937 год палеонтологи из китайско-шведской экспедиции обнаружили останки более 40 индивидуумов, причем были найдены свидетельства каннибализма, использования огня и примитивных кварцевых орудий. В 1934 году Блэк умер и его преемник в Пекинском университете (немецкий анатом Франц Вайденрайх) в 1936—1937 годах нашел еще большее количество остатков пекинского человека. Во время Второй мировой войны была предпринята транспортировка останков пекинского человека в США. К сожалению, в тот день, на который была назначена отправка, японцы разбомбили Перл-Хабор и объявили войну США. Японские войска захватили поезд, в котором останки везли в порт Цзиньхуандао и их больше никогда не видели. Но Вайденрайх, к счастью, успел сделать гипсовые отпечатки и отправить их в Америку. После окончания войны были предприняты поиски оригиналов бесценных останков, но без успеха. Через пятнадцать лет название Sinanthropus pekinensis было заменено на Homo erectus (человек прямоходящий), то есть пекинский человек был отождествлен с яванским человеком, которого нашел Эжен Дюбуа. См. также статью «Дюбуа, Эжен». ПЕРИОДИЧЕСКИ НАРУШАЕМОЕ РАВНОВЕСИЕ Одна из наиболее важных современных концепций, представляющих собой усовершенствование эволюционной теории, — это концепция периодически нарушаемого равновесия, впервые предложенная Н. Элдриджем и Стивеном Джеем Гоулдом в 1972 году. Эти ученые заметили, что порой среди окаменелостей начинают попадаться новые виды, которых не было в отложениях предыдущих эпох, тогда как другие виды оставались неизменными на протяжении миллионов лет. Однако то, что кажется быстрым по геологической шкале, не обязательно таково с точки зрения генетического времени. В конце 1970 годов А. Р. Темплтон провел генетические
исследования, в ходе которых доказал, что образование нового вида может произойти не за тысячи, а за десятки поколений и при относительно малых генетических различиях. Среди тех окаменелостей, что были собраны ко времени Чарльза Дарвина, наблюдались большие хронологические пробелы, но при этом были и очевидные доказательства неожиданного появления многих новых форм в один и тот же геологический промежуток времени. Эволюция, как может показаться, двигалась не равномерно, а рывками. Долгие периоды времени, в течение которых определенные виды сохранялись в почти неизменном виде, чередовались с периодами бурного развития и появления новых видов, которые в свою очередь оставались неизменными на протяжении следующего периода. Таким образом, долгие периоды стабильности перемежались с быстрыми периодами перемен. Это эпизодическое, а не постепенное изменение, было названо «периодически нарушаемое равновесие». Это отличается от положений классического дарвинизма, в котором всячески подчеркивалась роль постепенных изменений и размеренного, последовательного развития . Видообразование млекопитающих в эволюции было быстрым — около 100 семейств за 30 миллионов лет. В отличие от них моллюски развивались гораздо медленней; им потребовалось около 500 миллионов лет, чтобы достичь того же уровня многообразия, что и млекопитающим. Т. С. Уэстолл в 194 9 году провел классические исследования ископаемых видов двоякодышащих рыб с целью выяснить особенности их медленной эволюции. Установив набор признаков каждого ископаемого рода, Уэстолл показал, что, начиная с середины палеозойской эры (около 400 миллионов лет назад), перемены во внешнем виде происходили быстро на протяжении первых 100 миллионов лет, но впоследствии резко замедлились, и за последние 150 миллионов лет не было никаких изменений. В горных породах кембрийского периода (540—505 миллионов лет назад) находят останки животных, которые, вероятно, свидетельствуют о родственной связи между кольчатыми червями (такими, как земляные черви) и членистоногими. Это, в частности, окаменелые останки животного Aysheaia, которые обнаружили в сланце Бёрджесс. Это маленькое морское животное было поделено на кольцевые доли, как и кольчатые черви, но имело ножки, с помощью которых передвигалось, подобно современным сороконожкам. Их потомки вышли на Землю и, возможно, от них произошли современные реликтовые (живое ископаемое) виды перипатуса (Peripatus). Перипатус довольно сильно напоминает своего кембрийского предка. 70 раз- ралистов исследовал перипатуса, было решено, что он относится скорее к членистоногим, чем к кольчатым червям. Интересно, что перипатус встречаются в лесах, хотя Мосли в то время занимался океанографическими исследованиями на корабле «Челленджер». Он воспользовался семинедельной передышкой в Кейптауне и ПЕРИПАТУС личных его видов встречаются в тропической Америке, Африке и Австралазии. Они имеют червеобразное тело, уменьшающееся к задней части. Перипатус около 7 сантиметров в длину, но он может вытягиваться и сокращаться. Цвет может варьироваться от темно-серого до красновато-коричневого. Кожа сухая и шершавая; каждая из 20 (или около того) пар ног оканчивается крючками, причем ноги тоже кольчатые, как и тело. Наиболее примечательно в перипатусе то, что он обитает исключительно на суше, но сохраняет дыхательную систему, указывающую на его водное происхождение. Еще в 1874 году, когда X. Н. Мосли первым из нату-
исследовал окрестные земли. По этой причине первому найденному виду присвоили название Peripatus moseleyi, по фамилии его первооткрывателя. Ископаемый предок перипатуса, Aysheaia, имеет возраст около 500 миллионов лет. Было найдено 19 образцов этого животного, но большинство из них имеет вид невзрачного ржавого пятна на известняке. Однако этого оказалось достаточно, чтобы специалисты определили строение его тела и ног. Теперь уже нет сомнений, что он был дальним родственником перипатуса, которого иначе называют еще «бархатный червь» и который до сих пор ползает по влажным тропическим лесам. См. также статьи «Сланец Бёрджесс», «Живые ископаемые». ПИЛТДАУНСКИЙ ЧЕЛОВЕК Пилтдаунский человек вошел в историю антропологии как один из самых скандально известных розыгрышей. Его открытие относится к 1912 году, но о том, что это подделка, узнали только в 1953 году. Череп пилтдаунского человека был реконструирован на основе окаменелостей, найденных при раскопках близ селения Пилтдаун-Коммон в английском графстве Суссекс. Их нашли Чарлз Доусон и смотритель отдела геологии Лондонского музея естественной истории Артур Смит Вуд- ворд. В результате тщательного осмотра местности они обнаружили 11 фрагментов черепа, правую половину нижней челюсти с двумя коренными зубами, несколько кремневых орудий и окаменелые кости вымерших животных. Было высказано предположение, что черепу около 200 ООО лет. Средства массовой информации окрестили пилтдаунского человека недостающим звеном, а официально ему было дано название Eoanthropus dawsoni — человек зари Доусона. В течение последующих 30 лет останки древних гоминидов были найдены в Африке и Азии, но ни один из них не походил на пилтдаунского человека. В 1948 году его останки были подвергнуты экспертизе при помощи фторового анализа и у экспертов возникли серьезные вопросы по поводу подлинности пилтдаунского человека. Оказалось, что челюсть была позаимствована у средневекового орангутанга, умершего в 10 лет. Фрагменты черепа были древнее челюсти, но все равно не такими древними, как хотелось бы. Некоторые из зубов были специально подпилены, чтобы показаться стершимися. Так что, вне всякого сомнения, это была хорошо организованная подделка. В свое время пилтдаунский человек пришелся как раз к месту — ученые начала века были озабочены поисками «недостающего звена» эволюции, совмещающего черты человека и обезьян. Как видно, иногда предвзятые идеи и ожидания оказываются сильнее доводов разума. Злоумышленника, ответственного за этот розыгрыш, так и не нашли (и, видимо, уже никто не узнает, кем он был). В 1954 году Джозеф Сидни Вайнер применил к этому эпизоду некоторые методы судебной экспертизы и описал свои выводы в книге «Пилтдаунская подделка». Несмотря на его тщательные исследования, пилтдаунская подделка так и осталась загадкой. См. также статьи «Люси», «Пекинский человек». ПЛЕЗИОЗАВРЫ Плезиозавры — это большая группа водоплавающих рептилий триасового и мелового периодов (245—144 миллиона лет назад). Две основные линии этих животных произошли от общего предка, жившего в триасе, но они сильно отличались друг от друга. Их предком, по всей видимости, был 3-метровый нотозавр (Nothosaurus) с вытянутыми зубастыми челюстями, длинной шеей, перепончатыми лапами и плавниками в верхней части длинного хвоста, обитавший у берегов и питавшийся рыбой, Плезиозавры были более приспособленными для жизни в море, но не настолько хорошо, как ихтиозавры. Представители одной из групп, эласмо-
завры, обладали длинной шеей и коренастым телом. Их конечности развились в плавники, при помощи которых они передвигались в воде в «летающей» манере. Рулить им помогал ромбообразный плавник на конце короткого хвоста. Они, скорее всего, ловили рыбу у поверхности океана, благодаря длинной шее быстро забрасывая голову в косяки рыбы. Так они могли поймать несколько рыб за один раз, не производя телом никаких движений. (Kronosaurus), найденный в меловых отложениях Австралии, в длину достигали 12 метров. Все они имели большие головы, до одной пятой от длины тела, и обтекаемую форму. Должно быть, они считались эквивалентом современного кашалота и охотились на предков современных гигантских кальмаров. Ихтиозавры, эласмозав- ры и пилозавры, по всей видимости, не составляли друг другу конкуренции, так как ловили добычу на различных глубинах древних морей. См. также статью «Ихтиозавры». ПОСТЕПЕННАЯ ЭВОЛЮЦИЯ Спор о том, происходит ли эволюция непрерывно и постепенно или же она идет эпизодическими скачками, уходит корнями еще в начало 1940 годов. Тогда Эрнст Майр предположил, что некоторые современные роды птиц эволюционировали очень быстро, каждый как небольшая маргинальная популяция вида-предка. В таких небольших и изолированных популяциях эволюционные перемены происходят быстро, и если подобные процессы в прошлом происходили часто, то вероятность , что среди окаменелых останков мы найдем подробные стадии этого процесса, очень мала, если она вообще есть. В 1970 годах его точку зрения активно поддержали Найлс Элдридж и Стивен Джей Гоулд. Именно они впервые назвали две различных гипотезы в эволюционной теории периодически нарушаемым равновесием (скачкообразная эволюция) и градуализмом (постепенная эволюция). Как только был брошен вызов классическим представлениям, современные приверженцы эволюционной теории разделились на два лагеря — убежденных сторонников скачкообразной эволюции и не менее решительно настроенных сторонников постепенной эволюции. С тех пор продолжались непрерывные споры, и постепенно многие неспециалисты пришли к мнению, что споры идут о том, имела ли вообще место эволюция или нет. На самом деле обе стороны признают, что современные виды произошли от других видов, и речь идет только о возможном механизме, ответственном за процесс происхождения видов, который продолжается и в наше время. Свидетельства неожиданного появления новых видов в те или иные геологические эпохи могут быть взяты на вооружение теми креационистами, которые не ограничиваются написанным в Библии. Они могут рассматривать эти случаи как периодические акты творения сверхъестественного существа, а исчезновение старых видов объяснять катастрофами. Такие взгляды невозможно доказать научными методами . Находка 1868 года окаменелого скелета эласмозавра (Elasmosaurus) в США послужила поводом для полемики двух соперничающих палеонтологов , Эдварда Коупа и Отниела Марша. Окаменелость описал Коуп, но он по ошибке поместил череп на конце хвоста, а не на шее. Марш публично указал ему на это, и, говорят, Коуп никогда не простил Маршу того, что он высмеял его перед общественностью. Другая группа водных рептилий — пилозавры обладали короткой шеей и были крупнее элас- мозавров. Некоторые, например кронозавр
Эти два взгляда — гипотеза постепенной эволюции и гипотеза скачкообразной эволюции — призваны объяснить механизм возникновения новых видов. Основной проблемой при сравнении этих двух гипотез является то, что данные об ископаемых видах ограничиваются скелетными остатками. У нас нет почти никаких сведений о том, какими были мягкие части организмов, не говоря уже о характере их поведения или об экологических сообществах, в которых проходило образование новых видов. См. также статьи «Креационизм», «Периодически нарушаемое равновесие». ПРОИСХОЖДЕНИЕ ЖИЗНИ Основные теории, предложенные на этот счет, можно свести к четырем гипотезам: 1. Жизнь не имеет начала. Жизнь, материя и энергия сосуществуют в бесконечной и вечной Вселенной. 2. Жизнь была создана в результате сверхъестественного события в особый момент в прошлом. 3. Жизнь на этой планете появилась откуда-то из другого места Солнечной системы или Вселенной. 4. Жизнь возникла на этой планете в строгом согласии с химическими и физическими законами. Из этих гипотез первая не соотносится с фактами, известными на сегодняшний день. Вторую невозможно проверить научными методами, и она касается исключительно вопроса веры. Третья теория неудовлетворительна тем, что просто переносит проблему в другое место; к тому же она тоже маловероятна, поскольку трудно представить, будто жизнь может пересечь межпланетные и межзвездные пространства. Для этого потребовалось бы полностью остановить метаболические процессы и обладать необычайной защитой от сильного космического излучения. Космическая радиация и вакуум оказываются летальными для любого живого организма. То же самое относится и к «семенам жизни» первой гипотезы. Четвертая гипотеза кажется наиболее достоверной и ее можно проверить научными методами. В 1936 году советский биохимик А. И. Опарин опубликовал работу «Возникновение жизни на Земле», в которой предполагал, что атмосфера древней Земли состояла из смеси аммиака, воды и метана. В 1953 году Стэнли Ллойд Миллер смоделировал такую атмосферу в особом аппарате, через нее он в течение недели постоянно пропускал электрические разряды. Таким образом, из неорганических молекул ему удалось получить нечто вроде аминокислот (строительных кирпичиков белков). К 1968 году подобным образом были синтезированы все известные аминокислоты. К началу 1990 годов из простых химических соединений были синтезированы все основные фрагменты ДНК, а ближе к концу столетия — самореплицирующиеся молекулы. ПРОИСХОЖДЕНИЕ ПРИМАТОВ Приматы произошли от бокового ответвления насекомоядных (предков современных землероек). Большинство из современных приматов обладают общими признаками, в том числе высокоразвитым мозгом, хорошим зрением, относительно слабым обонянием и цепкими конечностями. Хвосты, которыми можно хвататься за ветки, распространены только среди обезьян Нового Света (Южная Америка). У более крупных обезьян Старого света, таких, как горилла, хвост исчез. Считается, что предком приматов была плезиаспида (Plesiadaspis), обитавшая в Северной Америке и Европе около 60 миллионов лет назад. Это животное обладало чертами грызунов, такими, как острые резцы, и выглядело, по всей видимости, как современная белка. У него была вытянутая мордочка, а чувство обоня-
ния играло довольно важную роль. Мозг же был небольшой и простой по строению. Скелет также был примитивным с передними и задними ногами приблизительно равной длины, с когтями на пальцах; конечности животного не были цепкими. Около 50 миллионов лет назад в Северной Америке и Европе появилась группа более развитых приматов. Члены этой группы гораздо более напоминали современных лемуров, чем плезиаспида, например, формой зубов, увеличенным мозгом, уплощенной мордой и прямо расположенными глазами. Они разошлись на несколько ветвей, представители одной приобрели большее количество зубов и утратили признаки, которые можно обнаружить у многих современных низших приматов. Различные группы отличались и по тому, как они передвигались по деревьям. Многие современные низшие приматы передвигаются прыжками в вертикальном положении, цепляясь за стволы и большие ветки, отталкиваясь от них мощными задними ногами. Их предки еще не развили такой специализации: они были четвероногими и передвигались по небольшим ветвям деревьев. При этом им пришлось расширить свой рацион и включить в него наряду с насекомыми фрукты и почки. Но ни один из этих ископаемых видов, по всей видимости, не являлся предком высших приматов (обезьян). В эоцене широко распространились омомииды (Omomyidae), которые были менее специализированными. Они-то, скорее всего, и были предками высших приматов. ПРОКАРИОТЫ Любой организм, в котором генетический материал (ДНК) не окружен мембраной и, следовательно, клетка которого не имеет ядра, относится к прокариотам (про — до, карион — ядро). Прокариотами являются бактерии и синезеленые водоросли. По всей видимости, они были предками эукариотов. внешняя днк цитоплазма стенка / плазматическая мембрана Часто говорят, что разделение на прокариотов и эукариотов было величайшим эволюционным достижением, так как различие в их клеточном строении очень велико. Прокариотическая клетка не имеет ядра, то есть мембраны, окружающей генетический материал. Ее единственная кольцевая хромосома (генофор) свободно плавает в цитоплазме. Кроме того, многие функции, которые в клетках эукариотов выполняют органеллы, в клетке прокариотов происходят в складках мембраны, окружающей клетку. Хотя в этих клетках отсутствует большинство органелл клеток эукариотов, они имеют рибосомы, которые служат механизмом сборки молекул белков.
Большинство ученых считает, что жизнь появилась на Земле около 4 миллиардов лет назад. В 1980 году в Западной Африке были найдены окаменелые древние прокариоты. Им предположительно 3,5 миллиарда лет, и они относятся по меньшей мере к пяти различным типам организмов, но все они напоминают современные бактерии. Эти окаменелости называются строматолитами и свидетельствуют о том, что 3,5 миллиарда лет назад на Земле уже существовала жизнь. Вполне возможно, что прокариоты были захвачены предками эукариотов и приспособились к совместной с ними жизни к взаимной выгоде (эндосимбиоз). Тогда такие органеллы, как митохондрия (где производится большая часть энергии), — это видоизмененные бактерии. Синезеленые водоросли могли в таком случае стать хлоропластами. Одним из доказательств теории эндосимбиоза может быть тот факт, что митохондрии и хлоропласты организованы схожим образом с прокариотами. См. также статью «Эукариоты». ПРОКОНСУЛ В 1927 году X. Л. Гордон, поселенец из Западной Кении, нашел необычные окаменелости в куске известняка, который добыл в каменоломне . Он отослал их в Британский музей на опознание и когда их отделили от породы, то оказалось, что это часть верхней челюсти и зуб древнего гоминида. Позже ученые определили, что окаменелостям, найденным в том же месте, около 18 миллионов лет (довольно ранний миоцен). Идентификация и описание останков были произведены Тинделлом Хопвудом, палеонтологом из Британского музея. Его заинтересовали эти останки, поскольку они были необычными и самыми древними из тех, что он видел до сих пор. В 1931 году он организовал экспедицию к месту находок и об наружил еще два ископаемых остатка. Хопвуд пришел к мысли, что обнаружил предка современных шимпанзе, которому он дал научное имя «проконсул» (Proconsul). Обладая определенным чувством юмора, Хопвуд назвал его так в честь Консула, — шимпанзе из лондонского эстрадного представления, который развлекал публику, катаясь на велосипеде и куря трубку. Другие останки проконсула были найдены в 1948 году на острове Рсинга (озеро Виктория) Луисом и Мэри Лики — фрагмент лица и челюсти. В 1951 году там же были найдены фрагменты черепа, кисти, ступни и руки, что позволило с большей достоверностью реконструировать скелет существа. К 1990 годам были обнаружены фрагменты девяти скелетов проконсула, взрослых, молодых и детенышей. Сейчас известны почти все кости проконсула. Согласно современным данным, около 18 миллионов лет назад существовало, скорее всего, три вида проконсула. Это были довольно неспециализированные обезьяны. У них, по всей видимости, не было приспособлений для совершения прыжков или качания на ветвях при помощи рук, хотя они могли передвигаться, опираясь на землю руками, как современные шимпанзе и гориллы. Анализ многочисленных останков проконсула показал, что он не был предком современного шимпанзе, как полагал Хопвуд. Это, скорее всего, был общий предок всех крупных человекообразных обезьян и людей. См. также статью «Лики, Луис».
ПРОТОБИОНТЫ Это название образовано от элементов прото — первый и бионт — жизненная форма. Протобионты это специализированные «капельки», скопления молекул с особыми внутренними химическими свойствами, отличающимися от свойств окружения. Возможно, это были предшественниками прокариотов. Между образованием отдельных органических молекул, таких, как аминокислоты, имеющих биологический потенциал, и их сборкой в сложную единую систему клетки, являющуюся основой жизни, пролегла глубокая пропасть. Для преодоления ее необходимо было выполнить два следующих условия: 1. Концентрация молекул и их упорядочивание. 2. Развитие метода саморепликации (воспроизводства) — основной характеристики, отличающей живое от неживого. Для объяснения концентрации и упорядочивания молекул, растворенных в «первичном бульоне» древней Земли, было предложено несколько гипотез. Наиболее вероятные основаны на концепции полимеров: большие молекулы образовались путем соединения маленьких молекул. Они часто появляются на поверхности воды в экспериментах, подобных тем, что предпринимал Миллер, и их число со временем увеличивается экспоненциально; причем первые молекулы служат центром сборки последующих. Они могут удерживаться рядом друг с другом электростатическими (положительными и отрицательными) силами и образовывать коацерватные капли. Такие капли состоят из внутреннего скопления коллоидных молекул, окруженных оболочкой молекул воды. В результате образуется четкая разграничительная линия между коллоидным белковым раствором и водой, в которой они взвешены. Коацерватные капли могли привести к образованию первых протобионтов или «проток- леток». Однако им еще далеко до настоящих клеток, какими мы их знаем. Стоит заметить, что у протобионтов отсутствует существенное свойство живых организмов — передача генетической информации и, следовательно, они не могут самовоспроизводиться. См. также статью «Происхождение жизни», « Прокариоты ». ПТЕРОЗАВРЫ До триасового периода (245—202 миллиона лет назад), единственными животными, передвигающимися в воздухе, были насекомые. Когда некоторые ящеротазовые динозавры развили кожистые перепонки, поддерживаемые вытянутыми ребрами, появились планирующие рептилии. Похоже, что такое приспособление дало им возможность спасаться от мелких хищных ящеротазовых динозавров того периода. Настоящими хозяевами воздуха стали птерозавры, которые, как и динозавры, были потомками архозавров. Их происхождение можно проследить вглубь веков до 30-сантиметрового планирующего пресмыкающегося подоптерикса (Podopteryx), останки которого найдены в триасовых отложениях Центральной Азии. Это существо имело широкие перепонки между удлиненными конечностями, соединенные с хвостом. Широко известный летающий ящер — птеродактиль был размером с голубя и летал при помощи пары кожистых крыльев, прикрепленных к туловищу, передним и задним конечностям. Они летали сравнительно хорошо, изменяя площадь крыльев благодаря распрямлению и сгибанию конечностей, что позволяло маневрировать в воздухе. Питались они, скорее всего, рыбой, хватая ее с поверхности водоемов. Для поддержания такого активного образа жизни птерозаврам необходима теплокровность и среди их окаменелостей были найдены следы волосяного покрова или меха. Самый известный из крупных птерозавров — птеранодон (Pteranodon). Размах его крыльев достигал 6 метров. Останки птеранодона найдены в позднемеловых
отложениях в США в 1872 году. В 1975 году в Техасе были найдены останки гигантского вида кецалькоатлюс (Quetzalcoatlus); размах его крыльев предположительно составлял 11—15 метров. Возможно, это было самое крупное существо, которое когда-либо поднималось в воздух над нашей планетой; он был, по крайней мере, в три раза крупнее любой летающей птицы и более других животных походил на аэроплан. Золенгофенские известняки Южной Баварии (Германия) известны тем, что там найдено много прекрасно сохранившихся скелетов птерозавров, начиная с самого первого, который в 1784 году обнаружил Козмо Алес- сандро Коллини. Этот вид известняков отлагался в мелких морях близ берегов крупного массива суши, который впоследствии стал северной частью Европы и где тысячелетние отложения ила навеки похоронили самые разнообразные формы жизни. ПТИЦЕТАЗОВЫЕ ДИНОЗАВРЫ Птицетазовые динозавры по-научному называются Ornithischia. Форма таза у них такова, что кости ног направлены вниз, параллельно друг другу. Все они были растительноядными и в эпоху распространения этих динозавров — в юрский и меловый периоды (202—65 миллионов лет назад) на них охотились ящеротазовые динозавры (Saurischia), которые появились приблизительно одновременно с ними. Ранние птицетазовые динозавры были довольно маленькими и двуногими. Двуногую позу вместе с длинным хвостом и длинными задними ногами они унаследовали от своих предков архозавров, точно так же, как и их родственники ящеротазовые. Возможность передвигаться на двух ногах позволяла развивать большую скорость , удирая от хищных преследователей. При этом особая форма таза предоставляла больший объем для размещения внутренних органов по сравнению со строением тела ящеротазовых. Это различие важно, так как у травоядных животных пищеварительная система занимает больший
объем, чем у хищников. Поэтому ранние представители птицетазовых были двуногими и центр тяжести у них располагался в области таза. В отличие от них представители другой группы имели более вытянутые тела, и потому увеличивающийся объем завроподов (растительноядных ящеротазовых динозавров) вынудил их прочно стать на четыре ноги. Одна группа из птицетазовых динозавров выработала специализированные зубы для пережевывания растительности. Это были так называемые орнитоподы или пти- ценогие динозавры. Самыми приспособленными стали утконосые динозавры мелового периода. Некоторые из них достигали в длину 12 метров. Их череп расширялся в подобие клюва, в передней части челюсти зубов не было, а в задней части имелось множество мощных перетирающих зубов. Впоследствии возникло несколько форм четвероногих птицетазовых динозавров. Они были часто хорошо вооружены костным панцирем и внешне чем-то походили на современных носорогов. См. также статьи «Динозавры», «Ящеротазовые динозавры». ПЯТИПАЛЬЦЕВАЯ КОНЕЧНОСТЬ При исследовании гомологичных образований у разных организмов можно проследить, как эти образования приспосабливались к выполнению различных функций. Классический пример — пятипальцевая конечность позвоночных. Она эволюционировала из разновидностей парных плавников предков кистеперых рыб (Crossopterygii), основная схема распределения в ней костей может быть прослежена у земноводных, пресмыкающихся, птиц и млекопитающих. При адаптации этой конечности к всевозможным функциям и способам передвижения происходили различные модификации, исчезновения, сокращения или слияния элементов. Конечности могут быть специализированы для плавания, например плавники кита или крылья пингвина; для ходьбы, как ноги наземных позвоночных; для выполнения различных действий, как у приматов (обезьян и людей); для полета, как крылья птиц и летучих мышей. Кости, образующие общую схему конечности, доставшейся этим животным от древнего предка, перечислены в таблице. Передняя конечность Задняя конечность Плечевая кость (верхняя часть) Бедренная кость (бедро) Лучевая кость и локтевая кость (нижняя часть) Большая берцовая и малоберцовая кости (голень) Кости запястья Кость предплюсны(лодыжка) Пястные кости (кисть) Кости плюсны (ступня) Фаланги (пальцы) Фаланги (пальцы) Адаптация к одинаковому образу жизни может быть достигнута различными средствами; крылья птиц, например, образованы в основном перьями, а крылья летучих мышей — кожистой перепонкой. Но строение скелета у них в принципе очень похоже. Эта схожесть свидетельствует о том, что они эволюционировали от одного относительно далекого общего предка, наземного позвоночного. Освоение полета млекопитающими произошло гораздо позже, чем у птиц. Летучие мыши заполнили нишу, не занятую другими млекопитающими и остававшуюся пустой после вымирания летающих рептилий, птерозавров. Способность к полету у птиц и летучих мышей не говорит о том, что они произошли от одного сравнительно недавнего предка — крылья у них возникли независимо; но в каждом случае — при использовании общей структуры — пятипальцевой конечности. См. также статьи «Ниша», «Птерозавры».
РАВНОВЕСИЕ ХАРДИ-ВАЙНБЕРГА Под равновесием Харди-Вайнберга подразумевается концепция, вытекающая из принципа Харди-Вайнберга. Согласно этой концепции, частота аллелей любого признака в популяции в любом поколении остается неизменной, при условии отсутствия внешнего влияния. Представим, что аллель А доминантный, а аллель а рецессивный. Скрещивание между особями с генотипами АА и аа приведет к потомству F1 с генотипом АА. Если подсчитать частоту генов при скрещивании особей поколения F1, то окажется, что четверть популяции в поколении F2 будет иметь генотип АА, половина Аа и четверть аа. Для того чтобы определить, какая часть поколения F3 будет потомством, допустим, особей с генотипом АА и аа, умножим одну четверть на одну вторую и получим одну восьмую. Следовательно, при условии случайного скрещивания в следующем поколении одна восьмая популяции будет потомством этой пары. Тогда какая часть поколения будет потомством АА и АА? Аа и аа? Все эти комбинации дадут одну восьмую числа всех особей следующего поколения F3; и какая же часть его будет гетерозиготной (Аа)? Подсчитав частоту этого типа гамет среди возможных сочетаний, получаем 4 х 1/8 = 1/2. Каково было количество особей с генотипом Аа в поколении F2? Тоже половина. Если подсчитать результаты всех возможных комбинаций в поколении F3 и в любом поколении, следующим за ним, то окажется, что соотношение генетических элементов в популяции остается неизменным! Вот почему у людей во все времена бывают голубые глаза, хотя это рецессивный признак. Для соблюдения равновесия Харди- Вайнберга необходимы следующие условия. • Большая популяция. • Случайное скрещивание. Каждый половозрелый индивид имеет одинаковую вероятность найти себе пару. • Отсутствие миграций (оттока или притока генов). • Отсутствие давления отбора (нет естественного отбора). • Отсутствие мутаций. Любое из этих условий в природных популяциях может быть легко нарушено, поэтому модель Харди-Вайнберга является в большой степени условной. См. также статью «Закон Харди-Вайнберга». РЕПРОДУКТИВНАЯ ИЗОЛЯЦИЯ Разделение популяций внутри одного вида препятствует скрещиванию представителей различных популяций и смешиванию их генов, а также образованию потомства с общими признаками. Если такая изоляция поддерживается в течение долгого времени, то представители данного вида постепенно дивергируют от неизолированных популяций и приспосабливаются к определенным условиям среды. В конечном итоге они приобретают физические отличия от других популяций и теряют способность скрещиваться с ними, даже если возможность контактов возобновляется. На этой стадии изолированная популяция превращается в новый вид. • Репродуктивной изоляцией называется неспособность членов одной популяции вида скрещиваться с другими представителями вида. Она не допускает смешения генов одной группы с генами другой; таким образом популяция накапливает собственный набор генов. Кроме географической изоляции, возможны другие виды изоляции групп. Поведенческая изоляция. Брачное поведение разных групп может препятствовать их скрещиванию, даже если районы их распространения пересекаются. Они могут не узнавать брачных сигналов или не понимать определенного рисунка оперения.
• Половая изоляция. Некоторые виды, особенно насекомые, могут обладать сложным механизмом половых органов. Совокупление становится невозможным, если органы одного представителя вида в точности не соответствуют органам другого. Пыльца цветковых растений попадает в бороздки только определенной формы женских органов цветков. • Гибридная изоляция. В тех случаях, когда особи двух видов могут скрещиваться, их эмбрион может не развиться, так как неправильное сочетание хромосом препятствует нормальному процессу образованию клеток. Такие гибриды удаляются из популяции и их гены не входят в генофонд. Иногда гибриды могут выживать и даже давать потомство, но ограниченная жизнеспособность приводит к тому, что им редко удается достичь половозрело- сти. См. также статьи «Аллопатрическое видообразование», «Географическая изоляция» . САМОЗАРОЖДЕНИЕ ЖИЗНИ В свое время была распространена гипотеза самопроизвольного зарождения жизни, согласно которой современные организмы при соответствующих условиях могут образовываться из неорганического материала. Этого мнения придерживались некоторые биологи до конца XIX века. Такая гипотеза уходит корнями в классическую древность времен древнегреческих философов. Самый большой вклад в развитие науки сделал Аристотель (384—322 гг. до н. э.), он же затрагивал и вопросы биологии. Глубокий и оригинальный мыслитель задумывался о природе жизни и полагал, что она может самозарождаться. В своем трактате «История животных» он писал, что некоторые небольшие рыбы (кефаль) и угри зарождаются в илистых болотах и могут порождаться непосредственно из ила. Авторитет этого мыслителя был настолько велик, что на протяжении столетий никто в его утверждении не сомневался. Неудивительно, что идея самозарождения была настолько широко распространена среди образованных людей. Усомниться в доктрине Аристотеля значило отрицать очевидные истины и пойти наперекор всем ученым своего времени. Ученые тогда редко наблюдали за природой и почти не ставили экспериментов. Ян Баптист ван Гельмонт писал, что если в горшок с зернами пшеницы положить грязную рубашку, то благодаря взаимодействию этих предметов в нем самозародятся мыши. Сегодня это утверждение звучит нелепо, но в то время часто проводились подобные эксперименты и таким же образом объяснялись более распространенные явления, например возникновение личинок в гниющем мясе. Это считалось примером самопроизвольного зарождения жизни. Наконец, нашелся биолог, усомнившийся в этой теории, — Франческо Реди (1626— 1697). Он сравнивал результаты разных опытов. В одном случае он закрывал сосуд с мясом плотной крышкой, а в другом оставлял открытым. Оказалось, что личинки появляются только в том случае, когда на гниющее мясо садятся мухи. Ученый сделал следующий вывод: «Если удалить живые существа, то они не появляются». См. также статью «Биогенез». СИМПАТРИЧЕСКОЕ ВИДООБРАЗОВАНИЕ Симпатрическое видообразование происходит внутри одной популяции (сим — вместе, патрис — родина). Оно менее распространено, чем аллопатрическое. Этим термином обозначается процесс образования разных видов внутри постоянно скрещивающейся популяции.
Среди растений новые виды могут появиться в процессе скрещивания существующих видов. Это открытие удивило исследователей, поскольку гибриды животных обычно не имеют потомства, вследствие неспособности различных хромосом участвовать в образовании нормальных половых клеток. У растений не бывает таких проблем с хромосомами, потому что растения с разным внешним видом генетически могут быть очень схожими. Если такие генетически схожие виды произрастают на одной территории, то они могут дать гибридную популяцию. Интересно, что такая гибридизация может и не привести к смешению изначальных видов или поглощению одного вида другим. Вероятно, это происходит потому, что гибридное потомство находит свою нишу в окружающей среде, отличающуюся от ниш исходных популяций, следовательно, оно становится настоящим отдельным видом. Растения могут образовывать виды и более любопытным образом, когда набор хромосом удваивается (или удваивается повторно). Это явление называется «полиплоидия» (полиплоос — многократный, эйдос — образ, набор хромосом). Фактически это — тип мутации, когда хромосомы в процессе образования клеток удваиваются и не могут разделиться. Она может привести к появлению тетраплоидных (тетра — четыре) растений с четырьмя полными наборами хромосом в каждой клетке . Гибридизация и полиплоидия приводят к почти мгновенному появлению нового вида, с которым можно работать, подвергая его давлению отбора окружающей среды. Так возникли многие культурные растения, и это объясняет, почему цветковые растения так быстро появились и стали удивительно многообразной группой растений, какую они представляют собой в наше время. Симпатрическое видообразование среди животных происходит гораздо реже, чем среди растений. См. также статьи «Аллопатрическое видообразование», «Аллополиплоидия», «Ау- тополиплоидия», «Мутация», «Ниша». СЛАНЕЦ БЁРДЖЕСС Сланец Бёрджесс — это особая горная формация, которая дала много уникальных ископаемых окаменелостей, их редкие представители имеют аналоги среди ныне живущих организмов. Сланец Бёрджесс располагается на территории национального парка Йохо, на склонах горы Маунт-Стивен, в канадской провинции Британская Колумбия. Он назван так в честь губернатора, жившего в XIX веке, его имя носит и перевал Бёрджесс, ведущий от города Филд к местной каменоломне. В палеонтологии этот район прославил Чарлз Дулитл Уолкотт, который в 1909 году обнаружил здесь большое количество останков животных. Легкий слой осадков быстро засыпал умерших животных, и отпечатки их мягких тел сохранились до наших дней в качестве окаменелостей. Согласно легенде, когда Уолкотт проезжал мимо этого места, его мул потерял подкову, он остановился и заметил нечто блестящее на черной поверхности сланца. Эта порода относилась к кембрийскому периоду (540—505 миллионов лет назад) и при дальнейшем исследовании в ней обнаружилось много отпечатков организмов , неизвестных современной науке. Уолкотт проследил ход пластов до подножия холмов, где позже были собраны сотни образцов, хранящихся в Вашингтонском музее США. Окаменелости выглядели настолько необычно, что пробудили интерес во всем мире, и было разослано много образцов для анализа в разные страны. Самыми удивительными оказались останки членистоногих беспозвоночных, к которым относятся и трилобиты. Ранее считалось, что трилобиты были в кембрий чуть ли не единственными представителями этого типа. Оказалось, что это совершенно неверно, так как в сланцах нашли потрясающее разнообразие видов животных, говорящее о том, что океаны того времени буквально кишели беспозвоночными вроде современных ракообразных.
Стивен Джей Гоулд в своем бестселлере «Удивительная жизнь» подробно касается темы важности этих странных окаменелостей для развития представления об эволюции животных. Многие кинолюбители, без сомнения, вспомнят известный фильм Фрэнка Капры 194 6 года «Эта удивительная жизнь», который и подсказала Гоулду название для серии книг. СРАВНИТЕЛЬНАЯ АНАТОМИЯ Биологам, занимающимся сравнительной анатомией, давно известно, что виды, образующие более крупные группы (тип, класс или отряд), имеют в своем строении много схожих черт. Развитие техники генетического анализа позволило установить более прочные связи между представителями конкретных групп, так как выяснилось, что строение ДНК у них тоже схоже. Например, все виды, принадлежащие к типу хордовых, имеют хотя бы в один из периодов своего развития спинную хорду (предшествующую позвоночнику), жаберные щели в глотке и полый спинной нервный тяж (канатик). Виды внутри одного класса имеют больше общих черт, а внутри отряда — больше сходства. Виды, принадлежащие к одному роду, могут быть настолько похожи, что различить их по внешним чертам способен только специалист. В таких обстоятельствах приходит на помощь генетический анализ. Сходство между представителями родственных групп объясняется тем, что они произошли от одного предка. Классы типа хордовых схожи между собой потому, что в прошлом имели одного и того же предка. Сходство между представителями одного класса (например, млекопитающими) более заметно, так как у них был общий предок, обладающий всеми основными чертами млекопитающего. Эволюция — это довольно консервативный процесс: вместо того чтобы изобретать что-то новое, она, скорее всего, преобразует уже существующие модели. Так, у рыб некогда развилась довольно сложная жаберная структура. У наземных позвоночных она преобразовалась в другие органы, такие, как верхние и нижние челюсти, а также кости среднего уха. Мышцы человеческого лица во многом произошли от мышц жаберных дуг древних рыб. Иногда старый орган не преобразуется в новый орган, а утрачивает свои функции в процессе эволюции, нередко становясь вовсе бесполезным. Такие органы называются рудиментарными. Примерами рудиментарных органов могут послужить копчик, ушные мышцы и аппендикс у людей. У китов сохранились скелетные останки задних конечностей — в толще плоти, рядом с тем местом, где начинается хвост. У питона под кожей тоже есть маленькие образования, оставшиеся от его задних ног. См. также статьи «Биогеографические свидетельства эволюции», «Ископаемые свидетельства эволюции», «Генетический анализ», «Биогенетический закон как свидетельство эволюции». УОЛЛЕС, АЛФРЕД РАССЕЛ Алфред Рассел Уоллес (1823—1913) родился в Аске (гр. Монмутшир, Великобритания) и после окончания школы сменил много профессий, занимаясь самообразованием. В 21 год поступил преподавателем в Лестерскую школу, где познакомился с Г. Бейтсом, известным энтомологом. В 1848 году Уоллес убедил Бейтса отправиться в экспедицию на Амазонку. Экспедиция была успешной, но на обратном пути на их судне случился пожар и основная часть собранной коллекции была уничтожена . В 1854 году Уоллес отправился на Малайский архипелаг, где пробыл восемь лет. Его статья «О законе, регулирующем возникновение новых видов», написанная в Сараваке в 1855 году, содержала размышления о теории эволюции, сходные с теорией Дарвина, но не привлекла внимания ученых, кроме самого Чарлза Дар-
вина. Прочитав труд Мальтуса «Опыт о законе народонаселения», Уоллес пришел к идее естественного отбора, которая была разработана Дарвином приблизительно в то же время. В 1858 году Уоллес написал статью «О стремлении разновидностей бесконечно удаляться от первоначального типа» и послал ее Дарвину с просьбой высказать свое мнение. Дарвин писал: «Я никогда не видел настолько поразительного сходства. Если бы перед Уоллесом находились мои наброски 1842 года, то и тогда он не мог бы составить более точное изложение». Дарвин был готов уступить приоритет Уоллесу, но в 1858 году, когда в Линнеевском обществе были зачитаны обе статьи, Уоллес из скромности уступил право первооткрывателя Дарвину, теории которого он изложил в своей книге «Дарвинизм», вышедшей в 1889 году. Основной интерес Уоллеса касался области географического распределения животных. Согласно его наблюдениям, животные Малайского архипелага строго делились на две группы: восточную фауну на западе и австралийскую фауну к востоку от пролива между островами Бали и Ломбок. Его работа «Географическое распределение животных» (1876) явилась синтезом всех доступных на то время свидетельств о распространении животных и заложила основы современной зоогеографии . См. также статьи «Дарвин, Чарлз. «Естественный отбор». УСТОЙЧИВОСТЬ К АНТИБИОТИКАМ Устойчивость некоторых болезнетворных бактерий к антибиотикам может представлять серьезную проблему для лечения заболеваний, особенно в тех странах, где антибиотики широко распространены, и их можно приобрести в любой аптеке. Грозным предупреждением явилась эпидемия тифа 1972 года в Мексике. Трагические обстоятельства показали, что бациллы тифа выработали устойчивость к хло- рамфениколу. С эволюционной точки зрения устойчивость к антибиотикам возникает в результате отбора преадаптированных устойчивых мутантов. Еще в начале 1950 годов стало известно, что можно селекционировать и производить резистентные штаммы, никогда не имевшие контакт с антибиотиками. Генно-клеточный механизм возникновения устойчивости может быть разным, в зависимости от конкретных антибиотиков и видов бактерий; может различаться и скорость выработки устойчивости. Даже внутри вида механизм выработки устойчивости к данному химическому веществу может быть различен. Устойчивость некоторых бактерий к пенициллину была отмечена еще в 1940 годах; она связана с действием одного фермента бактерии, который может расщеплять пенициллин (большинство существующих в природе бактерий устойчивы к пенициллину именно благодаря этому ферменту). Устойчивость к антибиотикам снизила эффективность многих ранее очень действенных лекарств или же вовсе лишила их пригодности. При наличии лекарства отбор резистентных бактерий происходит с большой скоростью. Недавние исследования показали это на примере выработки устойчивости к антибиотикам некоторых штаммов туберкулезных бактерий. Наряду с этой проблемой существует и другая, специфическая именно для случаев с бактериями. Некоторые штаммы могут передавать гены, ответственные за устойчивость к другим штаммам (это называется «конъюгация»), среди тех индивидов, которые ведут половую жизнь. Это открытие было сделано в 1959 году японскими учеными, которые продемонстрировали, как передаются гены по цепочкам ДНК между двумя «скрещивающимися» штаммами бактерий. Открытие передаваемой сопротивляемости заставило пересмотреть использование антибиотиков в животноводстве, где их ранее применяли не только для лечения инфекционных заболеваний, но и для предотвращения инфекций, а в некоторых случаях в качестве пищевых добавок для увеличения роста животных.
УСТОЙЧИВОСТЬ к 300КУМАРИНУ Зоокумарин — это химическое вещество, антикоагулянт, которое широко используется для борьбы с крысами и мышами. Впервые его применили в 1950 году, и с тех пор он стал распространенным ядом благодаря своей низкой токсичности и безвредности для домашних животных. Он воздействует на комплекс биохимических реакций с участием витамина К, от которых зависит свертываемость крови. Когда чувствительные крысы съедают приманку, их капилляры становятся более тонкими, чем обычно, и кровь теряет способность свертываться; происходит ряд серьезных кровоизлияний и животное погибает. Резистентные породы крыс впервые обнаружились в Шотландии в 1958 году. К 1972 году они появились в 12 районах Великобритании. Причиной такой эволюции могла послужить мутация одного гена, резистентность которого можно считать доминантным аллелем. В резистентных линиях крыс зоокумарин не оказывает воздействия на процесс свертываемости крови; свертываемость происходит как обычно, но при этом потребляется больше витамина К. Одна из резистентных популяций, обитающих в районе Уэлшпула в центральном Уэльсе и позже распространившаяся к границе Шропшира, была изучена особенно хорошо. Впервые резистентные крысы были замечены в Уэлшпуле в 1959 году. Впоследствии территория их обитания расширялась со скоростью три мили в год, что является обычной скоростью, с какой крысы осваивают новую территорию. Их распространение зависело от продолжающегося применения яда и от давления отбора, который продолжал действовать на популяцию в течение нескольких лет. После начала применения яда среда обитания этих крыс неожиданно изменилась. Это привело к изменению селективной ценности генов, от которых зависит нормальная свертываемость крови, и их наличие в гомозиготном виде неожиданно стало летальным. Несколько мутантов, у которых имелись доминантные резистентные аллели гена, оказались в благоприятном положении. В новых условиях генетический набор популяции изменился. Это пример того, насколько быстро может происходить естественный отбор. См. также статью «Отбор». УСТОЙЧИВОСТЬ К ИНСЕКТИЦИДАМ В 1939 году швейцарский химик Пауль Мюллер впервые использовал ДДТ в качестве инсектицида. Это химическое вещество, дихлордифенилтрихлорэтан, получили и описали еще в 1874 году, но в то время его способность эффективно поражать насекомых не была известна. Когда же поняли, что ДДТ можно успешно применять в борьбе с насекомыми-вредителями, оно распространилось во всем мире. По сути, многие регионы в настоящий момент избавлены от малярии и других заболеваний, переносимых насекомыми, именно благодаря ДДТ. В 1940 годах предполагалось, что с течением времени все вредные насекомые будут уничтожены. Однако громадные популяции насекомых обладают обширным генофондом, который позволяет легко приспособиться к любым условиям под воздействием давления отбора, и некоторые мутанты вскоре передали гены устойчивости всем своим потомкам. Они выжили и передали гены следующим поколениям. Популяции насекомых, устойчивых к инсектицидам, увеличивались и эволюционировали: через несколько лет ДДТ стал гораздо менее эффективен в борьбе, например с комнатной мухой. Некоторые случаи устойчивости были отмечены уже в 1947 году. Сегодня любой вид насекомых, который прежде можно было уничтожать при помощи ДДТ, имеет устойчивые разновидности. При всех технологических разработках, какие удалось создать людям, мы так и не уничтожили ни один вид нежелательных насекомых.
Широкое распространение инсектицидов привело к таким обширным изменениям некоторых экосистем, в которых обитали насекомые, что у них произошли основательные адаптивные изменения, настолько повысившие уровень сопротивляемости, что некоторые средства уже через несколько лет оказались абсолютно бесполезными. К концу 1960 годов официально было зарегистрировано более 255 видов, устойчивых к инсектицидам. Большое их количество устойчиво к циклодиеновой группе химикатов (диелдрин, алдрин, линдан и т. д.) ; второй группе ДДТ (ДДТ, ДДД, метоксихлор) и третьей группе органофосфатов (малатион, фентион). 20 видов устойчиво к другим химическим веществам, не входящим в эти группы. Многие виды выработали устойчивость к инсектицидам, принадлежащим к разным группам. Возможно, самый поразительный пример — это комнатная муха, устойчивая в некоторых частях света почти ко всем инсектицидам, которые можно использовать без вреда для здоровья человека. УСТОЙЧИВОСТЬ К ТЯЖЕЛЫМ МЕТАЛЛАМ Развитие устойчивости к тяжелым металлам в некоторых растениях — пример того, как давление отбора окружающей среды приводит к эволюции популяции. Определенные виды трав демонстрируют генетическую приспособленность к повышенной концентрации ионов металлов в тех областях, где имеется много отвалов обработанных пород из шахт, содержащих потенциально токсичные металлы. В Великобритании некоторым отвалам из цинковых и свинцовых шахт насчитывается более 100 лет, но на них до сих пор не растут растения; тем не менее некоторые виды трав, например Agrostis и Fetusca (овсяница), могут на них селиться. Растения на таких отвалах были тщательно изучены, и начиная с 1970 годов ученые обнаружили 21 вид цветковых растений, обладающих устойчивостью (толерантностью) к тяжелым металлам. Толерантность передается по наследству и контролируется несколькими генами. Эволюция этих линий трав позволила им колонизировать ранее недоступные ниши. Толерантные особи Agrostis встречаются в обычных популяциях с частотой одна-две на тысячу. Согласно предположению, на рост толерантных растений на незагрязненной почве каким-то образом воздействует конкуренция со стороны не- толерантных особей, поэтому они так редки. Но это неудобство не так велико, поэтому толерантные особи встречаются в популяциях. Обратная же картина совершенно иная. На загрязненных почвах нетолерантные растения погибают и выживают только толерантные. В результате участки произрастания толерантных растений могут быть очень малы и ограничиваться краями отвалов, словно подчеркивая границу этих токсичных мест. Некоторые толерантные к цинку особи встречаются в полосе шириной не более 30 сантиметров под облицованной цинком оградой. Когда образуются свежие отвалы с высоким содержанием цинка, меди или свинца, можно ожидать довольно быстрой их колонизации со стороны некоторых видов растений, в нормальных популяциях которых встречаются толерантные особи. Отбор по признаку толерантности в этом случае очень высок; состав популяции за один сезон может измениться от многих почти нетолерантных особей до нескольких толерантных представителей вида. См. также статьи «Ниша», «Отбор». ФЕНЕТИКА Фенетика — это метод классификации организмов, который отличается от клади- стики. Он основан на наблюдениях за сходствами и различиями между организмами, которые можно использовать для указания на актуальное, а не эволюционное родство групп. Основные приверженцы метода — Питер Снит и Роберт Сокаль,
опубликовали свои исследования на эту тему в 1970 годах. Они утверждали, что невозможно объективно классифицировать организмы, исходя из их генеалогии (нахождения их общих предков). Вместо этого они устанавливали сходства и различия во внешнем виде животных и сравнивали их. Для создания фенетической классификации необходимы точный математический аппарат и построение математических моделей, и потому этот тип классификации (которую теперь часто называют численной классификацией) приобретал все большее значение по мере развития компьютерного анализа. Прежде всего, изучается и сравнивается большое число признаков разных организмов и вычисляется общий коэффициент сходства. Затем организмы с наибольшим количеством общих признаков распределяют по парам и сравнивают с другими парами и так до тех пор, пока не изучат все возможные признаки и коэффициент сходства всех изучаемых животных или растений. Сторонники этого метода заявляют, что он якобы ликвидирует субъективный подход в классификации организмов. Все выбранные для анализа признаки можно измерить и вычислить объективно. Но здесь-то и возникает проблема — какие признаки следует выбирать для анализа и на каком основании? Любое суждение неминуемо окажется субъективным. Другой недостаток этого метода состоит в том, что он во многом зависит от внешних признаков организма и не учитывает факта конвергенции. Различные группы животных могли выработать общий признак в процессе независимой эволюции, а не потому, что у них был общий предок. Возможно, что с развитием техники генетического анализа и применением его при классификации любые методы классификации исключительно по внешним признакам станут избыточными и ненужными. См. также статьи «Кладистика», «Конвергенция», «Генетический анализ». ЦЕЛАКАНТ В 1938 году близ берегов Южной Африки была сделана поразительная находка — в сеть попался целакант. Это все равно, как если бы люди обнаружили живого динозавра. Окаменевшие останки целакантов попадались в горных отложениях, датируемых 400—65 миллионами лет назад, но предполагалось, что после исчезновения динозавров эти животные загадочным образом исчезли. Пойманная живая рыба была голубовато-серого цвета с белыми пятнами и необычными плотными и короткими плавниками, поделенными на доли. 22 декабря первый образец доставили в южноафриканский город Ист-Лондон. О находке сообщили смотрительнице музея М арджори Куртене-Латимер, но она не смогла отождествить животное, потому что никто никогда его не видел. Наконец, в феврале 1939 года его плохо сохранившиеся останки опознал профессор Джеймс Л. Б. Смит из Родосского университета города Гремс- тауна. Он понял, что это представитель кистепёрых рыб (Crossopterygii) и назвал ее «древнее четвероногое», поскольку, как он ошибочно полагал, дольчатые брюшные и грудные плавники рыбы позволяли ей ползать по морскому дну. Он даже опубликовал книгу на эту тему, озаглавленную «Древние четвероногие». Рыбу назвали латимерией (Latimeria chalumniae) в честь первооткрывательницы (Latimeria от фамилии мисс Латимер, a chalumniae — от наименования реки Ча- лумна, возле устья которой и поймали рыбу). На протяжении почти 14 лет после
этого профессор Смит организовывал экспедиции с целью отлова очередных экземпляров, но это удалось сделать только в 1952 году в районе Коморских островов. Начиная с 1960 годов было отловлено довольно много представителей этого вида, и к 1980 годам ученые начали беспокоиться о судьбе редкого вида. С 1991 года целакант охраняется в соответствии с Конвенцией по международной торговле вымирающими животными (CITES). В конце 1980 годов Ганс Фрике снял фильм о целакантах в естественной среде их обитания при помощи аппарата, погружающегося на 200 метров, и в 1991 году миллионы телезрителей увидели вымирающих животных в сериале «Жизнь на Земле» Дэвида Аттенборо. В 1997 году был открыт второй вид латимерии. Latimeria menadoensis обитает в море Сулавеси между Филиппинами и Борнео. См. также статью «Живые ископаемые». ЭДИАКАРСКАЯ ФАУНА Так называется группа окаменелых останков животных, впервые найденных в Эдиакарских холмах в Австралии (горы Флиндерс). Обнаружены они были в 1947 году благодаря энтузиазму австралийского геолога Рига Спригга. Первым среди палеонтологов их описал Мартин Гласснер, определив их как примитивных представителей группы, к которой принадлежат медузы и кораллы; некоторых других он отнес к кольчатым червям и членистоногим. Эти существа доминировали на Земле в течение десятков миллионов лет, появившись 680 миллионов лет назад, до известного взрыва жизненной активности в кембрийский период (эпоха беспозвоночных) . Эти останки давно вымерших животных сохранились до наших дней благодаря уникальному сочетанию геологических факторов. Животные были мягкотелыми и не имели скелета, но мягкий песчаник Эдиакарских холмов позволил сохраниться телам этих похожих на медуз животных. Доказательством того, что эдиакарская фауна не была чьей-либо хитроумной подделкой, служат останки этих животных, которые были найдены по всему миру. Согласно датировке некоторых ископаемых, обнаруженных в Намибии в конце 1990 годов, эти животные сохранились до кембрийского периода (540—505 миллионов лет назад). Они связаны родственными узами с современными беспозвоночными, но внешне не напоминают ни один из известных типов животных. Некоторые ученые полагают, что эдиакарские организмы не были животными и растениями, а сочетали признаки обеих групп. В 1980 годах Дольф Зайлахер, профессор палеонтологии Тюбингенского университета (Германия), предположил, что эдиакарская фауна могла быть неудавшимся эволюционным экспериментом по организации многоклеточных животных, поскольку в кембрий такие животные уже не встречались. Похоже, что эволюция и развитие эдиакарских организмов закончились до того, как стали развиваться более приспособленные системы внутренних органов, которые мы находим у высших беспозвоночных и которые отражены в окаменелостях кембрия. Альтернативный путь развития больших поверхностей без внутренних органов, по-видимому, привел лишь к нескольким группам, которые нельзя назвать удачными. См. также статью «Эпоха беспозвоночных». ЭКСПЕДИЦИЯ «БИГЛА» В возрасте 22 лет Дарвин обратился к столь же молодому капитану Фицрою с просьбой зачислить его натуралистом на борт корвета «Бигл», принадлежащего королевскому флоту Великобритании. Легендарная экспедиция длилась с 1831 по 1836 год. Фицроя назначили капитаном «Бигла» в 1829 году, после того как предыдущий капитан покончил жизнь самоубийством. Дарвина приняли в члены экипа-
жа, а деньгами ему помог его дядя Джосайя Ведвуд (занимавшийся гончарным делом) . Из-за штормов «Биглу» дважды пришлось возвращаться в гавань, но 27 декабря 1831 года он наконец поднял якорь и отправился в экспедицию, которая озарила новым светом весь научный мир. Деревянное судно длиной 25 метров и весом в 242 тонны отправилось к берегам Южной Америки. Тогда-то и сбылись худшие опасения Дарвина: интересное путешествие вскоре превратилось в однообразные тяжелые будни, заполненные рутинными обязанностями и окрашенные в темные тона из-за постоянного недомогания. Иногда Дарвин проводил в каюте целые дни, не выходя на палубу. Наконец «Бигл» достиг Южной Америки и направился к Бразилии и Аргентине, проводя гидрографические съемки берегов. Пройдя через полосу бушующих штормов у мыса Горн, он повернул на север и проплыл вдоль побережья Чили и Перу. К счастью для Дарвина, иногда наступали периоды отдыха, когда «Бигл» опускал якорь и снаряжал фуражиров для приобретения съестных припасов. Высадившись на землю, Дарвин зря время не терял. Его буквально манили все эти новые для него места, служившие пристанищем необычных и пленяющих воображение форм жизни. Он заходил далеко в глубь островов, коллекционировал животных, неизвестных науке , собирал окаменелости. Однако наибольший вклад в науку он сделал, посетив острова Галапагос. Именно там ему пришла мысль о естественном отборе, впоследствии оформившаяся в теорию эволюции, которую мы сегодня называем «дарвинизм». Покинув в 1835 году Галапагосы, корабль продолжил плаванье, пересек Тихий океан, подошел к Австралии, затем прошел по Индийскому океану и направился обратно к берегам Британии . См. также статьи «Дарвин, Чарльз «Дарвинизм», «Галапагос, острова», «Естественный отбор». ЭПОХА БЕСПОЗВОНОЧНЫХ Кембрийский период (540—505 миллионов лет назад) можно назвать эпохой беспозвоночных. Представьте себе, что все космические корабли, сверхзвуковые самолеты и другие средства передвижения, которые только в состоянии создать человеческий гений, были бы разработаны за какое-нибудь десятилетие XV века. Современные историки наперебой предлагали бы свои объяснения этого удивительного феномена, случившегося за такой короткий период времени. Приблизительно также палеонтологи относятся и к необычайной эволюционной активности, имевшей место в кембрийский период. В 1933 году ученые предположили, что в течение 10 миллионов лет живые организмы развивались с такой скоростью и небывалым разнообразием, какие превышают все, что было до того или после того. За предыдущие три миллиарда лет самое лучшее, что создала природа, в нашей аналогии с транспортом можно сравнить разве что с лодкой. Это были водоросли, некоторые плоские черви и загадочные представители эдиакарской фауны. Затем, без видимых на то причин (по крайней мере, от переходного периода не осталось почти никаких следов), фауна развивалась с бешеной скоростью, если сравнивать с обычным темпом эволюции. В ранне-кембрийский период возникло несколько хорошо описанных групп беспозвоночных. Это были первые животные с головой, средней и задней частями, с кишечником и сегментами. Впервые также появились кровь, раковины и усики. В одном эволюционном скачке возникли почти все формы тела, характерные для современных беспозвоночных и для некоторых исчезнувших. В середине 1990 годов группа ученых из Калифорнии предложила интересное объяснение появления такого разнообразия видов за небольшой промежуток времени. Они выдвинули гипотезу, согласно которой в то время возникли неактивизи- рованные в личиночном состоянии клетки. В период созревания их приводят в
действие гомеотические гены. Когда в процессе эволюции появились такие гены, то создался потенциал для взрывообразного развития беспозвоночных кембрия и эпохи беспозвоночных. См. также статью «Эдиакарская фауна». ЭПОХА ЗЕМНОВОДНЫХ Земноводные были широко распространены и процветали в каменноугольный период (360—286 миллионов лет назад). Многие древние виды значительно превышали по размерам современные. Суровые, пустынные условия девонского периода (410— 360 миллионов лет назад) послужили так называемым давлением отбора и наложили ограничения на основную форму земноводных. У них развились поза с опором на четыре конечности с приподнятой головой и бочкообразное тело с легкими. Климатические изменения привели к появлению многочисленных болот, изобилующих жизнью, — климат каменноугольного периода как нельзя лучше подходил для образа жизни земноводных. В процессе адаптивной радиации группа земноводных расширилась, освоила все теплые мелководья, и некоторые ее представители вернулись к водному образу жизни, какой мы наблюдаем у современных тритонов и некоторых саламандр. Вполне вероятно, что земноводные произошли от нескольких групп кистеперых рыб с зачатками легких, подобных целаканту, поскольку некоторые виды девонских кистеперых обладали чертами скелета, свойственными более поздним земноводным. У одних рыб было по две пары плавников, похожих на конечности для передвижения по суше, а у других были ноздри, напоминающие ноздри современных лягушек. Окаменелый скелет самого древнего земноводного найден в 1930 годах в верхнедевонских отложениях Гренландии; многие подобные находки были сделаны также в середине 80—90-х годов XX века. Останки этого ископаемого животного, ихтиостеги (Ichthyostega) — одни из самых хорошо сохранившихся экземпляров так называемых связующих звеньев, то есть животных, сочетающих в себе признаки разных классов. Но позже в раннедевонских отложениях Австралии были найдены отпечатки ног настоящего земноводного. У ихтиостеги сочетались черты рыб и земноводных. Ее органы чувств и длинный хвост с плавником похожи на соответствующие органы рыб, а широко расставленные конечности и растянутые ребра — на конечности и ребра земноводных. Хотя скелет ихтиостеги и признан на настоящий момент самым древним полным скелетом земноводного, непохоже, что она была предком современных земноводных. Скорее всего, это был один из многих «экспериментов» девонского периода, большинство из которых превратилось в окаменелости, не оставив прямых потомков. См. также статьи «Адаптивная радиация» , «Целакант». ЭПОХА МЛЕКОПИТАЮЩИХ Во время позднего пермского и раннего триасового периодов (около 245 миллионов лет назад), приблизительно тогда, когда предки динозавров набирали силу и становились хозяевами суши, во многих средах обитания распространились представители другой группы пресмыкающихся — синапсиды. В их число входили
различные виды, от более примитивных рептилий до существ, похожих на млекопитающих — терапсид (зверообразных ящеров). Одним из первых нововведений в эволюции синапсид стало развитие довольно неудобного механизма контроля температуры5. У некоторых видов появились обширные складки кожи и пластины на спинах, так называемые паруса, поддерживаемые длинными позвонками. Большая площадь поверхности этих парусов, снабженных густыми кровеносными сосудами, позволяла таким животным поглощать солнечную энергию, когда им было холодно, и выделять тепло, когда им было жарко. Постоянная температура тела позволила синапсидам поддерживать более или менее постоянную жизненную активность, независимо от внешней температуры, и это послужило важным шагом на пути развития температурно независимых ферментных и гормональных систем, которые повысили интенсивность обмена веществ. Такие черты свойственны организмам млекопитающих, которые, возможно, и произошли от них. Некоторые синапсиды, которые, вероятнее всего, были предками млекопитающих, развили более эффективные способы передвижения, питания и дыхания. Останки этих звероящеров образуют почти непрерывную серию переходов от рептилий до современных зверей. Более того, если бы многие из этих животных, которые по своим скелетным останкам относятся к пресмыкающимся, жили в наши дни, то их, скорее всего, отнесли бы к млекопитающим. За произвольную границу раздела этих двух классов принято строение челюсти. Нижняя челюсть в скелетах млекопитающих состоит из двух костей, по одной на каждой стороне. Если это строгое правило применить к окаменелостям, то к млекопитающим нужно отнести животных, существовавших уже в среднем триасе. В середине юрского периода (около 190 миллионов лет назад) существовали различные группы мелких млекопитающих размером с мышь, похожих на современных землероек. В эпоху динозавров от них произошли самые разные виды. Многие из них вымерли, но сохранившихся оказалось достаточно, чтобы стать хозяевами суши после исчезновения динозавров . См. также статью «Динозавры». ЭПОХА ПРЕСМЫКАЮЩИХСЯ Процесс эволюции некоторых древних земноводных в пресмыкающихся (рептилий) происходил в каменноугольный период (360—286 миллионов лет назад). К тому времени, как роскошные обширные болота — настоящий рай для земноводных — сменились унылыми пустынями пермского (286—245 миллионов лет назад) и триасового (245—202 миллиона лет назад) периодов, пресмыкающиеся стали полноправными хозяевами суши и оставались ими на протяжении следующих 200 миллионов лет. 5 Появившиеся ночные похолодания, возможно, вели к увеличению размеров динозавров, поскольку большая масса не успевала остыть За ночь (неподвижных съедали). Но увеличение размера имело свой предел, а похолодания нарастали. Динозавры были обречены. В условиях похолодания теплокровность была преимуществом.
Одно время самым древним из известных пресмыкающихся считался гилоном (Hylonomus), обнаруженный в горных породах среднего каменноугольного периода на территории Новой Шотландии (Канада) (возраст около 310 миллионов лет). Это маленькое животное, которое, по всей видимости, походило на ящерицу, было 20 сантиметров в длину. Кости черепа и общие пропорции тела указывают на то, что оно вело активный образ жизни на суше и относилось уже к другому классу животных, следующих в эволюционном развитии за земноводными, способными обитать как на суше, так и в воде. Гилоном был открыт в 1852 году Уильямом Доусоном. Этот рекорд по обнаружению останков самого древнего пресмыкающегося продержался целых 140 лет. Затем в 1989 году коллекционер окаменелостей Стэн Вуд обнаружил в шотландских горных породах раннего каменноугольного периода останки более древнего существа. Это открытие отодвинуло время появления первых рептилий к периоду возникновения земноводных (350 миллионов лет назад). Вначале пресмыкающиеся были не очень распространенными животными, но в Пермский период они стали доминирующим классом позвоночных. Особенно это касалось зверообразных рептилий, которые первыми использовали все возможности для наземного образа жизни. В их число входили известные рептилии раннеперм- ского периода с парусами (кожистыми перегородками на спине), а также разнообразные плотоядные и травоядные формы поздней перми. Некоторые из них стали первыми крупными животными на Земле. Другие виды вернулись в воду, например мезозавры, или освоили воздух и стали первыми летающими позвоночными, например птерозавры. Все основные группы рептилий появились в ранний каменноугольный период, хотя в ту эпоху почти во всем мире доминировали земноводные. См. также статьи «Клейдоическое яйцо», «Птерозавры». ЭПОХА РЫБ В конце силурийского периода (433—410 миллионов лет назад) наблюдалось большое разнообразие рыб. Их широкое распространение совпало с освоением пресных вод, что одновременно поставило перед ними и новые проблемы. Пресные во-
дремы — более трудное место для выживания, так как их физические характеристики более разнообразны по сравнению с морями. Следовательно, естественный отбор в них шел гораздо активней, что привело к развитию многих новых видов. В пресных водоемах может быстро измениться температура, повыситься или понизиться содержание питательных веществ, уменьшиться или увеличиться концентрация кислорода. В море эти показатели более стабильны. Согласно определению, рыбы — это водные, хладнокровные позвоночные, дышащие жабрами, сохранившие плавники, которые у других классов позвоночных превратились в конечности. Это значит, что они имеют позвоночник, обитают в воде (соленой и пресной), не могут контролировать температуру своего тела и дышат кислородом, растворенным в воде, с помощью жабр. Окаменелые останки самых древних рыб датируются ордовикским периодом — около 450 миллионов лет. С тех пор рыбы приспособились почти ко всем видам водной среды. В наши дни насчитывается около 23 ООО видов рыб, причем три из каждых пяти видов позвоночных — рыбы. Самые древние из известных челюстных позвоночных — акантоды. Хорошо изученное ископаемое этой группы — климатий с толстыми мелкими чешуйками по всему телу. В отличие от них представители группы разнощитковых (Heterostraca), такие, как птераспида и некоторые остракодермы, были бесчелюстными рыбами с костным щитом, закрывавшим переднюю часть их тела. Предполагается, что это дальние родственники миног и паразитов мик- син, которые сохранились до наших дней. О том, как на самом деле возникли рыбы, известно мало, потому что в период, к которому относятся самые древние окаменелые останки бесчелюстных (Agnatha) и челюстноротых (Gnathostomes) рыб, они уже имели анатомические признаки современных рыб. Однако считается, что бесчелюстные рыбы были предшественниками челюстноротых, окаменелости которых встречаются, начиная с середины силурийского периода. ЭУКАРИОТЫ Эукариоты — это одноклеточные или многоклеточные организмы, генетический материал которых в форме ДНК окружен мембраной (ядерной оболочкой), образующей ядро. Им противопоставлены прокариоты с более примитивным строением, которые не имеют мембраны и в которых значительно меньше внутриклеточных структур (органелл). Клетки эукариотов можно сравнить с заводом, где ядро играет роль администрации, органеллы — это механизмы, а ферменты — рабочие. Как и любой завод, для эффективной работы клетка должна получать сырье. Она также должна избавляться от отходов. Во всех клетках мембрана состоит в основном из молекул липидов (жиров), которые называются «фосфолипиды», а также из молекул белков. Таким образом, образование этих органических молекул, липидов и белков, является необходимым условием развития мембраны вокруг клеток всех живых организмов. Каждая молекула фосфолипида состоит из растворимой в воде «головки» и водоотталкивающего «хвоста». Эти молекулы выстраиваются в два ряда: их головки присоединяются к водной цитоплазме снаружи, а хвосты, отталкиваемые водой, остаются внутри мембраны. Такое расположение одновременно и устойчивое, и подвижное. Оно устойчиво потому, что противоположные свойства головок и хвостов не дают молекулам повернуться, и гибко, потому что мембрана может сокращаться и изменять форму.
Мембраны играют важную роль не только для ограждения клетки от внешней среды, но и внутри клеток. Мембраны делят клетку на части, называемые органелла- ми, которые выполняют различные функции и в которых происходят всевозможные реакции с участием ферментов. Внутренние мембраны имеют такое же строение, как и внешние, поэтому предполагается, что они произошли из складок внешних слоев. Двойная мембрана поддерживает целостность центра управления клеток эукариотов — ядра. Вакуоль Хлоропласт См. также статьи «Прокариоты», «Протобионты». ЭФФЕКТ «БУТЫЛОЧНОГО ГОРЛЫШКА» Иногда численность популяций сокращается до нескольких особей. Это может произойти вследствие климатических изменений, увеличения популяций хищников, болезней или катастроф (например, извержений вулканов или других природных катаклизмов). В результате последующим поколениям передают свои гены небольшое количество индивидов. Генофонд популяции сокращается. Выжившие особи не обязательно имеют все наборы признаков изначального генофонда, и частота аллелей может сильно измениться. Помимо эффекта «бутылочного горлышка», малые популяции подвержены дрейфу генов и инбридингу. • В общих чертах историю популяции, подвергшейся данному явлению, можно изложить следующим образом. Существует большая популяция с большим генетическим разнообразием.
• Численность популяции сокращается до нескольких особей; она теряет генетическое разнообразие и едва не вымирает. • Популяция снова обретает большую численность, но генетическое разнообразие потеряно. В качестве примера можно привести популяцию современных гепардов. За последние годы численность диких гепардов уменьшилась и теперь составляет менее 20 ООО особей. Благодаря современной технике генетического анализа было выяснено, что популяция гепардов обладает очень малым генетическим разнообразием. По всей видимости, в конце последнего ледникового периода, 10—20 тысяч лет назад, гепарды едва избежали вымирания (возможно, где-нибудь в пещере выжила только одна самка, давшая потомство). Исходя из малого генетического разнообразия, всех современных гепардов можно считать потомками одного помета. По приблизительным оценкам, во время последнего ледникового периода вымерло 75% крупных млекопитающих (включая мамонтов6, пещерных медведей и саблезубых тигров) . Недостаток генетического разнообразия у гепардов привел к отклонениям в образовании сперматозоидов, уменьшению плодовитости, высокой смертности детенышей и повышенной чувствительности к болезням. Со времени сокращения численности популяции прошло недостаточно времени, чтобы благодаря случайным мутациям образовалось новое генетическое разнообразие . См. также статьи «Дрейф генов», «Генетический анализ». ЭФФЕКТ ОСНОВАТЕЛЯ Принципы эффекта основателя были изложены Эрнстом Майром в качестве объяснений эволюции среди малочисленных популяций. Иногда несколько организмов оказываются изолированными от основной популяции и образуют отдельную группу размножения. Например, некоторых птиц ветер может отнести с материка на острова, что, по всей видимости, и случилось с дарвиновыми вьюрками. Они стали основателями новой популяции. Иногда бури могут сломить стволы огромных деревьев и превратить их в плоты, способные переплыть моря. На таком плоту может разместиться некоторое количество небольших животных, которые в конечном итоге окажутся на новом месте. Люди могут неосмотрительно ввезти крыс и других животных в те районы, где их никогда не было, что грозит серьезными последствиями . В 1955 году было получено свидетельство того, что животные могут пересекать большие водные пространства на естественных плотах. Эллен Кенски из Пенсильванского музея естественной истории обнаружила 15 игуан, сидящих на плоту растительного происхождения и направлявшемся из Гваделупы на остров Ангилья, расстояние между которыми составляет около 300 километров. Это случилось после урагана Луис, который повалил много деревьев и вырвал много растений. Игуаны спокойно доплыли до Ангильи и одну из самок видели там через 29 месяцев . Первые колонисты на островах или первопроходцы, освоившие новую территорию, становятся основателями новой популяции. Если в ней слишком мало членов, то соотношение их генов может не соответствовать генофонду основной популяции. В таком случае от основателей получается новая популяция с особым генофондом. По мере естественного отбора происходит дивергенция от основного вида и в данном регионе развивается новая группа организмов. В качестве примера можно привести бабочку вида Maniola jurtina. На острове Треско (острова Силли, к западу от Корнуэлла, Великобритания) популяция бабо- 6 Возможно, мамонтов убило как раз потепление - исчезли их пастбища, но появился свирепый хищник - человек.
чек имеет особый рисунок пятен на крыльях, который отличается от представителей основной популяции, обитающей на большой земле. Новая популяция образовалась за определенный период времени от популяции основателей, насчитывавшей менее 200 особей. См. также статьи «Дарвиновы вьюрки», «Дрейф генов», «Генетический анализ», «Естественный отбор». ЯЩЕРОТАЗОВЫЕ ДИНОЗАВРЫ Ящеротазовые динозавры (Saurischia), появившиеся ранее другой группы, имели строение таза, схожее с другими преся^шкающимися. Две кости ног расходились у них в разных направлениях. Некоторые из них были растительноядными, другие — хищными. Они часто походили на двуногих крокодилов. Среди хищных такая форма тела сохранилась, но впоследствии некоторые виды стали больше по размеру и образовали группу тераподов (названных так, потому что у них было «звериное» строение ног). Среди типичных крупных тераподов можно назвать мегалозавра (Megalosaurus). Это был первый из описанных в науке динозавров. В меловой период (144—65 миллионов лет назад) большие тераподы развивались по нескольким линиям. У некоторых возникли гребни на спине, а к концу этого геологического периода появился мощный тиранозавр ( Tyrannosaurus), возможно , самый известный среди динозавров. Однако, несмотря на свою 12-метровую длину и грозный вид, он скорее питался падалью и не был яростным хищником, каким его изображают в популярных фильмах. Он передвигался на мощных задних ногах, а передние конечности у него были маленькими, но с такими же большими когтями. Несмотря на свой размер, он мог развивать большую скорость. Существовали и менее крупные группы тераподов, которые охотились на мелкую добычу. Некоторые из них не превышали по размеру курицу. Близкие родственники этих динозавров могли быть теплокровными, тем более что они считаются родоначальниками птиц. В юрский и меловой периоды возникла другая подгруппа ящеро- тазовых динозавров, которых называют завроподами. Это были настоящие «тяжеловесы» среди динозавров; все они были четвероногими и растительноядными. Они имели крошечные головы, массивное тело, длинные шеи и хвосты; кости их ног были устроены по образцу ящериц. Крупнейшим считается апатозавр, иначе называемый бронтозавром; он весил 30 тонн и в высоту достигал 12 метров. Обитал он на болотах или у берегов больших рек и водоемов. Скорее всего, вода помогала ему поддерживать громадный вес тела. Вполне возможно, что большой объем тела завроподов в сочетании с медленным метаболизмом привел к развитию постоянной температуры тела. См. также статьи «Птицетазовые динозавры», «Динозавры».
ДО И ПОСЛЕ ДИНОЗАВРОВ А.Ю.Журавлев (отдельные главы) Глава I. В глубоком архее, или что остаётся, когда ничего не остаётся (3900—2500 миллионов лет назад) "Чудеса случаются не против Природы, а против того, что мы знаем о Природе". Блаженный Августин Что было раньше и курицы, и яйца? Первые существа и первые созданные ими вещества. Можно ли прожить без сообщества? Кто и что написал на каменных страницах? Создатели озонового щита родины. Ввод Сейчас речь сразу пойдёт о геологически достоверных временах, которым в истории Земли предшествовал довольно длительный период. Тогда на Земле и вне её существовало столько возможностей для зарождения жизни, что она не могла ни появиться. Нужен был ускоритель для сборки сложных химических соединений и отбраковщик излишков. Эту роль могли сыграть минералы. Участие минеральных кристаллов могло убыстрить возникновение жизни, и весь путь от неживых организмов до живых носителей информации — генов — мог оказаться весьма коротким (в геологическом масштабе времени, конечно), то есть осуществимым на Земле. Даже если предположить, что живые организмы возникли на Земле около четырёх миллиардов лет назад, оставшихся полмиллиарда лет для "кристаллизации" нежи-
вых организмов вполне достаточно. Если невероятное всё же случилось, не лучше ли считать его неизбежным? Во всяком случае, жизнь на Земле существует, потому что на Земле существует жизнь. Это не парадокс. Это реальность. Не будь на Земле живых существ, планете была бы уготовлена участь ядовитой парилки, как Венере, или остывшего пустынного тела, как Марсу. Не сразу биологические процессы взяли верх над геологическими в созидании планетных оболочек — газовой (атмосферы), жидкой (гидросферы) и, отчасти, твёрдой (земной коры). Новые и новые поколения организмов сменяли друг друга, пользуясь тем, что произвели предшественники и, в свою очередь, преобразуя Землю для потомков. Вот как это было. Самые первые Древнейший период земной летописи так и называется — "древнейший" (по- гречески, архей). Он начался около 4 миллиардов лет назад и закончился 2,5 миллиарда лет назад. Нижний временной рубеж архея установлен по возрасту первых осадочных пород (переотложенные минералы бывают и старше). Кстати, эти минералы (крошечные зёрна циркона) подсказали, что 4,4 миллиарда лет назад Землю уже покрывала водная оболочка, а температура воздуха над ней не превышала 2000 С. Вплоть до середины XX века любые открытия остатков жизни в архейских породах не воспринимались всерьёз. Считалось, что если хороши ископаемые, то неправильно определён их возраст. Если же возраст верен, то сами ископаемые сомнительны. Но если совсем всё сходится, то, значит, дело обстоит гораздо хуже, и ископаемые просочились из более молодых, неархейских пород. На деле, чуть ли не первые сохранившиеся горные породы (возрастом 3,86 миллиарда лет) несут в себе следы признаков жизни (или признаки следов), то есть те самые "особые" изотопы. Так в древнейшем графите (породе, сложенной углеродом) соотношение устойчивых изотопов углерода (13С/12С) сильно сдвинуто в пользу лёгкой разновидности этого элемента. Наоборот, вмещающие породы сохранили изрядное число тяжёлых изотопов. Так раскидать изотопы могли только какие-то фотосинтезирующие бактерии. А теперь о фотосинтезе. Фотосинтезом называют преобразование (гр. "синтезис") бактериями и растениями энергии света (гр. "фотос") в органические вещества. Благодаря этому явлению процветают все растительные организмы и поглощающие их вегетарианцы, а также гурманы, предпочитающие есть тех, кто отобедал другими. Одним из признаков живой материи — от бактерий до человека — служит поиск лёгкой жизни. И при фотосинтезе из обращения изымается более лёгкий изотоп углерода. Он скапливается в органическом веществе (которое со временем может стать графитом). Среда, наоборот, обогащается более тяжёлым изотопом, что практически навечно запечатлевается в осадке. Заметив такую изотопную разницу, можно не сомневаться, что во время накопления осадка водная среда кишела существами, способными к фотосинтезу. Даже основательный нагрев (до температуры 5000 С при давлении в 5000 атмосфер) не в силах изменить первичное соотношение изотопов. Столь древние находки фотосинтезирующих бактерий не вполне отвечают общепринятым взглядам на древнейшую историю организмов. (Впрочем, "общепринятыми"
и принято называть взгляды, менее всего соответствующие фактам). Согласно таким взглядам, сначала объявились бактерии, способные не дышать кислородом (или дышать некислородом) и при этом питаться чем угодно, но в готовом виде. Затем возникли микробы, которые, подобно нам, потребляют кислород. Наконец подключились фотосинтетики. На роль первых вроде бы неплохо подходят архебак- терии. Название архебактерии (древние бактерии) призвано подчеркнуть, что они существуют очень давно и столь же отличаются от настоящих бактерий (эубакте- рий), сколь бактерии от эукариот. К последним относимся и мы с Вами. Слово "эукариоты" (гр.) означает настоящие ядерные организмы, поскольку у них в клетках есть ядро — сосредоточие хромосом, несущих гены. У прокариот (архебактерии и эубактерий) ядра нет, и гены находятся в кольцевой хромосоме, лишённой собственной оболочки. Архебактерии способны выживать при сильной солёности, повышенной кислотности, высоких температурах (до ИЗО С) и в отсутствии кислорода. Например, в кипящей серной кислоте. По своей выносливости они идеально подходят на роль пионеров, осваивавших безжизненную планету. Есть только одно "НО": архебактериям требуется органическое вещество. Однако это "НО" перевешивает всё остальное. Ведь надо, чтобы это органическое вещество кто-то производил, поскольку каннибализм у них исключён. (Это черта более продвинутых форм жизни) . И какую группу бактерий ни возьми, им нужны другие бактерии, которые готовили бы для них обед, завтрак и ужин. Замкнутый круг какой-то получается. Это и есть замкнутый круг, то есть круговорот. Круговорот хотя бы основных, насущных элементов и обеспечивает существования жизни в виде устойчивого сообщества. Очевидно, что курица не может появиться раньше яйца. Они могут возникнуть только одновременно. Сходным образом, любую ветвь бактерий трудно вообразить без всех прочих. Сообщество, где все организмы выполняют одну работу, только производят или только потребляют — невозможно. Прасообщество должно было состоять, по крайней мере, из производителей и разрушителей. Работа распределяется между членами бактериального сообщества примерно таким образом. Цианобактерии непосредственно из атмосферы усваивают углерод (на свету) и азот (в тёмное время дня) . Используя солнечную энергию, они создают органическое вещество. Попутно выделяется кислород. Конечный объём органического вещества не может превышать объём разложенного. Иначе все ресурсы быстро исчерпаются. Поэтому в дело вступают другие бактерии — гидролитики (гр. "растворяющие водой"). Они растворяют и разлагают отмершую органику до состояния простых соединений (углеводов; газов, включая водород, углекислый газ, метан, сероводород; уксусную кислоту и других). Эти соединения нужны се- роводородобразующим бактериям, которые восстанавливают сульфаты (соли серной кислоты) и серу. Попутно они возвращают фотосинтетикам исходные вещества. Серный круговорот замыкают другие серные эубактерий. Из-за продуктов бескислородного разложения (водород и уксусную кислоту) соперничают сероводородоб- разователи и метанообразующие архебактерии. Производимый последними метан требуется метанокисляющим эубактериям. Следы бактериального сообщества встречаются уже в нижнеархейских отложениях на северо-западе Австралии, в Пилбаре. Откуда мы можем это знать? С помощью биомаркеров, которые показывают, кто на самом деле жил в далёком архее. Орга-
нические породы из Пилбары, которым 2,7 миллиарда лет, сохранили биомаркеры цианобактерий и предков эукариот. Прослои железной руды, возможно, отложили железобактерии. В отсутствии сероводородобразующих бактерий (свидетельства их деятельности проявились только в протерозое) главными потребителями цианобак- териальной продукции могли стать метанообразующие архебактерии, привычные к отсутствию кислорода. Они не только производили пищу для своих метанокисляю- щих противников, но и наполняли этим газом атмосферу. По тем временам метан был для Земли куда как важнее кислорода. Ведь солнце раскочегарилось от силы на треть. И атмосфера должна была быть достаточно теплоёмкой, чтобы не дать планете раз и навсегда замёрзнуть. Основным теплоизо- лятором мог стать углекислый газ или метан. Метан даже лучше, чем углекислый газ, держит тепло, и вполне годился на роль первичной теплоизолирующей оболочки . Не будь её не нашли бы в архейских отложениях остатки древнейших существ. И искать бы было некому. Обнаружить в архейских слоях возрастом 3,5—3,3 миллиарда лет можно исключительно микроскопические и простые шарики да ниточки. А поскольку мода на простое никогда не проходила, одни бактерии по форме совершенно неотличимы от других. Лишь характерное соотношение изотопов углерода проясняет цианобактериальную природу некоторых окаменелостей. Подобные шаровидные и нитчатые ископаемые просматриваются на прозрачных срезах кремнистых слойков. Некоторые нитчатые разновидности (0,008—0,011 миллиметра в поперечнике) состоят из дисковидных клеток. Такие длинные узкие бактерии и сейчас сине- зелёной плёнкой затягивают поверхность стоячих водоёмов. Нити всегда немножко колеблются (отсюда и их название осцилляториевые от лат. — "качающиеся"). Покрытые единой оболочкой скопления шариков, каждый из которых всего несколько сотых миллиметра в поперечнике, похожи на колонии других цианобактерий. Трудно даже вообразить, каково приходилось в архейское время этим шарикам и ниточкам. Ну, совершенно невозможно. Мы почти ничего не знаем об атмосферных
газах, температуре воды на архейских курортах, составе этой воды, сколько её вообще было (море, океан или очень большая лужа?). Иногда удаётся выяснить, что находилось в той или иной части планеты. Но можно ли распространять частные сведения на всю планету? Предположим, что на Землю сейчас опускается инопланетный автоматический зонд. (Не спешите к окну — это, как водится, воображаемые инопланетяне) . Ответственные за противовоздушную оборону генералы различных стран выясняют между собой, чей это зонд, и кому принадлежит право сбить его первым. Промахиваются. Зонд благополучно падает и погружается в Чёрное море. На глубине 200 метров срабатывают датчики и анализируется состав окружающего вещества. На другом краю Вселенной инопланетяне, прождавшие несколько тысяч световых лет в ожидании этого торжества науки, покрываются от горя синими пятнами в зелёную крапинку. На Земле — нет никаких форм жизни, кроме бактерий, а сама планета покрыта слоем непригодной для питья воды с высоким содержание сероводорода и без кислорода. Но если бы тот же зонд упал на Красной площади, то до того как обрадованные москвичи уволокли бы его в приёмный пункт цветных металлов, инопланетяне успели бы покрыться зелёными пятнами в синюю крапинку от радостных известий, что на Земле есть не только кислородная атмосфера, но и формы жизни, несколько более продвинутые, чем бактерии. Раннюю историю Земли тоже можно представить очень по-разному. Можно предполагать, что потеряв первичные водород (Н2) и гелий (Не), атмосфера наполнилась углекислым газом (СОг) , азотом (N2) , сернистым газом (SO2) , парами воды (Н20) и даже свободным кислородом (Ог) . Или, что первичная атмосфера не содержала кислорода и состояла в основном из водорода, азота, метана (СН4) , аммиака (NH3) , сероводорода (H2S) , угарного газа (СО) и других ядовитых и дурно пахнущих веществ. Нечто подобное наблюдается на Титане (спутнике Сатурна) с азотной атмосферой, чуть разбавленной метаном, этаном (СгН6) , этиленом (С2Н4) , ацетиленом (СгН2) , водородом и угарным газом. Она очень похожа на газовую смесь, из которой в колбах получают органические вещества. В нижнеархейских (3,55—3,2 миллиарда лет возрастом) породах Пилбары встречаются прослои сульфатов. Для их образования необходимы углекислый газ, вода и некоторое количество кислорода. В отложениях того же возраста в Северной Америке и на юге Африки присутствуют железные и урановые руды с сульфидами (солями сероводородной кислоты). Их наличие наоборот свидетельствует о бескислородной атмосфере. Эти различия означают, что в разных частях планеты уже в раннем архее существовали водоёмы с непохожими условиями. В них и жизнь была разной. Посреди водоёмов торчали небольшие вулканические острова (немного похожие на сегодняшнюю Исландию). Одним из таких островов была австралийская Пилбара. Поверхность Пилбары лишь чуть-чуть приподнималась над уровнем воды и затоплялась во время лунных приливов. Приливы были гораздо выше, чем сейчас, поскольку Луна была ближе. Земля вращалась быстрее, и дни были короче. В такой — то осушаемой, то изрядно увлажняемой обстановке, среди потоков лавы — существовали первые земные сообщества. Это были сообщества бактерий. В сообществе бактерий, как и в людском обществе, есть определённые слои. Такое "расслоение" запечатлелось в архейских породах Австралии и Африки в виде строматолитов.
Листая каменные страницы Правый берег реки Юдомы, что течёт от Охотского моря в реку Маю и, влившись в неё, далее в Алдан, обрывается розовыми и серыми скалами. Если удастся превозмочь собственную лень, убаюкивающую в нагретой солнцем резиновой лодке, плавно покачивающейся на голубовато-зелёной стремнине, можно подгрести поближе. Чтобы высадиться среди серовато-рыжих от лишайников угловатых глыб, нужно в несколько хороших взмахов вёсел преодолеть отбойное течение. Перескакивая с одного валуна на другой можно подобраться к одной из промоин в скале. Промоина выбирается неслучайно. В ней восходящий ветерок сдувает назойливых кусачих тварей, а вода за тысячи лет очистила поверхность горной породы до ослепительной белизны. На белом от времени каменном полотне, снизу до самой вершины, откуда с пятисотметровой высоты свисают витые стволы кедрового стланика, проступают тончайшие полосы. Иногда они плавно выгибаются, иногда морщатся мелкой складочкой или распрямляются в ровные линии. Не только на сибирской речке Юдоме, но и во многих уголках планеты так выглядят отложения позднеар- хейского и протерозойского возраста. Более всего архейские и протерозойские главы ископаемой летописи Земли напоминают пачки гигантских, как бы покоробившихся от времени страниц. Этими каменными страницами являются строматолиты. Строматолиты, что по-гречески означает ковровые камни, это — бугристые, полосатые (но не вдоль, как матрасы, а в толщину) породы, которые могут состоять из карбонатных, фосфатных или кремнистых минералов. Даже в середине XX века в органическое происхождение строматолитов мало кто верил. Лишь в шестидесятые годы в австралийском заливе Шарк-Бее были открыты современные строматолиты. Последовали и другие описания, но всё равно ныне строматолитов осталось ничтожно мало. Определяющий признак строматолитов — тонкая слоистость — итог попеременной деятельности различных бактерий, если строматолиты озёрные и лагунные, или водорослей и бактерий , если строматолиты морские. Последние имеют более грубую слоистость и вырисовались сравнительно недавно, в кайнозойскую эру. В кислой среде горячих источников и гейзеров среди образователей кремнистых строматолитов замечены грибы (конечно, микроскопические). Самые тонкие слойки — не толще отдельной нити в тысячную долю миллиметра. В каждом слое преобладает свой газовый режим и пигмент. Пигменты (лат. "краски") — окрашенные вещества. В зависимости от своего цвета они воспринимают световые волны определённой длины. Например, пигмент-хлорофилл (гр. "зелёный лист") придаёт листьям, а также некоторым водорослям и бактериям зелёную окраску. Хлорофилл особенно чувствителен к световым волнам средней длины, которые беспрепятственно проходят сквозь земную атмосферу и верхние метры водной толщи. Поэтому все наземные растения и большинство мелководных — зелёные. Коротковолновой голубой свет проникает до глубины в 200 метров (в чистой воде). Водоросли, которые живут на таких глубинах, должны обзаводиться восприимчивыми к нему красными пигментами.
Согласно законам разложения белого света бактерии распределяются в своём сообществе, и его полосатость становится цветной — зелень цианобактерий сменяется пурпуром серных эубактерий, ниже следует полоса изумрудно-зелёных несерных эубактерий и всё это отчёркивается чёрным слоем сероводородобразующих архебактерии. Расцветка строматолитовой поверхности может меняться даже в течение суток, поскольку обитатели нижнего этажа в тёмное время выползают наружу и наоборот. Скользят бактерии вверх и вниз, преодолевая почти 20 миллиметров в час. По ночам зелёные несерные эубактерий пробираются наверх сквозь слой цианобактерий. Иногда наоборот живые цианобактерий сползают вниз, чтобы укрыться под пустыми чехлами от слишком сильного излучения. В строительных наклонностях бактерий нет ничего необычного. Достаточно вспомнить, что всем "камням за пазухой", таким как зубной и почечный камни мы тоже обязаны бактериям. Сами строматолиты — это не только мертворожденная архитектура бактерий. Плотно сплетаясь, бактерии защищали себя от испепелявшего ультрафиолетового излучения, а, образуя кремнистую корочку, чувствовали себя в полной безопасности. Ведь прозрачный кремнёвый слоёк всего в 0,15 мм толщиной полностью нейтрализует ультрафиолет. Так за несколько миллиардов лет до человека бактерии "додумались" до оконных стёкол — и светло, и спокойно. Быстро растущие современные рифостроящие животные и водоросли вытеснили микробных строматолитобразователей в лагуны, где они способны создавать лишь незамысловатые корки. Современный плачевный образ жизни строматолитов, часто неоправданно служил для восстановления обстановок прошлого. Получалось, что в архее и протерозое вместо морей и океанов были сплошные лагуны и болота. Однако, когда микробам никто не мешал, они делали всё, на что были способны. Так они отгрохали в протерозое рифы, в сотни метров мощностью (как на реке Юдоме) и сотни километров протяжённостью. В таких рифах глубоководные строматолиты возвышались огромными конусами до 75 метров высотой. (Это высота Затонувшего 30-этажного дома). В более мелкой части моря строматолиты ветвились кустиками и нарастали столбиками. На самом мелководье, как и ныне, откладывались незамысловатые корки. (Именно ритмичное строение строматолитов и зависимость их формы от освещённости позволили рассчитать длину дня, а, следовательно, и скорость вращения Земли в архее и протерозое). Ещё несколько раз (в конце кембрийского и девонского периодов и в начале триасового), после массовых вымираний строматолитовые рифы ненадолго занимали освобождённое пространство морского дна. Многие сомневаются в органической природе древнейших (3,5 - 3,2 миллиарда лет) тонкослоистых пород, но 3 миллиарда лет назад уже несомненно отлагались настоящие строматолиты. В архее и самом начале протерозоя, когда океан был пересыщен растворённым карбонатом, доля бактериальных отложений была незначительной. Карбонаты в основном оседали без участия организмов. Постепенно, начиная с середины раннего протерозоя, бактериальные сообщества, вошли в роль главных карбонатообразователей, отняв её у геологических процессов. Именно такие сообщества начали преобразование воздушной, жидкой и твёрдой оболочек планеты. Осаждая плохо растворимые карбонаты, кремнезём или другие минералы из подвижных растворов, они создали новые слои земной коры. Да и определённому составу атмосферы, кроме благородных газов, мы обязаны бактериям. Накопление бактериальной массы привело к тому, что вулканические источники восстановленных газов (сероводород, метан и другие) сменились биологическим за счёт разложения органических веществ без доступа кислорода. Из произведён-
ного за сутки объёма кислорода бактериальное сообщество ночью потребляло три четверти, но одна четверть его уходила вовне. Поэтому, нагромождая стромато- литовые этажи, бактериальные сообщества насыщали атмосферу кислородом. Под газом Для выработки органического вещества из углекислого газа фотосинтетикам нужен свободный электрон. Вода, конечно, наиболее распространённый поставщик необходимого электрона, но для разрыва водородно-кислородной связки требуется мощный источник энергии. Бактериальный фотосинтез с использованием энергии распада сероводорода был, видимо, наиболее ранним. Этот газ расщеплять легче, чем разлагать воду. К счастью для нас, поступления сероводорода из земных глубин намного уступает объёмам воды. В итоге основными фотосинтетиками стали те, кто перешёл на воду (цианобактерий, водоросли, высшие растения). Молекулы воды расщепляются, а ионы водорода, подгоняемые солнечной энергией, пополняют вместе с углекислым газом запас углеводов. Операция с захватом молекулы углекислого газа позволила цианобактериальному сообществу добраться до практически неисчерпаемого источника углерода в атмосфере. Большую часть органических веществ перерабатывалась и возвращалась обратно в виде всё того же газа бактериями-разрушителями. Ничтожная часть органики захоранивалась, но всё равно объём углекислого газа в атмосфере постепенно убывал. Это, во-первых, уберегло планету от "теплового удара", которому подверглась Венера, не избавившаяся вовремя от парникового газа. Во-вторых, атмосфера стала наполняться кислородом. Образоваться за счёт воздействия света на водяной пар кислород в достаточном объёме не мог. Как только его уровень в атмосфере превысил одну десятую часть от современного содержания, образовался озоновый (Оз) щит. Щит отражал ультрафиолетовые лучи, и распад водяного пара прекратился. А щит этот позволил организмам освоить мелководье, а затем и сушу. Цианобактериальные сообщества, которые поставили себе памятник в виде строматолитов, предопределили дальнейшее развитие земной жизни. Они выделяли самый главный для всех последующих существ газ — кислород. Конечно, кислород не задержался бы в атмосфере, если бы бактерии не освободили его от прямых обязанностей - от окисления водорода и органического вещества. Вряд ли какая-то старая (ей стукнуло шесть часов), но мудрая бактерия сказала: "Давайте захоранивать органику поглубже, а водорода выделять побольше". Но бактериальные сообщества поступили именно так. Водород достаточно лёгок, чтобы улетучиваться с Земли, а органическое вещество хранится в осадке до наших дней. Изъятие этих элементов из оборота и привело к накоплению кислорода. С помощью столь ядовитого для других бактерий (а в больших дозах — и для всех прочих существ) газа, как кислород, цианобактерий вскоре потеснили своих соперников. Уже к концу архея они стали самой распространённой на планете группой организмов. И остаются такой поныне. Впрочем этот чрезмерно активный газ больше годится для разрушения — медленного (гниения) или бурного (горения). Он легко образует перекись водорода и другие ядовитые для живых существ соединения. Немногие бактерии способны направить разрушительную силу кислорода себе на пользу. Это светящиеся бактерии, благодаря которым во тьме мигают светлячки и переливаются огнями глубоководные рыбы. Некоторые круглые черви — нематоды (гр. "нема" — нить) — даже
приспособили этих бактерий для подачи световых сигналов птицам. Чтобы попасть в желудки последних, где эти паразитические черви и живут, нематоды проникают в гусениц. Засветившиеся гусеницы становятся лёгкой добычей птиц, а им, паразитам, только этого и надо. Возможно, что именно укротившие кислород древние родственники светящихся бактерий заставили дышать всех эукариот этим газом. Но об этом несколько позже . Магнитная карта Но почему мы так уверены, что свободный (несвязанный в минералах) кислород уже был? Об этом можно судить по остаткам некоторых бактерий из архейских отложений . В породах возрастом 2,9 миллиарда лет встречаются очень мелкие кристаллики магнетита. Они имеют необычную для этого железосодержащего минерала шестигранную форму. Неорганический магнитный железняк бывает четырёх- и восьмигранный, но шестигранным быть не может. Только магниточувствительные эубактерий способны вырастить в себе подобные странные кристаллы. Самим бактериям они нужны для того же, для чего нам нужен магнитный компас. Бактерии проживают на дне водоёма и очень не любят, когда кто-нибудь большой и настырный ворошит ил, всплывающий облаком мути. Вращаясь в этом облаке бактерия не знает, где родное дно, а где — жутко опасное открытое пространство. Однако поскольку магнитные поля проходят по касательной, взяв по ним направление, можно живо уйти на дно. Поэтому бактерии, обитающее в Северном полушарии, всегда плывут на север и наоборот. Спустя миллионы лет многие животные воспользовались магнитными свойствами этого минерала. У пчёл кристаллики магнетита спрятаны в передней части брюшка, у голубей, китов и человека — в оболочке мозга под крышей черепа. (Хотя у человека на 1 грамм оболочки мозга приходится до 100 миллионов кристаллов магнетита, без дополнительных приборов он в лесу всё равно заблудится). Как раз карту естественных магнитных полей передают пчёлы в своём диковинном танце. Чтобы вовремя определить, куда спасаться, бактерии вырабатывают магнетит. Поскольку для его образования требуется кислород, мы можем утверждать, что в архейских атмосфере и гидросфере его было достаточно, а магнитосфера надёжно прикрывала Землю от солнечного ветра. Но если кислород вырабатывался, тогда почему так медленно совершенствовалась земная жизнь? Теперь неокисленное железо запрятано глубоко в ядре Земли, но архейский океан изобиловал растворённым железом и марганцем и тонкой взвесью этих элементов . Неокисленные заряженные частицы железа и марганца поступали из недр Земли вместе с базальтовой лавой и в растворах, извергаемых подводными вулканами. Они также сносились с поверхности суши. Эти вещества соединялись со свободным кислородом, еле успевавшим вырабатываться фотосинтезирующими бактериями. Навеки вместе сводили кислород и металлосодержащие соединения тоже бактерии. Причём одни бактерии "ковали железо" в условиях настоящего металлургического цеха — при температуре 70 °С. Всего 10 граммов таких бактерий могут произвести целый килограмм магнетита. Другие бактерии окисляли железо, создавая магнетит или гематит (красный железняк) при нормальной (для нас) температуре.
Получившиеся нерастворимые хлопья железистых соединений (или просто ржавчина) ложились на дно тонкими слойками и перекрывались выносимыми с суши мельчайшими кварцевыми зёрнами, что отражало сезонность процесса. Они оседали там, где глубокие бескислородные воды граничат с поверхностными, обогащенными кислородом. Затвердевая, осадок превращался в полосчатые железистые кварциты. Названы эти породы так из-за тонкого (миллиметрового) переслаивания кварца и железосодержащих минералов. Огромные залежи железа накопились в обширных архейских и раннепротерозойских бассейнах, занимавших 100 тысяч и более квадратных километров. Курская магнитная аномалия, мощностью в несколько сотен метров, и другие крупнейшие месторождения железа в значительной степени является плодом бактериальной деятельности. Так будущие поколениях животных получили исходный материал для производства танков, базук, колючей проволоки и прочих предметов первой необходимости в нашем мире. В одном из таких местонахождений (Ганфлинт в Канаде), которому 2 миллиарда лет, прозрачные кварцевые слойки запечатлели странные звёздчатые микроокаменелости — эоастрион (гр. "ранняя звёздочка"). Эоастрион очень похож на современных бактерий, образующих железные и марганцевые окислы. Поскольку кислород уходил на окисление железа (а также марганца и некоторых других металлов), его содержание в воздушной и водной средах долго оставалось неизменно низким. Только с выводом из круговорота основных масс неокисленного железа и марганца уровень кислорода стал повышаться. Это свершилось примерно 2,7 миллиарда лет назад. Итак, сразу после тяжёлых ковровых метеоритных бомбардировок, отгремевших 4,0—3,8 миллиарда лет назад, в условиях не прекращавшихся бурных извержений вулканов и горячих источников, которые исторгали всяческие газы (углекислый, гелий, водород и метан), и высоких давлений Земля наполнилась жизнью. Бактериальные сообщества заселили мелководные океаны (архейские океаны могли на два - три километра быть мельче современных), окружавшие небольшие праматери- ки. Солёность и другие химические особенности вод к концу архея, видимо, не отличались от нынешних. Все живые клетки накапливают ионы калия и освобождаются от ионов натрия. Так в морских водах со временем стал преобладать этот металл. Магнитосфера уже существовала, защищая Землю от солнечного ветра. Продолжительность суток была короче (около 15 часов), а средняя высота прилива была выше (примерно в полтора раза, поскольку Луна обращалась ближе к Земле) . Средне-земные температуры не сильно отличались от нынешних, поскольку более низкая светимость молодого солнца уравновешивалась высоким содержанием в атмосфере метана (совершенно незначительного для современной атмосферы) и водяного пара, создававших теплоизолирующую оболочку. В конце архея (2,9—2,7 миллиарда лет назад), благодаря способности бактериальных сообществ выделять свободный кислород, как побочный продукт своей жизнедеятельности, уровень содержания этого газа в атмосфере повысился. Это событие повлекло за собой появление озона и образование озонового щита. Шит предохранил Землю от чрезмерного солнечного излучения и обеспечил распространение жизни в прибрежные мелководья, поверхностные воды открытого океана и, возможно, на сушу. В истории Земли практически не было времени, когда бы живые организмы не оказывали определяющего влияния на развитие воздушной, жидкой и твёрдой её оболочек.
Глава II. Очень краткое повествование о земной жизни в течение двух миллиардов протерозойских лет (2500—605 миллионов лет назад) "Ублажать публику всевозможными сенсациями". Венедикт Ерофеев Первое оледенение. Виноваты ли в нём водоросли? Полёт одинокой Валькирии над Арктикой. Черви, которые не черви. Морозильная камера В самом конце архея (2,7 миллиарда лет назад) на Земле начались оледенения. Среди явлений, влияющих на земную температуру, выделяется "парниковый эффект" . "Парниковый эффект" можно описать как эффект, который возникает в дачном парнике, если хорошенько поливать помидоры. Испаряясь, молекулы воды поглощают солнечное излучение, проходящее сквозь чисто вымытые стёкла. Водяной пар нагревается, и температура в замкнутой постройке повышается. (Если стёкла долго не мыть, помидоры не поливать и сидеть снаружи парника в шезлонге, то по возвращению бабушки с рынка эффект будет совсем другой). Кроме водяного пара, к парниковым газам относятся метан и углекислый газ. Метан окисляется кислородом. Как только большая часть железа ушла в осадок, содержание кислорода в атмосфере повысилось, и метановый утеплитель был разрушен. Конечно, всё было не так просто. Сульфат-восстанавливающие бактерии начали успешно соперничать с метанообразователями за водород, отвоевав его существенную долю. Содержание метана стало понижаться, а кислорода — повышаться , и потихоньку произошёл полный атмосферный переворот. А до того — сплошной холодный органический туман стелился в прибрежных низинах. Об этом свидетельствует резкий сдвиг в изотопной летописи углерода в сторону более положительных значений, который приходится на слои возрастом 2,7 миллиарда лет. В органических породах, образовавшихся до этого времени содержится исключительно много лёгкого изотопа углерода. Значит, метанокисляющие эубактерий ни в чём себе не отказывали. Источником метана для них служила атмосфера. Но к началу протерозоя (2,5 миллиарда лет назад) он иссяк. Одновременно деятельность бактериальных сообществ вела к росту материков за счёт добавления слоев осадочных пород — в основном известковых строматолитов и железистых кварцитов. Как раз в конце архея земная кора приросла на треть. Почти вся Африка, Северная Америка, Сибирь, Индия, Северный Китай и восточная часть Европы сложились в то время. С увеличением площади материков расширялась и площадь суши. Тут и подключился второй важный фактор, от которого зависит температура планеты — альбедо. По-латыни "альбус" значит белый. Белый цвет, как известно, хорошо отражает солнечные лучи. Доля солнечной энергии, падающей на планету, которая отражается в пространство, и была названа альбедо. Альбедо "светлой"
суши выше, чем у более тёмных океанов. Если бы суши сейчас не существовало, альбедо всей поверхности Земли оказалось бы на 6% ниже, и на планете было теплее . В конце архея был пройден критический рубеж, когда суша расширилась настолько, чтобы повлиять на земное альбедо. Причём, рост суши не только повышал альбедо. На выветривание (разрушение) кремнезёмсодержащих минералов расходовался другой парниковый газ (углекислый). Тогда же кислорода стало достаточно, чтобы разложить почти весь атмосферный метан. Всё это вместе и возвестило начало первой ледниковой эры. Белоснежный покров усилил альбедо ещё больше. Конечно, жителю страны, где зима — подавляющее время года, трудно представить, что в похолоданиях и оледенениях есть хоть что-то хорошее. Меж тем, нахлобученные на земные полюса ледниковые шапки охлаждали океанические воды в высоких широтах. Более плотные холодные воды опускались вниз, и океан перемешивался. Нисходящие течения несли в глубины кислород, а восходящие — поднимали к поверхности соединения азота, фосфора, железа и некоторых других элементов , необходимых для роста организма. В результате такого обмена толща океана становилась всё более пригодной для жизни. В отсутствии охлаждения глубинные океанические воды образуются за счёт погружения рассолов, выпаривающихся в низких широтах. Поскольку плотность рассолов выше, океан перестаёт перемешиваться. Восходящие глубинные воды включили обратный механизм потепления. Вместе с ними к поверхности поступал гидрокарбонат (НСОз~) . Его избыток в поверхностных водах вызывал быструю садку карбонатов. При образовании известняков выделялся углекислый газ. (Современные рифы, например, поставляют в год 245 миллионов тонн этого продукта, что на порядок больше вулканических выбросов). Подъём уровня углекислого газа в атмосфере дополнялся высвобождением метана. Этот газ накапливается на материковых окраинах, скрытых морскими водами, и поступает в атмосферу, когда ледники вбирают воду, обнажая их. Возвращение в атмосферу газов-утеплителей включало "парниковый эффект". И вновь начиналось таяние ледниковых покровов и потепление. По мере перехода Земли в режим самооттаивающего холодильника ухудшалось положение строматолитостроителей. И повышение уровня кислорода, и понижение температуры океана мешали их нормальному развитию. Размеры строматолитовых построек и площадь их распространения стали сокращаться. Но там, где невыносимо жить одним, всегда хорошо устроятся другие. Приближалось время эукариот. Синдром "Фольксвагена" На ранний и начало позднего протерозоя (2,5—1,5 миллиарда лет назад) пришёлся своеобразный застой. Ничего откровенно нового в течение долгих полутора миллиардов лет не народилось. Даже изотопная летопись углерода имеет вид скучной прямой линии без загогулин. Но за кажущейся простотой внешнего образа скрывались бурные преобразования внутреннего содержания. Начиная с 50-х годов XX века в Германии большим спросом пользовалась легковушка марки "Фольксваген", похожая на жука с большими глазками. Внешний вид машины был придуман настолько удачно, что его сохраняли почти сорок лет. При этом и мотор, и внутренняя отделка поменялись полностью, причём не единожды.
Найдя на свалке кузов такого автомобиля без начинки, невозможно определить сделан ли он в начале 50-х или в конце 80-х годов. Примерно тоже можно сказать о бактериях. О них так и говорят: у микробов проявлялся "синдром "Фольксвагена"". Почти не меняясь внешне, они тем не менее полностью изменились внутренне. В исключительно чистых лабораториях потомки одной и той же бактерии становятся иными за несколько тысяч поколений. Поскольку набор генов у них одинарный (а не двойной, как у эукариот), многие изменения сразу видно на лицо. (Или что у них там?) Преображается и поведение. Разнообразие возникает буквально из ничего. Через некоторое время после начала опыта в чашке с культурой бактерий можно увидеть три отдельные группы. Одни останутся лежать на дне. Другие всплывут к поверхности. Третьи распределятся в толще предоставленной им среды. Иными словами, они заполняют все возможные для существования ниши. И в каждой из них новое поколение всё более эффективно потребляет предложенный субстрат. Тоже происходило в раннем протерозое. Большинство сообществ раннего и начала позднего протерозоя состояло из простых внешне форм. Они занимали практически всё свободное пространство на море и, возможно, на суше. Окремнелые остатки живых существ обнаружены более, чем в тысяче местонахождений этого возраста. Среди этих остатков особенно много попадается простых округлых телец до 0,025, реже до 0,04 миллиметра в поперечнике. Встречаются тонкие нити с перегородками, трубки и ветвящиеся нити. Многие из них напоминают современных цианобактерий. На периодически осушаемом мелководье сидели самые заурядные округлые формы золотисто-коричневой окраски от пигмента сци- тонемина, предохранявшего бактерий от ультрафиолетовых лучей. Он настолько устойчив, что не распался до сих пор. Дальше от берега образовывали густые заросли нитчатые цианобактерий, среди которых скользили совсем мелкие, похожие на пружинки, осцилляториевые. Разница между крайним мелководьем и нормально-морскими условиями проявлялась только в увеличении многообразия бактерий по мере улучшения этих самых условий. На глубине разнообразие опять падало . В отдалении от бактериальных сообществ селились первые эукариоты. Тогда это были очень незатейливые шаровидные клетки. Время соперничества с бактериями за лучшие местообитания для них ещё не наступило. Держи карман шире Около 2 миллиардов лет назад всё буквально вывернулось наизнанку. До того времени атмосфера была бескислородной, и этот газ накапливался только в полостях-карманах микробных сплетений. С установлением кислородной атмосферы бактериальные сообщества "вшили" бескислородные карманы, где разлагалось органическое вещество. Впрочем, водная толща океана ещё долго могла быть бескислородной, и на дне, как в Чёрном море, отлагались чёрные пахучие илы. Вблизи этого рубежа в ископаемой летописи начинают попадаться остатки эукариот. Эукариоты — это организмы, обладающие ядром (хранилищем генов), сложными клеточными органеллами (своеобразными органами клетки) и более совершенным способом полового размножения, когда наследственный материал сосредоточен в расходящихся парных хромосомах.
В североамериканских породах возрастом около 2,1 миллиарда лет найдены изгибающиеся, слегка закрученные ленты до полуметра длиной. Скорее всего, это были водоросли. Не исключено, что эукариоты меньших размеров существовали и несколько раньше, но распознать их среди прочих ископаемых остатков совершенно невозможно. Но всё, что превышало в поперечнике 0,75 мм (наибольший размер современных бактерий), скорее всего, было не бактериями. Эукариоты не могли не появиться. Уже устойчивое микробное сообщество, каждый член которого отвечал за строго определённый участок работы, отличалось цельностью. Возможно, что дальнейшее усиление связей между его членами и привело к эукариотам. Отдельные органеллы эукариот очень похожи на некоторых бактерий. Митохондрии (гр. "нить" и "зёрнышко"), которые обеспечивают клетку энергией, близки к пурпурным несерным эубактериям. Поэтому все эукариоты дышат кислородом. Хлоропласты (гр. "зелёный комок") напоминают цианобактерий и зелёных бактерий. Обладающие ими водоросли и высшие растения стали фотосинтетиками. Полное отчуждение, правда, не преодолено до сих пор. Хлоропласты, чтобы чего не вышло, укутаны в несколько оболочек. Жгутики, с помощью которых одноклеточные эукариоты двигаются, могли возникнуть при захвате спирохет или спироплазм (скрученных, способных к вращательному движению бактерий). Если у одноклеточных жгутики являются движителем (иногда органами захвата), то жизнь многоклеточных без них и представить трудно. На основе жгутика развились все органы чувств и передачи информации: вкусовые и обонятельные волоски, органы равновесия и нервные пучки. Правильно распределить хромосомы при делении клетки тоже помогают преобразованные жгутики (отсюда и название такого деления — "митоз" — гр. "нить"). Митоз появился у одноклеточных эукариот, а на его основе возник мейоз (гр. "убывание"). Ядра большинства животных и растений содержат два почти одинаковых набора хромосом (до миллиона генов в наборе). При митотическом делении каждая дочерняя клетка получает в наследство по одной копии любой родительской хромосомы, а при мейозе — половину родительских хромосом. Для обретения двойного набора ей приходится слиться (вступить в половые отношения) с другой клеткой. Оплодотворение обеспечивает обмен участками хромосом. В итоге наследство прирастает за счёт состояния каждого из родителей. Под лозунгом "больше генов, хороших и разных" эукариоты смело приступили к половому размножению. Обмен генами позволил им эволюционировать намного быстрее, в то же время, сохраняя всё наилучшие от своих предков. (Те, кто пытался сохранить всё самое худшее, просто вымер). Предоставить жилплощадь для поселения всех бактериальных соседей могли маг- ниточувствительные бактерии, о которых говорилось в предыдущей главе. Клетка у них весьма просторная — целых 0,015 миллиметра. Она окружена двухслойной жировой оболочкой — будущий клеточный скелет. Но главное — она хорошо принимает гостей (не переваривает их сразу). Кроме того, запас железа, необходимого для удвоения хромосом и деления клетки, уже имеется. Воедино могли сойтись протеобактерии, преобразующие органику в водород и двуокись углерода и нуждающиеся в этих газах метанообразующие архебактерии. (Так что всё ныне живущее на Земле, включая людей, представляет собой лишь колонии бактерий).
Ещё в V веке до нашей эры греческий философ Эмпедокл предположил, что носы, ноги, руки жили сначала отдельно друг от друга. Они встретились, срослись, и превратились в животных. Так и разные ветви бактерий образовали тесные сообщества, из которых могли выйти готовые эукариотные организмы. Для того, чтобы заставить различные, прежде обособленные бактерии жить вместе потребовался лишь механизм управления разрозненной наследственной информацией. Мир эукариот действительно представлял собой мир прокариот наоборот. Прокариоты, не отличаясь внешне, биохимически были очень разнородны. Они потребляют что угодно, будь то сероводород, азот или метан. Эукариоты ограничились только фотосинтезом и поеданием уже готовых запасом питательного вещества в виде других организмов. Но внешние различия у них — просто поразительны. Достаточно назвать трёх обычных эукариот, чтобы убедиться в этом: например, мухомор , таракан и человек1. Способность управлять органеллами различного происхождения пригодилась при становлении многоклеточных. С помощью многоклеточности, эукариоты преодолели тесные размерные пределы. Они разменяли маленькую однокомнатную квартиру (пусть и со всеми удобствами) на замки и виллы любой, сколь угодно сложной архитектуры и почти неограниченного объёма. У многоклеточных стало возможным распределение клеток по слоям и зарождение тканей. Одни клетки при этом оказались всегда крайними и образовали покровную ткань. Другим, что очутились внутри, осталось одно — размножаться дальше. До некоторой степени многокле- точность была вызвана именно зовом пола. Многоклеточные организмы — в большинстве крупнее одноклеточных, а большого партнёра видно издалека. (Несколько сантиметров в длину или в поперечнике — таков предел и удел самостоятельных одноклеточных организмов). Не случайно многоклеточность возникала постоянно и неоднократно: у красных, бурых и жёлто-зелёных водорослей, в нескольких группах водорослей зелёных и, конечно, у животных и тоже, может быть, не единожды. Но главное — со временем многоклеточные организмы становились всё менее зависимы от капризов среды. Полёт валькирии С середины протерозоя (1,2 миллиарда лет назад) разнообразие эукариот стало постепенно возрастать. Около 800 миллионов лет назад господство микробов, длившееся почти 3 миллиарда лет, окончилось. Начиная с этого времени, возникли все основные группы водорослей и простейших, а также предки грибов и животных . В окаменелостях древнейших многоклеточных распознаются красные водоросли. Они совершенно не отличимы от современных водорослей, хотя извлечены из отложений возрастом 1,2 миллиарда лет Арктической Канады. Каждый, кто побывал на море, видел камни, покрытые красными известковыми наростами. Кому посчастливилось загорать на тёплом южном взморье, мог подобрать изящные пурпурные веточки, похожие на мелкие кораллы. Так выглядят кораллиновые красные водоросли. Их необизвествлённые родственники не столь ярки и приметны — просто невзрачные ворсинки. Но именно такие ворсинки покрыли дно морей 1,2 миллиарда лет назад. Несмотря на свои размеры (меньше 2 миллиметров высотой), эти мало- рослики создали новый, трёхмерный мир, недоступный плоским бактериальным ма- На самом деле это структурные образования, состоящие из эукариотных клеток. Различия между самими клетками гораздо меньше.
там. Это был мир со своими течениями и осадками. Со временем в нём поселились другие многоклеточные. Собственно багрянки являются древнейшими организмами с клетками разного типа и с чередованием полового и бесполого поколений (половым циклом). Впрочем, половой цикл и предопределил возникновение многоклеточ- ности — ведь специальные половые клетки уже отличались от всех прочих. На Аляске встречаются различные кремнёвые окаменелости, которым 800 миллионов лет. Некоторые из них напоминают чешуйки золотистых и диатомовых водорослей, другие — спикулы (скелетные иголки) губок. Можно считать, что эти спику- лы и являются древнейшими, не считая биомаркеров, остатками многоклеточных животных. В одновозрастных породах северо-западной Канады найдены обызвеств- лённые цианобактерий, бурые водоросли, и непонятные органические чехлы и плёнки. Эти чехлы получили название в честь мест, где они впервые найдены: чуарии — от Чуара в Северной Америке, лонгфенгшании — от китайской Лонфенша- ни, а дальтении — от норвежского Дала и греческого корня "тения" (лента). Чуарии представляли собой крупные (до полусантиметра в поперечнике) морщинистые шаровидные оболочки колониальных прокариот или эукариот. Лонгфенгшании напоминали округло-удлинённый листок на черенке. Ветвящиеся ленты дальтении дорастали до 6 сантиметров. Самые необычные окаменелости того времени скрывались подо льдами Шпицбергена в породах возрастом 750 миллионов лет. Там обнаружены остатки весьма продвинутых зелёных водорослей. Вместе с ними встречаются меланокирилл и валькирии. Странный меланокирилл (гр. "чёрный господин") был похож на вазу 2—3 миллиметра высотой, то есть был намного крупнее многих своих современников. Сидели в таких вазочках-раковинках древнейшие амёбы. Несмотря на мелкие размеры, эти амёбы были крупнейшими хищниками своего времени, а, возможно, и первыми плотоядными животными вообще. Валькирии могут быть остатками более сложных многоклеточных. У миллиметровых (в длину) валькирий, похожих на червячков с отростками, различается шесть типов клеток. Валькириями эти существа были названы потому, что найдены они на Шпицбергене. Где-то около этого полярного архипелага скандинавские мифы помещали вальхаллу, куда небесные девы- валькирии (выбирающие убитых) уносили души храбрейших из павших воинов. Может быть валькирии (ископаемые организмы, а не мифические девы) и были первыми существами, которые убирали поле "боя", то есть были разрушителями- падалеедами? Из одновозрастных отложений Китая известны плоские кольчатые ленты по 2—3 сантиметра длиной. Некоторые из них имеют отверстие на одном из концов червеобразного тела или вытянутый хоботок. Они были описаны как предки настоящих кольчатых червей, но не исключена и водорослевая природа этих организмов. А вот кольчатая пармия с Тиманского кряжа России, один конец которой заужен, а другой — уплощён, могла действительно быть очень простеньким червём. В тот же промежуток времени началась поступательная эволюция эукариотного планктона (гр. "блуждающий") — населения водной толщи, которое в основном состояло из акритарх (гр. "неизвестного происхождения"). Точная принадлежность акритарх, как явствует из их названия, не ясна. Это микроскопические (меньше миллиметра в поперечнике) плотные органикостенные оболочки со всякими шипами, выростами и оторочками. При жизни форма акритарх приближалась к шару. Большинство из них, наверное, были вымершими одноклеточными водорослями, родственниками динофлагеллят (гр. "вертящие жгутиком").
Природу акритарх помогли понять биомаркеры. Сначала выяснилось, что очень характерные биомаркеры остаются от динофлагеллят. Они обильны в мезозойских и кайнозойских породах (начиная с 248 миллионов лет) — в слоях с остатками этих водорослей. Хотя более древние динофлагелляты почти не известны, такие же биомаркеры широко распространены в верхнепротерозойских и нижнепалеозойских отложениях. Они встречаются там, где очень много акритарх. Более того, эти биомаркеры были извлечены прямо из акритарховых оболочек, что оказалось весьма непростой задачей. Ведь даже шарики в одну десятую часть миллиметра выглядят в мире акритарх гигантами, а толщина оболочки измеряется тысячными долями миллиметра. Появились акритархи около 1,8 миллиарда лет назад, но стали обычны с 1,6 миллиарда лет назад. Первые из них напоминали очень мелкие простенькие гладкие шарики от 0,02 до 0,1 миллиметра размером. Между 1,1 и 0,8 миллиарда лет назад их многообразие и обилие возросли. Среди них завелись огромные (для этих организмов) формы — 0,2 миллиметра и более в диаметре. Очень большие акритархи, скорее всего, были сидячими на дне организмами. Снежный ком, вертящийся на боку Избыток водорослевого планктона привёл к печальным последствиям для донных бактериальных сообществ, в том числе строматолитовых. Бурное развитие водорослей в толще воды ухудшало освещённость морского дна. Зависимые от светового потока строматолиты не могли сдвинуться на мелководье, где планктон не так многочислен. Туда их не выпускали водорослевые луга. Водоросли, растущие гораздо быстрее микробных строматолитов, заняли их основные местообитания. Обилие донных бактериальных сообществ пошло на убыль. Но водорослевый планктон не только застил свет строматолитам. Ранее уже говорилось об альбедо земной поверхности и его значении для климата. Даже "цветение" планктона повышает альбедо водной поверхности, поскольку облака небесные прямо связаны с облачками планктона. Планктонные водоросли накапливают особое соединение серы — диметилсульфид. Водорослям он необходим для поддержания давления внутри клетки. Это вещество выделяется наружу при их выедании. Формула его похожа на причёску с шестью косичками. Как и положено косичкам, они так и напрашиваются, чтобы за них подёргали или что-нибудь к ним прицепили. Так и происходит. При поступлении в атмосферу это ломкое соединение распадается и, растворяясь в воде, превращается в кислотные капли. Капли служат затравкой для сгущения водяного пара. А чем кучнее облачность, тем меньше тепла получает планета. Ведь облачный покров отражает тепло обратно. Причём продукты распада водорослевых соединений не только повышают яркость облаков, но и продлевают время их существования. И всё это усиливает альбедо. А на холоде водоросли ещё больше выделяют своего любимого вещества. Самое удивительное в этой заоблачной истории, что при пониженной температуре снаружи проще поддерживать давление внутри (клетки). Получается, что водоросли как бы устанавливают погоду по своему вкусу. Из современных планктонных водорослей основными поставщиками серных соединения являются динофлагелляты, кокколитофориды и диатомовые (о них речь впереди, рисунок ниже). Они производят до 50 тонн серы ежегодно. Общее падение температуры в позднем протерозое было вызвано не только уплотнением облачного покрова. Начавшийся рост ледников всё больше обнажал сушу
для выветривания. Среди выносимых с суши элементов были соединения железа, фосфора и других важных для водорослей веществ. Возрастала продуктивность водорослевого планктона. Соединения фосфора высвобождались из органических веществ прямо в верхних слоях океана. Они использовались новыми поколениями планктона. Повысились темпы захоронения органического вещества. Поскольку на его изготовление требуется углекислый газ, происходило общее ослабление "парникового эффекта". (Для последнего, четвертичного ледникового периода отмечается прямая связь высокой продуктивности планктонных водорослей с низким содержанием в атмосфере углекислого газа). Холодало. Разлагавшие органику сероводоро- добразующие бактерии перестали поспевать за поступлениями органического вещества. Распад цепи из производителей, потребителей и разрушителей привёл к выбросу кислорода. Уровень его содержания в атмосфере подскочил до 10—15%, считая от нынешнего. Так планктонные шарики основательно вмешались в климатические дела земного шара. В конце протерозоя (750—550 миллионов лет назад) его бросало из жара в холод с преобладанием последнего. Особенно обширное оледенение пришлось на начало вендского периода, которым заканчивался протерозой. В 1982 году мне удалось посетить родину вендов и вендского периода — Подо- лию, что на Украине. Случилось так, что американскому физику Джозефу Киршвин- ку, который разгадал выкрутасы пчелиных плясок, раскопал остатки древнейших магниточувствительных бактерий и нашёл кусочки магнетита в мозге голубей, китов и человека, приспичило узнать, где в вендском периоде (605 - 550 миллионов лет назад) находилась Балтия. Сейчас такого материка нет. Он превратился в восточную часть Европы. У каждого континента, как и у любого человека, есть своя судьба. Он нарождается, растёт, постоянно двигается и сталкивается с другими. Примером служит судьба немецкого метеоролога Альфреда Вегенера. В двадцатые годы XX века он окончательно выбил почву из-под ног обывателей, сказав, что материки движутся (мобильны). Всякая гипотеза переживает два периода, прежде чем занять подобающее ей место в арсенале науки (или на пыльных книжных полках в забытом библиотечном подвале). Сначала она и её создатель (при жизни) считаются сумасшедшими и недостойными даже критических упоминаний на страницах истинно научных произведений. Затем он (чаще посмертно) признается гениальным, а она привлекается для объяснения вся и всего. Нетрудно догадаться, что основная причина глубокой неприязни и почти сорокалетнего забвения гипотезы Вегенера крылась в посягательстве метеоролога на основы геологической науки. В шестидесятые годы, учёные наконец-то смогли всерьёз взяться за исследование океанического дна. Выяснилось, что Вегенер был прав, и материки двигались и двигаются. До нас осознание сего факта почти подпольно добралось ещё лет на десять позже. В конце семидесятых, когда весь мир перешел на мобилистские карты прошлого, будущие геологи рисовали Землю давних времен по канонам современной географии (фиксистские реконструкции). Лишь в выпускной год, в курсе под стыдливым названием "история геологических наук", профессор Виктор Ев-
геньевич Хаин объяснял, чем же живёт современная геология. Поэтому исходя из постулата, что главное для студента — знать точку зрения преподавателя, был сделан вывод, что нужно быть "фиксистом", но с лёгкой примесью "мобилизма". Итак, в чём суть мобилизма? Посередине океанов проходят огромные хребты, названные срединно-океаническими. Вдоль хребтов тянутся рифтовые долины. (Рифт, по-английски — расщелина). Изливающаяся по обе стороны расщелины лава застывает гигантскими полосами, самые древние из которых находятся от неё дальше всех. Рифтовые долины являются теми линиями напряжения, по которым происходит сначала раскол, а потом и раздвиг плит, а с ними и материков. Расходясь, они сталкиваются с другими. Например, Азия состоит из нескольких, ведущих каждая свой образ жизни плит: Индия до сих пор не успокоилась и упрямо прёт в прочую Азию, от чего у той лезут вверх Гималаи. Если бы Христофор Колумб отплыл на поиски страны пряностей в наши дни, ему пришлось бы преодолеть на пять-десять метров больше, прежде чем его вперёдсмотрящий заметил бы острова Америки. Примерно на столько же увеличился бы путь Тура Хейердала на "Кон-Тики". Со времени путешествия Колумба прошло пятьсот лет, а Хейердал ставил свой опыт всего пятьдесят лет назад2, но Срединно-Тихоокеанский рифт раздвигается быстрее Срединно-Атлантического. Чтобы узнать, где раньше находился тот или иной материк, существует на первый взгляд немудрёный, но технически сложный метод. Наша планета представляет собой огромный магнит с полюсами, положение которых не сильно отличается от положения полюсов географических. Продолговатые частички глины, постоянно оседающие на морское дно, тоже являются магнитами, но маленькими. Словно магнитная стрелка, колебания которой остановлены нажимом пальца, каждая частичка застывает в породе, указывая направление на магнитный (а, значит, и географический) полюс в тот момент, когда осадок стал твёрдой породой. Используя ископаемые "компасы", из одного возрастного среза на нескольких континентах, можно установить, где был каждый материк в искомое время. На поиски глиняных компасов мы с Джо и отправились из Москвы в Подолию, где за два дня, согласно строгим, но как всегда бессмысленным указаниям чиновников , предстояло сделать то, на что требуется не меньше двух недель. Просверлить несколько сотен дырок в породах и замерить углы залегания самих пород и полученных дырок, чтобы не перепутать нынешний Северный полюс с "ископаемым". Наверное, вдоволь наглядевшись на страну, где всё происходит вопреки здравому смыслу, профессор Калифорнийского технологического института и придумал "снежок". Иначе говоря — земной мир, где материки и ледники расползаются по обе стороны от экватора. На полюсах же царила чуть ли не тропическая жара. Во времена всех более поздних оледенений крупные массы материков располагались как раз наоборот — вблизи полюсов. Чтобы обосновать эту "противоестественную" модель, и нужно было доказать, что материки действительно находились вблизи экватора. 2 И который не имел особого смысла, потому что 50-70 или даже 10 тысяч лет назад (Северная Америка имела перешеек с Азией, а до Британии можно было дойти пешком), океан был другим. Было оледенение, уровень океана был меньше, могли быть дополнительные острова, и первобытный человек мог добраться до Южной Америки постепенно, от острова к острову.
Верно ли это предположение для всех материков — не ясно до сих пор. Но как ни крути куски континентов на глобусе, хоть несколько из них всё равно оказываются между Северным и Южным тропиками, а вместе с ними и вендские ледниковые отложения. Этой странности пришлось искать объяснение. Даже самый обширный ледниковый покров не спускается с полюса ниже широты 25 градусов. Полярной шапки, напяленной по самый Гондурас, быть не может. В том смысле, что если такое произошло бы, то осталась бы Земля снежным комком навсегда. Про ледяное кольцо, подобное кольцам Сатурна, которое затеняло бы экваториальный пояс, лучше сразу забыть. Объяснить, куда оно делось — невозможно. Но если бы плоскость экватора Земли была завалена на 55 или более градусов по отношению к плоскости её орбиты, то каждый из полюсов получал бы больше солнечного тепла, чем экваториальная область. (Далёкий Уран летает по своей орбите, лёжа на боку; а его ось вращения всего на 8 градусов не совпадает с плоскостью орбиты). Снег, выпавший в этой области, благодаря своей белизне повышал бы альбедо, то есть белизну планетную. И снежные покровы в конце концов стали бы ледниками. Следы морозного расклинивания вендских пород остались в Южной Австралии, Шотландии и Мавритании, которые находились неподалёку от экватора. В своём нынешнем положение, с осью почти перпендикулярной плоскости орбиты, Земля оказалась бы в конце вендского периода, когда масса материков стремительно переехала из низких широт к Южному полюсу. Согласно другой версии, слишком высокое содержание углекислого газа в атмосфере превратило её из теплоизолирующей оболочки в теплонепроницаемую для слабых лучей солнца. Дальше — снег — альбедо — и тому подобное (см. выше). Протерозой длился два миллиарда лет. За это время прекратился круговорот железа, ушедшего в железистые кварциты. Постепенный рост материков и разрушение метановой оболочки привели к началу оледенений, а оледенения — к перемешиванию океанических вод, обогащению их кислородом и выносу питательных веществ . С расширением пространства доступного жизни началось преобразование самих организмов, и около одного миллиарда лет назад микробные сообщества были разбавлены эукариотами. Кислородная атмосфера вкупе с похолоданием положили конец господству бактериальных сообществ, но дали начало поступательному развитию эукариот, которым требовалось больше энергии. Бактерии, постоянно меняли условия среды. Но преобразуя их, они сделали планету пригодной для эукариот и, особенно, многоклеточных животных. Последние отныне получили практически неизменные условия, в рамках которых лишь замещали друг друга, постоянно прибавляя в разнообразии и сноровке. К самому концу протерозоя эукариоты существенно потеснили прокариот. Бурный рост водорослевого планктона отрицательно повлиял на освещённость морского дна и климат. Обилие микробных строматолитов в морских отложениях сократилось. На их место пришли водорослевые луга, среди которых поползли первые многоклеточные животные.
Глава дополнительная. Задолго до всех (свыше 3900 миллионов лет назад) «...а получившееся месиво взболтали угольной лопатой, скособоченной влево, и кочергой, скрученной в ту же сторону, в результате чего белки всех будущих земных существ стали ЛЕВОвращающими...» Станислав Лем Ученые продолжают спорить, кого же Бог создал по своему образу и подобию: обезьяну или бактерию? Первичного бульона на всех не хватило. Была ли жизнь на Марсе? А на Земле? Сколько инопланетных бактерий и гуманоидов ежегодно посещает Землю? Холодный душ и горячие источники. От жизни камней до окаменелостей. Низы и верхи В средние века споры о происхождении жизни полыхали (в переносном, а часто и в прямом для проигравшей стороны смысле) по поводу ее источника: Бог или дьявол? Иными словами, сверху жизнь спущена на Землю или исторгнута из раскалённого подземного ада? Как ни странно, если отбросить благодатное и инфернальное начала, в начале XXI века смысл разногласий остался прежним: занесена жизнь на Землю из космоса или имеет вполне земное происхождение, но зародилась в горячих источниках, бьющих из нутра планеты? При возрасте Земли около 4,5—4,6 миллиардов лет древнейшие осадочные породы, которым 3,86 миллиарда лет уже несут в себе следы жизни. А 3,5 миллиарда лет на планете уже существовала не просто жизнь, а целые сообщества организмов, хотя состояли они из одних бактерий. Получается, что для преобразования химической преджизни в биологическую жизнь понадобилось каких-то полтора миллиарда лет. Не маловато ли получается? Залётные пришельцы Попытки разрешить проблему нехватки рабочего времени увели исследователей за пределы планеты. Правда, это скорее уход от проблемы происхождения жизни, чем подход к ней. В конце концов, а откуда она взялась там? Тем не менее, уже в начале XX века, когда не подозревали, насколько стара и сложна (даже на молекулярном уровне) земная жизнь, шведский физхимик Сванте Аррениус заговорил о «панспермии». Он предположил, что вся вселенная просто напичкана семенами жизни. Семена могли быть размером с мельчайшие (при том ещё не самые мелкие) организмы, то есть — около микрометра (1 микрометр = 0,001 миллиметра). Этот размер вписывается в длину волн, излучаемых звёздами-карликами, и семена могли бы переноситься давлением света. Полвека спустя английский биофизик Фрэнсис Крик расшифровал строение молекулы ДНК (дезоксирибонуклеиновой кислоты), из которой состоят хромосомы. Убедившись насколько всё сложно в казалось бы самых простых жизненных проявлениях, он в сердцах высказался о «панспермии», направленной специальной миссией. «Направленная панспермия» саморазвилась в народном сознании в идею «при-
шельцев». Особенно бурно идея зажила в последние лет тридцать. Любители зелёных человечков готовы принять за своих обожаемых кого и что угодно. Манекены, на которых испытывали новый парашют: в уфологических изданиях они проходят как задохнувшиеся воздухом пришельцы. Космические аппараты, правда земного происхождения («Вояджер-Марс»), остатки монгольфьеров и тому подобное — всё выдаётся за дело рук (или щупалец?) любимых инопланетян. Создатель «Парка юрского периода» Майкл Крайтон в своём не столь известном романе «Штамм "Андромеда"» рассчитал вероятность соприкосновения землян с инопланетными формами жизни различного уровня сложности. На каждого припарковавшего свою тарелку в неположенном месте гуманоида мы должны встречать 39 сложных многоклеточных с развитым мозгом (например, лемовских курдлей с Эн- ции), 70 многоклеточных с примитивной нервной системой (вроде марсианских пиявок братьев Стругацких), 970 низших многоклеточных, 3920 простейших и так далее. А теперь, читатель, приготовьтесь узнать суровую правду. Приготовились? Вспомните, сколько людей за последнее время воочию видели гуманоидов? Помножьте теперь это число на количество всех других инопланетных форм жизни. Теперь вы поняли, что на Земле уже давно нет ничего своего. Ну что, скажите, земного во всех этих грибах и политиках? Нас, настоящих землян, осталось только двое. Причём в себе-то я не сомневаюсь. Ну, а если всерьёз попросить отозваться братьев по разуму или хотя бы сестёр по самовоспризводству? (Воспроизведение себе подобных всё-таки пока считается основным отличием материи живой от неживой). Последние годы принесли массу открытий инопланетного микромира. Метеориты, особенно углистые хондриты, действительно содержат самые разные органические вещества — жиры, углеводы и органические кислоты, в том числе аминокислоты. (Последние служат основным строительным материалом для белков). В кометах тоже обнаружены предшественники сложных органических молекул. Межзвёздная пыль — и та на три четверти состоит из органических молекул. Среди них попадаются такие сложные соединения, как этиловый спирт. (Причём количество последнего превышает массу Земли). Замёрзшие в межзвёздном пространстве микроскопические пылинки несут на своей поверхности половину рассеянных там углерод- и азотсодержащих соединений, а также кислорода. Облучаясь ультрафиолетом, они превращаются в настоящие цеха по сборке органических соединений из многократно повторяющихся молекулярных блоков. Из таких блоков и строится жизнь. Правда, на внеземных объектах органические вещества перемешаны несколько по другому. Они являют собой смесь из равных долей правых и левых изомеров. (Изомерами называют химические соединения, одинаковые по составу и молекулярной массе, но различающиеся по положению образующих их атомов в пространстве) . Тогда как все молекулы живых организмов хирально чисты. Хотя «хира» по- гречески значит рука, хиральная чистота к обязательному помыву рук перед едой отношения не и имеет. А вот перед изучением метеоритов — руки мыть обязательно. Иначе не только хиральная чистота нарушится, но и грибы на этих метеоритах вырастут. И, к сожалению, даже не белые. Занести земные микрооорганизмы на упавшие «звёздные камни» намного проще, чем наоборот. Особенно если куски метеоритов попылились энное количество лет на полках и похватались разными немытыми руками. Вот и кишат вполне земные бактерии на журнальных и газетных фотографиях, выдаваемые за «инопланетные существа». Одна из проблем «хиральной чистоты» как раз и заключается в том, что межпланетная органика к земной жизни прямого отношения не имеет. Поскольку на
Земле все основные органические соединения пребывает только в одной из двух зеркально противоположных ипостасей. Вроде Оли или Яло из «Королевства кривых зеркал», но на молекулярном уровне. Все белки состоят из левовращающих аминокислот . Главные носители наследственной информации — нуклеиновые кислоты — образованы исключительно правовращающими сахарами. Лево- и правовращение означает влияние растворов этих веществ на прохождение сквозь них световых волн. А растворы ведут себя так, потому что все изомеры в них одинаковые. Если растворить метеоритные изомеры, то пропущенный пучок света пройдёт сквозь раствор без изменений. Ведь левые и правые изомеры там представлены поровну, и жидкость окажется «хирально грязной». Поэтому присутствие даже очень сложных органических молекул среди метеоритного вещества само по себе ещё ни о чём не говорит. Дождь метеоритов, наполненных внеземными микроорганизмами, на Землю всё- таки выпал. Первыми, следуя по пути, намеченному фантастической литературой, прибыли предки Аэлиты и уэллсовских осьминогов, прихватив заодно куски марсианской породы. Со времени открытия на Марсе «каналов» итальянским астрономом Джованни Скиапарелли (в конце 1870-х годов), на Земле с нетерпением ждали марсиан. Американский бизнесмен Персивал Лауелл несколько прямолинейно понял смысл итальянского слова «канали» (протоки) и основал обсерваторию по наблюдению за прокладкой марсианских каналов. По-видимому, в надежде стать первым американским подрядчиком, а, может быть, и в долю войти. В 1922 и 1924 годах американское правительство просило умолкнуть все радиостанции, чтобы услышать радиосигналы с Марса во время его сближения с Землёй. Марсиане голос не подали. Полёты советских «Марсов», а затем и американских «Викингов» окончательно рассеяли мечты о марсианских красавицах или хотя бы об осьминогоподобных завоевателях, которых мы бы всё равно героически победили. (Не мы — так земные бактерии, к которым у них не могло быть иммунитета. Гибель марсиан от инфекции изображена Гербертом Уэллсом очень правдоподобно). Но в 1979—84 годах в Антарктиде нашли 12 марсианских кусочков. Их происхождение установлено по газовым пузырькам, навсегда застывшим в остекленевших включениях. По составу газ оказался идентичен атмосфере красной планеты, которую изучал присевший на Марс «Викинг». Предполагается, что осколки были выброшены оттуда ударом крупного метеорита или астероида 16 миллионов лет назад и свалились на Землю 17 тысяч лет назад. Результаты исследования марсианских реликвий показали, что порода содержит стабильные изотопы углерода в соотношении, заставляющем подозревать существование на Марсе (конечно, несколько миллиардов лет назад) фотосинтеза. Затем, хотя и не вполне убедительно, предъявили на опознание останки тех, кто этот фотосинтез осуществлял. В общем и целом, перенос бактерий и даже более высокоорганизованных существ с одной планеты на другую с помощью метеоритов и комет не так уж невероятен. Бактерии хорошо выдерживают очень высокие и низкие температуры, а также радиацию. Более того, даже миллионы нарушений в генах, произошедшие под влиянием ядерного излучения, у них залечиваются. На Луне бактерии со станции «Сер- вейор-3» выжили в течение 3 лет. (Кстати, высадка бактерий на Луне, которая целиком была делом рук человеческих, в бульварной литературе тоже преобразилась в свидетельство повсеместного существования жизни). На «Аполлоне-11» они в глубоком вакууме прекрасно выдержали скачки температуры от -124 до +59° С. В искусственно созданных атмосферах Венеры (чистый углекислый газ, давление в 50 атмосфер и температура +50° С) и Юпитера (давление в 102 атмосферы и температура +20° С) бактерии тоже гибнуть не пожелали. Вот только неизвестно,
удалось ли бактериям хоть когда-нибудь стать космонавтами не по воле человека . Могла ли жизнь на других планетах появиться независимо от нас? Трещины на поверхности Венеры намекают на существование горячих источников, хотя бы в прошлом. Метеорологические данные «Марс-Глобал-Сервейора» и «Марс- Патфайндера» согласуются со снимками посадочного модуля «Викинга», показавшими на грунте красной планеты лёд и снег. Согласно расчётам, грунтовой влаги там может быть не меньше, чем в земных почвах. Глубокие каньоны, прорезающие поверхность соседней планеты, могли быть оставлены водными потоками силой в несколько тысяч Енисеев. Когда-то они несли свои бурные воды в обширный северный океан. Его береговая линия отчётливо проступает до сих пор. На дне сохранились остатки морских солей. Может быть, где-то под поверхностью планеты ещё есть живительная влага. Предполагается, что в середине «марсианских хроник» эта планета была даже более тёплой и влажной, чем нынешняя Земля. Но бессмертный вопрос: «Есть ли жизнь на Марсе?» — пока остаётся без ответа3. И всё дальше к окраинам галактики стремятся космические зонды, туда, где вокруг огромных небесных тел обращаются спутники, по размерам не уступающие Земле. На Титане, спутнике Сатурна, с азотно-метановой атмосферой, богатой сложными углеводами, и с метаново-этановым океаном, вполне хватило бы материала для создания чего-нибудь жизнеутверждающего. Вулканическая активность, вызываемая на Европе, спутнике Юпитера, притяжением планеты-хозяина, может поддерживать под её ледяным панцирем жизнь, подобную беспросветной жизни на дне земных океанов. Однако и выживаемость простых организмов в космическом пространстве, и возможность зарождения примитивных существ на других планетах отнюдь не свидетельствуют в пользу переноса жизни в готовом виде с планеты на планету. Такое путешествие предполагает не только удачный перелёт, но и мягкую посадку с последующим закреплением на чужой во всех отношениях планете. Очевидно, что последние два этапа переселения наименее осуществимы. Более вероятной представляется внеземная сборка некоторых органических молекул, которая в условиях космоса может проходить довольно интенсивно. Перенос их в готовом виде на Землю ускорил бы возникновение сложных составляющих уже на самой Земле. Необходимое примечание: Знаете ли Вы, почему пришельцев всегда рисуют склизкими и зелёными? Потому, что, не имея иммунитета ни к какой земной заразе, они постоянно страдают от насморка и ходят в соплях. К сожалению (или счастью?), высадка на нашей планете неземного разума или хотя бы бактерий невозможна со времени появления на Земле жизни. Она мгновенно разделается с любой инородной органикой. Горячие точки Поэтому приземлим наши фантазии и опустимся глубоко на дно. Там, в океанических рифтовых долинах раскалённая лава (с температурой около 1200 °С) поднимается из земных недр к поверхности. Ей навстречу до 15-километровой глубины по трещинам сочится морская вода и выносится обратно, уже будучи нагретой и обогащенной соединениями металлов и серы. Места, где изливаются горячие 3 Возможна она была там, когда Солнце светило в треть современного. Если оно еще увеличит светимость, Землю постигнет участь Марса и настанет очередь Венеры.
растворы, называются гидротермами. Благодаря тёмным «фонтанам» горячей воды со взвесью сернистого железа, они известны как «чёрные курильщики». «Гидрос» и «терма» — греческие слова, обозначающие воду и тёплый источник, соответственно. У нас эти слова «укоренились» в гидроэлектростанциях и термах (римских банях). Известное латинское изречение «Иди ты в терму!» перешло в русский язык как «Иди ты в баню!» Подобно тому как римская терма подразделялась на фригидариум (холодную баню), тепидариум (тёплую) и калдариум (горячую) , вокруг гидротерм существуют разные по степени нагрева зоны. Они населены организмами, приспособленными к различным температурным условиям. Объединяет этих существ общий источник питания (раствор гидротермы) и чувствительность к теплу. Например, креветки, плавающие вблизи гидротермы, воспринимают только инфракрасные волны. Если порыв придонного течения случайно оторвёт их от источника пищи, они не погибнут, а найдут ближайшую излучающую тепло, и, следовательно, инфракрасные лучи, гидротерму. (Но яркая вспышка, установленная на подводной фотокамере, ослепляет эти существа навсегда. Они теряют правильную ориентацию и гибнут). Открытие в середине семидесятых годов XX века на огромных глубинах двустворок величиной с хороший башмак, сплетений из двухметровых трубчатых червей и креветочных стай вначале встретили с недоверием. Считалось, что отсутствие света, запредельное давление и голодный паёк — не лучшие условия для существования животных. Оказалось, что необычные сообщества в отсутствии света используют химическую энергию. Основу сообществ составляют ни фотосинтезирующие бактерии и водоросли, а хемосинтезирующие серные бактерии. Они производят органические вещества за счёт энергии, выделяемой при окислении соединений серы. Симбиоз с такими бактериями не только помог животным освоить глубоко неприветливые условия. Они хорошо прибавляют в весе и набирают по 10 килограммов на квадратный метр дна. Разумеется, принялись искать следы сходных источников жизни в ископаемой летописи и скоро нашли, причём достаточно древние. Почти сразу возникла мысль: а не могли ли подобные источники энергии породить жизнь на Земле? «Не могли», — сказали свое веское слово скептики, пряча за расчёты температур свои скептические ухмылки. Слишком высоки температуры: сложные органические вещества будут разлагаться, так и не слившись во что- нибудь более сложное. «Могут и породят!» — ответили практики, одним из которых был немецкий юрист Гюнтер Вехтершойзер, и подтвердили своё слово практическим делом. А дело в том, что вблизи умеренно горячих источников выпадает сернистое железо (серный колчедан). Его кристаллы обеспечивают значительную, по меркам микромира, положительно заряженную поверхность. Органические молекулы, наоборот, отягощены отрицательно заряженными группами. Их, конечно, притягивает к поверхности кристаллов. Получается минеральное зерно с органической оболочкой. Оболочка зерна становится препятствием, через которые одни вещества проходят только снаружи внутрь, а другие — исключительно в обратном направлении. Происходит обмен веществ. Чем не клетка? Если и не живая, то полуживая: ей осталось научиться расти и размножаться. Серно-железные похожие на пузырьки «клетки» удалось искусственно вырастить в лаборатории. (Надо отдать должное исследователям, которые работали в жутких условиях — летучие соединения серы благовониями не назовёшь). Пузырьки растут благодаря инфляции. (То есть надуванию — не правда ли, понятный смысл знакомого слова?) Инфляцию вызывает давление растворов, сосредоточенных внутри пу-
зырька, которое превышает наружное давление. Вот Вам и рост! Со временем пузырёк, чтобы не лопнуть, отделяет часть накопленных им соединений в «дочерний» пузырёк. А вот — и «размножение почкованием»! Соединения серы поныне служат важным источником энергии в клетках. Может, это дань далёкому прошлому, когда «семена» жизни вызревали вблизи горячих серных источников? Обратный отсчёт Серный колчедан, конечно, не единственный и далеко не самый рядовой минерал на Земле. А могла ли жизнь «выкристаллизоваться» в более обычных условиях? Палеонтолог Сергей Николаевич Голубев считает, что вполне могла. Уж больно своеобычные закономерности наблюдаются в развитии минерального скелета и в считывании генетического кода. Код этот, определяющий последовательность сборки белков, одинаков для всех обитателей Земли от бактерий до человека. И в том, и в другом случае органические элементы располагаются по законам кристаллической решётки, как в кристаллах карбонатов и фосфатов кальция или кварца. Может быть организмы на самом деле «унаследовали» особенности развития от минеральных кристаллов? При минерализации скелета органический шаблон задаёт форму каждого кристалла и направление его роста. С. Н. Голубев догадался, что верно должно быть и обратное: кристаллическая решётка может служить затравкой для сборки сложных органических соединений в строго определённой последовательности. (Ведь если этому процессу не задать направленность, получится нечто вроде свитера, связанного в сумасшедшем доме) . Действительно, на поверхности фосфатного минерала белки могут строиться даже при комнатной температуре и без участия сложных органических добавок. Запустив процесс минерализации скелета в обратном направлении, получаем модель сборки важнейших органических молекул на минеральной поверхности. И если «кристаллизация» жизни происходила на подобных минералах, становится понятным, почему многие реакции в клетках и тканях, включая мышечные сокращения, не обходятся без соединений фосфора. Самую первую и вместе с тем, пожалуй, простейшую модель «минеральных проор- ганизмов» предложил американский минералог Грэм Кэрнс-Смит. Он исходил из предпосылки, что суть жизни заключается в передаче информации. Для этого существуют гены, несущие информацию о признаках и свойствах организма. Поэтому первым организмом должно было быть нечто, напоминающее гены и притом достаточно обычное. А гены существуют для того, чтобы воспроизводить самих себя, сохраняя накопленную информацию. Конечно, в процессе воспроизводства они могут чуть-чуть ошибаться. (Именно ошибки порождают разнообразие). Когда-то в истории жизни подменить гены могли слоистые глинистые минералы, широко распространённые на Земле. Слойки этих минералов представляют собой мозаику из небольших участков. Каждый из них несёт упорядоченную, но по- своему, систему атомов. Поскольку реальные кристаллы всегда имеют дефекты, новообразующийся при росте кристалла слоёк, «считывает» эту дефектную ведомость и передаёт её дальше. Неудивительно, что на этом же незатейливом способе передачи информации зиждется весь успех современной матричной компьютерной техники. Вместо очередного глинистого слойка, на минерале вполне можно собрать органическую молекулу. Важно то, что и органические молекулы влияют на форму и
размеры кристаллов, препятствуя заложению определённых граней. В свою очередь, слоистое строение глинистых минералов с чередованием различных по форме и составу участков способствует образованию органических молекул с закономерно повторяющимися участками. Со временем выстраиваются всё более сложные соединения. Причём соединения эти окажутся хирально чисты, поскольку являются отражениями одной и той же минеральной подложки. (Вот — и решение неразрешимой проблемы хиральности). Получается предшествующий живому организму организм неживой. Обретя способность к самовоспроизведению и росту, «минеральные проорганизмы» могли выживать и распространяться. Вполне возможно, что некоторые из них стали своеобразными фотосинтетиками. (Мы уже привыкли к чудесам фотографии, а ведь процесс проявления фотобумаги сродни фотосинтезу). Использование дармовой энергии света ускорило возникновение систем, обладавших как неорганическими, так и органическими генами. (Ген — это всего-навсего участок органической молекулы). Затем управление сборкой органических соединений полностью перешло к генам. Они до сих пор и начинают процесс образования белков. Любое из вышеназванных событий, если оно действительно имело место быть, случилось очень давно. Но на Земле до сих пор встречаются организмы, сам облик которых напоминает о тех удивительных временах. Не видя, мы ощущаем их каждый день. Именно они выращивают камни в почках и зубные камни. Выглядят они настолько непривычно, что многие до сих пор сомневаются, а правда ли они существуют? Эти странные существа являются самыми маленькими на планете. Поэтому они удостоились приставки «нанно» (гр. «карлик»), означающей, что их размеры меньше тех, кто измеряется «санти», «милли» и даже «микро» величинами. Они даже мельче вирусов. Средний размер наннобактерий не превышает 0,0002 миллиметра, а мельчайшие из них не дорастают и до 0,00005 миллиметра. Они очень устойчивы к нагреву и радиоактивному излучению. У наннобактерий число белков, необходимых для жизни, сокращено до предела. Весь обмен веществ у них упрощён настолько, что наннобактерий напоминают те самые «минеральные проорганизмы». В своей клеточной стенке наннобактерий содержат фосфатные минералы, нужные любому живому организму. Не следует забывать и про Заурядные пузыри. Дутый мыльный пузырь, радужно переливающийся на свету, является сложной системой. Внутри него есть своя газовая смесь, отделённая исчезающе тонкой плёнкой от наружной атмосферы. Плёнка пропускает одни газы только внутрь, а другие — наружу. Волнующаяся поверхность океана — это не только мечта серфингиста. Это, прежде всего, раздел двух сред, где энергия волн создаёт пузыри, через плёнку которых происходит обмен веществ между этими средами. Если же атмосфера насыщена газами вроде метана и аммиака, пробивается электрическими разрядами молний и ультрафиолетовыми лучами, а снизу поступает тепло и минеральные растворы гидротерм, то из морской пены выйдет не только жизнь, но и богиня Афродита во всём своём великолепии. Что было, когда ещё ничего не было От событий прискойской эры не осталось ничего вещественного. Однако не так трудно вообразить, что происходило на Земле в то время. Все исходные для жизни элементы (углерод, азот, кислород, фосфор и сера) возникли на Солнце при термоядерном синтезе и были вынесены солнечным ветром в пространство. Вместе с частицами межзвёздной пыли, на которых уже образовались некоторые органические соединения, эти элементы накапливались на Земле и других планетах. 4,2 - 3,8 миллиарда лет назад Земля подобно всем соседним планетам подверглась тя-
жёлой метеоритной бомбардировке. Метеориты не только изрядно поколотили поверхность нашей планеты, но и оторвали от неё Луну. Но главное — гости из космоса могли ежегодно доставлять на Землю 400 тонн — а вместе с оседавшей пылью — более миллиона тонн органических веществ. Собственно метеориты (углистые хондриты), скорее всего, и нанесли достаточное количество углерода, одного из самых обычных теперь на земле элементов. В самой планете его не было. Содержится углерод только в карбонатах, угле, нефти и атмосферных газах, куда попал в результате жизнедеятельности организмов. В жидкой среде, плещущейся не менее 4,4 миллиарда лет, происходило развитие всё более сложных органических веществ — аминокислот, жиров и так далее вплоть до простейших клеточных органелл. Одним из последствий массированного метеоритного удара (особенно если некоторые небесные камушки имели свыше 500 метров в поперечнике) могло быть выпаривание всего первичного океана. На несколько тысячи лет густая, влажная, наполненная органикой атмосфера окутала Землю. В ней, заряжаясь энергией гроз, жёсткого излучения и метеоритных взрывов , ускоренными темпами вызревала жизнь. В пробирке легче всего получить четыре основных аминокислоты и другие органические молекулы, на основе которых построены все более сложные органические соединения. Достаточно только найти способ их накопления. Таких природных накопителей было множество: серно-железные пузырьки, грани фосфатных и глинистых минералов, поверхность водной толщи, подсыхающая кромка морей и солёные заводи. Всё, необходимое для сборки простейшего организма, уже получено в лабораториях. Искусственно выращиваются рибосомы, способные связывать нуклеотиды в подложку, на которой возможна сборка основы всей земной жизни — молекулы рибонуклеиновой кислоты (РНК). Создаются практически любые молекулы- предшественницы. Осталось лишь соединить два конца одного процесса цепочкой РНК. Биохимия движется вперёд настолько стремительно, что пока я допишу эти страницы, и они через редакторские правки дойдут до читателя, искусственная РНК или ДНК уже будет извиваться в пробирке. Нужны только руки, деньги и время. Деньги и время в данном случае понятия взаимозаменяемые. Чем меньше даётся одного, тем больше требуется другого. Недавно одна лаборатория запланировала на 2005 год создание ДНК из 300 генов. Доживём - проверим. Уже упоминавшийся Фрэнсис Крик отметил, что в биомолекулярном мире РНК и ДНК представляют собой туповатых блондинок, пригодных исключительно для размножения. Если в отношении ДНК (и, отчасти, блондинок) это действительно верно , то РНК не вполне такова. Эти молекулы не только хранят наследственную информацию , но и осуществляют обмен веществ, производят белки, ускоряют сборку органических соединений, помогают воспроизведению ДНК. А главное — РНК способна к самовоспроизводству. Поэтому, получив РНК, можно не заботиться обо всём остальном. Конечно, движение от наиболее простых органических соединений к сложным, подобным РНК, не было прямолинейным. Существует целый ряд органических соединений, которые обладают сходными свойствами. В метаново-этановом океане на спутнике Юпитера Титане вполне могут образовываться «псевдобелки». В них вместо сшивающих белки привычных химических связок, названных пептидными (гр. «пищевой»):
используются аммиачные: NH - С - I I NH Надо предполагать, что РНК выдержала достаточно жёсткое соперничество в предбиологическом мире и среди подобных ей соединений оказалась наиболее приспособленной к земным условиям. Уже на химической стадии развития жизни эволюция происходила по дарвинскому типу: конкуренция и выживание наиболее приспособленных . Для лучшего сохранения и передачи информации (носителями которой являются гены) ДНК пришла на смену РНК. ДНК не намного сложнее, но её двойная спираль позволяет надёжно хранить информацию и восстанавливать её в случае повреждения одного из участков. Принцип ДНК используется в компьютере. Можно лишиться почти всего, записанного на одном диске, и восстановить потери с помощью других дисков. Простейшие организмы, например вирусы, обходятся одной РНК. С появлением устойчивой ДНК, с помощью которой можно создать практически неограниченное множество почти одинаковых особей, организмы получили возможность стать ископаемыми .
ПРОСТАВЛЯЕМ ДАТЫ Николай Борисов «Напрасно многие думают, что все, как видим, сначала Творцом создано. Таковые рассуждения весьма вредны приращению всех наук...» М. В. Ломоносов Как изучать то, чего уже больше нет? Разгадывая тайны природы, наука проникает в глубины микромира, регистрирует сигналы от экзотических объектов, уделенных от нас на миллионы и даже миллиарды световых лет, одним словом - изучает то, что недоступно повседневному человеческому опыту. Однако существуют области познания, в которых непосредственная экспериментальная проверка принципиально невозможна — например, когда мы изучаем прошлое. В самом деле, как можно заглянуть в давно прошедшие
эпохи без машины времени и письменных свидетельств очевидцев? Ведь опыт показывает , что существование человечества ограничено не только в пространстве, но и во времени: так, до Гагарина никто из землян не покидал нашей планеты, а из слоев пород земной коры видно, что на протяжении многих и многих веков существования Земли людей не было и в помине. Может быть, научными методами прошлое вообще не познаваемо, да и «не пристало» науке заниматься настолько «отвлеченными, не прикладными» проблемами, от которых людям «ни холодно, ни жарко»? Тем не менее, жизнь предостерегает от подобной близорукости. Даже в привычной обстановке мы видим, что прошлое влияет на будущее, в чем состоит принятый в науке в качестве постулата принцип причинности. Другими словами, если мы хотим понять, куда движется наш мир в будущем, нам было бы очень полезно знать его предысторию. И пусть в сложных системах, особенно состоящих из живой материи, будущее не является однозначно предопределенным событиями прошлого, на уровне тенденций и трендов принцип причинности работает и для живых систем. Так нельзя ли использовать принцип причинности для анализа событий прошлого? В самом деле, этот принцип подсказывает нам пути изучения того, чего уже больше нет. Но если оно было - то оно оставило следы, сохранившиеся до наших дней. Другой принцип, определяющий расследование событий в прошлом - принцип ак- туализма. Сформулирован он был давно, еще до открытия законов биологической эволюции, однако оказал непосредственное влияние на это открытие. В первой половине XIX века геолог Чарльз Лайель, сопоставив мощные толщи осадочных пород с современными темпами осадконакопления, пришел к выводу, что эти породы аккумулировались весьма долго и медленно. Конечно, сейчас в подходе Лайеля многое кажется слишком прямолинейным, однако общий принцип - отталкиваться при изучении прошлого от общих законов, действующих в настоящем («настоящее - ключ к прошлому», - писал Лайель), остался неизменным до наших дней. Пусть первичная атмосфера Земли была бескислородной - но, скажем, основные газовые законы для нее были все-таки справедливы. Принцип актуализма сродни методам работы судебно-следственных органов. В нем что-то от презумпции невиновности1. Ученый, подобно следователю или судье , проверяет сначала «самую похожую на современность модель прошлого», и если она окажется противоречащей опытным данным - выдвигается «более экзотическая» гипотеза, удовлетворяющая двум важным требованиям. Первое, из нее должны вытекать экспериментально проверяемые следствия (иначе это вообще не наука). Второе, эти следствия не должны противоречить твердо установленным законам природы. А если такое противоречие имеется, то гипотеза должна объяснять, почему старая теория работала во всех ранее известных случаях исправно, а для объяснения нового явления оказалась непригодной. Следует отметить, что и принцип причинности, и принцип актуализма не могут быть «доказаны» ни логически, и ни эмпирически, они просто принимаются как одни из «правил игры в науку», которые позволяют дальше делать умозаключения по законам логики на основании эмпирических данных, а не скажем, каких-либо сакрально-мифологических текстов. Подозреваемый считается невиновным до тех пор, пока обвинение не докажет обратного.
Поиски геофизических и астрофизических хронометров в классической науке Последовательно применяя принцип актуализма, ученые смогли установить возраст планеты Земля, а также продолжительность основных эр, периодов и эпох ее истории. Однако это стало возможным не за одну сотню лет развития науки. То, что геологическая история членится на периоды - было известно еще Николаусу Стено в XVII веке, который заложил основы стратиграфии - изучения последовательности залегания пород в земной коре. Ко временам Лайеля был составлен почти полный, мало отличающийся от современного, каталог временной последовательности различных геологических эр, разделяемых на периоды, идентифицированы характерные для периодов породы, а также руководящие (встречающиеся только в этот отрезок времени) ископаемые. Таким образом, в общих чертах была решена проблема относительной геохронологии, определяющей последовательность эр, периодов и эпох. Но какова абсолютная продолжительность каждой из них? На этот вопрос геологи не знали ответа до XX столетия - камни, словно элегантная дама, многозначительно скрывали свой возраст от классической геологии и стратиграфии . Первые попытки узнать возраст Земли были наивны. Начало этому положили в XVIII веке такие корифеи, как Михайло Ломоносов и Жорж Бюффон. Ломоносов наблюдал за процессами поднятия и опускания земной поверхности, «наступаний» и «отступаний» моря, Бюффон — за остыванием нагретых тел. У Бюффона получился возраст, равный 75 тысяч лет, у Ломоносова - не менее 400 тысяч... Цифры, конечно, далекие от действительности (иначе и быть не могло - принятая в качестве аналогии модель была неадекватна реальности). Но оба ученых осуществили революцию в науках о Земле: они построили модели поведения вещей в прошлом на основе изучения современного опыта, а не вычисляли возраст Земли, считая годы жизни ветхозаветных патриархов, как это делали в донаучную эпоху, опираясь на божественное откровение. И даже такие несовершенные прикидки, как у Ломоносова и Бюффона, дали значение возраста Земли, значительно превышающее ветхозаветное2. Идея же оценивать время существования планеты, исходя как из скорости геологических процессов, так и из динамики остывания ее недр, использовалась неоднократно впоследствии, на новом уровне развития научного знания. Надеясь помочь геологам определить абсолютный возраст Земли, физики XIX века продолжали изыскания. Вильям Томсон (он же лорд Кельвин) усовершенствовал метод Бюффона, проведя более детальные расчеты времени, за которое земная кора могла бы остыть до современного состояния, если изначально она была расплавленной. В итоге это время получилось не в пример внушительнее, чем у Бюффона — порядка 20-40 миллионов лет. В сотрудничестве с Германом Гельмгольцем Кельвин решил проверить эту цифру, используя данные не о Земле, а о Солнце. С позиций физики XIX века Гельмгольц и Кельвин искали ответ на вопрос «отчего светит Солнце?». Гипотеза сгорания на Солнце химического топлива уже в XIX веке казалась неправдоподобной: химическое топливо должно быстро кончиться. Поэтому ученые XIX века не могли указать ни на какой другой источник энергии Солнца, кроме гравитационного сжатия. Расчеты показывали, что для обеспечения нынешней светимости Солнца оно должно сжиматься с такой скоростью, что около 18 миллионов лет радиус 2 Которое правильно отражает по порядку величины время письменной истории человечества, ибо Ветхий Завет - один из древнейших письменных источников.
Солнце превышал бы радиус земной орбиты. Хотя оценки Кельвина и Гельмгольца основывались на двух разных эффектах и дали одинаковый по порядку величины ответ, они, тем не менее, казались слишком малыми для геологов. Дело в том, что геологи часто сталкиваются со многими осадочными породами, которые накапливаются или, напротив, выветриваются очень медленно. Поскольку мощность осадочных толщ составляет многие тысячи метров, то из простой экстраполяции, проведенной еще в начале XIX века Лайе- лем, получалось, что время образования или эрозии многих пород должно занимать не один десяток, если не сотню миллионов лет. Кто же был прав в попытках оценки возраста Земли - классическая физика и ли классическая геология? Ведь, если быть до конца откровенным, простое деление мощности пласта на наблюдаемую в настоящее время скорость осадконакопления не является строгим примером применения принципа актуализма. Дело в том, что, во-первых, скорость осадконакопления является величиной постоянной, она зависит и от времени, и от места накопления осадков. Кроме того - и это не менее важно - существуют процессы, обратные осадконакоплению - это различные типы эрозии пород, которые так же, как и осадконакопление, не стационарны, поэтому определять время отложения пласта с помощью простого деления мощности пласта на скорость осадконакопления не всегда корректно. Итак, надежный способ определения возраста геологических пород должен удовлетворять , по крайней мере, двум требованиям. Скорость такого процесса должна быть предельно постоянна, не зависеть от внешних условий. Кроме того, должен отсутствовать процесс, обратный тому процессу, который используется для хронометрии . «Ядерные часы» в породах земной коры Классическая физика и геология XIX не могли указать на такой процесс, равно как и найти источник энергии Солнца и теплоты земных недр. Все вопросы были решены только физикой XX века, изучающей превращения атомных ядер. Такие превращения возможны благодаря тому, что у каждого ядра имеется своя энергия связи, и более выгодно состояние с наибольшей энергией связи. Ядерные силы притяжения между нуклонами (протонами и нейтронами) имеют совершенно особые свойства. В отличие от действующих в макромире гравитационных и электромагнитных сил, ядерные силы являются короткодействующими. Проявляются они только на расстояниях порядка нескольких фемтометров3 и меньше, но уж если нуклоны оказались на таком расстоянии друг от друга, то ядерное притяжение между ними оказываются таким так велико, что пересиливает электростатическое отталкивание положительно заряженных протонов. Из-за таких свойств ядерных сил наиболее крепко связаны нуклоны у ядер в середине таблицы Менделеева (наибольшая энергия связи - у ядер железа). В то же время у легких ядер энергия связи ядра меньше, потому что у таких ядер большая часть нуклонов расположена в поверхностном слое «ядерной капли». Подобно молекулам жидкости в поверхностном слое капли, которые имеют меньше молекул-соседей, чем молекулы в центре капли, и поэтому менее связаны с каплей, нуклоны в поверхностном слое ядра менее связаны с ядром. Напротив, у слишком тяжелых ядер становится существенным электростатическое отталкивание прото- 3 1фм = Ю"15 м
нов, которое ослабляет связи в ядре. В результате среди легких ядер энергетически выгодными оказывается синтез (слияние), а среди тяжелых - деление (распад на части). Именно это открытие XX века послужило основой создания самого смертоносного оружия, придуманного когда-либо людьми - ядерного в узком смысле, использующего деление тяжелых ядер, и термоядерного, использующего синтез легких ядер (иначе называемый термоядерным синтезом за температуры в миллиарды градусов, необходимые для преодоления электростатического барьера отталкивания ядер при синтезе). Тем не менее, термоядерному синтезу (конкретно, превращению водорода в гелий) обязана своим существованием не только водородная бомба4, но и светимость нашего Солнца и звезд. Расчеты показывают, что звезда - желтый карлик типа Солнца исчерпывает весь водород за время порядка 8-9 миллиардов лет. Таким образом, открытие явление термоядерного синтеза как основного источника энергии звезд сняло один из «проклятых вопросов» в исторической геологии - почему время отложения и разрушения многих горных пород оказывалось значительно больше времени существования Солнца? Гравитационное же сжатие звезд, по современным представлениям, существенно лишь на относительно коротком (порядка ста тысяч лет для звезды, подобной Солнцу) этапе первичного разогрева их недр до температуры, позволяющей идти термоядерным реакциям. Однако решение проблемы стабильности Солнца на протяжении сотен миллионов лет стало не единственным и даже не главным подарком ядерных физиков геологам. Ядерная физика нашла геохронометр, идеально отвечающий требованиям принципа актуализма — процесс, работающий на протяжении длительных эпох «как часы», в буквальном и переносном смысле слова! Таким процессом оказался радиоактивный распад. В отличие от уже упомянутых здесь термоядерного синтеза и деления тяжелых ядер, как правило, требующих особых условий для своего протекания (сверхвысоких температур, наличия критической массы делящегося материала и др.), радиоактивный распад спонтанен (самопроизволен). При радиоактивном распаде нестабильное материнское ядро, называемое радионуклидом, превращается в дочерний нуклид5, имеющий большую энергию связи, нежели материнский, при этом избыток энергии, как правило, уносится с ионизирующим излучением6. В соответствии с законами квантовой механики, переход от материнского нуклида к дочернему является случайным процессом, время которого не предопределено начальными условиями. Конфигурация нуклонов в материнском и дочернем нуклиде определяет лишь среднее время жизни радионуклида, а также пропорциональный этой величине период полураспада — время, за которое число радионуклидов в образце уменьшается вдвое. Природа щедро одарила земную кору и мантию радионуклидами, период полураспада которых может достигать многих миллиардов и даже десятков миллиардов лет7. Эти радионуклиды (в основном изотопы8 тяже- Не скрою, хотел начать данную фразу с вводного оборота «к счастью», а не «тем не менее». Но потом вспомнил, что у водородной бомбы, в отличие от урановой и плутониевой, пока в истории человечества жертв умышленного применения не было. Насколько такое грозное оружие, способное уничтожить всю цивилизацию За считанные дни, является фактором сдерживания агрессивных инстинктов не лучшей части двуногих в их борьбе За власть и собственность — тема для отдельного размышления, не относящегося непосредственно к предмету настоящей статьи. 5 Дочерний нуклид может быть как стабилен, так и сам радиоактивен. Во втором случае говорят о цепочках радиоактивного распада (радиоактивных семействах). 6 В Зависимости от типа радиоактивного распада это могут быть ядра гелия (альфа-излучение), электроны или позитроны (бета-излучение), или фотоны с длиной волны порядка 10~10 м и менее (гамма-излучение). 7 Образуются такие радионуклиды (как правило, тяжелые) путем нейтронного Захвата на последней стадии эволюции Звезд — при т.н. взрывах сверхновых. В противоположность интуитивным по-
лых элементов — урана и тория, а также калий-40) вносят существенный вклад в тепловой баланс земных недр (вспомним, что слишком быстрое их остывание составляло в XIX веке проблему для Кельвина; другой важный, но тоже не учтенный Кельвином источник — гравитационная дифференциация вещества в мантии и ядре Земли) . Помимо этого, радионуклиды предоставили геологам практически единственный способ судить об абсолютном возрасте пород и абсолютной продолжительности геологических эпох, «проставить даты на палеонтологической летописи». Из-за того, что период полураспада является внутренним свойством спонтанного перехода между состояниями ядра, на него не влияют внешние по отношению к ядру условия, как-то температура, давление, химическое соединение и агрегатное состояние вещества, в которое входят радионуклиды и т.д. Существенной, а в большинстве случаев главной, проблемой на заре ядерной геохронологии была неизвестность начального содержания, а также выноса и привноса в последующее время материнского и дочернего нуклидов, что делало какие-либо оценки возраста пород крайне затруднительными. В каких-то случаях выручить, например, может то, что дочерний нуклид, как при превращении калия- 40 в аргон-40, является газом, который покидает расплав породы при извержении лавы. Однако методы, предполагающие отсутствие дочернего нуклида на момент образования породы, не вполне надежны, особенно для недавно извергшихся пород, так как даже небольшие добавочные количества дочернего нуклида могут привести к огромной погрешности в результате. К наиболее надежным методам датировок, не только не требующим отсутствия дочернего нуклида, но и имеющим «внутреннюю защиту от ошибок», относятся так называемые методы изохрон. Эти методы основаны на анализе содержания трех нуклидов - материнского радионуклида (М) , дочернего радиогенного нуклида (Di) , а также другого, нерадиогенного (D2) , изотопа того же элемента, что и дочерний нуклид Di — в разных образцах породы, отличающихся по содержанию материнского нуклида М. На момент кристаллизации расплава породы разные ее образцы могут отличаться по химическому (элементному) составу, однако изотопный состав каждого из элементов будет одинаков для разных образцов (ибо химические свойства элемента мало зависят от изотопа данного элемента). Поэтому изохрона - линия, выражающая зависимость отношения концентраций [Di]/[D2] от [M]/[D2] - будет в этот момент прямой, параллельной оси абсцисс (см. рис. 1, круги). По мере превращения нуклида М в нуклид D2 изохрона будет продолжать оставаться прямой (чем больше ядер М содержал образец в начальный момент, тем больше в нем будет накапливаться ядер Di со временем) ; и угол ее наклона будет показывать нам возраст породы (рис. 1, треугольники и квадраты). Если же с течением времени будет иметь место вынос или привнос какого-либо из нуклидов (М, Di или же D2) , то изохрона перестает быть прямой линией! Таким образом, метод изохрон обладает «встроенной защитой», которая показывает, «исправны» радионуклидные часы или же они «барахлят». нятиям, историческим термином «взрыв сверхновой» обозначают не начало, а конец эволюции Звезды. После выгорания водорода и гелия Звезда «сбрасывает» свою атмосферу, при этом наблюдатель с Земли видит вспышку от светящегося газа, превосходящую по яркости Звезду до взрыва (как будто «новую Звезду не небе»). 8 Изотопами элемента Z называются нуклиды, имеющие одинаковое число (Z) протонов, но разное число нейтронов. Таким образом, изотопы различаются атомной массой, например, стабильный уг- лерод-12 и радиоактивный углерод-14, или уран-235 и уран-238, важные для радионуклидного датирования .
3,5 [M\I[D2], отн. ед. Рис. 1. Метод изохрон. Для определения возраста магматической породы берут несколько ее образцов, различающихся содержанием материнского радионуклида М. Измеряя (например, с помощью масс- спектрометра) концентрации материнского нуклида М, дочернего нуклида Di, а также нуклида D2, являющегося нерадиогенным изотопом того же элемента, что и нуклид Di, строят графики зависимости [Di]/[D2] от [M]/[D2]. При отсутствии выноса и привноса нуклидов за пределы породы такой график является прямой линией — изохро- ной. Изохрона, построенная по точкам с маркерами-кругами соответствует только что извернувшейся породе, с маркерами- треугольниками - породе возрастом в 0,5 периода полураспада радионуклида М, с маркерами-квадратами — породе возрастом в 1 период полураспада радионуклида М. Методы абсолютного датирования геологических пород, работая с магматическими породами, элегантно дополняют относительные методы стратиграфии, областью применения которых являются главным образом осадочные породы, опознаваемые по руководящим окаменелостям. Сочетая относительные методы с абсолютными, люди узнали, что Солнечная система существует около 4,6 млрд. лет9. 3,8 млрд. лет назад (начало архея) на Земле уже существовала жизнь. 1,8 млрд. лет назад (конец раннего протерозоя) уже жили первые эукариоты (организмы с клеточным ядром). Около 600 млн. лет назад (эдиакарий, или венд) появились многоклеточные животные. Около 540 млн. лет назад (ранний кембрий) - первые животные с твердым скелетом, почти вслед за ними (около 530 млн. лет назад) - первые позвоночные. Около 365 млн. лет назад (поздний девон) - первые четвероногие животные. Около 220 млн. лет назад (начало верхнего триаса) - первые млекопитающие и первые динозавры. Около 65 млн. лет назад (граница мела и палеогена) динозавры вымирают, освобождая мир для дальнейшей эволюции млекопитающих. Около 2,5 млн. лет назад (конец плиоцена) начинается история человеческого рода, около 10 тыс. лет назад (начало голоцена) люди перешли к земледелию, а спустя несколько тысяч лет - к письменности. Всего за считанные последние столетия, открыв для себя новые горизонты рационального познания, люди втрое увеличили продолжительность своей жизни, вдесятеро — свою численность на планете. На повестке дня — ликвидация массо- 9 Такой возраст имеют самые старые лунные породы и метеориты. Земных пород такого возраста не сохранилось из-за эрозии, но вряд ли можно думать, что Земля моложе Луны.
вого голода среди Homo sapiens. Однако одновременно - мы уже едва ли не на большую часть разбазарили кладовую энергетических ресурсов в виде ископаемого топлива, доставшегося нам в наследство от сотен миллионов лет истории биоты Земли. Другие, еще более древние энергетические ресурсы — ядерное топливо в виде урана, наследство от звезд прошлого поколения, мы превратили в орудие массового убийства, грозящее цивилизации гибелью еще до наступления энергетического коллапса. Мы смогли познать многие из обстоятельств пути, по которому сами пришли в этот мир. Сможем ли не уйти из него напрасно, сможем ли оставить себе достойных потомков?
ВЕНДСКИЕ ЖИТЕЛИ ЗЕМЛИ Я.Е.Малаховская, А.Ю.Иванцов Предисловие Одно из важнейших событий в истории органического мира Земли - возникновение многоклеточных животных. Когда появились первые многоклеточные? Как они выглядели? Ответы на эти вопросы ученые ищут в геологической летописи, изучая окаменелости - остатки древних животных, обитавших на Земле в отдаленные геологические эпохи. Вендский период, наверное, самый загадочный в истории развития жизни. Около 600 миллионов лет назад Землю населяли мягкотелые существа - первые из известных широко распространенных многоклеточных животных. Древние осадочные породы сохранили отпечатки их тел, напоминающие концентрические диски, сегментированные ленты, листья папоротников. Встречаются отпечатки, облик которых нам совершенно непривычен, например, имеющие вид трехлучевых свастик. Обнаруженные еще в конце девятнадцатого века, представители вендской фауны стали широко изучаться только во второй половине двадцатого. В России
первое крупное коренное местонахождение ископаемых остатков этих существ обнаружено в 70-х годах XX в. в Архангельской области экспедицией Геологического института АН СССР под руководством Б.М. Келлера. С тех пор поисковые работы в юго-восточном Беломорье проводятся практически ежегодно. Сотрудниками Лаборатории докембрийских организмов Палеонтологического института РАН, возглавлявшейся академиком Б.С. Соколовым, а после него членом-корреспондентом РАН М.А. Федонкиным, там было найдено несколько новых больших местонахождений и собрана крупнейшая в мире коллекция вендских отпечатков. По разнообразию и тончайшей сохранности ископаемых остатков ей нет равных. Результаты изучения этой коллекции опубликованы в основном в малодоступной специальной литературе . Нам хотелось расширить круг людей, знакомых с представителями вендской биоты — существами, важнейшими для понимания происхождения и ранней эволюции многоклеточных. ГЕОХРОНОЛОГИЧЕСКАЯ ШКАЛА >S О СО ш X ЭРА О I ПЕРИОД «СТВЕРТИЧНЫИ нЕотвюеый млвогеешй ЮРСКИЙ ПЕРУСШ м т 6U 142 206 мв 290 Историю Земли делят на два неравных по продолжительности этапа: криптозой — время скрытой жизни и фанеро- зой — время явной жизни (от греческих слов "криптос" - скрытый, "фанерос" — явный и "зое" - жизнь). Из 4.5 млрд. лет геологической истории на фанерозой приходится только около 0.5 млрд. последних лет. Биогенные (т. е., образованные жизнью) породы криптозоя — строматолитовые известняки (фото 1, 4), углистые сланцы, осадочные руды — содержат многочисленные остатки и продукты жизнедеятельности древних бактерий, но самих тел организмов в этих горных породах не видно невооруженным глазом, отсюда и название криптозоя. В фанерозойских биогенных породах присутствуют видимые остатки многоклеточных организмов — тела, фрагменты тел, следы жизнедеятельности. Фанерозойский этап истории Земли подразделяется на три эры, которые, в свою очередь, состоят из периодов. Каждая эра характеризуется определенными организмами, преобладавшими на ее протяжении. Около 540 млн. лет назад началась палеозойская эра — время древних морских беспозвоночных, рыб и первых земноводных. Мезозойская эра, начавшаяся около 250 млн. лет назад, считается временем пресмыкающихся, в том числе динозавров. Эра, в которой мы живем, называется кайнозойской; она началась около 65 млн. лет назад, это время млекопитающих. Строматолиты (в переводе означает "слоистые камни"). Эти карбонатные слоистые образования, отличавшиеся невероятным разнообразием форм, можно встретить в породах любого возраста. В заливе Шарк в западной Австралии обитают современные строматолиты, поэтому хорошо известно, как они образуются. Строматолит — результат взаимодействия циано-бактериальных сообществ и процессов осадконакопления. Циано-бактериальное сообщество, или мат, питается за счет фотосинтеза. На поверхность обитающего на мелководье мата постоянно выпадают частички осадка (обычно карбоната кальция). Накапливаясь, они начинают затенять мат. Чтобы не погибнуть, микроорганизмы мигрируют вверх, сквозь осадок. В результате
образуется тонкослоистая постройка, состоящая из чередующихся слоев известняка и органического вещества. Скорость прирастания строматолитов — около 0.3 мм в год. Строматолиты господствовали в мелководных морях докембрия начиная с архея (см. заставку). Их древнейшие постройки известны в Австралии и Южной Африке из пород возрастом около 3.5 млрд. лет. В протерозое они достигли необычайного расцвета, который сменился быстрым угасанием. В конце докембрия появились настоящие водоросли, которые вытеснили циано-бактериальные маты из привычных мест обитания в экологические ниши с экстремальными условиями, в которых сами развиваться не могли — в пересыхающие лагуны с высокой соленостью воды, вулканические источники и др. Границу между криптозоем и фанерозоем проводят по началу кембрия, самого древнего периода палеозойской эры (а потому криптозой называют еще и докембрием) . Дело в том,что именно в нижнекембрийских отложениях, впервые в палеонтологической летописи, в массе появляются минеральные скелетные остатки (раковины, панцири и др.) многоклеточных животных. Среди них можно узнать представителей как ныне существующих типов беспозвоночных (кишечнополостных, губок, брахиопод, моллюсков, иглокожих, червей, членистоногих), так и вымерших (фото 2, 3). Очевидно, что у разнообразных и высокоразвитых раннекембрийских животных должны были быть предки. Где же, в таком случае, их ископаемые остатки? Фото 2. Панцири членистоногих — трилобитов (ордовик; Ленинградская обл.) В 1908 г. в докембрийских отложениях Намибии (Южная Африка) немецкие геологи нашли отпечатки, показавшиеся им похожими на морские перья, листья папоротника, медузы или губки. Сейчас нам понятно, что эти остатки древнейших многоклеточных совершенно не напоминают «привычные» нижнекембрийские окаменелости. Они представлены исключительно отпечатками мягких тел, без каких-либо следов раковин или панцирей. От мелких ископаемых начала кембрия их отличают размеры в десятки сантиметров и крайне своеобразное строение. Недаром немецкий палеонтолог Г. Пфлюг (Pflug) назвал их впоследствии «петалонамы», что значит «листья из Намибии». Но тогда возраст находок был определен как кембрийский .
В начале 30-х гг. XX в. в местечке Эдиакара Южной Австралии австралийский исследователь Р. Сприг (Sprigg) нашел отпечатки бесскелетных многоклеточных организмов. В 1947 г. вышла его работа "Раннекембрийские медузы хребта Флиндерс Южной Австралии". А к середине XX в. там уже была собрана богатая коллекция из несколько сотен отпечатков, которые интерпретировались как ископаемые остатки медуз, морских перьев и червей. Австралийский палеонтолог М. Глесснер (Glaessner) первым предположил, что возраст «эдиакарской фауны» древнее кембрийского. Вслед за австралийскими похожие отпечатки мягкотелых организмов нашли в докембрийских отложениях Европы, Азии и Северной Америки. В 1952 г. академик АН СССР B.C. Соколов установил существование венда — особого периода, предшествовавшего кембрийскому, где «...впервые заняла свое истинное геохронологическое положение и так называемая эдиакарская фауна бесскелетных Metazoa (многоклеточных животных — прим. авт.), первоначально считавшаяся кембрийской... Вендский период (венд) назван по имени древнейшего славянского племени вендов (или венедов), обитавших к югу от Балтийского моря» (Соколов, Очерки становления венда, 1997). Фото 3. Скелеты морских беспозвоночных — археоциат (ранний кембрий; Тува). Коллекция Лаборатории древнейших организмов ПИН РАН. По мере накопления материала по древнейшим беспозвоночным укреплялось мнение , что вендские организмы представляли собой нечто совершенно особое. Для них трудно было подыскать место в существующей системе многоклеточных. Их пытались сравнивать даже с лишайниками и гигантскими многоядерными одноклеточными. Многим исследователям они казались непохожими на фанерозойских животных настолько, насколько могли быть непохожи на землян жители других планет. Немецкий палеонтолог А. Зейлахер (Seilacher) предложил выделить эти существа в отдельное царство "вендобионты". На территории бывшего СССР местонахождения вендских окаменелостей известны на Украине, в Сибири, на Урале и в Архангельской области. Первое обнажение с отпечатками вендских организмов в Архангельской области было найдено в 1972 г. на северо-восточном побережье Онежского п-ова, вблизи деревни Сюзьма студентом В.А. Степановым и исследовано экспедицией Геологического ин-та АН СССР под руководством Б.М. Келлера. В 1977 г. М.А. Федонкин и Н.В. Бочкарева нашли отпечатки вендских организ-
мов на Зимнем берегу Белого моря. С тех пор каждое лето в юго-восточном Бело- морье работают российские и международные палеонтологические экспедиции. В Архангельской области выявлена самая представительная в мире ассоциация вендских организмов и описаны десятки новых видов. Мощность вендских отложений здесь около 1000 м и состав ископаемых изменяется по разрезу. В нижних слоях находят отпечатки, такие же как в докембрийских отложениях Намибии, в средних — аналогичные остаткам из древних толщ Англии и Ньюфаундленда, а в верхних — окаменелости, подобные обнаруженным в Южной Австралии. На сегодняшний день отпечатки из Архангельской области являются лучшими в мире, поскольку тонкая зернистость распространенных здесь пород способствовала сохранению мельчайших деталей строения вендских животных. Схема геологического строения юго-восточного Беломорья. Стрелками показаны местонахождения вендских животных. Как образовались вендские окаменелости Основная отличительная особенность вендских ископаемых в том, что они представлены только отпечатками. Вендские животные еще не "умели" строить минерализованные раковины или панцири; их тела состояли только из мягких тканей, как у современных медуз или слизней. Правда, не исключено, что у некоторых из них был достаточно плотный «кожистый» наружный покров. Большая часть местонахождений вендских окаменелостей обнаружена в песчано-глинистых морских отложениях , сформировавшихся на прибрежном мелководье. Захоронение связывают с катастрофическим накоплением осадков. Например, образовавшееся в результате шторма или подводного оползня мутьевое облако накрыло участок морского дна. Все, что находилось на грунте — животные, их следы и мертвые тела — оказалось мгновенно погребенным под толщей песка. Отпечатки, которые сохранились до наших дней, сформировались на подошве этого нового слоя песчаного осадка. Среди
них различаются негативные и позитивные — соответственно, вдавленные в слой и возвышающиеся над его поверхностью. От следов или вмятин от тел на грунте получились отпечатки, возвышающиеся над поверхностью слоя, или выраженные в «позитивном» рельефе. Позитивный отпечаток — слепок с нижней стороны лежавшего на дне тела. Негативный отпечаток вдавлен в поверхность слоя. Это слепок с верхней стороны захороненного и сдавленного под тяжестью осадка тела животного. В его рельефе зафиксированы не только топография наружной поверхности тела, но и какие-то элементы внутреннего строения (поскольку разные части тела животного имели разную плотность и разлагались с различной скоростью, на отпечатке образовывались впадины и выступы, отвечающие, соответственно, более и менее стойким участкам). В отличие от вендских отложений, в фанерозойских осадочных породах отпечатки мягкотелых животных встречаются очень редко. Органические остатки, лежавшие на дне или в толще еще рыхлого осадка, съедали падальщики, а отпечатки разрушали биотурбаторы (животные, зарывающиеся в осадок). Почему же сохранились вендские мягкотелые? Ученые объясняют это неповторимыми особенностями вендской среды. В осадочных породах того времени очень редко встречаются следы животных, перерабатывающих грунт. Кроме того, уже изучены тысячи экземпляров представителей вендской биоты, и ни на одном из них не обнаружены повреждения или следы укусов. Это означает, что в вендской экосистеме практически отсутствовали биотурбаторы, макроскопические трупоеды и хищники, измельчавшие пищу. Отмершая органика подвергалась только микробному разложению. Мир венда Земля в позднем докембрии была не такой, какой мы ее знаем: сутки были почти на 3 часа короче, зато дней в году было больше (420). Материки располагались иначе, чем сейчас; на суше было меньше рек, зато больше временных пересыхающих ручьев; вместо почвы — только голые скалы и шлейфы каменных обломков; атмосфера и вода океанов содержали меньше кислорода и больше углекислоты . Климат в целом был не теплее современного. Холодные ледниковые периоды чередовались с более теплыми межледниковьями. В биосфере венда, как и вообще в криптозое, главенствовали микроорганизмы. Дно обширных мелководных морей и низменные участки суши покрывали ковры бактериальных матов, кое-где колыхались леса лентовидных водорослей. Вода морей и океанов была мутной — ее некому было фильтровать; минеральные осадки и россыпи органического детрита накапливались на дне тонкими чередующимися слоями — их некому было перемешивать. Благодаря жизнедеятельности микробиальных и водорослевых сообществ к позднему докембрию первичная атмосфера Земли обогатилась свободным кислородом. Появилась возможность возникновения и развития многоклеточных животных. Их первое широкое распространение связывают с лапландским оледенением (670-620 млн. лет назад) . Это было великое оледенение: по оценкам ученых, тогда в море льды заплывали даже в тропическую зону, а суша была покрыта ледниками едва ли не полностью. После окончания ледниковой эпохи возвращающиеся на мелководья сообщества микроорганизмов и водорослей уже включали многоклеточных животных. Среди этих мягкотелых существ встречались гиганты, достигавшие в длину полутора метров, и совсем малютки, не более 2-3 мм. Одни плавали или парили в толще воды, другие жили на дне: прикреплялись к нему, свободно лежали или ползали.
На кого были похожи вендские животные? Основной вопрос, который мучает палеонтологов, когда приходится сталкиваться с новой "непонятной" окаменелостью — "на что это могло бы быть похоже?" Вендские отпечатки — "непонятные", но их практически не с чем сопоставить, в геологической летописи мягкие тела сохраняются очень редко. Допустим, на отпечатке видны какие-то элементы поверхности исходного тела, внутренние органы (если они были), следы разложения и деформаций, которые сопровождали превращение мягкого тела в окаменелость, но попробуйте, например, восстановить изначальный внешний вид и внутреннее строение хорошо раздавленного таракана, руководствуясь исключительно тем, что осталось на полу, при условии, что вы в жизни не видали членистоногих. Тем не менее, палеонтологи кропотливо изучают форму и рельеф поверхностей отпечатков, пытаясь отыскать общие черты строения у вендских и у более или менее "понятных" беспозвоночных. Вендских, так же как и современных многоклеточных животных, делят на две большие группы: радиально-симметричные (Radiata) и двусторонне-симметричные (Bilateria). Радиально-симметричные объекты обладают осью симметрии, проходящей через центр, так что тело переходит само в себя при повороте на некоторый угол. Сколько раз тело отобразится само на себя при повороте на 360 градусов, таков порядок оси симметрии. Современные радиаты относятся к типам кишечнополостные (медузы, коралловые полипы и др.) и гребневики. Двусторонне-симметричные объекты обладают плоскостью симметрии, относительно которой правая и левая половины тела зеркально симметричны. Радиально-симметричные формы Наиболее примитивными считаются формы с осью симметрии бесконечно большого порядка. Самой характерной из них является немиана. Немиана (Nemiana simplex) (фото 6) . Округлый отпечаток с простым концентрическим строением, выраженный в положительном рельефе. Немианы обычно образуют плотные скопления на нижней поверхности пласта. Предполагается, что отпечатки оставили животные с просто устроенным, мешковидным телом, похожие на ныне живущие коралловые полипы. Немиан относят к типу кишечнополостных. Для вендской биоты обычны формы с осью симметрии третьего порядка, которые выделют даже в особый класс вымерших трехлопастных кишечнополостных (Trilobozoa). У фанерозойских беспозвоночных трехлучевая симметрия встречается очень редко. К трехлопастным относят трибрахидиум, очень эффектные отпечатки которого найдены в Архангельской области и в Австралии.
Поселение немиан (реконструкция) Трибрахидиум (Tribrachidium heraldicum) (фото 7) . "Трибрахидиум" означает "трехрукий". Негативный отпечаток трибрахидиума напоминает трехлучевую свастику. Три спирально закрученные "руки" расходятся от центра под равными углами. Так выглядят отпечатки каналов пищеварительной системы. Многочисленные тонкие валики между ними — бороздки на наружной поверхности, в которых, возможно, располагались пищесобирающие реснички. Трибрахидиум считается прикрепленным животным, по организации близким к кишечнополостным. Он неподвижно сидел на дне, только слегка шевелились реснички на внешней поверхности. Реснички улавливали из воды мелкие органические частицы и перегоняли
их от периферии в центр ко рту, возможно, даже к трем ртам. Реконструкция: а — каналы пищеварительной системы, б — внешний вид. Двусторонне-симметричные поперечно-расчлененные формы Большая часть известных вендских билатерий (за исключением нескольких форм) имеет "как бы сегментированное" строение. "Как бы" — потому, что сегмент фанерозойских поперечно-расчлененных животных (червей и членистоногих) занимает всю ширину тела, так что левая и правая его половины зеркально симметричны относительно продольной оси тела. У вендских животных половинки «сегментов» (полусегменты называют изомерами) всегда немного сдвинуты друг относительно друга вдоль продольной оси отпечатка. Такой сдвиг можно описать симметрией скользящего отражения. На эту важнейшую особенность строения некоторых вендских животных впервые обратил внимание М.А. Федонкин, а до него асимметрию объясняли деформацией тел в процессе захоронения или вовсе не замечали. В строении неколониальных беспозвоночных фанерозоя симметрия скользящего отражения не распространена. Вендских поперечно-расчлененных животных относят к особому типу беспозвоночных — проартикулятам (Proarticulata), вымершему еще в докембрии. У некоторых проартикулят иногда отмечают внешнее сходство с членистоногими (трилобитами) или кольчатыми червями. Описано около полутора десятков родов проартикулят. Из встречающихся в Архангельской области наиболее интересны Dickinsonia, Yorgia, Archaeaspis, Andiva и Vendia. Дикинсонии (Dickinsonia lissa, Dickinsonia cf. tenuis, Dickinsonia costata) — один из самых известных и распространенных родов проартикулят. Отпечатки дикинсонии выражены в резком отрицательном рельефе. Отчетливо видна ось, проходящая вдоль продольной средней линии отпечатка. Изомеры узкие, гребневидные. Отпечатки асимметричны, у них различаются передний и задний концы. К переднему концу приурочен единственный непарный изомер, окруженный слева и справа загибающимися вперед изомерами. Размер изомеров уменьшается в направлении заднего конца отпечатка, так что задние изомеры в несколько раз короче передних. Видимо , точка роста располагалась на заднем конце тела. Иногда встречаются сжатые отпечатки дикинсонии. Возможно, животные сжимались, когда их засыпало осадком, что свидетельствует о наличии у дикинсонии поперечной и продольной мускулатуры.
распределительные каналы В середине 90-х гг. в одном из местонахождений Зимнего берега Белого моря было собрано два десятка экземпляров дикинсоний весьма своеобразной сохранности. На поверхностях отпечатков четко видны глубокие борозды, ориентированные под углом относительно сегментации (фото 10) . Это распределительные каналы пищеварительной системы, расходившиеся от желудочно-кишечного тракта, который располагался вдоль оси тела. Исходя из соотношений длины и ширины тела, размера и максимального количества изомеров, различают пять видов дикинсоний. Самая крупная в мире дикинсония, длиной 1.5 м, происходит из Эдиакары. На Зимнем берегу Белого моря найден экземпляр длиной более полуметра. Фото 11. Ергия (поздний венд; Архангельская обл., Зимние горы)
Ёргия (Yorgia waggoneri) (фото 11). Отпечатки ергий округлые или слабо удлиненные, с более широким передним и приостренным задним концами. К переднему концу приурочена нерасчлененная область отпечатка. Расчлененная область состоит из первого непарного изомера, который крупнее других и резко выдается на противоположную сторону, и последующих парных, разделенных срединной осью отпечатка. Так же как у дикинсонии, задние изомеры существенно короче передних и образуют острый угол с задним концом оси. Одно из наиболее интересных местонахождений ергий, названное «Ергиевый пласт», расположено на Зимнем берегу. На подошве этого пласта песчаника были найдены негативные отпечатки ергий очень хорошей сохранности. За некоторыми тянется цепочка отпечатков, аналогичных по форме и размерам, но выраженных в позитивном релье- % Щ"\ Самая длинная (4.5 м) цепочка состоит из пятнадцати позитивных отпечатков и одного негативного. Поскольку отпечатки каждой цепочки одинакового размера, очевидно, что все они относятся к одному экземпляру животного . Повидимому, негативный отпечаток является слепком тела животного, а все остальные — его следами. Все отпечатки в цепочке ориентированы нерасчлененной областью по ходу движения, и отпечаток тела, если он присутствует — всегда впереди (фото 12) . Возможно, ергий питались органическим детритом и бактериями, которые плотной слизистой пленкой покрывали отдельные участки морского дна. Животное, брюшная сторона тела которого была покрыта чем-то похожим на мерцательный эпителий, опустившись на дно, выедало под собой участок субстрата (реснички эпителия захватывали и перемещали ко рту органические частицы). Потом оно переплывало на другое место... После того как участок морского дна, на котором паслись животные, был засыпан осадком, их следы смогли сохраниться благодаря плотной органической пленке, на которой они были как бы "выгравированы". В местонахождении "Ергиевый пласт" встречаются и одиночные следы питания дикинсонии аналогичной сохранности, но редко. Реконструкция ергий со следами питания.
Несмотря на столетнюю историю изучения вендских отпечатков, до последнего времени не было удовлетворительного ответа на вопрос, кем были вендские организмы — растениями, животными, грибами или принадлежали иному, не дожившему до наших дней царству. Большинство исследователей считает их многоклеточными животными, возможно, лишь из-за внешнего сходства отпечатков с некоторыми беспозвоночными. Благодаря находкам цепочек следов, заканчивающихся отпечатками оставивших их существ, окончательно доказано, что, по крайней мере, часть венд-эдиакарских организмов была настоящими многоклеточными животными (если передвигались, значит — животные). Хотя, конечно, способ питания этих существ — посредством соскребывания верхней пленки субстрата всей брюшной поверхностью тела — необычен для крупных фанерозойских животных. Археаспис (Archaeaspis fedonkini) (фото 13) . Отпечатки археасписов, выраженные в негативном рельефе, не превышают в длину 1 см. Обширная нерасчленен- ная передняя зона придает археаспису сходство с личинкой трилобита. Трилобиты были самыми распространенными членистоногими палеозойских морей (фото 2). Андива (Andiva ivantsovi) (фото 14). Отпечатки андив слегка вытянутые, более широкие в передней части и более узкие в задней, выражены в негативном рельефе. Передняя часть отпечатка не расчленена. На отпечатках андивы обычно сохраняется органическое вещество (редчайший случай для вендских многоклеточных, не отмеченный за пределами Архангельской области). Возможно, животное обладало плотным покровом или даже неминерализованной раковиной. Вендии (Vendia sokolovi, Paravendia janae) (фото 15, 16). Отпечатки вендий, выраженные в негативном рельефе, не превышают в длину 2 см. Задние изомеры существенно уже и короче передних. В центральной части отпечатка виден след пищеварительной системы, состоящей из центрального канала и боковых отростков .
Двуст оронне-симметричные нерасчлененные формы Кимберелла (Kimberella quadrata) (фото 18) . Отпечатки кимберелл отличаются концентрическим строением и резким отрицательным рельефом центральной части. Предполагается, что животное имело плотный покров, напоминающий неминерализи- рованную раковину, и передвигалось по поверхности осадка с помощью крупной мясистой ноги. Поверхности слоев песчаника, на которых встречаются отпечатки кимберелл, обычно покрыты тонкими валиками, сгруппированными в веерообразные скопления, иногда отходящие непосредственно от отпечатка . Скопления валиков считают следами питания этих животных (валик — слепок с борозды, бывшей на грунте): кимбереллы поедали покрывавшую дно детритобактериальную пленку, выскребая на ней хоботком или щупальцами тонкие бороздки. Внешним видом и уровнем организации кимберелла, вероятно , напоминала брюхоногого моллюска. Реконструкция кимбереллы
Солза (Solsa margarita) (фото 20) . Отпечатки солзы выражены в отрицательном рельефе, обычно немного выпуклы в центральной части и несколько деформированы. По- видимому, животное обладало упругим телом, не твердым, но и не слишком мягким. Отпечатки целиком покрыты радиально расходящимися и многократно ветвящимися валиками. Возможно, тело солзы при жизни покрывали бороздки, но более вероятно, что они образовались посмертно над какими-то внутренними полостями, т. е. , в теле животного была единая система сообщающихся друг с другом внутренних полостей, периферийные тонкие концы которых доходили до края тела (и открывались наружу?) . Открывающаяся вовне система внутренних полостей тела могла быть связана с питанием животного. Например, представлять собой систему каналов, подобную той, что наблюдается у современных губок, получающих пищу вместе с током воды. Установить принадлежность солзы к какому-либо известному типу беспозвоночных пока нельзя. Перистые формы" Особую группу вендских многоклеточных составляют перистые формы или петалонамы. Главную часть отпечатка петалонамы составляет "перо", состоящее из многочисленных мелких "перышек". Вниз от "пера" у многих петалонам отходил стебель с прикрепительным образованием грушевидной или диско- видной формы на конце. Кроме простого двулопаст- ного "пера" бывают трех- и четырехлопастные. Конструкция петалонам очень сложная, в своей организации они сочетают признаки радиально-лучистых ископаемых (центральная ось симметрии) и проартикулят ("перышки" всегда располагаются в чередующемся порядке). В настоящее время удалось восстановить строение лишь некоторых петалонам. У чар- нии (Charnia masoni) (фото 21) и вентогируса (Ventogyrus chistyakovi) (фото 24) "перышки" образованы рядами полузамкнутых камер. Двусторонняя чарния действительно напоминала собой перо. Кроме "пера" у нее, похоже, имелся стебель с прикрепительным диском. Трехлучевой вентогирус походил на яйцо. На отпечатках вентогируса обычно видно два ряда камер с большой непарной камерой на одном конце. В действительности же тело этого животного состояло из трех таких двурядных комплексов. Яйцевидный вентогирус, вероятно, плавал. По уровню организации петалонамы ближе всего к кишечнополо-
стным (морским перьям) и гребневикам. Основная их часть вела сидячий образ жизни, но некоторые, возможно, плавали, медленно передвигаясь в толще воды за счет биения ресничек мерцательного эпителия. Петалонамы были широко распространены в вендских морях. Хотя отпечатки их "перьев" встречаются довольно редко, прикрепительные диски, скорее всего, принадлежавшие этим животным (Cyclomedusa, Ediacaria и др.), являются самым обычным членом вендских ископаемых сообществ. Сравнивать вендские существа с современными и ископаемыми беспозвоночными трудно — слишком они непохожие. Но если мы не находим вендские формы в фане- розое, это вовсе не означает, что они в то время не жили. Может быть, они не сохранялись в ископаемом состоянии или сохранялись, но в таком виде, что мы еще не понимаем, где и как их искать. А возможно, раковины и панцири настолько изменили внешний облик фанерозойских потомков вендских животных, что мы их пока не узнаем. Многое решает Случай. Нужны новые находки. Если кто-то Удачливый найдет, а потом кто-то Догадливый сообразит и сопоставит, то сразу станет ясно: вот они, потомки!
ЛИТЕРАТУРА 1. Иванцов А.Ю. Вендский организм опознается по отпечаткам // Природа, 2003. No 10. С. 3- 9. 2. Иванцов А. Ю. , Малаховская Я. Е. Гигантские следы вендских животных // Доклады АН, 2002. Т. 385, No 3. С. 382-386. 3. Розанов А. Ю. Что произошло 600 млн. лет назад // М.: Наука, 1986. 94 с. 4. Соколов Б. С. Очерки становления венда // М.: КМК Лтд., 1997. 157 с. 5. Станковский А. Ф. Геологические памятники природы северо-запада Архангельской области // Очерки по геологии и полезным ископаемым Архангельской области. Архангельск, 2000. С. 168 -188. 6. Федонкин М. А. Беломорская биота венда // М. : Наука, 1981. 100 с. (Тр. ГИН АН СССР, вып. 342). 7. Федонкин М. А. Систематическое описание вендских Metazoa // Вендская система. Историко-геологическое и палеонтологическое обоснование. Т. 1. Палеонтология. М.: Наука, 1985. С. 70-106. 8. Федонкин М. А. Бесскелетная фауна венда и ее место в эволюции Метазоа. М.: Наука, 1987. 174 с. 9. Федонкин М. А. Загадки вендской фауны // Природа, 1989. No 8. С. 59-72. 10. Федонкин М. А. Холодная заря животной жизни // Природа, 2000. No 9.
Практика БИОЛОГИЯ. ПАЛЕОНТОЛОГИЧЕСКАЯ ЭКСКУРСИЯ А.В.Пахневич Пермь - геохронологический период, получивший свое название от города Пермь, вблизи которого были выходы пород с ископаемыми . РАЗДЕЛ I. ПОДГОТОВКА К ЭКСКУРСИИ Где искать окаменелости Все породы земной коры делятся на три группы. В первую очередь это магматические породы, которые образуются из затвердевшей и остывшей магмы: либо глубоко в земных слоях, либо при извержении вулканов. К ним относятся гранит, сиенит, габбро, диорит, базальт, пегматит, андезит и т.д. Второй тип — мета-
морфические породы. Они формируются за счет перекристаллизации осадочных и магматических пород под действием температуры и давления. К таким породам принадлежат: мрамор, различные сланцы, гнейсы, кварциты и т.д. Нас же интересует третий тип, а именно осадочные породы. Они образуются в результате химического осаждения растворенных солей, за счет выветривания других пород и в результате жизнедеятельности живых организмов. Осадочные породы весьма много- числены — это известняки, пески, конгломераты, галит и сильвинит, глины, галечники, гипс, мергель, мел, нефть, торф, каменный уголь и т.д. Именно в осадочных породах накапливаются раковины, панцири, кости животных, различные остатки высших и низших растений и т.д. Иногда осадочные породы целиком состоят из скелетов или частей живых организмов, например, различные ракушечники и угли. Некоторые породы, которые, казалось бы, образовались за счет химического осаждения, на самом деле являются результатом жизнедеятельности организмов. Например, некоторые отложения серы, бурого железняка, фосфоритов образовались в процессе деятельности бактерий. В других породах окаменелости сохраняются нечасто. Метаморфические породы — мраморы и некоторые сланцы могут содержать окаменелости, а вот магматические породы в единичных случаях. Чаще всего речь идет о породах вулканического происхождения, в которые попали остатки животных или растений во время извержения вулканов. В каких осадочных породах могут быть встречены окаменелости Ископаемые остатки живых организмов встречают в самых разных типах осадочных пород. Сами окаменелости тоже являются источником образования пород, например, каменного угля, ракушечников, спонголитов и т.д. Тем не менее некоторые ископаемые остатки встречаются не во всех осадочных пород, в иных они могут, например, раствориться. Поэтому в этой статье мы хотим перечислить в каких породах можно найти те или иные окаменелости. Кремнистые породы: кремни, яшмы, опоки, трепелы. В них можно найти: радиолярии, губки, диатомовые водоросли, конодонты. Сланцевые породы (различные сланцы — глинистые, горючие, и т.д.). В сланцевых породах встречаются: трилобиты, остракоды, насекомые, головоногие моллюски (аммониты) редко, мшанки, плеченогие, граптолиты, некоторые водоросли, карпоидеи, рыбы. Аргиллиты — глинистые сильно спрессованные породы. В них встречаются: трилобиты, остракоды, мшанки, плеченогие, граптолиты, рыбы. Карбонатные породы: известняки, доломиты, мергели, мел. В них встречаются: двустворчатые моллюски, плеченогие, кораллы, лопатоногие моллюски, брюхоногие моллюски, головоногие моллюски, фораминиферы, различные водоросли, строматолиты, строматопораты, хететиды, кольчатые черви, трилобиты, конодонты, остракоды, тентакулиты, мшанки, иглокожие, очень редко граптолиты, рыбы, остатки высших растений, губки. Кварциты (метаморфические породы). В них иногда встречаются: трилобиты, остатки высших растений.
Глины. В них встречаются: радиолярии, остракоды, двустворчатые моллюски, головоногие моллюски (аммониты и белемниты), мшанки, плеченогие, фораминифе- ры, губки, кораллы, карпоидеи. Пески и песчаники. В них встречаются: двустворчатые моллюски, мшанки, хрящевые рыбы, остатки высших растений, редко фораминиферы, губки, редко кораллы, головоногие моллюски (аммониты и белемниты), остракоды, редко плеченогие, карпоидеи, морские ежи, редко брюхоногие моллюски. Конгломераты и гравелиты (сцементированный гравий). В них встречаются: двустворчатые моллюски, головоногие моллюски (аммониты) крайне редки, мшанки, панцирные рыбы. Углистые породы. В них встречаются: остракоды, остатки высших растений, граптолиты, рыбы, амфибии, некоторые водоросли. Фосфориты. В них встречаются: плеченогие, лопатоногие, двустворчатые, брюхоногие и головоногие (аммониты и белемниты) моллюски, десятиногие ракообразные, мшанки, кольчатые черви (сидячие), иглокожие, губки, фораминиферы, остракоды, хрящевые рыбы, амфибии, остатки древесины, редко кораллы. Алевролиты — песчанистые породы с размером зерен от 0,1 до 0,01 мм. В них встречаются: остракоды, мшанки, очень редко граптолиты, редко фораминиферы. Некоторые группы организмов здесь не упомянуты. Это вызвано тем, что они могут встречаться в самых различных отложениях. Это относится к остаткам рептилий и млекопитающих. Что такое геохронология? Геохронология — наука изучающая возраст горных пород небесных тел, все же главным из которых для этой науки является Земля. В перечень предметов изучения геохронологии входят не только датировки пород, но и события, которые происходили на разных этапах истории планеты. Она делится на два направления относительная геохронология и абсолютная. Возраст Земли оценивается различными специалистами по-разному. Но большинство склоняются к цифре в 5-4,5 миллиарда лет. Откуда могла появиться такая впечатляющая цифра? По расчетам античных естествоиспытателей, средневековых епископов и ученых XIX века возраст Земли колеблется от 3941 года до 2 миллионов лет. Были попытки посчитать возраст океана по скорости накопления осадков на его дне. И эти расчеты приводили к еще большим цифрам: от 11 миллионов лет до миллиарда! Но поскольку скорость осадконакопления в океанах непостоянна доверять таким цифрам было нельзя. Ничего не оставалось делать как собирать разнообразные окаменелости, отмечать в каких слоях они были найдены и порядок следования слоев друг за другом. Так появилась относительная геохронология. Первоначально такому подходу противоречило мнение, что все организмы были созданы богом единожды, или же создавались и позже первого акта творения, но представляли собой точные копии "ранних". Со временем естествоиспытатели пришли к выводу, что виды современных животных изменчивы, так же изменчивы были и вымершие организмы. Ученые замечали, что окаменелости в разных слоях сильно отличаются,
некоторые животные переходят из слоя в слой, а другие исчезнув в одном из слоев не появляются в геологической летописи уже никогда. Для каждого слоя пород были описаны животные и растения, которые характерны только этим слоям. Их назвали руководящими ископаемыми. Позднее удалось установить время появления и исчезновения различных организмов, а также проследить те пути эволюции, которыми они развивались. Описав послойно живых организмов исследователи знали какие из них были более древними, а какие более молодыми. Появились первые попытки разделить всю историю Земли на этапы. Сначала их было всего три: первичный, вторичный, третичный . Проходили десятки лет, земные слои и окаменелости в них тщательно изучались, но сказать на сколько лет один слой древнее или моложе было нельзя. Ученые оказывались перед неразрешимым вопросом, как поступать с породами, в которых совсем не было окаменелостей? К тому же иногда в результате процессов горообразования слои смещались и породы более древние находились выше пород более молодых. Встречались и другие загадки: в отложениях попадались окаменелости более древнего возраста, которые были переотложены в более молодые слои в процессе размывания пород морем. Совершенно неожиданно помощь поступила от ядерной физики. С этого момента начинается история абсолютной геохронологии. Первым попытался выяснить возраст минералов и горных пород Э. Резерфорд. Он прекрасно знал, что находящиеся в природе радиоактивные элементы нестабильны и подвержены распаду, который происходит в виде ядерной реакции. В результате ее ядро радиоактивного элемента распадается и образуется новый элемент и потоки электронов, заряженных ядер или других частиц, которые называется радиоактивным излучением. Реакция прекращается в том случае, если радиоактивный элемент полностью распадается и "превращается" в стабильный элемент. Например, при распаде урана образуются два изотопа свинца и излучаются положительно заряженные ядра гелия. При распаде атома радиоактивного изотопа калия-40 образуется либо аргон-40, либо кальций-40 и электроны. Радиоактивный же рубидий-87 дает стронций-87 и электроны. При радиоактивном распаде атомов образуются строго определенные изотопы стабильных элементов. Если посчитать количество изотопов, которые появились в породе в результате распада, то, зная скорость распада, можно и посчитать возраст породы. Самое важное условие — в этой породе должны быть минералы содержащие когда-то радиоактивный элемент или продукты его распада. Чаще всего такие минералы встречаются в магматических породах, реже в осадочных. На процесс распада большинства атомов не влияют никакие внешние условия: ни температура, ни давление. К сожалению, даже при этом методе возможны ошибки. И палеонтологи учитывают их, датируя обычно окаменелости такими цифрами как 320 плюс-минус 10 миллионов лет. Чем древнее порода, тем ошибка больше. У пород возрастом более миллиарда лет ошибка обычно составляет 100 миллионов лет. Для отложений возрастом не более 6 тысяч лет хорош радиоуглеродный метод, который основывается на содержание в скелетах животных и тканях растений радиоактивного изотопа углерода-14. На сегодняшний день по данным относительной и абсолютной геохронологии построена шкала, которая состоит из ряда подразделений различного ранга. Самое крупное подразделение — эон. Вся история планеты делится на четыре зона: азой (что значит безжизненный), археозой, или архей (в переводе "древнейшая жизнь"), протерозой (что значит "первичная жизнь"), или докембрий (два последних иногда объединяются в один эон криптозой — "скрытая жизнь") и фанеро- зой ("явная жизнь"). Зоны подразделяются на эры — их 6: протерозой делится на три эры — ранний, средний и верхний, фанерозой — на палеозой (эра древней
жизни), мезозой (эра средней жизни), кайнозой (эра новой жизни). Азой и архей подразделений не имеют. В эрах выделяются периоды. Верхний протерозой делится на два периода: рифейский и вендский. Палеозойская эра подразделяется на 6 периодов: кембрийский, ордовикский, силурийский, девонский, каменноугольный (карбон), пермский. Мезозойская эра содержит три периода — триасовый, юрский, меловой. И в кайнозое выделяется три периода: палеоген, неоген, антропоген (иногда четвертичный, или квартер). Ранее два первых периода кайнозоя объединяли в один — третичный. Далее периоды подразделяются на эпохи, эпохи — на века, века — на времена, а времена в свою очередь подразделяется на несколько пор. Векам присваиваются названия географических мест, где выходят и хорошо изучены отложения данного отрезка времени. Времена получают латинские названия тех массовых видов, которые характерны для исследуемых пород. Формы сохранности ископаемых организмов Очень маленький процент, обитавших когда-либо на Земле организмов сохраняется до наших дней. В подавляющем большинстве случаев, основное условие сохранение остатков — окаменение, или фоссилизация. Но не каждый скелет или лист может окаменеть. Органические остатки оказавшиеся на суше часто быстро разрушаются падальщиками и сапротрофами. Процесс выветривания стирают кости и раковины в пыль. Гораздо лучше происходит сохранение остатков в водной среде, особенно в море. Попавшая на дно раковина постепенно погребается все новыми и новыми слоями донных осадков и углубляется в осадочную толщу. Здесь органическая составляющая разрушается, а ее место занимают минеральные вещества поступающие из воды и осадка. Так происходит окаменение. Но на этом процесс не заканчивается. Иногда менее устойчивые исходные минеральные вещества могут перекристаллизовываться в более устойчивые, сохраняя при этом свой химический состав. Например, минерал арагонит может перекристаллизоваться в более устойчивый кальцит, при этом оба минерала представляют собой карбонат кальция. Может происходить и другой процесс — минерализация. При этом первичное минеральное вещество заменяется другим минералом. Например, кальцит иногда замещается пиритом (FeS2) . Внутри полостей раковин, костей и других остатков нередко вырастают друзы кристаллов различных минералов: кальцита, кварца (аметиста) , анапаита, пирита, галенита, марказита, вивианита, флюорита. В течение того времени, что окаменелость находится в окаменевшем осадке (породе) она может подвергнуться сдавливанию вышележащих слоев, разрушению. Поэтому далеко не все, что окаменевает хранится в земной коре миллионами лет. Сохранность окаменевших остатков очень различна. Палеонтологи выделяют несколько форм сохранности. 1. Полная или почти полная сохранность, при которой остаются неразрешенными мягкие ткани. Они могут остаться невредимыми в том случае, если будут недоступны ни падальщикам, ни бактериям- и грибам-деструктурам. Такие условия свойственны вечной мерзлоте. Недаром в ней были обнаружены замерзшие тела ан- тропогеновых млекопитающих, в которых сохранились желудки, наполненные последними обедами животных, и паразитические черви. Длительная жара и сухой климат тоже благодатно влияют на сохранение мягких тканей. Именно при действии таких факторов образовывались мумии египетских фараонов, а также мумии анатозавров, окаменевала кожа (гадрозавры, моноклон) и внутренние органы (сципионикс, тесцелозавр) некоторых динозавров. Сохраняться могут и внутренний органы, в которых есть какая-нибудь неорганическая составляющая, напри-
мер, так происходит с обизвествленными каменистыми каналами иглокожих. Уникальные условия для того, чтобы тела антропогеновых млекопитающих не разрушались, сложились в соленых толщах и горном воске (озокерите), где были найдены тела шерстистых носорогов. В этих осадочных породах бактерии просто не могли развиваться. Известен своими замурованными пленниками янтарь, когда-то представлявший смолу хвойных деревьев. Животные, а это насекомые, паукообразные, лягушки, ящерицы, вязли в смоле и оказывались замурованными на десятки миллионов лет. Иногда в янтаре встречаются и остатки лишайников. Но хорошо сохранились только покровы животных, тогда как внутренние органы разрушились. Помимо янтаря широко известны асфальтовые ловушки. Они найдены в Северной Америке (ранчо Ла-Бреа), в Азербайджане (Бинагады). Они представляли озера, просачившегося на поверхность почвы жидкого асфальта, в котором увязали многие животные. В азербайджанском асфальтовом озере было найдено более 150 видов млекопитающих и птиц, а также несколько видов растений. Важно, что кости дошли до наших дней не потеряв свои органические вещества. Неплохо сохраняется структура тканей растений при их обугливании. Используя специальную методику, палеоботаники смогли узнать о строении эпидермы древних листьев, в том числе и о строении устьиц. 2. Полные или частично сохранившиеся скелетные образования. Это очень распространенная форма сохранности. Твердые скелеты, панцири, раковины животных хорошо окаменевают и более устойчивы к разрушению. Они встречаются целыми или раздробленными. В науке известны случаи, когда животных описывали по одной или двум косточкам (например, позвонкам). 3. Внешние ядра (естественные слепки). Представьте, что раковина моллюска попала в ил. Долгое время ее внутренняя полость была пустой. Позже створки разрушились, а оставшаяся полость была заполнена осадком, который окаменел. Таким образом сформировалось внешнее ядро раковины. Но судьба попавший в ил раковины могла сложиться по другому. 4. Внутренние ядра (естественные слепки). Допустим, внутренняя полость заполнилась илом, который потом окаменел. Со временем произошло разрушение створок, но сохранился внутренний слепок, или ядро внутренней поверхности раковины . 5. Отпечатки. Иногда остатки растений или животных, прежде чем исчезнуть, оставляют в породе отпечаток своей поверхности. Несмотря на, казалось бы, малую для палеонтолога информативность отпечатков и ядер, тем не менее, они могут иметь важное значение. На них можно наблюдать внешнюю и внутреннюю скульптуру раковин, и восстановить внешний вид окаменелости. 6. Следы жизнедеятельности, или ихнофоссилии. 7. Хемофоссилии. В настоящее время методы исследования палеонтологии достигли такого уровня, что ученые умеют выделять из породы не только микроостатки (например, различных одноклеточных, клетки крови), но и химические вещества органического происхождения, например, продукты разрушения хлорофилла. Так в "немых" на первый взгляд породах, палеонтологи-виртуозы находят органические вещества, когда-то находившиеся в живой клетке. 8. Последний тип сохранности не совсем относится к этой градации, потому что речь здесь пойдет о псевдофоссилиях, то есть ложных окаменелостях. Неко-
торые кристаллические образования причудливой формы очень напоминают истинные фоссилии. На такую "уловку природы" иногда попадаются даже палеонтологи. Например, дендриты оксида марганца (МпОг) похожи на ходы каких-то мелких роющих организмов. Недаром и называются они одинаково — фукоиды. А вот с вполне конкретными животными хететидами часто путают стилолиты — вертикальные уступы на границе двух сдавленных слоев. Следы жизнедеятельности Вероятнее всего остатки всех организмов, которые жили на Земле палеонтологами найдены не будут! Мы не узнаем как они выглядели. Многие из них не имели твердого неорганического скелета, который оставался в ископаемом состоянии. Тем не менее изредка от таких существ остаются следы жизнедеятельности, которые они оставили в осадочных породах. В литературе следы жизнедеятельности иногда фигурируют и под другими названиями — биоглифы, ихнофоссилии. Следы жизнедеятельности подразделяются на следующие типы. 1. Следы передвижения (эндоглифы и экзоглифы). Сюда относятся как следы передвижения беспозвоночных, так и позвоночных, например, рептилий. Экзоглифы — следы передвижения на поверхности осадка, эндоглифы — следы передвижения внутри осадка. Это могут быть ходы проделанные зарывающимися организмами. Например, среди таких следов палеонтологами обнаружены норы раков-кротов. Иногда на стенках норок и на поверхности экзоглифов встречаются в виде царапин, полос или других скульптурных элементов следа конечностей животных или щетинок, например, следы щетинок кольчатых червей. Очень редко ученые устанавливают каким животным эти следы принадлежали. Уникальный случай произошел с поверхностными следами передвижения Cruziana — двойными валиками испещренными царапинами. Р. Ф. Геккер интерпретировал их как следы передвижения трилобита Phillipsia. Помимо них были обнаружены следы передвижения трилобитов других родов. 2. Следы питания. К ним относятся самые разнообразные следы жизнедеятельности. Они могут представлять ходы в окаменевшем древнем илу. Но в отличие от простых нор они бывают заполнены разделенным на части осадком. Осадок ничто иное, как пеллеты тех организмов-илоедов, которые пропускали ил через пищеварительную систему и затем порциями выбрасывали через анальное отверстие, поэтому кажется, что ход словно разделен на камеры. К следам питания относятся копролиты — окаменевшие экскременты. В них иногда можно обнаружить окаменевшие остатки пищи и предположить какому животному принадлежит этот копролит. Палеонтологам известны как копролиты позвоночных животных, так и беспозвоночных. Иногда среди костей позвоночных обнаруживаются окатанные камни — это могут быть гастролиты, или желудочные камни. Они использовались рептилиями (например, динозаврами-зауроподами) и птицами в качестве дополнительного средства для перетирания пищи. Изредка гастролиты играли роль балласта для погружения в воду (говазавр, плезиозавры). К следам питания следует отнести и сверления в раковинах беспозвоночных животных. Как правило, они проделаны хищными животными (например, гастроподами) для достижения защищенного тела животного. Хотя существуют сверления и иного толка, но о них позже. Помимо сверлений на раковинах и костях животных встречаются следы зубов или челюстных аппаратов хищников. Например, известны следы укусов на панцирях трилобитах, раковинах плеченогих, следы зубов плезиозавров, мозазавров, ихтиозавров на раковинах аммонитов. Подобные следы встречаются и в растительном мире: погрызы, скеле- тирование, минирование в листьях, ходы в древесине растений.
3. Следы посмертного повреждения. Это могут быть следы деятельности падаль- щиков, сверлящих организмов. Например, в разрушении рифов и раковин участвуют водоросли, которые высверливают мелкие полости и ходы. 4. Жилые постройки. Этот тип ихнофоссилий сходен с некоторыми другими типами, например, со следами передвижения. Ведь те же норки могут являться и следами передвижения и жилыми постройками. К жилым постройкам также относятся высверленные полости в твердом грунте, которые производят некоторые двустворчатые моллюски, морские ежи, или полости в раковинах животных, например, ходы сверлящих мшанок в раковинах двустворчатых моллюсков и плеченогих. В этих случаях сверлящие организмы не причиняют вреда хозяинам раковин. Примером жилой постройки может быть домик ручейника или кольчатого червя. 5. Следы размножения. В качестве примера здесь тоже выступают сверлящие мшанки, так как по их ветвящимся ходам можно определить характер почкования — бесполого размножения. По почкованию кишечнополостных также можно пронаблюдать о характере их бесполого размножения. 6. Следы повреждения от болезней. Среди уникальных находок следует отметить немногочисленные следы болезней, которые отражаются на росте раковин и костей. Например, палеонтологам известны некоторые болезни белемнитов и костей динозавров. 7. Следы мутуалистических отношений. Иногда о таком типе отношений судят по скелетам некоторых организмов. В качестве классического примера симбиоза в палеонтологии известны мутуалистические отношения кораллов-табулят сирингопо- рид и строматопорат, табулят фавозитид и кольчатых червей. В последнем случае известны колонии фавозитид с небольшими полостями, где, между кораллитами, жили полихеты. 8. Следы паразитизма. Не менее редко сохраняются в отложениях древних эр и эти следы. На стеблях морских лилий, как ископаемых и современных, встречены следы жизнедеятельности кольчатых червей-мизостомид. Также на лилия, но уже на их чашечках, в прижизненном положении найдены брюхоногие моллюски платице- расы (Platyceras), правда их принадлежность к паразитам оспаривается. Иногда следы паразитизма встречаются внутри раковин девонских плеченогих. На раковинах и панцирях животных можно найти следы прикрепления или самих обрастателей-комменсалов, но говорить о том причиняли ли они вред или приносили пользу "хозяину" раковины порой очень непросто. Некоторые отношения могли переходить из "безразличных" в паразитические. Не менее сложно классифицировать некоторые следы жизнедеятельности, которые могут относиться сразу к нескольким типам. Иные ихнофоссили непросто вписать в предложенную здесь классификацию. Инструменты палеонтолога Перед отправлением на поиски и сбор окаменевших остатков важно продумать и подобрать оборудование для работы. Такие породы, как глины, пески, некоторые песчаники и изредка даже известняки, разламываются или измельчаются руками, но это скорее исключение, чем строгое правило. Большинство же пород невозможно расколоть без специальных инструментов (если вы, конечно, не хотите колоть как в каменном веке — камень о камень). К тому же необходимо не просто расколоть камень, а изъять из него окаменелость, которая того и гляди рассыплется.
Поэтому вам нужны инструменты, терпение и немного смекалки или обучения. Если вы еще не имеете в арсенале бульдозер или экскаватор, то в вашем наборе должны непременно быть: геологический молоток, зубила, долото, стамески, ножи, лопата (допускается саперная), кисти, иглы, иногда кувалда или лом. Геологический молоток можно заменить любым другим молотком, который с одной стороны заострен, а с другой имеет плоскую поверхность. Не будет лишним захватить молотки полегче, для более тонкой, аккуратной работы. Различных размеров должны быть и зубила. Зубилом побольше можно производить грубую работу — откалывать крупные куски породы. Зубила поменьше предназначены для снятия породы вокруг окаменелости. Одно из зубил может иметь более тонкий резец. Для наиболее тонкой, тщательной, почти ювелирной, обработки необходимы совсем маленькие зубила и иглы — ими производится препарирование образца. Не помешает и хорошо отточенный нож. Иногда при его помощи можно успешно отслаивать сланцевые породы. Лопата или лопатка будет весьма эффективна при раскапывании рыхлых песчаных или глинистых пород. Кисти хороши во время препарирования или извлечения окаменелостей из рыхлых пород. Они позволят очень осторожно убрать соседнюю породу, не повредив окаменелости. Таким образом, иногда извлекаются костные остатки. Во время работы, когда от зубила отлетают кусочки камня, могут понадобится защитные очки. Лучше использовать очки с пластиковыми небьющимися вставками вместо стекол, пластиковой оправой и имеющие створки, которые прикрывают глаза сбоку. Такие очки используются обычно в станочных цехах. Для заворачивания образцов можно брать газетную бумагу или более плотную — крафт. Особо хрупкие образцы можно прокладывать ватой или марлей. Также допускается упаковка образцов в различные коробочки и матерчатые геологические мешочки с притягивающей веревкой. Если какая-то окаменелость развалилась на части — не беда — ее следует склеить при помощи клеев: ПВА, БФ, Момент и т.д. Иногда для извлечения окаменелости из плотной породы используются кислоты: уксусная или соляная. Причем последняя более эффективна, но она же может растворить любую карбонатную раковину. С кислотами будьте осторожны. Если в породе остался только отпечаток окаменелости, можно сделать его про- тивоотпечаток или слепок при помощи гипса. Отпечатки могут быть ценны, так как они отражают внешнюю скульптуру раковин и панцирей, которая сохраняется далеко не всегда. Не забудьте взять бумагу или лучше полевую книжку, миллиметровку, простые карандаши или тушь, фламастеры или маркеры, ластик, метр, и линейку для описания и зарисовки разреза. Шариковые ручки при этом использовать не рекомендуется, так как при попадании на чернильную надпись жидкости, чернила разойдутся. Порой ничто не может так передать особенности геологического разреза, как хорошо сделанная фотография: черно-белая или цветная. Компас не помешает для определения местоположения разреза, что следует указать при его описании. Для транспортировки подойдут рюкзаки, но не полиэтиленовые пакеты, которые по дороге просто разойдутся по швам. Немного стратиграфии и тафономии Стратиграфия — обширный раздел геологической науки. Ее цель сводится к определению относительного возраста геологических отложений. Функции стратиграфии находятся в тесном соприкосновении и даже пересечении с целями геохронологии. Но объектом геохронологии являются отрезки геологического времени, а стратиграфии — слои пород. Еще до появления самой науки слои датировали очень просто: располагающиеся над слоем другие слои моложе его, а самый молодой — самый верхний. Такой ме-
тод датирования пород называется стратиграфическим. Однако он не всегда применим, так как слои пород могут залегать не горизонтально, но и под наклоном, иногда они перевернуты и тогда верхний слой оказывается древнее нижнего. Другой способ основан на описании пород каждого слоя и характерных для них минералов . Однако и по этим данным пласты не всегда можно узнать. Современные методы определения относительного возраста основаны на изучений инверсий магнитного поля Земли в различных слоях, электропроводности пород. Но есть еще один, не менее древний, метод, чем собственно стратиграфический. Его развитием занимается отдельный подраздел стратиграфии — биостратиграфия. Как вы, наверное, догадались, он основан на остатках живых организмов прошлого. В каждом слое пород содержится, как правило, свой своеобразный состав окаменелостей. По ним узнается относительный возраст породы. Например, если в породе встречены трилобиты, значит, это порода палеозойского возраста, если в породе есть раковины плеченогих-гигантопродуктид — мы имеем дело с породой нижнего карбона, если среди кораллов обнаружены гелиолитоидеи — возраст отложений оценивается промежутком — средний ордовик — средний девон, когда в морях жили эти кораллы. Возраст можно определить и гораздо точнее при помощи руководящих ископаемых. Эти ископаемые остатки принадлежат видам живых организмов, которые были очень многочисленны и жили в короткий промежуток времени. Руководящими могут быть остатки различных животных: аммонитов, плеченогих, рыб, граптолитов и т.д. В последнее время все большое внимание уделяется микроокаменелостям — фораминиферам, остракодам, конодонтам, пыльце, спорам. На их основе составляются подробные стратиграфические шкалы различных отложений . Как и в геохронологии, в стратиграфии существуют подразделения геологических слоев, но немного отличающиеся от геохронологических по названиям. Зону в геохронологии соответствует эонотема, эре — эратема, или группа, периоду — система, эпохе — отдел, веку — ярус, времени — зона, поре — звено. Поэтому для описания разреза используются подразделения стратиграфии. Для обозначения мелких стратиграфических подразделений зон и звеньев применяются названия руководящих ископаемых, конодонтов, брахиопод, аммонитов, белемнитов, остракод. Например, одна из зон волжского яруса, юрского отдела получила название часто встречаемого аммонита Virgatites virgatus. Для региональной, или местной стратиграфии разрезов употребляются и другие мелкие подразделения: горизонт, свита, толща, пласт. При исследовании геологического разреза и находящихся в нем окаменелостей важно обратить внимание на особенность их захоронения. Эти закономерности изучает тафономия. В начале можно провести простые подсчеты по относительному количеству окаменелостей. Для этого используется метод "Палеонтологического квадрата". На хорошо расчищенной поверхности пласта закрепляется квадратная деревянная рама (размер 1x1 м или иной). На деревянных бортах наносятся метки через каждые 10 см. К бортам привязываются веревочные рамы с такими же отметками. Таким образом отмечается плотность окаменевших остатков на определенной площади. Обратите внимание, как распределены окаменелости внутри квадрата: они разрознены, скучены, распределены почти равномерно. Поскольку палеонтологи имеют дело не с биоценозами, а с сообществами ископаемых остатков, ориктоценозами, важно определить каковы их источники формирования. В ориктоценоз попадают помимо бентосных организмов также нектонные,
планктонные, плейстонные, нейстонные организмы. Многие из них до попадания в место дальнейшего захоронения переносятся морскими водами на многие километры (это может касаться и бентоса). Из-за этого некоторые окаменелости бывают потерты, окатаны или сильно раздроблены. Ископаемые остатки сохранившиеся в прижизненном положении называются автохтонными. Прежде всего, к ним относятся организмы, которые закреплялись или на дне или в почве. Если остатки организмов не сохранили прижизненного положения, но и не были отнесены от места обитания, такие остатки называются субавтохтонными. Один из признаков субавтохтонных остатков (но не единственный) отсутствие окатанности и других следов перемещения. Аллохтонное захоронение образуется после транспортировки. Иногда такие окаменелости бывают переотложенными, то есть перемещенными из соседних слоев. По ископаемым остаткам можно определить и другия условия их захоронения. Например, если у исследуемого участка дна было сильное течение, все вытянутые конусовидные раковины останутся повернутыми по направлению этого течения. Если в районе формирования осадков часто происходили штормы, в породе, например, в темпеститовом известняке, будут перемешены окаменелости самых разных размеров: от маленьких раковин фораминифер до крупных раковин моллюсков. В прибрежной зоне все остатки будут отсортированы волнами прибоя по размерным группам. Иногда можно говорить и о скорости накопления донных осадков. Например, на некоторых верхнемеловых белемнитах встречаются самые разнообразные обрастатели, которые поселились на них после смерти животного: это мшанки, шестилучевые кораллы, устрицы, фораминиферы, усоногие раки, серпулиды. Если животные обрасли белемнит со всех сторон, значит, он долго плавал в толще воды, за счет наполнения его газами, образовавшимися при разложении тела животного. А если животные поселились на одной стороне ростра, значит он долго лежал на дне, а скорость отложения осадка была маленькой. Наоборот, когда следы передвижения животных по поверхности дна или на берегу хорошо сохранились и четко различимы, значит они были очень быстро погребены осадком, так что вода их не успела размыть. И это не единственные выводы, которые можно сделать внимательно присмотревшись к окаменелостям. Палеоэкологические реконструкции Не следует воспринимать найденные окаменелости как "бессловесные" камни, сохранившиеся в породе. Каждая из них может рассказать свою историю захоронения и помимо этого историю существования самого живого организма и того ископаемого сообщества, в которое он входил. Внимательно изучите найденные окаменелости и слои породы вместившие их. Вы сможете узнать в каких условиях обитали ископаемые животные и растения, одним словом произвести палеоэкологическую реконструкцию. Подобного рода исследования проводятся в сравнении и по аналогии с современными организмами и сообществами. К изучению этой проблемы можно подойти с разных сторон. Вы можете обратить внимание на экологию отдельных организмов или таксонов, реконструировать условия обитания или же воссоздать сообщества ископаемых организмов и их смены. В первом случае необходимо внимательно изучить каждую окаменелость. Если это, например, морское животное определите к какой трофической группе оно принадлежит, где оно обитало на дне, в толще воды или на ее поверхности. Если это бентосный (донный) обитатель, то к какой группе бентоса он относится (подвижный, неподвижный; прикрепленный, свободнолежащий; зарывающийся частично или полностью или обитающий на поверхности дна). В некоторых случаях ископаемые остатки захораниваются в прижизненном положении (колонии кораллов,
губки, мшанки, плеченогие). Изредка можно обнаружить целые ассоциации организмов сохранившихся в прижизненном положении. Проведите такие реконструкции не для отдельных организмов, а для групп животных принадлежащих к одному таксону. Например, воссоздание характера распределения на дне плеченогих или моллюсков. Чаще всего на раковинах моллюсков, плеченогих, стеблях морских лилий и других эпибентосных животных встречаются обрастатели-комменсалы: полихеты- серпулиды (Serpula, Spirorbis), инкрустирующие мшанки, кораллы, хететиды, губки, плеченогие, двустворчатые моллюски, усоногие раки, фораминиферы. Поселения комменсалов на раковинах животных-фильтраторов обычно происходит по краям створок, рядом, где проходят потоки воды, богатые пищей. Некоторые организмы поселяются не на поверхности раковин, а в их толще, высверливая в створках ходы (мшанки, водоросли, грибы, губки, полихеты, форониды). Иногда это происходит уже после смерти хозяина. Можно обнаружить и сверления хищных брюхоногих моллюсков. Важную информацию несут следы мутуалистических и паразитических взаимоотношений. Во многих породах есть следы жизнедеятельности в виде нор, каналов, ходов, сверлений твердого грунта (подробне см. в статье "Следы жизнедеятельности"). Отметьте особенности строения этих следов, их ориентировку в породе, сочетание с другими ископаемыми остатками. Изучив отдельные окаменелости и остатки организмов принадлежащих разным таксонам можно приступать к реконструкции условий обитания и древних биоценозов . При определении условий обитания учитываются не только группы найденных в породе организмов, но и особенности их захоронения (тафономия), характер самой породы (литология). В начале поговорим о типе водоемов, в которых отлагались слои исследуемых вами отложений. Это могут быть морские акватории или пресные водоемы. Определяют это по составу остатков вымерших организмов. Отложения пресных водоемов будут содержать богатые растительные остатки, пресноводных рыб, рыбообразных, наземных позвоночных, насекомых (в том числе водных, например, домики ручейников), пресноводных моллюсков, ракоскорпионов, листоногих ракообразных, губок. Обитатели морей и океанов гораздо более многообразны. Но морские бассейны различаются по степени солености. В водах с нормальной соленостью жили кораллы, иглокожие, трилобиты, лопатоногие моллюски, часть двустворчатых и брюхоногих моллюсков, плеченогие, головоногие моллюски, водоросли-макрофиты и другие организмы. Фауна лагун, заливов, где соленость бывает повышена, значительно беднее — это некоторые двустворчатые и брюхоногие моллюски, некоторые ракообразные, иногда плеченогие. В водах с пониженной соленостью плеченогих, за исключением Lingula и близких родов, нет. Обычно здесь встречаются рыбные остатки, брюхоногие и двустворчатые моллюски, ракоскорпионы, фораминиферы, бесчелюстные. По наличию разнообразных представителей фауны и флоры можно определить глубину бассейна. Если в отложениях встречаются брахиоподы-лингулы, норы раков- кротов , обызвествленные талломы водорослей — это явно прибрежные фации. Присутствие рифогенных построек также свидетельствует о формировании исследуемых пород на небольшой глубине. Для водорослей предел их вертикального распространения можно назвать точно — до 100 м! Если в отложениях много кораллов: табулят, гелиолитоидеи, шестилучевых, четырехлучевых, это значит, что во время их существования на данной территории были мелководные морские участки, так как многие кораллы зависимы от солнечного света. Возможно, у древних вымерших кораллов, и точно у шестилучевых, в мягких тканях находились симбиоти- ческие водоросли зооксантеллы, которым, как и другим растениям, нужен свет для фотосинтеза.
По остаткам живых организмов можно иногда судить о том, в каком климате обитали организмы. Такую информацию можно получить, изучая остатки наземных растений. Сухость климата (аридность) или избыточная влажность, низкие температуры всегда отразятся на морфологии и анатомии органов растений. О степени подвижности воды можно судить по некоторым остаткам живых организмов. Например, кораллы чаще встречаются в акваториях с высокой подвижностью водных масс. Значительное количество роющих организмов (= некоторых следов жизнедеятельности) служит показателем спокойности вод. Характер донного грунта без труда определяется по ископаемым остаткам. Если в породе встречаются колонии мшанок, кораллы, хететиды, якорные и прирастающие плеченогие, прирастающие и биссусные двустворки, текоидеи, черви- серпулиды, губки — значит хотя бы часть донного грунта была твердой. Если в слое есть зарывающиеся двустворки и гастроподы, зарывающиеся плеченогие, следы ходов внутри или на поверхности ила, лопатоногие моллюски - на лицо присутствие мягких илов. Зачастую в породах сочетаются зарывающиеся в ил и прикрепляющиеся к твердому дну животные, то есть в условиях этого дна был распространен как твердый, так и мягкий грунт. Но встречаются слои, где находятся только зарывающиеся или свободнолежащие формы или наоборот только прикрепляющиеся . Пример тому сообщества твердого дна. Одно из таких сообществ было изучено в девонских отложениях Псковской области. На поверхности сохранившегося твердого дна были найдены прирастающие брахиоподы, текоидеи, корневые образования морских лилий, сверления в толще породы и скелетных остатках прирастающих животных. Хорошо сохраняется ископаемое дно на границе двух слоев — на самой вершине исследуемого слоя. Оно может быть и твердым, тогда здесь наверняка окажутся ископаемые остатки организмов в прижизненном положение. Не всякое скопление окаменелостей является остатками древнего биоценоза — палеоценоза. Если организмы, обитавшие на дне, сохранились в прижизненном положении или хотя бы на месте своего обитания, только тогда можно говорить о палеоценозе. Чаще всего мы имеем дело с ориктоценозом — сообществом ископаемых организмов, куда входят не только бентосные, но и нектонные, планктонные организмы. Информация о ориктоценозе тоже важна. Выясните какие группы организмов в него входят, посчитайте их относительное количество или процентное соотношение. Относительное количество можно выражать в следующих категориях по степени увеличения: встречается единично, редко, часто, обильно, фоново. Считается процент крупных или мелких этологических группировок (по образу жизни): например, бентос, нектон, планктон, плейстон, нейстон; или типы бентоса: подвижный, неподвижный; эпифаунный бентос (на поверхности осадка), се- миинфаунный бентос (частично зарывающийся), инфаунный бентос (зарывающийся); свободнолежащий бентос, бентос прикрепленный, подвижные бентос. Эти подсчеты можно выразить графически в виде гистограмм и диаграмм. Таким же образом можно посчитать трофические группировки бентосных организмов или всего ориктоце- ноза. Например, каково количество детритофагов, падальщиков, фильтраторов, хищников, растительноядных организмов; или же количество подвижных и неподвижных сестонофагов, сортирующих и несортирующих детритофагов. В последнее время все чаще на основе собранного материала исследователи рисуют реконструкцию образа жизни живых организмов и их сообществ. Если же все-таки вы имеете дело с палеоценозом, то его следует изучить как можно более подробно. Палеоценоз называют родовыми названиями самых массовых встречающихся в нем организмов, например, палеоценоз Cyrtospirifer— Ripidiorhynchus (в данном случае это плеченогие). Организмы в нем могут быть объединены в разнообразные ассоциации, которые именуются по названиям самых массовых видов. Например, ассоциация Cyrtospirifer archiaci—Ripidiorhynchus
дов. Например, ассоциация Cyrtospirifer archiaci—Ripidiorhynchus griasica, ассоциация Evlanoceras evlanense—Ripidiorhynchus brodicus, ассоциация Athyris concentrica—Parallelodon orelianus. На протяжении всего слоя и в пограничных слоях можно проследить сукцессию — как изменялось это сообщество за тысячи лет. Подобные примеры есть в современной палеоэкологии. Например, были исследованы ископаемые рифы от начала поселения на мягком илистом дне раковинных животных и увеличения количества твердого субстрата до появления первых рифо- строителей и полного формирования рифа. Правила всех палеонтологов Правил изучения местонахождений ископаемых организмов и самих окаменелостей у палеонтологов множество. Но есть среди них главные, невыполнение которых, весьма понижает ценность исследования и сборов. Два из них — описание исследуемого геологического разреза и составление подробных этикеток. Вначале вы делаете общее описание местонахождения разреза, подробно записывая его приметы (особенно если он естественный) ; где он находится, в какой области, в каком городе, селе, на берегу реки или озера и т.д. Выясните его расположение относительно сторон света. Описание разреза составляется в виде схематичного рисунка с указанием важной информации о проведенной на нем работе и словесными комментариями. В полевой книжке вы делаете схематичный рисунок разреза и отмечаете какими породами образованы все его слои. Для удобства каждый слой обозначается цифрой. Обязательно необходимо указывать мощность всего разреза и отдельных слоев. Для каждого слоя отмечайте в виде схематичных знаков наличие окаменелостей, следов жизнедеятельности, присутствие каких-нибудь включений в породе (линзы кремня, фосфоритовые гальки и т.д.). Справа от рисунка запишите описание для каждого из слоев, включив в него информацию о цвете породы, ее текстуре, твердости, минеральном составе, ископаемых остатках и другие особенности каждого слоя. Выясните абсолютно горизонтально лежат эти породы, если нет, то измерьте угол их наклона. Следует вносить в описание информацию о наличие корневых растительных остатков, знаков ряби, знаков течения и т.д. Уделите вниманию пограничным породам у перехода одного слоя в другой. Если в каком-то из слоев вы отобрали образец на выделение из него конодонтов, обязательно укажите это на схеме разреза . Этикетка — это паспорт окаменелости. В этикетке указана основная информация о ней. Фоссилии, происходящие неизвестно откуда, без указания возраста и т.д. теряют свою ценность. Чтобы избежать этого на каждой экскурсии, каждую окаменелость необходимо снабжать этикеткой. Этикетка делается из плотной бумаги. Записи производятся при помощи карандаша (только не химического) или ручки, чернила которой не расплываются при попадании воды. Подготовьте этикетки заранее, перед экскурсией. На каждой из них должно быть указано учреждение (школа, лицей, институт), которое проводит экскурсию. Уже в полевых условиях вы записываете о окаменелости всю информацию. Вначале записывается полевое определение остатка, затем возраст, с указанием слоя, из которого был взят образец. Далее следует название места экскурсии и его точ-
ного адреса (область, край, близлежащие населенные пункты, водоемы). Не забудьте указать дату сборов, фамилию собравшего и определившего окаменелость. Каждой окаменелости присваивается полевой номер. Если образец взят для каких- то исследований (микропалеонтологических, литологических), это нужно отметить в этикетке. Теперь паспорт окаменелости готов, все палеонтологические правила соблюдены — пора отправляться в лабораторию, для дальнейшей работы с фоссили- ей. После экскурсии: работа в лаборатории По возвращению с экскурсии не спешите сразу же приступать к определению окаменелостей и их возраста. Гораздо полезнее будет терпеливо подготовить окаменелости к определению. Сперва завидите тетрадь и картотеку, где вы будете фиксировать все ископаемые остатки поступившие в коллекцию. На карточку или в тетрадь записывается вся та информация, которая содержится в этикетке, а позже туда записывается и название организма. Обязательно введите нумерацию. Ее можно сделать следующим образом. Нумерация может быть двойной, например, сначала пишется цифра обозначающая номер экскурсии или экспедиции, затем номер образца. К примеру: 3/456 — образец найденный во время третьей экскурсии под номером 456. Иногда к номеру образца могут добавляться одна или две латинские буквы, обозначающие группу организмов, которой принадлежит окаменелость. Например, 62/34Т — трилобит собранный во время 62 экскурсии под номером 34. Номер важно записать не только на карточке, но и на самом образце. Для этого на окаменелости при помощи штриха наносится белая полоса (слой штриха не должен быть очень толстым), а на ней тушью пишется номер. Если никаких дополнительных работ с окаменелостью производить не нужно, она помещается вместе с этикеткой в отдельную коробку. Мелкие окаменелости можно поместить в небольшие полиэтиленовые пакетики или в пробирки. Чаще же работа с окаменелостью начинается с препарирования. Первым делом она очищается от лишней породы. Производя такого типа работу, никогда не спешите. Сначала внимательно рассмотрите ее: нет ли в ней трещин, с какой стороны окаменелости удобнее будет удалять породу, оцените, что именно будет необходимо убрать (в этом вам наверняка поможет интуиция). При этом используются различные инструменты от молотка и зубила, до игл и кистей. Под препарируемую окаменелость необходимо подложить мешочек с песком или какой-то мягкий материал, чтобы она не разбилась, и не была повреждена противоположная ее сторона, лежащая на твердой поверхности. Работа может быть долгой и требует терпения, внимательности, осторожности. Иногда используется химическое препарирование, например, при помощи кислот. Чаще всего используются две кислоты: уксусная (СН3СООН) и соляная (НС1). При этом все остатки с карбонатным скелетом растворяются. Обычно кислоты используют для выделения из карбонатных пород фосфатных и кремниевых окаменелостей. Помните, что прежде чем начинать химическое препарирование, необходимо ознакомить учащихся с техникой безопасности в работе с кислотами! Первая кислота более слабая. Она используется для извлечения костей позвоночных, конодонтов. Чтобы выделить из породы конодонты, нужно исследуемый образец на сутки погрузить в емкость с 7-9%-ной уксусной кислотой. Через 24 часа часть породы раствориться, а в осадке останутся нерастворимые окаменелости, в том числе конодонты. Их следует достать из емкости. Далее порода вновь погружается в кислоту. И так до тех пор пока вся порода не раствориться. Обратите внимание, какие конодонты находились на поверхности породы, то есть появились в осадке через сутки, а какие были в глубине .
Если при механическом препарировании окаменелость раскололась ее необходимо склеить. Для этого подходят перечисленные в статье "Инструменты палеонтолога" клеи, а ко всему прочему специальные лаки (гайзельтальлак, цапонлак, шеллак, раствор целлулоида в ацетоне). Бывает важно пропитать окаменелости перед работой с ней или чтобы она не разрушилась в результате длительного хранения. Для этого используются клеи: столярный, ПВА и гуммиарабик, целлулоид в ацетоне (для его изготовления с фотопленки горячей водой смывается эмульсия, а далее пленка растворяется в ацетоне). ПВА разбавляется с водой, 300 г столярного клея разводится в литре воды, а при растворении гуммиарабика обязательно используется небольшое количество сахара. Пропитанные растворами окаменелости нужно хорошо просушить. Для изучения некоторых ископаемых остатков существуют разнообразные методики исследований. Например, изготовление шлифов. В шлифах изучаются кораллы, мшанки, водоросли высшие растения, плеченогие. Если делается прозрачный шлиф, то образец пришлифовывается с двух сторон, при помощи специальных порошков с различным диаметром зерен. После того, как одна из сторон пришлифована, окаменелость этой стороной прикрепляют при помощи канадского бальзама к стеклу и шлифуют следующую сторону, достигая постепенно совершенно прозрачного шлифа. Вторая сторона также закрывается стеклом. Плеченогих пришлифовывают иным способом. Шлифование производят по направлению от макушки раковины к противоположному ей переднему краю. Через определенное расстояние производят зарисовку тех элементов внутреннего строения, которые видны на шлифе. И так до тех пор пока вся раковина не будет расшлифована. Теперь зная внутреннее строение раковины брахиоподу можно определять. Определение ископаемых организмов Прежде чем начать определение ваша задача состоит в том, чтобы как можно точно узнать окаменелости какого возраста были найдены. Это вы можете сделать сами. По руководящим окаменелостям можно предположить к какому геологическому периоду они принадлежат. Значительно сложнее стоит задача в определении других стратиграфических или геохронологических подразделений, например, эпох, ярусов, горизонтов или зон. Для этого понадобится специальная научная литература, в которой будут указаны руководящие окаменелости для этих мелких подразделений. Возможно, какую-то информация можно получить у специалистов — геологов или палеонтологов, или в краеведческих музеях. Не лишним будут атласы руководящих форм или научные монографии посвященные различным группам растений и животных, остатки которых встречаются в области, где проходили ваши изыскания. Для определения необходимо вооружиться какими-нибудь увеличительными приборами: лупами, бинокуляром, микроскопом. Чтобы без труда понимать описания окаменелостей и ключи для их определения, необходимо неплохо знать строение тех или иных организмов. Запаситесь терпением и приступайте к определению!
РАЗДЕЛ II. ЭКСКУРСИИ Подраздел 1. Естественные обнажения В случае, если пласты осадочных пород выходят на дневную поверхность и выход этот не образовался под воздействием деятельности человека - это и называется естественным обнажением. К ним относятся обрывы рек и морских берегов, овраги, карстовые воронки, склоны гор, пещеры, торфяные болота, поверхностные выходы осадочных пород, где лежащий почвенный слой разрушен выветриванием (например, пустыня). Если искусственные выходы осадочных пород (например, карьеры, котлованы, шахты) хорошо известны геологам и палеонтологам, достаточно неплохо изучены, то естественные обнажения могут оказаться мало известными и плохо изученными, особенно в том случае, если образование карстовой воронки или размыв берега произошел совсем недавно. Поэтому естественное обнажение может оказаться уникальным для исследований еще неизученной флоры и фауны. Такие обнажения имеют большую ценность. Но в то же время не исключено, что это будет разрез маленькой мощности или породы будут задернованы растительностью и разрушаются под ее воздействием и за счет влияния выветривания. Экскурсия на берег реки или ручья Геологическая деятельность водных масс огромна. Вода точит и разрушает породы, даже такие, как граниты, которые, казалось бы, могут без изменений сохраниться невредимыми миллиарды лет, ведь твердости минералов входящих в них высока. Через десятки метров гранитная галька может стереться в песок. Морские соленые воды разъедают в прибрежных скалах причудливые пещеры, гроты, арки, колонны. Речные потоки глубоко прорезают в скалах и в осадочном чехле равнин себе путь, унося оставшиеся обломочный материал за многие километры вперед. Именно реки могут формировать часть донных морских осадков. Из устья реки в море поступают песок, глина, галька, которые составляют морские терри- генные осадки. Не раз в истории палеонтологии вода помогала исследователям в поисках окаменелостей. Известная собирательница и коллекционер окаменелостей юная англичанка Мэри Эннинг собирала окаменевшие остатки юрских животных на берегу английского графства Дорсетшир. Морские волны размывали осадочные породы береговых скал, в которых обнажались кости морских ящеров плезиозавров и ихтиозавров, летающих ящеров. Для известного советского палеонтолога, чьим именем назван Палеонтологический музей в Москве, Ю.А. Орлова судьбоносную роль сыграли раскопки В.П. Амалицкого на берегу реки Северная Двина. Это определило профессию всей жизни Ю.А. Орлова — профессию ученого-палеонтолога. И уже, будучи именитым специалистом, Юрий Александрович часто проводил раскопки по берегам рек Иртыш, Бетекей, Кубань. Часто естествоиспытатели, изучавшие геологические слои Москвы и ближайшего Подмосковья, собирали коллекции по берегам Москва-реки, Яузы, Пахры. Выходы осадочных пород, содержащих окаменевшие остатки обычно можно наблюдать на крутом обрывистом берегу реки. Размыв почву и слои породы, речные воды обнажают те пласты, которые обычно не выходят на дневную поверхность. Эти породы могут быть различного возраста и происхождения. Весь обрывистый берег могут составлять слои континентального происхождения, представленные моренной четвертичной глиной и песком, а может быть и так, что под небольшим слоем
почвы находится многометровая толща, например, девонских известняков. Подобный случай автор наблюдал в среднем течении Дона и по берегам его притоков в Липецкой области. Чтобы предположить породы какого возраста могут присутствовать в речном обрыве, необходимо знать геологическое строение земной коры в вашем месте жительства. Это не так трудно. Во многих областях проводились бурения земной коры, в результате которых геологи узнавали ее строение в данной точке и возраст слагающих ее пород. Эта информация, наверняка, должны быть в краеведческом музее. Узнав очередность, мощность и возраст геологических слоев , находящихся под почвенным слоев, подкрепив свои знания дополнительной литературой, вы можете предположить какие ископаемые остатки следует ожидать в слоях речного берега. Хорошо если окаменелости залегают в обрыве берега, а не вымыты из пород водой. Такое может произойти во время весеннего половодья, когда уровень воды в реке повышается и исследуемый берег оказывается под водой. В той же Липецкой области автору удалось увидеть такие отложения, когда раковины девонских бра- хиопод были вымыты из известняков и их не нужно было извлекать из породы — раковины целыми россыпями лежали на берегу. Если окаменелости не далеко уносятся водой от слоя, где первоначально находились — это хорошо, но бывает так, что река пронесет эти остатки некоторое расстояние и потом они окажутся на берегу. Такие окаменелости выглядят окатанными, словно происходят они из морены. Подобное явление происходило и миллионы лет назад с тех пор как на Земле появились первые реки. Однажды в девонских отложениях были найдены силурийские окаменелости. Все они были сильно окатаны. Изучив осадочные породы, из которых состояли эти слои, и загадочные окаменелости палеонтологи пришли к выводу, что в девоне в изучаемом районе было устье девонской реки, которая вымывала из берегов силурийские окаменелости и переносила в море. Иногда пользу для палеонтологических изысканий могут принести даже небольшие речушки и даже ручьи и родники. Они тоже вымывают из стен своих берегов, оврагов окаменелости, которые также ценны. Один пример. На севере Московской области есть небольшая речка Волгуша. Рядом находятся овраги по склонам которых выходят нижнемеловые песчаные отложения. Они не часто встречаются в Подмосковье, поэтому эти слои имеют ценность для палеонтологов и любителей. Фауна здесь небогатая, в основном аммониты. Но найти ее в склоне оврага не всегда легко, тем более, если он сильно зарос растительностью. А вот по берегам реки, воды которой размывают те же нижнемеловые пески шанс найти аммонита больше. Что касается техники безопасности, то в данном случае рекомендации будут простые. Если берег очень обрывистый, высокий и крутой проводить раскопки в нем нужно предельно внимательно, чтобы не сорваться с обрыва. Если берег состоит из песчаных слоев остерегайтесь их осыпание, потому что это может привести к печальным последствиям. Если все правила техники безопасности соблюдены, инструмент для работ готов (какой он зависит от типа пород), можно приступать к поискам заветных окаменелостей. И тогда вы, возможно, сделаете новые открытия богатых окаменелостя- ми местонахождений, как наши знаменитые соотечественники. Овраги, воронки, пещеры, пустыни Различные процессы, которые формируют всевозможные понижения рельефа, разрушают почвенные слои, точат твердые скалы, производят для палеонтолога, как
специалиста, так и для любителя, некоторую полезную работу. То, что в течение миллионов лет было скрыто от чьих-либо глаз, оказывается на дневной поверхности . Временные потоки, устремляясь по наклонной плоскости в любые, хотя бы совсем небольшие, низины размывают почву и лежащие ниже породы и постепенно образуют овраги. В результате в склонах и на дне оврагов обнажаются породы разного геологического возраста. Наиболее удобен для сборов овраг, образовавшийся недавно. Дело в том, что его склоны не задернованы растительностью и не покрыты современными отложениями. Если же овраг задернован, но вам точно известно, что под почвенным слоем неглубоко залегают породы богатые окаменело- стями, придется пользоваться лопатами для снятия почв и растительности. Гораздо удобнее, если на дне и склоне выходящие подземные воды размывают подпочвенные отложения и выносят окаменелости на поверхность. Подобные вымываемые окаменевшие остатки поздней юры автор наблюдал в одном из оврагов Кунцева в Москве. В оврагах можно обнаружить ископаемые остатки разного возраста. Находили в оврагах и кости антропогеновых млекопитающих, и ископаемую флору и фауну мелового и юрского периодов, и окаменелости девона. Но это не значит, что только окаменелости перечисленных возрастов вы можете обнаружить. Благодаря деятельности вод, но только подземных, образуются карстовые воронки и пещеры. Если естественные пещеры связаны с горами, то карстовые воронки могут появиться в той местности, где последний раз горные массивы простирались миллионы лет назад. Карстовые воронки можно наблюдать и на территории Русской платформы, например, в Липецкой, Ивановской, Ленинградской, Тульской областях. А образуются они в процессе размывания и растворения различных пород: известняков и доломитов, гипс и каменная соль (галит). Верхний почвенный слой проваливается и размывается и на ровной поверхности появляется яма. Собирать здесь окаменелости не всегда безопасно, поскольку могут обвалиться стенки ямы или просто-напросто можете застрять в узком проеме, может произойти и провал дна воронки. Пещеры интересны тем, что иногда у входа, не заходя в опасные лабиринты, обнаруживаются остатки животных, которые обитали здесь некоторое время назад. Чаще всего это остатки кайнозойских позвоночных. Если окажетесь в пещере, помните, что заходить в дальние коридоры не следует, работать лучше на входе. Известны многочисленные случаи, когда люди, иногда даже опытные, терялись в пещерных лабиринтах. Лучше всего осматривать ее вместе со специалистом- спелеологом, который не раз бывал в этом месте. Помимо водных потоков в активном выветривании пород участвуют ветра, солнечные лучи, атмосферные осадки, перепады суточной температуры, лед. Многие из этих факторов влияют на разрушение горных пород в пустыне, особенно в каменистой. Так как растительность здесь скудна и хорошо развитого почвенного слоя нет, горные породы находятся на поверхности под постоянным воздействием выветривания, постепенно разрушаются. При этом обнажаются и окаменевшие остатки ископаемых организмов. Выветривание сыграло важную положительную роль в разрушении пород в пустыне Гоби (Монголия, Китай), где в выходящих на поверхность земли породах палеонтологи обнаружили настоящую сокровищницу ископаемых остатков различного возраста, среди которых было множество скелетов динозавров .
Экскурсия на торфяник Подобную экскурсию нельзя причислить к числу обычных палеонтологических маршрутов. Проводя ее можно узнать и найти больше интересного и удивительно, чем только окаменевшие (в данном случае обугленные) остатки. Если наблюдаемый вами торфяник является частью функционирующего болота, а не просто местом разработки горючего ископаемого, то у вас есть возможность исследовать современный животный и растительный мир, да еще узнать каким было это болото тысячи лет назад. Следует, конечно, помнить, что проводить здесь экскурсию нужно очень осторожно. Мы не советуем вам посещать опасные и неизвестные болота и торфяники. Горящие торфоразработки также представляют большую опасность для жизни. Если вы уверены, что ваше болото или торфяник не представляет никакой опасности проведение экскурсии вполне возможно. Торф образуется из отмерших остатков растений, которые не перегнивают, а в присутствии большого количества воды и при дефиците кислорода, обугливаются. Как правило, возраст такого торфа исчисляется не миллионами, а тысячами лет, то есть слои торфа по возрасту относятся к антропогеновому, или четвертичному периоду. Известны немногочисленные исключения из этого правила. Среди бурых углей Подмосковного угольного бассейна был найден торф каменноугольного возраста . Одним из важнейших современных торфообразователей являются мхи из рода Sphagnum (сфагнум). На Земле современных видов этого мха насчитывается около 350. Помимо сфагнумов в образовании торфа принимают участия различные осоки (Сагех), злаки (например, тростник (Phragmites)) и другие растения. Прирост торф за год на разных болотах отличается. Он колеблется от 0,5 мм до 1 см в год. Торфяники известны как место обнаружения интересных и ценных палеонтологических и археологических находок. В торфе находили мумии шерстистых носорогов (Coelodonta antiquitatis), древних людей и предметы их быта, деревянные постройки, хорошо сохранившиеся скелеты животных. Например, в Рязанской области был обнаружен полный скелет большерогого, или торфяного оленя (Megaloceros gigantea). В антропогене эти животные, наряду с мамонтами и другими крупными млекопитающими, населяли открытые пространства Европы и средней полосы России. Роскошным рогам торфяного оленя могли позавидовать все представители этого семейства, ведь ни у одного оленя, когда-либо жившего на Земле, таких тяжелых и больших рогов не было. По данным палеонтологов масса его рогов могла достигать 40 кг! Но такие остатки в торфе встречаются редко, поэтому в качестве основного объекта исследования мы предлагаем обугленные растительные остатки, из которых состоит торф. Они могут быть представлены отдельными листьями или их фрагментами, корнями, плодами, шишками, семенами, пыльцой, спорами, отдельными побегами растений, возраст которых может варьировать от нескольких лет до сотен и тысяч лет. Для сбора слоев торфа вам может понадобиться лопата, полиэтиленовые пакеты, плотная бумага, мешочки, металлическая посуда с крышкой, стеклянные пробирки. Ограничиваться взятием лишь поверхностного слоя торфа не следует. С целью проследить более полную картину смены растительности болота палеонтологи используют узкий ящик из оцинкованного железа, который продавливают через торф. Снизу подрезают лопатой, и получается монолит из торфа, на котором хорошо видны чередующиеся слои. Чтобы монолит не рассыпался, на его поверхность на-
носят закрепитель: раствор желатина или целлулоидный лак. Затем монолит осторожно транспортируется в лабораторию, где его изучают. Исследуя торф, нельзя допускать его высыхание. Разбирать его следует осторожно при помощи пинцета, так как хрупкие части растений могут разрушиться. Самую большую информацию о составе растительности дают пыльца и споры, но чтобы изучать их необходимо овладеть специальной методикой. Первой что попадется вам это растительные макроостатки. Чтобы определить их, важно иметь хорошие знания по анатомии и морфологии растений. Некоторые остатки можно отличить без специального определителя, например, мешочки с плодами осок, хорошо отличаются листья осок и злаков, у последних в основании листовой пластинки на границе с влагалищем листа находится язычок, а у осок его нет. Стебель осок трехгранный, а злаков — цилиндрический. Тем не менее, придется вооружиться определителями, чтобы распознать в обугленных остатках то или иное растение. Вам наверняка встретится древесина деревьев, хвоя сосны (Pinus) или ели (Picea), мхи, осоки (Сагех), камыш (Scirpus), тростник (Phragmites), брусника (Vaccinium vitis-idaea), листья ив (Salix), березы (Betula) и т.д. Изучая торф, палеонтологам удалось получить очень интересные результаты. Северная граница распространения видов цветкового растения наяды (Najas) проходит чуть севернее Москвы, Владимира, Нижнего Новгорода, но тысячи лет назад она проходила гораздо севернее — ископаемые остатки наяды были обнаружены около Вологды. Ученым удалось проследить смену растительных сообществ болот Европы и Европейской части России. Эти болота сформировались после отступления ледника. Сначала они напоминали тундровые болота, здесь росла куропаточья трава, или дриада (Dryas), карликовые березы (Betula), а также высокоствольные деревья: сосна и береза. Далее следовало потепление климата и тундровую растительность сменили ельники. Потепление продолжалось и на смену ели пришли широколиственные деревья: липа (Tilia) , клен (Acer) , вяз (Ulmus) , орешник (Corylus avellana), дуб (Quercus), а также сосна (Pinus). Однако все более нарастающее потепление сменилось небольшим похолоданием и на болоте вновь появились ели и березы. Ученые определили и максимальный возраст этих в Европейской части России, он составляет 8 тысяч лет. Эти слои торфа еще достаточно молодые, но если бы они пролежали бы миллионы лет, то постепенно преобразовались бы в бурый уголь. Крупнейшие залежи бурого угля на Русской платформе находятся в Подмосковном угольном бассейне. Возраст этого угля датируется каменноугольным периодом. В буром угле еще можно рассмотреть обугленные остатки растений, а иногда и идентифицировать их. В условиях тропического и субтропического климата, погружаясь в глубокие земные слои и подвергаясь там воздействию повышенных температур и давления вышележащих пород, он преобразовывался в каменный уголь и антрацит. Среди современных болот лишь некоторые могут стать потенциальными углеобразователями, например, болота находящиеся на побережье Мексиканского залива (Северная Америка) и Черного моря. Основными торфо- и углеобразователями здесь являются древесные растения. Подраздел 2. Искусственные обнажения Иногда наиболее благоприятных мест для сбора ископаемого материала подыскать трудно. Ведь, например, в карьерах прямо перед глазами находятся многометровые слои пород, очищенные от почвенных наслоений и растительности. Состав ископаемых в таких местонахождениях может быть весьма разнообразен и окаменелости — обильны. Помимо карьеров, разрабатываемых открытым методом, есть и другие искусственные обнажения осадочных пород: различные районы зе-
мельных и строительных работ (котлованы, каналы), отвалы строительства метро, штольни и каменоломни, щебневые отвалы. Экскурсия в известковый карьер Карбонатные породы широко распространены в отложениях многих геологических периодов. Обычно они отлагались в морских условиях, в зоне мелководного и более глубокого шельфа. Изредка карбонатные породы формировались в условиях суши (известковый туф) и озерных отложений. Эти осадочные породы очень разнообразны по своему составу. Прежде всего, это различные известняки, в которых доминирует карбонат кальция. Именно они являются основным объектом добычи в известковых карьерах. Цвет известняков варьирует: они бывают белыми, желтыми, зеленоватыми, красноватыми, серыми — это зависит от присутствия примесей (глины, оксиды железа, доломит и т.д.). Достаточно часто известняки чередуются со слоями глин, песков и других карбонатных пород. Из последних часто встречаются доломиты, в состав которых входят карбонаты кальция и магния. Они обычно мелкозернистые (напоминают мелкий песчаник), имеют желтоватый цвет. Доломиты образовывались при повышенной солености морской воды. Среди разновидностей известняков есть глинистые известняки. В них в качестве примеси различного количества содержатся глинистые минералы. За счет их присутствия известняки окрашиваются в зеленоватый цвет и размокают во время дождя или в воде. Если в карбонатной породе содержание карбонатов колеблется от 50 до 80 %, а глинистого материала — от 20 до 50 %, то такая порода называется мергелем. Наличие глинистых отложений или примесей глины может свидетельствовать о том, что эти породы формировались в условиях слабой подвижности воды. Довольно часто в качестве линз, конкреций и прослоек встречаются кремни. Основным источников их образования являлись панцири и раковины живых организмов, имевшие кремневые состав. Это остатки радиолярий, губок, диатомовых водорослей. Иногда в пустотах кремневых линз вырастают кристаллы горного хрусталя (Si02) . Издревле красивые кремни использовались в качестве поделочного камня. Но вернемся к известнякам. Они состоят из двух компонентов: осажденного из воды карбоната кальция (минерал кальцит) и остатков кальцитовых раковин живых организмов. Раковины состоящие из арагонита (это также СаСОз) кристаллизуются или перекристаллизуются в кальцит. Некоторые известняки целиком состоят из хемогенного кальцита и не содержат окаменелостей. Другие наоборот могут содержать только кальцитовые раковины и почти не содержать осажденного карбоната (детритусовые известняки). Одна из разновидностей карбонатных пород — мел. Он состоит из мелкокристаллического карбоната кальция, панцирей золотистых водорослей, раковин форами- нифер и радиолярий. Мощные отложения писчего мела образовывались во второй половине мелового периода. Несмотря на то, какого возраста известняки и сопутствующие породы в известковом карьере рекомендации и правила проведения экскурсий одинаковы. Известняки добываются открытым методом разработки. В толще породы пробуривают шурфы, куда закладывается заряд взрывчатого вещества и порода взрывается. При
этом она дробится на огромные каменные блоки. Часть из них вывозят для хозяйственных и строительных целей, а непригодные для использования известняковые блоки сваливаются при помощи экскаваторов в виде отвалов породы. Методика работы и техника безопасности на стенке карьера и в отвалах различаются. Работать на стене карьера, конечно, интереснее, потому что здесь видны особенности залегания пород, какие окаменелости содержатся в разных слоях, как они залегают. Но такой тип сбора материалов наиболее опасен. Сверху могут обрушиться нависающие породы, в частности это может случиться от ударов вашего молотка. Работа в отвалах безопаснее. Однако ее минусом является то, что не всегда можно определить из какого слоя происходит известковый монолит. В отвалах вы, наверняка, найдете больше окаменелостей. Но и здесь работать необходимо осторожно. Не следует перепрыгивать с одного камня на другой, так как это может привести к травмам. Особенно это опасно весной (зимой сборы не проводятся) , когда каждый камень еще покрыт тонкой коркой льда. Весна таит и другие опасности. Лед замерзает в трещинах камней, способствуя их разрушению. Когда весной лед тает, со стены карьера происходят наиболее частые самопроизвольные падения неустойчивой породы со стены карьера. Важно знать о проводящихся в карьерах взрывных работах. На некоторых разработках стоят предупреждающие таблички, в какое время производятся взрывы. Если таких табличек нет, узнать о проводящихся взрывных работах можно у рабочих карьера. Взрывы обычно проводятся только в будние дни. Перед началом этих работ в небо над карьером взлетают сигнальные ракеты или включается сирена. Общее правило техники безопасности для всех карьеров — на экскурсию в карьер по одному не ездят — обычно в количестве не менее 2 человек. Для работы в карьере требуется оборудование, в перечень которого обязательно входят зубило и молоток. Можно использовать и другие инструменты. В известковых карьерах вы, наверняка, обнаружите массу окаменелостей разной сохранности. Наиболее часто в известняках встречаются раковины плеченогих. Раковины двустворок, брюхоногих, лопатоногих и головоногих встречаются реже. Их раковины во многих случаях состояли из арагонита, который хорошо растворялся после смерти животного. Поэтому эти моллюски встречаются обычно в виде ядер. Хорошо сохраняются толстостенные створки двустворчатых моллюсков в слоях писчего мела, одноименного периода. Здесь же хорошо сохраняются губки, тогда как в палеозойских известняках их находят не часто. Их корковидные или куполовидные колонии можно наблюдать и в профиле стены карьера и в отвалах. Часто колонии начинали свой рост на раковинах моллюсков или плеченогих, на кораллах, целиком обрастая их. То же касается колоний строматопорат. В известняках встречаются как одиночные, так и колониальные кораллы. Иногда они захораниваются в прижизненном положении, как прикреплялись ко дну, иногда кораллы перевернуты течениями. Некоторые известковые отложения образовались на месте рифов, поэтому здесь находят многоярусные постройки кораллов и других рифостроителей: известковых водорослей, мшанок. В иных не рифовых отложениях мшанки также образуют скопления, в других их нет вообще. Иглокожие представлены обычно в виде разрозненных табличек, фрагментов стеблей и чашечек, игл. Встречаются и целые панцири, иногда с прижизненной ориентировкой частей тела, например, игл. Именно в каменноугольных известняках Подмосковья были найдены такие редко сохраняющиеся в ископаемом состоянии иглокожие, как морские звезды и офиуры, а также редкие здесь бластоидеи. Здесь же можно найти целые панцири трилобитов или их части. Обычно в известковых отложениях на раковинах животных встречаются известковые трубочки сидячих кольчатых червей-серпулид. Некоторые известняки целиком состоят из трубочек этих беспозвоночных.
Не все ископаемые остатки, содержащиеся в известняках, отличаются крупными размерами. Нередко в этих осадочных породах содержится множество раковинок фораминифер и остракод. Некоторые известняки почти целиком состоят из этих раковин, например, карбоновые фузулиновые известняки, называемые "горохом", палеогеновые нуммулитовые известняки. Несмотря на свои маленькие размеры, эти ископаемые имеют важнейшее значение для палеонтологов. Не часто в известковых карьерах обнаруживаются остатки наземных животных или растений. Гораздо чаще это остатки морских рыб (чаще отдельные кости, их- тиодорулиты, зубы, чешуи). Но иногда с суши смываются скелеты позвоночных и части растений. В известковых отложениях нижнего карбона Русской платформы можно найти стигмарии прибрежных плауновидных. Они не были принесены реками. Растения произрастали на морских побережьях, образуя что-то наподобие современных мангровых зарослей. Не исключено, что в известняках вы обнаружите и следы жизнедеятельности: норы и ходы животных. Внимательно пронаблюдайте как расположены эти ходы: горизонтально, вертикально, или под каким-либо углом. Это поможет вам определить их принадлежность той или иной группе животных (см. статью "Следы жизнедеятельности"). Не перепутайте ихнофоссилии с пустотами в породе, которые образовались за счет деятельности воды. Обратите внимание на количество ископаемых остатков в каждом слое, какие группы живых организмов в них встречаются, как плотно они располагаются. Некоторые животные могут сохраниться в ископаемом состоянии в прижизненном положении (плеченогие, мшанки, полихеты, текоидеи, кораллы). Лучше всего зарисовать слой с находящимися в нем окаменелостями! Отберите окаменелости из разных слоев и пород. Попытайтесь воссоздать условия обитания организмов по тем особенностям строения пород, расположению окаменелостей и т.д., что вы отметите. Нет сомнений после экскурсии в известковый карьер ваша коллекция пополнится новыми образцами, а учащиеся пополнят свой багаж знаний о истории ваше края, и в конце концов у вас останутся прекрасные незабываемые впечатления о экскурсии. Экскурсия в фосфоритовый карьер Фосфориты, как правило, добываются открытым методом разработки, при помощи специализированной техники, которая срезает их вертикальными пластами. Цвет фосфоритовых слоев различается от желтого и коричневого до черного. Фосфориты обычно представлены в виде желваков, пластов и конкреций. Помимо этого мелкие зерна фосфоритов наполняют (до 95%) пески и песчаники, глины, из-за чего те часто приобретают черную или бурую окраску, поэтому иногда в схеме разреза фосфоритового карьера указываются черные, или фосфоритовые глины и пески. Фосфоритовые пески содержат зерна кварца, иногда гипса, и глауконита. Последний минерал свидетельствует о том, что эти породы формировались в морских условиях, и ко всему прочему с высокой подвижностью воды. Место образования фосфоритов — море, глубиной не более 150 м. Фосфоритовые отложения могут возникать при выветривании ранее образовавшихся фосфоритов, или же они образуются при наличии большого количества органического вещества. Соли-фосфаты поступают в ил из остатков погибших организмов и копролитов и под действием бактерий осаждаются в виде породы фосфорита. Начали образовываться эти породы начиная с докембрия. Есть фосфориты и в отложениях кембрия, и силура, и Перми, и всего мезозоя, и палеогена. В Европейской части России встречаются силурийские, пермские, юрские, меловые, палеогеновые фосфориты. Мы же опишем фосфоритовый карьер на примере широко распространенных мезозойских фосфоритов .
Фосфоритовые пески образуются на мелководье в условиях небольшого волнения воды, а глины, наоборот, приурочены к спокойным водам, где возможно было придонное заражение осадков и воды сероводородом. Не случайно в этих отложениях могут встречаться пиритизированные (FeS2) раковины аммонитов, фрагменты древесины, пиритовые или марказитовые конкреции. Экскурсию в фосфоритовый карьер следует проводить летом или ранней осенью. В периода долгих дождей, весеньего таинья снега фосфоритовые глины расплываются, поэтому посещать карьер в это время не очень удобно, а иногда опасно. Вы можете завязнуть в глине и потерять в лучшем случае сапоги. Помните, что при работе около песчаной стены необходимо помнить об опасности ее осыпания. Не следует также вырывать в ней углубления. Старайтесь находиться подальше от работающей техники. Теперь ознакомившись с техникой безопасности и теорией по образованию и разновидностям фосфоритовых отложений, можно отправляться на экскурсию. Первое, что вам бросится в глаза по прибытию, огромные "холмы" или "горы" (терриконы) отвалов. Здесь будут черные горы фосфоритовых отложений, белые, желтые, рыжие горы песков. Особенно часто сменяют песчаными слоями фосфориты юрских морей. Иногда юрские породы представлены, не только фосфоритовыми отложениями. Например, в Московской области, дно карьера Раменского Горно- Обогатительного Комбината (РГОК) состоит из фосфоритовых пород верхней юры, выше лежат слои абсолютно белых кварцевых песков самых верхов юры. В то время, когда формировались фосфориты на этой территории было теплое мелководное море. Чуть позже море отступило и стали формироваться прибрежные дюнные кварцевые пески. Континентальные условия сохранялись здесь и в начале мела. Терриконы отвалов одно из лучших мест для сбора ископаемого материала. Стенка карьера в этом плане не очень хороша, так как на ней остаются следы работы экскаваторов, разрушающих окаменелости. Иногда у дна карьеров на дневную поверхность выходят в виде ручейков грунтовые воды. Они размывают слои и вымывают из породы окаменелости. Тем более, что мокрые окаменелости лучше заметны. Это тоже одно из рекомендуемых мест сбора окаменелостей. Для сбора окаменелостей вам потребуются некоторые инструменты. Глины здесь обычно сдавлены, и их можно отслаивать при помощи молотка и зубила, стамески, ножа. Первые два инструмента пригодятся для работы с окаменелостями заключенными в фосфоритовые желваки и песчаники. Для специализированного поиска акульих зубов используются сита, через которые просеивают и отмывают породу. Наиболее богато в этих отложениях бывают представлены головоногие моллюски: аммониты и белемниты. Аммониты не часто встречаются в виде целых раковин, в основном это фрагменты. Хорошо, например, известно, что аммонит Kashpurites fulgens встречается в основном только в виде обломков, большая удача найти целую раковину. На аммонитах обычно сохраняется скульптура раковины, разноцветный перламутр, редко встречаются крышечки-аптихи, закрывавшие раковины. Аммониты могут образовывать скопления из целых раковин и их фрагментов. Если вам попалась фосфоритовая конкреция не поленитесь, расколите ее и там может оказаться аммонит хорошей сохранности, однако вы не застрахованы от того, что она будет пустой. Наиболее часто в юрских отложениях Русской платформы встречаются аммониты Cadoceras, Cardioceras, Virgatites, Kosmoceras, Zaraiskites, Craspediceras, Garniericeras, Quenstedtoceras; в меловых отложениях — Riasanites, Surites, Hoplites, Arcthoplites. Еще более часто могут быть найдены ростры белемнитов. Правда иногда они бывают растворены, и в породе от них остается полость. Реже встречаются ядра внутренних раковин белемнитов со следами их разделения на камеры. Прежде чем упаковывать ростры необходимо
рассмотреть: изредка на них можно встретить следы жизнедеятельности сверлящих губок, усоногих ракообразных или мшанок. Поселялись на рострах белемнитов и обрастатели, поскольку в условиях илистого или песчаного дна твердого субстрата явно не хватало. Если вам повезет, то на белемнитах можно обнаружить приросшие трубочки сидячих полихет серпул, колонии мшанок. Мшанки и полихеты чаще всего встречаются здесь только на белемнитах. В фосфоритовых юрских отложениях распространены белемниты родов Acroteuthis, Cylindroteuthis, Pachyteuthis, Lagonibelus, Hibolites; в меловых — Oxyteuthis. Помимо них встречаются представители и других классов моллюсков. Например, двустворчатые и брюхоногие моллюски. Часто они представлены внешними и внутренними ядрами, но попадаются моллюски хорошей сохранности с сохранившимся раковинным веществом. С последними нужно обращаться осторожно, так как раковина легко трескается и осыпается. Мы не назвали здесь все рода аммонитов, которые встречаются на Русской платформе, не менее трудно перечислить и двустворчатых и брюхоногих моллюсков. Очень широко распространены двустворки рода Buchia, их может встретиться сразу несколько видов. Также часто встречаются морские гребешки Entolium, астарты (Astarte), представители родов (Pholadomya, Pleuromya, Gresslya, Lima, Cucullaea). Брюхоногие моллюски немного реже встречаются, чем двустворки. Из них представителей родов Eucyclus, Procerithium, Oonia, Bathrotomaria найти можно чаще. Иногда в слоях много трубковидных раковин лопатоногих моллюсков. Другая достаточно многочисленная группа в мезозойских фосфоритовых отложениях — плеченогие. Они сохраняются в виде целых раковин и ядер, на которых иногда заметны кольца нарастания, и элементы внутреннего строения раковины, отпечатки мускулов. Можно обнаружить даже скопления раковин брахиопод. Несколькими видами представлены рода брахиопод Russiella, Aulacothyris, Rhynchonella, Rouillieria, Praecyclothyris. В верхнеюрских фосфоритовых отложениях часто встречаются кремневые губки Sphenaulax, представленные несколькими видами. Обычно это целые кубки, скелет которых замещен фосфоритом. Также в юрских морях происходило замещение фосфоритом и пиритом древесины голосеменных, которая в виде отдельных небольших кусков или фрагментов стволов встречаются в фосфоритовых карьерах. Частое их обнаружение косвенно свидетельствует о расположении недалеко берега. Изредка в фосфоритах можно найти целые кости, зубы или фрагменты позвоночных животных. Это могут быть зубы акул, позвонки других рыб, кости и крупные фрагменты скелетов морских ящеров: ихтиозавров, плезиозавров, плиозавров, реже мозазавров. Из отложений Русской платформы описаны целые или почти целые скелеты этих рептилий. И все же чаще палеонтологи находят только зубы, позвонки, другие единичные кости или даже неопределимые их фрагменты. Помимо перечисленных животных и растений в фосфоритовых отложениях иногда обнаруживают остатки морских ежей и лилий, шестилучевые кораллы, головоногие моллюски-наутилиды и другие животные. Морские ежи редко представлены панцирями или их слепками, чаще это отдельные иглы или их обломки. А морские лилии встречаются исключительно в виде участков стеблей или отдельных члеников. Не очень благоприятные условия в юрских и меловых морях Русской платформы сложились для кораллов. Во-первых, близость берега и связанный с этим интенсивный снос осадочного материала повышал мутность воды, во-вторых, грунты не были богаты твердым субстратом, на котором могли поселиться кораллы, а также мшанки, в-третьих, несмотря на то, что мы говорим о теплом море, оно было отнюдь не тропическим, поэтому бурного расселения кораллов и двустворок-рудистов не
происходило. Коралловые и рудистовые рифы формировались гораздо южнее в тропическом поясе. Достаточно часто в фосфоритовых породах можно заметить ходы каких-то беспозвоночных животных и образования неясного происхождения, которые, к сожалению, не поддаются определению. Экскурсия в угольный карьер Открытый способ добычи — один из методов разработки угленосных месторождений. Добыча угля в этом случае сходна с разработкой карьерным способом других осадочных пород (известняк, фосфорит, песок, глина и т.д.). Поэтому многие советы по проведению экскурсии созвучны с экскурсионной методикой для других типов карьеров. Угли — осадочные породы, образовавшиеся за счет преобразования накопившихся органических остатков, почти всегда растительного происхождения. Образование углей обычно проходило в болотах и озерах, без доступа достаточного количества кислорода, то есть происходило обугливание осадков. Процесс начинался с образования торфа (содержание углерода С — 59%), а затем при наличии необходимых условий он преобразовывался в бурый уголь (С — 70%), затем — в каменный уголь (С - 82%) , далее - в антрацит (С — 95%) и даже графит. В угле могут встречаться остатки растений различной сохранности. Наиболее хорошие остатки можно найти в буром угле. Иногда подмосковный бурый уголь насыщен фрагменты древесины неясного систематического положения. Не исключено, что в угле могут оказаться остатки наземных позвоночных животных, которые обитали на болотах, где формировался уголь. Обратите внимание, если в слое угля вы найдете участок серого цвета, который выглядит как некое включение. Это может быть угольная почка. Она состоит из углистого вещества и карбонатных пород, с чем и связана ее светлая окраска. В угольной почке могут оказаться очень интересные остатки растений или животных. Некоторые угли состоят не из макроостатков растений, а из спор - они называются кеннель-богхед. А угли, которые образовались полностью из остатков водорослей носят название богхед. Уделите внимание строению разреза. Очень может быть, что угольные пласты чередуются со слоями известняков, песков или глин, когда отложения угля не происходило. В них иногда содержатся остатки животных. Это значит, что условия в это местности менялись и вы сможете проследить какой она была до распространения болот и после. Возможно, условия заболачивания местности повторялись несколько раз, сменяясь морскими отложениями и континентальными засушливыми условиями. Так вы сможете сделать палеоклиматические и палеогеографические реконструкции вашей местности. Начало углеобразования связано с появлением высших наземных растений. Уголь формируется начиная с девона и по сей день, но происходит это в условиях тропиков и субтропиков. В истории Земли были периоды, когда шло интенсивное формирование углей, например, в девоне, карбоне и юре. Наиболее интенсивное уг- леобразование происходило в карбоне, от чего этот период и получил свое название — каменноугольный период. На Русской платформе находится Подмосковный угольный бассейн, где добывают бурые угли нижнего карбона.
Экскурсия в песчаный карьер Пески являются осадочными породами — продуктами разрушения других горных пород в результате деятельности ветра, воды и т.д. Поэтому возраст песчаных отложений может быть разным. Основным компонентом песков являются зерна минерала кварца. Иногда они сцементированы и тогда пески преобразуются в более твердые породы — песчаники. А если среди них встречаются окатанные камни, то такая порода представляет собой конгломерат. Нередко пески ассоциируются и с глинами, или же эти породы послойно сменяют друг друга. Попадаются песчаные слои и среди известняков, мергелей, фосфоритов. На Русской платформе песчаные толщи можно обнаружить в отложениях всех периодов за исключением силура и венда, а песчаники и в силурийских слоях. Образуются песчаные или песчаниковые отложения, как в континентальных, так и в морских фациях. Место начального образования песка — суша. Здесь происходит разрушение горных пород под действием выветривания, деятельности рек. Затем пески либо остаются на суше, либо смываются в море в качестве терригенно- го материала. Морские песчаные отложения, как правило, характерны для прибрежных мелководий, для мест впадения рек. Пески могут быть окрашены в различные цвета: желтый и рыжий, за счет примесей минералов, содержащих железо, белый — это чистые морские пески, иногда содержащие примеси слюд, таких как мусковит. Далеко не все карьеры являются только песчаными, поскольку пески могут чередоваться с другими породами. Часто на Русской платформе встречаются слои песков юрского, мелового, антропогенового возрастов, которые залегают на юрских фосфоритах или фосфоритовых глинах. Наиболее мощные песчаные отложения присущи карьерам, в которых разрабатываются четвертичные пески. Для работы в песчаном карьере вам навряд ли понадобится молоток или кирка (если, конечно, среди пород не будут доминировать конгломераты и песчаники), скорее это будет лопата и кисти для осторожной работы с хрупкими остатками. Какие бы песчаные слои не были перед вами всегда необходимо помнить о безопасности работы в таких условиях. Песок — порода сыпучая, поэтому забираясь по пологому или крутому песчаному склону помните, что он может внезапно обрушиться. Не вырывайте в стене песчаного карьера углублений или небольших "пещер", помните, их потолки и стены в любой момент могут обрушаться и погрести вас под собой. В истории подобных раскопов, к сожалению, известны смертельные случаи. И, конечно, проводить экскурсию или сбор материала следует подальше от работающей техники. Поскольку песчаные отложения образовывались в континентальных и морских условиях , следует рассмотреть их отдельно. Морские песчаные фации Накопления песков морского происхождения проходило в прибрежной приливно- отливной зоне или мелководной зоне, не глубже 100 м. Часто эти осадки сочетаются и перемежаются с отложениями конгломератов, глин всевозможных известняков . Для этих песков характерна косая перекрещивающаяся слоистость, хорошая сортировка и окатанность песчинок, наличие минерала глауконита, который может придавать им зеленоватый цвет. Изредка в таких слоях обнаруживаются следы ряби. Конечно, важным отличием от континентальных песков и песчаников является характерная морская фауна. Ведь в озерных песках вы никогда не найдете голо-
воногих моллюсков, мшанок, кораллов, иглокожих, плеченогих. Сохранность окаменевших остатков здесь неплохая. Здесь могут быть встречены хитино-фосфатные раковины беззамковых плеченогих, кальцитовые раковины двустворчатых моллюсков и "замковых" брахиопод, фораминиферы, мшанки, белемниты, морские ежи. Головоногие и брюхоногие моллюски, арагонитовые раковины которых быстро растворяются, будут представлены в виде ядер. Шансы найти остатки рыб невелики. В мезозойских и кайнозойских морских песках могут встречаться зубы акул. Озерные и речные отложения Почти любые континентальные отложения можно узнать по наличию в них определенных групп ископаемых организмов. Как правило, в них встречаются остатки насекомых, позвоночных, обильные остатки наземных растений. Но далеко не все континентальные отложения, а в нашем случае пески и песчаники, содержат таковые окаменелости. Песчаные толщи континентальных отложений могут иметь примеси глинистых, углистых пород. И наоборот глины, отложившиеся в материковых условиях, будут иметь примеси песка. Часто соединения железа могут окрашивать такие пески в рыжий, красноватый, зеленоватый цвет. Недаром отложения песков красного цвета получили название красноцветных толщ. Здесь мы рассмотрим пески в трех видах континентальных отложений: отложения суши, речные и озерные отложения. Отложения суши встречаются нечасто. Обычно они представляют собой осадочные породы, среди них и пески, образовавшиеся под действием дождя, ветра, временных потоков, снега и льда. Накопление таких песков происходит в понижениях рельефа, на возвышенных и приподнятых участках они, как правило, не остаются. В этих песчаных толщах нет слоистости, которую можно наблюдать в озерных и речных фациях. Ископаемые остатки здесь редки. Чаще всего это могут быть сохранившиеся кости позвоночных животных, реже остатки растений. На небольшой территории отложения суши могут сильно различаться по составу вмещающих их пород, что не наблюдается для других типов отложений. Речные песчаные отложения имеют один очень важный признак: косую слоистость , которая вызвана течением реки. Помимо песков, здесь могут встречаться глина, гальки. В речных песках обычно встречаются остатки растений, кости позвоночных, как сухопутных, так и пресноводных, например, рыб или черепах, остатки насекомых, пресноводных беспозвоночных, например, моллюсков, сухопутных беспозвоночных. Иногда образуются скопления раковин или скелетов, собранных течением реки. Целые скелеты позвоночных встречаются нечасто. Причиной тому высокая скорость течения реки, которая разносит кости на расстояние. В песчаных отложениях иногда можно обнаружить конкреции или линзы, например, глинистые или песчаниковые. Для палеонтолога они порой оказываются ценной находкой. Когда кость или скелет попадают в реку, вокруг них течение реки наносит глинистый и любой другой материал, так что они оказываются окруженными чехлом из различных донных осадков. В 90-х годах XIX века В.П. Амалицкий обнаружил целое кладбище остатков рептилий, амфибий, растений, пресноводных моллюсков именно в песчаниковых линзах пермских речных отложений. А произошло это на территории Русской платформы, на Северной Двине. Озерные отложения тоже имеют свои специфические особенности. Для большинства подобных песчаных отложений характерна тонкая горизонтальная, реже косая слоистость. Они могут сохранять следы ряби. Помимо песков в озерах формировались глинистые, реже карбонатные и кремнистые отложения. Здесь также можно встретить богатые остатки сухопутных и пресноводных растений и животных. Они
менее отсортированы и разрозненны. Например, в отложениях четвертичного озера в Московской области были обнаружены окаменевшие кости мамонта. При достаточно большом поступлении на дно озер органического материала, за счет оседания планктона и растительных остатков, отлагались породы богатые органикой — са- пропелиты. Еще один важный тип континентальных осадков — морена, но он требует особого рассмотрения. Моренные отложения На Русской платформе они приурочены к слоям осадочных пород сформировавшихся в четвертичный период, или антропоген во время оледенения. В процессе своего движения ледник проходил по поверхности выходов горных пород различного возраста, разрушая их и перетирая в песок. Даже такие горные породы, как граниты и базальты подвергались его разрушению, что уж тут говорить о известняках и песчаниках. Остаются не разрушенными лишь самые прочные, лишенные трещин и твердые фрагменты пород. И все эти гальки и валуны будут окатаны, будто они долгое время находили в приливной зоне и точила вода. Как правила моренные отложения представляют собой песчанные, глинистые, суглинистые, супесчаные отложения различной окраски (желтой, красноватой, серой и т.д.) с включениями окатанной галькой, валунами. Если в пресноводных и морских отложениях песчинки будут в той или иной степени отсортированы, то в морене сортировки не наблюдаются. Не удивляйтесь, если валуны будут представлять собой окатанные куски гранитов, сиенитов, габбро, базальтов, коренные выходы которых находятся на Кольском полуострове и их возраст датируется докембрием или даже археем. Помимо этого здесь будут валуны из кремня, конгломерата, доломита, известняка, песчаника, кварцита, гнейса. Иногда в окатанной породе или отдельно от нее можно найти окаменелости. Это могут быть раковины моллюсков и плеченогих, членики морских лилий и иглы морских ежей, кораллы и губки, даже фрагменты древесины. Сразу в глаза бросается одна особенность - все окаменелости окатаны и обломаны, что значительно снижает их ценность для коллекции. Может оказаться так, что в одном слое будут окаменелости периодов, отстоящих друг от друга на 100 миллионов лет и более. В доказательство этому конкретный пример. В Подмосковье, в Дмитровском районе Московской области, в песчаном карьере среди моренных галек были найдены окаменелости. Среди них были идентифицированы карбоновые ископаемые: двустворчатый моллюск Allorisma sp., плеченогие Choristites mosquensis, Neochonetes carboniferus, иглы морского ежа Archaeocidaris sp., четырехлучевые кораллы - Petalaxis stylaxis, Botrophyllum sp., мшанка - Fenestella sp. Наряду с ними были обнаружены юрские белемниты Cylindroteuthis sp., Pachyteuthis sp., аммонит Virgatites virgatus, двустворчатый моллюск Astarte sp. Все эти виды известны из отложений Русской платформы, но из какого района неизвестно. Определить точнее возраст также трудно. Например, виды рода Botrophyllum известны из отложений всего каменноугольного периода, а это 74 миллиона лет. Но в этом случае нам повезло, некоторые окаменелости удалось определить до вида и сказать их примерный возраст. Иногда и это невозможно, ведь некоторые детали строения уничтожены ледником. Поэтому мореновые ископаемые отличаются своей коварностью в определении. Обычно специалист никогда не обращает на них внимание, и никогда не берет к себе в коллекцию. В карьере, где присутствуют моренные отложения обратите внимание на то, не чередуются ли они с песчаными слоями, в которых нет валунов и гальки, а может присутствовать немного глины или тонкие прослойки торфа. Дело в том, что это
могут быть отложения межледниковий, когда ледник отступал и климат был более теплым, что отражалось на составе флоры и фауны. Всего было 4 четвертичных оледенения (начиная с самого древнего): окское, днепровское, московское, валдайское. Между ними были периоды межледниковья: лихвинское, одинцовское, ми- кулинское, а также мологошекснинское, разбивающее валдайское оледенение на два этапа. Если повезет в отложениях межледниковий, могут встретиться растительные остатки и ископаемая фауна. Польза земельных работ При проведении работ строителям приходится порой рыть глубокие котлованы. Они слой за слоем снимают пласты различных пород, вскрывая иногда слои богатые ископаемыми органическими остатками. Таким неожиданно появившимся на дневной поверхности породам следует уделять внимание. Но при этом необходимо помнить о том, что стройка место отнюдь небезопасное, поэтому всегда нужно быть внимательным и соблюдать правила техники безопасности. Конечно, это не подходящие места для экскурсий, но они могут послужить одним из источников вашей коллекции. Безопаснее всего проводить сбор окаменелостей в отвалах породы вне района активных земельных работ. Такие места сборов окаменелостей могут оказаться весьма полезными не только с точки зрения полезности для школьного музея, но и с точки зрения научной ценности. В истории известны случаи, когда при рытье котлована ковши экскаваторов отрывали уникальные отложения, которые были до сего момента плохо изучены. Например, в Москве при строительстве набережных и мостов на Москве-реке и реке Яузе были вскрыты слои с породами и окаменелостями яузского и дорогомиловского горизонтов верхнего карбона. Эти отложения были недостаточно исследованы, поэтому имели немалую ценность. В XIX веке породы этого возраста добывались в карьерах или выходили на поверхность в Москве и ее окрестностях. Позже карьеры перестали действовать и берега рек взяли в бетон. Щебневые сборы Как правило, сбор окаменелостей в щебне, привозимом для строительства зданий, дорог и т.д. не расценивается как серьезное занятие. И, тем не менее, строительный щебень может стать еще одним источником для пополнения коллекции. Ко всему прочему есть возможность продемонстрировать одно из применений пород, разрабатываемых в соседнем карьере — знать это будет полезно. Очень важно обратить внимание, какой тип щебня вы наблюдаете. Если он состоит из магматических пород, например, гранита, габбро или метаморфических пород, например, гнейса, кристаллических сланцев, то искать окаменелости здесь не имеет ни малейшего смысла. Лишь щебень, в котором преобладают осадочные породы (чаще всего известняк или каменный уголь для топки), может быть полезен для ваших изысканий. Малоинтересным будет моренный щебень, хотя и в нем могут оказаться окаменелости (см. статью "Моренные отложения"). Очень важно знать хотя бы примерный возраст пород. Если карьер, из которого привозится щебень, находится недалеко от вас, то необходимо узнать возраст добываемых там пород у краеведов или по литературе. Иногда возраст определяется по присутствия руководящих окаменелостей. Скорее всего, определить возраст очень точно не удастся, потому что в карьерах могут добываться породы разных периодов или разных отделов одного периода. Гораздо хуже, если возраст не удается определить вообще.
Иногда даже в щебневых сборах могут оказаться интересные находки. Например, однажды автором в щебне, который состоял из известняков нижнего карбона, были обнаружены интересные окаменелости хорошей сохранности: остатки плауновидных — ризоиды стигмарий и отпечаток ствола лепидодендрона Knorria sp. , а также крупные раковины плеченогих-гигантопродуктид (Gigantoproductus, Semiplanus), по которым и был определен возраст. Отвалы метро Во время прокладывания туннеля метро метростроевцы вынуждены "вгрызаться" в горные породы различного возраста. Например, в Москве на дневную поверхность извлечены породы каменноугольного периода. Далее они отвозятся на какой-то пустырь, где и сваливаются. Ценность этих отложений сомнительна. С одной стороны, если порода имеет какие-то уникальные особенности строения и характерна только для отложений определенного отрезка времени, возраст ее можно примерно определить. Иногда при таких работах вскрываются очень редкие малоизученные отложения. Например, в Московской области и Москве нет доступных для специалистов отложений каширского горизонта московского яруса среднего карбона. Зато в отвалах метро эти отложения можно найти. Но иногда по породе определить возраст невозможно и слои могут быть смешаны и перевернуты. Поэтому, несмотря на то, что иногда в отвалах метро могут быть ценные редкие окаменелости хорошей сохранности (в московских отвалах встречаются некоторые виды вымерших карбоновых беспозвоночных, остатки которых больше нигде не встречаются) относится к датировки их возраста следует осторожно — возможна ошибка на несколько десятков миллионов лет! Экскурсия на станцию метро Экскурсию подобного рода проводить трудно. Во-первых, она возможна только в крупных городах, где есть метрополитен. Во-вторых, проводя ее следует помнить, что метро — это один из видов городского транспорта, причем повышенной опасности и предназначено для перевозки людей, то есть отнюдь не музей! В- третьих, здесь неудобно рассказывать из-за постоянного шума поездов и большого количества пассажиров. Тем не менее, эта экскурсия уникальна. А уникальна она тем, что подобные экскурсии ранее редко привлекали внимание, но, несмотря на это, она может быть очень интересна. Накопленный автором опыт показывает, что она производит огромное впечатление, как на школьников, так и на студентов . Во время строительства метрополитена для облицовки использовались различные поделочные камни и породы, например, мраморы и известняки. Источником их поступления были карьеры. Весьма вероятно, что добываемые мраморы, а особенно известняки содержали в себе окаменевшие остатки живых организмов. В качестве примера приведем Московский метрополитен. Далеко не на всех станциях в облицовки стен и колонн можно заметить причудливые включения, которые при внимательном наблюдении к удивлению экскурсантов оказываются окаменевшими остатками живых организмов давно ушедших эр и периодов . Особенно много таких удивительных окаменелостей на станциях первой построенной в Москве Сокольнической линии метро. Наиболее впечатляет облицовка колонн и пола станции метро "Красносельская". Основная порода окрашена в светло-красный цвет, но в ней очень много белых, желтоватых включений. Перед тем, как использовать породу для облицовки станции, ее отшлифовали. Многое
представляет собой ракушечный лом и вряд ли может быть определен. Но есть и просто уникальные окаменелости. Особенно много колоний четырехлучевых кораллов . Они порой занимают большую часть мраморных плит. Хорошо видно, что это были массивные колонии, состоящие из десятков небольших кораллитов. У некоторых кораллитов хорошо видны септы, разделяющие кораллит на сектора. Но наиболее четко это можно наблюдать на поперечных спилах одиночных четырехлучевых кораллов. Их кораллиты реже встречаются в облицовке, и они крупнее. Помимо четырехлучевых кораллов можно найти и кораллы-табуляты. Их колонии представляют множество тесно собранных вместе мелких кораллитов. Если же "кораллиты" будут выглядеть совсем малюсенькими, в виде крупных пор — это уже не кораллы, а мшанки. В отшлифованных плитах есть не совсем понятные слоистые шаровидные или куполовидные образования, которые схожи со строматолитами, построенными синезелеными водорослями. В облицовке станции есть целые или почти целые распиленные раковины моллюсков и плеченогих. Среди представителей мягкотелых встречаются распиленные башенковидные раковины брюхоногих моллюсков, створки и раковины двустворок, реже можно обнаружить раковины головоногих моллюсков. Их можно узнать по сифону проходящему сквозь все камеры раковины. Установить возраст этих пород максимально точно не просто. Они отлагались на дне палеозойского моря, возможно , каменноугольного периода. Станция "Красносельская" наиболее удобна для проведения экскурсий, потому что она обычно немноголюдна. Есть схожие, но гораздо менее многочисленные окаменевшие остатки в облицовке станций этой же линии "Комсомольская", "Красные ворота", "Библиотека имени Ленина" "Парк культуры". Здесь можно увидеть отдельные раковины или их фрагменты, а чаще скопления раковинных обломков, определить которых невозможно. Большие скопления ископаемых остатков находятся в мраморных плитах вишневого цвета, которые можно увидеть, проходя по переходу со станции "Курская" радиальная на кольцевую или наоборот. Большую часть остатков представляют отдельные членики морских лилий или их продольно распиленные фрагменты стеблей, иглы морских ежей. Очень хорошо видна звездчатая форма члеников, каналы внутри них. Помимо этих окаменелостей встречаются распиленные раковины брюхоногих моллюсков, двустворок, колонии кораллов. Несмотря на обилие экскурсионных объектов, мы не рекомендуем этот переход в качестве возможного места проведения экскурсии, так как он всегда многолюден и экскурсия может помешать движению потока пассажиров. Похожие породы есть и на других станциях метрополитена: "Фрунзенская", "Площадь Ильича", "Площадь революции", но окаменевших остатков в них меньше. Небольшое количество окаменевших остатков присутствует в облицовке станций "Измайловский парк" (пол у колонн) и "Первомайская". Наиболее интересны и необычны окаменелости на станции "Первомайская". В темно-красном мраморе запечатлелись кубкообразные организмы с ячеистой структурой стенки. Возможно, это представители класса губок или обизвествленные водоросли. На одной из колонн есть спирально закрученная раковина прекрасно сохранившегося головоногого моллюска-наутилоидеи. Перечислить все подобные станции невозможно, здесь приведены лишь некоторые из них, но, тем не менее, мы надеемся, что эта информация будет полезна вам для проведения экскурсии или в качестве интересной информации, которой вы поделитесь со своими любознательными учениками.
ВЫБОР СИСТЕМЫ ОЧИСТКИ воды Павел Борисов Большинство из нас не удовлетворены качеством водопроводной воды. Проблем может быть множество, начиная от безобидной, но хорошо заметной накипи в чайнике, заканчивая содержанием неощутимых, но вредных веществ — хлорорганиче- ских соединений, солей тяжелых металлов, не говоря уже о бактериях. Все негативные свойства воды можно условно разделить на две категории: ор- ганолептические, такие как неприятный привкус, запах, жесткость (они существенно не влияют на здоровье) и вредные примеси. Обязательное требование к фильтру — как можно лучше удалять вредные примеси, желательное — сделать воду максимально приятной для употребления. При этом цена фильтра должна быть приемлемой, а производительность — достаточной. Фильтры для квартиры Итак, мы решили поставить фильтр в квартире. На рынке представлено большое количество различных конструкций, начиная от насадок на кран, заканчивая комплексными системами водоснабжения всей квартиры. Наиболее распространены трехступенчатые фильтры. Первая ступень задерживает сначала крупные частицы песка, ржавчины, а потом нерастворимые микрочастицы и коллоидные вещества. По
сути дела это механическая фильтрация сначала крупноячеистым, а затем мелким наполнителем. Ресурс такого фильтра определяется степенью его засорения, при котором уменьшается ток воды через фильтр. Вторая ступень: адсорбция органически растворимых соединений, соли хлора и тяжелых металлов при помощи угольного фильтра. Активированный уголь обладает очень большой площадью поверхности и высокой адсорбирующей способностью, т.е. возможностью этой поверхности захватить появившуюся поблизости молекулу из раствора. Вода процеживается через угольный порошок, и большинство тяжелых молекул оседают на поверхности угля. Однако они никуда не исчезают и через некоторое время, когда поверхность наполняется адсорбированными молекулами, способность к очистке уменьшается. Это определяет ресурс данного фильтра. Считается, что уголь из скорлупы кокоса обладает большей адсорбционной способностью (примерно в 4 раза), чем уголь, получаемый из древесины, поэтому он используется в большинстве фильтров . В некоторых моделях вместо угля применяется угольное волокно. По утверждениям производителей, его адсорбционная способность еще выше. В качестве третьей ступени используется дополнительный фильтр, который в большинстве случаев можно выбрать исходя из параметров водопроводной воды у вас дома. Например, если вода жесткая, т.е. содержит много двухвалентных ионов (чаще всего кальция и магния), то полезен фильтр, смягчающий воду. В нем вода проходит через шарики из ионообменной смолы, с которой ионы вступают в реакцию. Другой вариант — в воде много солей железа. Это плохо, т.к. железо выводит из организма жизненно необходимый йод. Избежать этого можно, используя фильтр с марганцевым цеолитом. Также существуют фильтры, убивающие бактерии, которые хоть и с небольшой вероятностью, но все же могут пройти через угольный фильтр. В домашних фильтрах для этого в основном используют картриджи с солями серебра. Фильтров на вышеописанном принципе существует огромное количество. Как же сделать правильный выбор? Ресурс фильтров напрямую зависит от количества заложенного вещества, поэтому нужно иметь в виду, что большие по размеру фильтры придется менять реже, следовательно, такая покупка более оправдана. Фильтры на небольшой ресурс — до тысячи литров — чаще всего монолитные, т.е. все вышеописанные реактивы скомпонованы в одном корпусе. Когда ресурс заканчивается, фильтр как единое целое заменяется новым. В кувшинном исполнении такие фильтры гораздо удобнее насадок на кран, т.к. они не занимают кран во время фильтрации. Наиболее распространенным решением для дома на сегодня являются трехмодуль- ные фильтры на 5-10 тыс. л. Они, как правило, содержат три сменных картриджа, у каждого из которых свой ресурс. Это дает возможность своевременной замены нужного картриджа, выработавшего свой ресурс. Еще одно удобство — возможность установки картриджа для очистки именно вашего типа воды. Конструктивно фильтры монтируются в ответвление водопроводной трубы, а чистая вода выводится отдельным краном. Стоимость комплекта картриджей составляет примерно треть стоимости фильтра. Модульное исполнение позволяет также создать комплексную систему водоснабжения, где вся вода в квартире фильтруется механическим и смягчающим фильтром и предохраняет краны от засорения, а стиральную машину от накипи на нагревательном элементе. Та часть воды, которая идет на питье и приготовление еды, дополнительно фильтруется угольным и бактерицидным фильтром. При выборе фильтра обратите внимание в инструкции на его показатели очистки от различных примесей. Однако эта информация зачастую не помогает сравнить характеристики разных фильтров, поскольку разные фирмы измеряют эти значения
по своей методике. Например, фильтр, на этикетке которого указано «гарантирует 95% очистку воды, содержащей 100 ПДК бензола», не лучше того, который «обеспечивает 60% очистку от 1 ПДК». Ведь чем меньше концентрация примеси, тем менее эффективно идут химические реакции — основа процесса очистки. Новые технологии водоподготовки Выше была описана традиционная система водоподготовки, которая, несмотря на ее низкую цену, вполне эффективна (разумеется, при условии строгого соблюдения ресурса фильтра). На двух относительно новых технологиях остановимся подробней. Технология обратного осмоса позволяет доочистить предварительно обработанную воду эффективнее, чем это возможно угольным фильтром. Дело в том, что эффективность адсорбции через уголь напрямую зависит от времени процеживания и нельзя удалить больше примесей, не увеличив время фильтрации. В обратноосмо- тическом фильтре используется пористая мембрана, размер отверстий которой позволяет проходить только небольшим молекулам: воды, легких минеральных солей, кислороду. С одной стороны мембраны — водопроводная вода, с другой — уже очищенная . Избежать прохождения уже очищенной воды в обратную сторону позволяет давление водопровода. При соблюдении этого условия происходит полная очистка. На практике такая система, конечно не идеальна, но обеспечивает очень высокую степень очистки. Недостаток такой системы — высокая цена мембраны. Некоторые производители бутилированной воды утверждают, что вода, полученная методом обратного осмоса, аналогична дистиллированной. Это не так, потому что, во- первых, вода, проходя через мембрану, не претерпевает никаких изменений структуры, а, во-вторых, наряду с водой проходят и растворенный кислород, и минеральные соли. Однако это касается только легких молекул массовым числом до ста, а более тяжелые, среди которых множество вредных для здоровья, задерживаются . Технология электрохимической активации заслуживает внимания уже потому, что она обеспечивает высокую степень очистки и при этом не требует смены картриджей. Такой фильтр практически вечен, но энергозависим — для его работы необходимо электричество. Фильтр осуществляет комплексную очистку и, в отличие от осмотической мембраны, работает на воде из водопровода без предварительной очистки. Сначала под действием электрохимических реакций на катоде разрушаются сложные органические соединения, ионы тяжелых металлов при этом превращаются в нерастворимые соединения. Далее во флотационном реакторе они притягиваются к отрицательно заряженным пузырькам водорода (которые появляются под действием тока) и удаляются в дренаж. В процессе анодной обработки вода насыщается оксидантами — атомарным кислородом и хлором, которые разрушают оставшиеся органические соединения. После этого в электрокаталитическом реакторе электрическими микроразрядами в пузырьках убиваются микроорганизмы и разрушаются сложные соли. И, наконец, разрушаются соединения активного хлора. В результате очистки вода приобретает антиоксидантные свойства, обуславливающие повышение физиологической совместимости воды с внутренней средой организма. Наряду с этими существует еще множество технологий, например озоносорбция, но подробно описать их все невозможно, тем более, что многие производители не раскрывают принципы работы своих изделий.
Водоснабжение офиса Для водоснабжения офиса очень распространены так называемые «кулеры», разливающие воду из канистр. Эти аппараты охлаждают и нагревают воду. Они, безусловно , очень удобны в местах, где воды нет, например, в бытовых помещениях, на стройках и т.д. Однако в большинстве офисов водопровод проведен. В этом случае более удобны фильтры средней производительности — не надо регулярно заказывать бутыли с питьевой водой. Обслуживание таких фильтров проводится техническими специалистами раз в полгода. Стоимость воды с учетом всех затрат на эксплуатацию системы гораздо меньше. Преимущество кулеров — они не только разливают воду из бутыли, но еще и поддерживают нужную температуру. Поэтому в последнее время появились гибридные устройства, которые очищают водопроводную воду, после чего она накапливается в специальной емкости, поддерживающей температуру . Распространенный аргумент в пользу кулера — вода в бутылках гарантировано качественная, в отличие от воды из фильтра. С одной стороны это так, потому что фирмы, разливающие воду, делают ее анализ, но с другой стороны фильтры — также устройства весьма надежные и проверенные. При соблюдении сроков обслуживания проблем с качеством воды не возникает. Более того, бутилированная вода некоторых производителей не очень высокого качества. Так что в каждом конкретном случае оценить свойства воды может только независимая экспертиза, и не всегда стоит слепо верить рекламным уверениям как производителей бутилиро- ванной воды, так и фильров. Специфика водоподготовки в коттедже Если системы фильтрации для офисов всего лишь логическое продолжение бытовых, то для систем водоснабжения частного дома специфика очистки совсем другая. Вода в дом поступает либо из водопровода, либо из скважины. Если водопровод обеспечивает приемлемое качество (а в случае выбора системы для коттеджа полезно провести экспертизу воды), то принципы очистки аналогичны применяемым для квартирной водоподготовки. Неподготовленная вода требует более тщательной очистки. Традиционное мнение, будто вода из скважин и родников чище водопроводной, неверно. Если проследить путь воды до скважины, выясняется, что в нее попадают грунтовые воды, т.е. атмосферные осадки, прошедшие через слой почвы. С одной стороны почва — хороший механический фильтр и задерживает нерастворимые частицы. А с другой, вода, при просачивании через почву растворяет множество вредных для здоровья веществ — удобрения, тяжелые металлы, пестициды и т.д. В итоге получается, что ключевая вода неподалеку от промышленных городов не такая уж и чистая. Можно использовать без глубокой очистки лишь воду проверенных артезианских источников, т.к. в почве над артезианским слоем находится водонепроницаемый слой. Он не дает грунтовым водам смешиваться с артезианскими. Состав воды из таких скважин почти не меняется со временем. Из-за большого объема потребляемой воды фильтры для коттеджей нужны высокопроизводительные, и простое укрупнение бытовых фильтров со сменными картриджами сделало бы воду слишком дорогой. Сегодня главная тенденция — использование сменных и регенерируемых реактивов, а также вытеснение химической очистки
физической. Можно назвать эти фильтры промежуточными между бытовыми и промышленными. Характерная деталь фильтров такого типа — аккумулятор давления. Вся поступающая вода сначала проходит механическую очистку. Причем в отличие от большинства бытовых фильтров, система механической очистки полупромышленных фильтров дополнена системой дренажа. В неподготовленной воде содержание нерастворимых частиц может быть существенным, и обычный механический фильтр придется менять слишком часто. Промывка фильтра осуществляется периодическим прокачиванием через него в обратном направлении чистой воды. Вода с вымытыми частицами при этом уходит в дренаж. Тем не менее, фильтрующие вещества все же требуют периодической замены. Грубую очистку обычно производят алюмосиликатом, а частицы меньше 20 мк задерживаются специальным керамическим порошком. Следующая ступень удаляет растворенные соли железа и марганца. В качестве фильтрующей среды используются вещества, включающие в свой состав двуокись марганца. Она служит катализатором реакции окисления, и растворенные в воде железо и марганец выпадают в осадок, который задерживается в слое фильтрующей среды, а при обратной промывке вымывается в дренаж. В процессе окисления железа и марганца некоторые фильтры удаляют растворенный в воде сероводород. Фильтрующая среда постепенно истощается и требует периодической регенерации перманганатом калия или замены. В первом случае предусмотрен специальный бак с регенерирующим растровом. Для снижения жесткости вода проходит через ионообменный фильтр, который попутно с солями жесткости удаляет также ионы некоторых тяжелых металлов. Регенерация этого фильтра происходит специальным солевым раствором. Последний этап химической очистки — адсорбционный фильтр с углем. Процессы в нем аналогичны описанным выше в бытовых фильтрах, но в отличие от них фильтры для коттеджей бывают регенерируемыми. Регенерация происходит путем обратной прокачки воды. Один из важных этапов — обеззараживание, ведь неподготовленная вода может содержать огромное количество болезнетворных бактерий. Химические технологии, применяемые для этого в бытовых фильтрах, слишком дороги. Стандартное решение — обеззараживание воды ультрафиолетом. Вода прокачивается через прозрачную кювету, освещаемую ультрафиолетовой лампой. Срок действия такого фильтра практически не ограничен, и эта технология нашла широкое применение не только в коттеджных, но и в промышленных установках. Если вы думаете, что на этом заканчивается водоподготовка, то вы ошибаетесь . Описанный выше процесс проходит вся вода, используемая в коттедже, а питьевая после всего этого должна еще пройти дополнительную доочистку обычным бытовым фильтром, вроде тех, что устанавливают в квартирах. Здесь процесс можно немного упростить, ведь в воде уже нет солей железа, жесткости, бактерий . Осталось ее немного доочистить, и вы можете пить воду самого высокого качества!
Литпортал / ч \ УРОВЕНЬ ШУМА Раймонд Джоунс Доктор Мартин Нэгл рассматривал потолок приемной Управления национальных исследований. Через десять минут он с уверенностью мог сказать, какой угол был прокрашен первым, откуда начинали красить потолок и сколько примерно времени ушло на работу. Это было новое здание. Но видно было, что красили его небрежно. "В общем качество работы в какой-то мере соответствовало общему положению вещей," - подумал он с оттенком грусти. Он посмотрел на ковер. Владелец ковровой фабрики, несомненно, руководствовался принципом: "Не выбрасывай второсортные вещи, их всегда можно продать правительству". На изучение приемной ушло уже двадцать пять минут. Хватит. Жалко времени. Нэгл поднял портфель, взял плащ и направился к выходу. В дверях он почти столкнулся с человеком в сером костюме. - Бэрк! Лицо доктора Кеннета Бэрка озарилось улыбкой. Он хлопнул Мартина Нэгла по плечу. - Что вы здесь делаете, Март?
- Я приглашен на какое-то совещание, но ребята в синей форме не пропускают меня. Я уже собрался возвращаться к себе в Калифорнию. Никак не ожидал, что встречу вас здесь. А вы здесь зачем? - Я работаю в Управлении национальных исследований и тоже приглашен на совещание . Меня послали разыскать вас. Все остальные уже собрались. Я видел весь парад отсюда. Дикстра из Массачусетского инженерно- технического, Коллинз из Гарварда и Мэллон из Калифорнийского технологического . Могучий отряд. - Да. И все они ждут вас! Пойдем. Поговорим попозже. - Ребята из бюро пропусков, кажется, сомневаются, можно ли мне доверять. Чтобы оформить допуск, потребуется, наверное, недель шесть. Я думал, что обо всем этом позаботятся... Передайте всем привет и скажите Кейзу, что, к сожалению , я не имею допуска к закрытой работе. Видимо, он этого не знал. - Нет, постойте, это же в высшей степени глупо, - сказал Бэрк. - Вы должны быть на совещании. Присядьте, мы все уладим в пять минут! Март снова опустился на стул. Он никогда не участвовал в работе над закрытыми проектами. Снятие отпечатков пальцев и копание в прошлом - это всегда вызывало у него отвращение. Пусть у других снимают отпечатки пальцев и копаются в прошлом. Он знал, что Бэрк взялся за безнадежное дело. Сколько людей томилось от безделья по полугоду, а то и по году, пока изучалась их биография . Из комнаты агента ФБР доносились возбужденные голоса. Март уловил обрывки фраз, произнесенных громким баритоном Бэрка: "Абсолютно смехотворно... первоклассный физик... электрические поля... нам нужен этот человек". А кроме агента ФБР, имелись еще представители армейской и военно-морской разведок. Вокруг совещания был воздвигнут прямо-таки фантастический тройной барьер. Еще одно доказательство стремления ревностных бюрократов скрыть тайны природы, которые лежат на виду у всего мира. Через минуту из комнаты вышел Бэрк, раскрасневшийся и возмущенный. - Оставайся на месте, Март, - сказал он с яростью в голосе. - Я пойду приведу Кейза, и мы выясним, кто, кроме охранников, имеет право сюда войти. Бэрк вернулся через несколько минут. С ним были двое в военной форме - бригадный генерал и капитан военно-морского флота - и доктор Кейз, директор Управления национальных исследований. Март не был с ним лично знаком, но знал его как одного из талантливейших ученых. Кейз подошел с открытой, дружелюбной улыбкой и протянул руку. - Прошу извинить, доктор Нэгл, за эту задержку. Я никак не думал, что вас остановят представители службы безопасности. Указания об оформлении допуска были даны задолго до совещания. Мы уладим все за несколько минут. Подождите, пожалуйста, здесь, пока я переговорю со всеми этими джентльменами... Они закрыли дверь, ведущую в бюро пропусков, но Март не мог удержаться от того, чтобы не вслушиваться в долетавшие до него голоса. Он услышал, как один из офицеров службы безопасности произнес: "Вы сами требовали тройной проверки ...", потом слова Кейза: "... тот человек, который, возможно, сумеет решить эту задачу..." Март ехал на совещание неохотно. Жена возражала, а дети подняли грандиозный рев, так как его отъезд означал, что у него не будет отпуска летом. Надо было слушаться домашних. Когда человек оказывается втянутым в работу столь секретную, что она требует тройной охраны - армии, военно-морского флота и ФБР, - он прощается со свободой. "Интересно, - подумал Март, - каким образом Кейз, автор фундаментальных работ по электромагнитным излучениям, позволил затянуть себя сюда?" Неясно также, что делает здесь Кеннет Барк - один из виднейших психологов, специалист по методам обучения. Наконец дверь открылась. Март встал. Выходившую из комнаты процессию воз-
главлял доктор Кейз. Лица у всех были еще более напряженные, чем раньше. Кейз взял Марта за руку: - Все в порядке. Пропуск вам подготовят к концу рабочего дня. Пойдемте на совещание. Нас уже ждут. Когда Март вошел в зал, у него невольно захватило дух. В зале была прямо- таки выставка раззолоченных мундиров всех родов войск. Он заметил несколько генерал-лейтенантов, вице-адмиралов и по меньшей одного представителя Объединенного комитета начальников штабов. И здесь же сидели виднейшие математики и физики. Одну стену занимал киноэкран. В глубине зала был установлен шестнадцатимиллиметровый кинопроектор. На столе в дальнем углу зала, под брезентом, лежал какой-то предмет неправильной формы. Кейз вышел вперед и откашлялся. - Мы не будем представлять вас друг другу, джентльмены. Многие из вас уже знакомы по научным трудам и лично. Прошу иметь в виду: предмет этого совещания вы должны рассматривать как секрет, который необходимо охранять, не щадя жизни, если это понадобится. Генералы сидели неподвижно, но ученые беспокойно заерзали на своих местах. Чисто военный подход! Но ведь сам Кейз не был военным. - Десять дней назад, - медленно начал Кейз, - к нам пришел молодой человек , изобретатель, который утверждал, что он совершил революцию в технике. Звали его Леон Даннинг. Он был чрезвычайно высокого мнения о своих способностях и полагал, что все должны немедленно проникнуться уважением к его особе. Он самоуверенно заявил, что будет говорить только с директором Управления, и надоел всем в такой степени, что встал вопрос: принять его или вызвать полицию? Мне передали его просьбу, и в конце концов я принял его. Так вот. Он утверждал, что разрешил проблему создания антигравитационной машины. Нэглу хотелось громко рассмеяться. И ради этой чепухи он отказался от летнего отпуска! Может быть, он вовремя успеет домой... Он бросил взгляд на своих коллег. Дикстра наклонился вперед и потирал лоб, чтобы скрыть усмешку. Ли и Норкросс обменялись снисходительными улыбками. Бэрк, заметил Март, был единственным ученым, который не шелохнулся и не улыбнулся. Но ведь Верк был только психологом. - Я вижу, что некоторым джентльменам смешно, - продолжал Кейз. - Мне тоже было смешно. Но сумасшедшего надо было выслушать до конца или приказать вышвырнуть его. Я решил выслушать. Я попытался навести его на разговор о теории, на которой основывалось действие его аппарата, но он отказался говорить на эту тему. Он заявил, что разговор об этом может состояться лишь после демонстрации изобретения. Вторая половина дня в субботу была у меня свободной, и я согласился посмотреть его аппарат в действии. Даннинг потребовал пригласить военных представителей и подготовить киноаппараты и магнитофон. Дав уже одно обещание, я пошел и на это, и пригласил на демонстрацию изобретения кое- кого из тех, кто находится сейчас здесь. Он не хотел огласки, и мы договорились встретиться на небольшом аэродроме Дуврского клуба. Это было ровно неделю назад. Он продемонстрировал свой аппарат. Я сам помог ему надеть на плечи небольшой ранец. Он весил килограммов шестнадцать -восемнадцать. На нем не было ни пропеллеров, ни сопел, и он не был соединен ни с какими внешними источниками энергии. Я почувствовал, что попал в исключительно глупое положение, пригласив военных на это пустое представление . Мы стояли вокруг него кольцом. Изобретатель снисходительно улыбнулся нам и что-то повернул у себя на поясе. В то же мгновение он начал подниматься в воздух, плавно ускоряя подъем. Мы
разбежались в стороны, чтобы следить за ним. На высоте примерно в сто пятьдесят метров он остановился и несколько мгновений неподвижно висел в воздухе. Затем опустился на землю. Кейз сделал паузу. - Наверное, некоторые считают нас, видевших это своими глазами, жертвами галлюцинации или отпетыми лгунами. К счастью, Даннинг настоял на том, чтобы демонстрация аппарата была снята на кинопленку. Он сделал знак своим ассистентам. Зал затемнили, зажужжал проектор. Март наклонился вперед, стиснув ручки кресла. На экране появилась группа людей, стоявших вокруг изобретателя. Даннингу было лет двадцать восемь - тридцать. Март с первого взгляда узнал его по описанию Кейза - развязный молодой человек, знающий, что он наделен способностями, и считающий, что все должны усвоить это как можно быстрее. Марту был Знаком этот сорт людей. Они встречаются на последних курсах любого технического колледжа США. Он видел, как люди попятились назад от Даннинга. На экране появилось четкое изображение изобретателя со странным ранцем на спине. Мгновение - и он устремился вверх. Март смотрел не отрываясь. Он попытался было уловить какие-нибудь признаки излучения, идущего из ранца. Ему пришлось напомнить себе, что искать их глупо. Никакой реактивный двигатель не мог, конечно, так работать. Но антигравитация! .. Март почувствовал, как по спине пробежал холодок. Подъем прекратился. Затем Даннинг медленно опустился в середину круга. Экран потух. В комнате зажегся свет. Март вздрогнул, как бы стряхивая с себя оцепенение. - В этот момент мы прекратили съемку, - сказал Кейз. - Даннинг стал разговорчивее и в какой-то степени коснулся теоретических основ своего аппарата. Мы записали его сообщение на магнитофон, который был доставлен по его настоянию. К сожалению, запись настолько плоха из-за сильных шумовых помех и искажений , что ее почти невозможно разобрать. Вы послушаете ее несколько позже. После обсуждения Даннинг согласился продемонстрировать еще одно качество своего изобретения, показать управляемый горизонтальный полет. Фильм об этом мы сейчас покажем. Кейз выключил свет. На экране вновь появилась та же группа людей. Даннинг поднялся в воздух по довольно крутой траектории, и полетел горизонтально. Он, казалось, находился примерно на высоте крыши ангара, который был виден в глубине кадра. Примерно метров тридцать Даннинг летел медленно, затем увеличил скорость. Это было похоже на полет ведьмы верхом на помеле. Внезапно экран озарился светом. Из ранца на спине Даннинга вырвался клуб огня. На какой-то жуткий момент он, казалось, застыл в воздухе, а затем камнем рухнул вниз. Кинокамера потеряла его на мгновение, но полностью запечатлела момент удара тела о летное поле. Во время падения Даннинг перевернулся, и ранец оказался под ним, когда он врезался в землю. Его тело подскочило несколько раз, перевернулось и замерло. Кейз подошел к выключателю и дал знак поднять шторы. Кто-то встал, чтобы выполнить его просьбу. Остальные сидели неподвижно. Казалось, время прекратило свое течение. - Таково положение дел, джентльмены, - тихо сказал Кейз. - Теперь вы понимаете, почему вы сегодня здесь. Даннинг открыл антигравитацию. В этом мы абсолютно уверены. И Даннинг мертв. Он поднял угол брезента, которым был накрыт стол, стоявший у стены. - То, что осталось от аппарата, находится тут. Для нас это всего лишь обгоревшие и окровавленные обломки. Под вашим наблюдением они будут тщательно сфотографированы и разобраны.
Кейз опустил брезент и вернулся на прежнее место. - Мы немедленно отправились в дом Даннинга с группой исследователей из Управления национальных исследований и представителями служб безопасности. Совершенно очевидная психическая болезнь Даннинга проявилась в полном отсутствии каких-либо записей. Он, видимо, жил в постоянном страхе, что его изобретение могут похитить. Он располагал превосходной лабораторией. Откуда он брал деньги, мы пока не знаем. У Даннинга была собрана также удивительная библиотека - удивительная в том смысле, что она включала в себя не только научную литературу, но также книги почти по всем оккультным наукам. Это тоже остается загадкой. Мы навели справки о его прошлом. Похоже, что ему было трудно остановить свой выбор на каком-то учебном заведении, и он учился, по меньшей мере, в четырех колледжах. Его учебная программа была такой же разнообразной , как и его библиотека. Он изучал электротехнику, историю религии и современную астрономию, латынь, теорию групп, общую семантику и сравнительную анатомию. Нам удалось разыскать около двадцати знавших его преподавателей и студентов. Все они считают его параноиком. У него совершенно не было друзей. Если он и изложил кому-нибудь свою теорию, то мы об этом не знаем. Словом, высказывания изобретателя антигравитационного двигателя сохранила для нас только эта скверная магнитофонная лента. Комната немедленно наполнилась какофонией звуков - ревом двигателей взлетающих самолетов, повседневным шумом аэродрома. Сквозь этот-шум с трудом пробивался голос погибшего - тонкий, довольно пронзительный, снисходительный и деланно терпеливый. Март напряженно вслушивался в этот свист и рев, чтобы понять смысл долетавших до него обрывков фраз. Он встретился взглядом с Бэрком и увидел, что тот отчаялся уловить хоть что-нибудь в этом шуме. Кейз дал знак ассистенту. - Я вижу, вы теряете терпение. Пожалуй, нет смысла прослушивать эту запись на нашем совещании. Каждый из вас получит копию. Запись заслуживает того, чтобы ее изучить. Насколько нам известно, это единственный имеющийся в нашем распоряжении ключ к открытию Даннинга. Март нетерпеливо поднял руку. - Доктор Кейз, вы и другие, те, кто присутствовал на демонстрации, сами принимали участие в беседе. Не можете ли вы рассказать нам больше, чем записано на ленте? Кейз улыбнулся с оттенком горечи. - Если бы, доктор Нэгл. . . К несчастью, в то время нам казалось, что смысловые помехи в объяснении Даннинга были столь же велики, как и технический шум в магнитофонной записи. Однако все, что нам удалось запомнить, мы внесли в протокол. Его копии вам также будут розданы. Есть еще какие-нибудь вопросы? Вопросы, наверно, были, но сообщение Кейза, казалось, лишило присутствующих дара речи. Кейз сделал шаг вперед. - Я не думаю, чтобы кто-нибудь из вас недооценивал теперь серьезность этой проблемы. Нам теперь ясно, что преодолеть притяжение можно - можно оторваться от Земли и полететь к звездам. Мы знаем, что если молодой американец это сумел сделать, то какой-нибудь молодой русский тоже сможет раскрыть тайну антигравитации . Мы должны воссоздать машину Даннинга. В вашем распоряжении все наличные средства и возможности Управления национальных исследований. Вам, разумеется, будет предоставлен доступ к лаборатории и библиотеке Даннинга и к обломкам его аппарата. Вас пригласили сюда потому, что вы больше других подходите для этой работы. Вы справитесь с ней.
Мартин Нэгл и Кеннет Бэрк вышли вместе. Они задержались в зале для того, чтобы обменяться короткими вежливыми приветствиями с коллегами-физиками, которых не видели довольно длительное время. Но Нэгл спешил уйти. Надо было избавиться от странного оцепенения, от ощущения, будто тебя долго били по голове подушкой. Выйдя из здания, он остановился и, засунув руки в карманы, уставился вдаль. Ему все еще мерещился человек, подымающийся вертикально вверх - парящий в небе, падающий камнем вниз. Он резко повернулся к Барку. - Психологический аспект изобретения... вы поэтому участвуете в проекте, Бэрк? Его попутчик кивнул головой. - Кейз пригласил меня, когда захотел расследовать прошлое Даннинга. - Вы же знаете, что эта машина не может существовать! - сказал Март. - В нашей науке нет теории, которая позволила бы объяснить это, не говоря уже о том, чтобы воспроизвести ее. - Не может? Что вы имеете в виду? - Я хочу сказать, что мне придется... всем нам придется вернуться вспять, бог знает как далеко - на двадцать лет учения, на пятьсот лет развития науки. . . Где мы сбились с дороги? Почему на правильный путь вышел полусумасшедший? - Он был странным человеком, - задумчиво сказал Бэрк. - Астрология, мистика, левитация. В его рассуждениях, записанных на аэродроме, немало говорится о левитации. Это ведь не так уж далеко от антигравитации, а? Март сердито хмыкнул. - Я не удивлюсь, если услышу, что первый успешный полет он совершил верхом на помеле. - Ну, есть немало сказок о помеле, коврах-самолетах и тому подобных вещах. Поневоле задумаешься, откуда все это пошло. После вечернего совещания, которое в основном было посвящено изучению остатков аппарата, Мартин вернулся в отель. Он все еще не мог оправиться от потрясения . Разобраться в сплющенных и скомканных деталях было невозможно. Но при взгляде на обломки того, что недавно было воплощением несбыточной мечты, возникало какое-то необъяснимое чувство. Март чувствовал страстное желание потрогать эту нелепую груду, превратить ее усилием мысли в аппарат, которым она когда-то была. Словно веры в возможность этого было достаточно для осуществления его желания. "А нет ли тут доли истины?" - подумал он. Даннинг верил, что это можно сделать и сделал. И все-таки надо помнить, что есть вещи неосуществимые. Вечный двигатель. Философский камень. Антигравитация. Весь опыт борьбы человечества за власть над природой говорил, что все это неосуществимо. Надо устанавливать себе какие-то пределы. Нужно признать, что у твоих возможностей есть граница, иначе можно потратить всю жизнь, пытаясь открыть секрет, как стать невидимкой или беспрепятственно пройти через кирпичную стену. Или создать ковер-самолет. Он встал и подошел к окну. Им владело все нарастающее чувство растерянности. И сейчас он понял, что скрывалось за этим чувством. Где же граница? Ее надо очертить. Он был уверен в этом.
Однажды эту границу уже очертили, и довольно определенно. В 90-х годах XIX века ученые закрыли книги. Великие умы верили, что наука познала вселенную. Неизвестное считалось невозможным. Затем открыли радий, рентгеновы лучи, космические лучи, создали теорию относительности . Граница исчезла. Где она проходит сейчас? Еще несколько часов назад он сказал бы, что может достаточно точно ответить на такой вопрос. Сейчас он уже не был в этом уверен. Нэгл лег в постель. Через час он встал и позвонил Кеннету Барку. - Бэрк, - сказал он в трубку, - это Март. Мне только что пришла в голову одна мысль. Осматривать лабораторию и библиотеку Даннинга будет вся группа. У вас есть возможность привезти меня туда рано утром? Только вы и я. Я хотел бы опередить остальных. - Я думаю, что смогу это устроить, - сказал Бэрк. - Кейз хочет, чтобы каждый из вас работал так, как сам считает нужным. Ночью шел дождь и, когда Бэрк заехал за Мартом, окутанный туманом город казался сумрачным. Это еще более усиливало ощущение нереальности недавних событий . - Кейзу наша затея не очень понравилась, - сказал Бэрк, когда они отъехали от отеля. - Другие могут рассердиться. Но, откровенно говоря, мне думается, что Кейз считает вас человеком, который скорее всех добьется успеха. Март хмыкнул. - Я еще не убежден, что Даннинг не одурачил нас каким-то грандиозным образом. - Вы убедитесь в обратном. Постепенно, конечно. Вы здесь моложе всех. Кейз думает, что некоторые из тех, кто постарше, возможно, посвятят все свое время только доказательствам, что Даннинг не мог этого сделать. А вы как настроены? Вы тоже будете думать только об опровержениях или попытаетесь открыть то, что сделал Даннинг? - Все, что мог сделать такой сопляк, как Даннинг, Нэгл сделает вдвое лучше . Но только если Нэгл убедится, что Даннинг действительно сделал это. - Вы понравитесь Кейзу, старина. Он боялся, что не найдет ни одного видного ученого во всей стране, который захотел бы по-настоящему взяться за это дело. У входа в дом Даннинга стоял часовой. Он молча кивнул, когда Бэрк и Март показали свои пропуска. - Лаборатории и мастерские Даннинга находятся на первом этаже дома, - сказал Бэрк, - наверху его библиотека. Он спал в одной из комнат на третьем этаже , остальные комнаты пустуют. Пищу Даннинг, видимо, готовил себе на кухне. После него остались солидные запасы продовольствия. Откуда вы хотите начать? - Взглянем на лаборатории, для начала я хочу получить общее представление о них. С правой стороны от входа размещалась небольшая, но исключительно хорошо оснащенная химическая лаборатория. Было похоже, что лабораторией пользовались часто, но она была безукоризненно чистой. На столе стояла сложная установка для фракционной перегонки. - Единственные записи найдены здесь, - сказал Берк. - Какие-то черновые подсчеты без формул и реакций. Март хмыкнул и перешел в соседнюю комнату. Тут он увидел более знакомое ему нагромождение приборов и аппаратуры, необходимых для экспериментов в области электроники. Однако даже в этом нагромождении явственно чувствовалась рука аккуратного и умелого специалиста. Приборные щитки были собраны с исключительной тщательностью. С лабораторией стоило познакомиться подробнее, но Март прошел в следующую
комнату, механическую мастерскую. Она была оснащена не хуже, чем лаборатория. Март тихо присвистнул. - Когда я был студентом колледжа, - сказал он, - я считал, что рай должен выглядеть именно так. - И все это принадлежало такому человеку, как Даннинг! Что вы на это скажете? - заметил с улыбкой Бэрк. Март резко повернулся. Его голос был тих и серьезен. - Бэрк, Даннинг был кем угодно, но не дураком. Шизофреник, может быть, но не дурак. Он умел делать вещи. Бэрк пересек мастерскую и открыл еще одну дверь. За нею панели вычислительных машин - цифровой и аналоговой. - Но вы еще не видели главного, - сказал Бэрк. - Самый большой сюрприз ждет вас наверху. "Гравитация - это сила," - думал Март, поднимаясь по лестнице. Силу можно победить только силой - по меньшей мере так обстоит дело в физике. В политике, в отношениях между людьми сила может уступать воздействию более тонкого начала, но если Даннинг победил притяжение, то он сделал это с помощью какой- то другой силы. Физике известны все существующие силы. Аппарат Даннинга был хитроумным изобретением. Но в своей основе это исключительно умное использование хорошо изученных законов, и только. Это не чуда и не волшебство. Придя к такому выводу, Март почувствовал себя уверенней. Он прошел За Бэрком в библиотеку. Она размещалась не в одной, а в нескольких смежных специально переоборудованных комнатах, заставленных книжными полками. В ней было, безусловно , несколько тысяч томов. - Вот что, пожалуй, вас заинтересует больше всего. Бэрк вошел в первую комнату налево. - А - Астрология, - сказал он и показал рукой на целую секцию полок. Март скользнул взглядом по заглавиям: "Астрология для начинающего", "Астрология и судьба", "Путь Вавилона", "Движение Звезд". Он вынул с полки последнюю книгу в надежде, что она окажется сочинением по астрономии. Но надежды не оправдались, Он быстро поставил ее обратно. - Они внимательно прочитаны, - заметил Бэрк. - Мы просмотрели целую кучу книг и нашли множество примечаний, сделанных рукой Даннинга. Может быть, тут нам удастся найти ключ к его мышлению - в этих пометках на полях. Март махнул рукой, решительно отказываясь от знакомства с угрюмыми томами, и глубоко засунул руки в карманы. - Чепуха, - пробормотал он. - Это не имеет никакого отношения к проблеме. Но вам, психологу, это, безусловно, должно быть интересно. Чтобы работать в этой библиотеке и в тех лабораториях, человеку нужны две головы. - Но у Даннинга голова была всего лишь одна, - возразил спокойно Бэрк. - Может быть, все это часть одного целого, которого мы не видим, и которое видел Даннинг. Март поджал губы и взглянул на психолога. - Я говорю серьезно, - сказал Бэрк. - Я бы сказал, что гений Даннинга, очевидно, заключался в его способности извлекать нужные сведения из огромной массы материала, не отвергая категорически целые области человеческого мышления . Март снисходительно улыбнулся и отошел в сторону. Он оказался перед полками, уставленными сочинениями по индусской философии. Почти два метра пространства занимали книги, посвященные левитации. Март показал пальцем на корешки. - Все, что они делают благодаря ловкости рук, Нэгл может сделать вдвое быстрее с помощью иксов, игреков и дрессированных электронов. - Это все, чего хочет Кейз. Когда вы сможете представить результаты?
После ленча они вернулись в Управление национальных исследований. Марту отвели кабинет и дали копию магнитофонной ленты. Он устроился поудобнее перед самым динамиком и начал напряженно вслушиваться, пытаясь различить сквозь шум едва слышный голос Даннинга. В самом начале он уловил повторенное несколько раз слово "левитация" и даже целую фразу "левитация, которая впервые была успешно продемонстрирована западному миру английским медиумом...". Шум самолета заглушил остальное. Март перемотал ленту и прослушал эту часть вновь. При каждом упоминании левитации в его мозгу возникал образ грязного, костлявого индусского факира в засаленном тюрбане, с мотком веревки в одной руке и корзинкой со змеей в другой . Но Даннинг ведь открыл антигравитацию! Март раздраженно выругался и пустил ленту дальше. Он навострил уши, поймав слова "влияние земного магнетизма", затем все заглушил шум, и снова удалось разобрать обрывок фразы: "...активность солнечных пятен, до сих пор не объясненная астрономами и вежливо игнорируемая всеми специалистами..." Эти слова вызвали какое-то смутное воспоминание. Март сделал пометку на блокноте, чтобы позднее вернуться к мелькнувшей мысли. Голос вновь растворился в шипении и реве. Он разобрал лишь, что разговор шел о "расположении планет" - астрологии. Он громко застонал и закрыл глаза, вслушиваясь; запись снова стала разборчивой: "...магнитные бури на земле, которые можно предсказать на основе движения планет..." "Галилей и Ньютон оказали большее влияние на человеческое мышление, чем они думали сами. Они отняли у религии ее чудеса и лишили физику воображения... Индусы достигли большего успеха в раскрытии тайн вселенной, чем американские научно- исследовательские лаборатории". Это были последние слова, которые еще удавалось разобрать. Рев авиационных моторов, свист и шипение, вызванное неполадками в микрофоне... Март выключил магнитофон. Чувствуя почти физическую усталость, он перешел к протоколу и быстро пролистал его. Воспоминания тех, кто присутствовал на демонстрации, удивительно мало прибавляли к тому, что удалось извлечь из записи. Все это было слишком неожиданно для свидетелей чуда. Он откинулся в кресле, подводя итог всему услышанному. В общем Даннинг считал, что рутинеры ученые исключили из общепринятых теорий массу полезных сведений. Покойный верил, что значительную часть этой информации можно найти в астрологии, индусском мистицизме, левитации и других сомнительных областях. В дверь постучали, послышался голос: - К вам можно, доктор Нэгл? Это был Кейз. Март встал и предложил кресло. - Я только что кончил заниматься записью и протоколом. Очень мало отправных данных. - Да, маловато, - сказал Кейз. - В юности вы, наверное, испытывали чувство, которое охватывает человека, впервые участвующего в соревнованиях. Вы знаете, что я имею в виду. Вы каждой клеточкой тела чувствуете, что у вас нет никаких шансов одержать победу. Или что вы сделаете все возможное для успеха. Вы понимаете меня? Март кивнул. - А какое чувство владеет вами теперь, доктор Нэгл? Март откинулся на спинку кресла и полузакрыл глаза. Он понял Кейза. Со вчерашнего вечера он уже прошел сквозь целую гамму всевозможных настроений. Какое из них одержало верх?
- Я могу это сделать, - тихо сказал он Кейзу. - Мне хотелось бы, конечно, иметь больше сведений, и мне не очень нравятся методы Даннинга. Но я могу изучить то, что знал он, и заново осмыслить то, что знаю сам. - Хорошо! - Кейз встал. - Именно это я и хотел узнать. Вы не обманули моих ожиданий. Доктор Кеннет Бэрк никогда не переставал удивляться тому, как устроен человек. Еще в ранней молодости он задумывался над тем, почему одни из его друзей верили в привидения, а другие - нет. Он начал всерьез интересоваться тем, как человек знает новое, и это в конце концов сделало его профессором психологии в Управлении национальных исследований . Он был рад, что работой над этим проектом руководит доктор Кейз. Кейз больше, чем другие знакомые ему физики, понимал важность того факта, что каждый исследователь прежде всего человек и лишь затем ученый. Каждая научная теория, каждый закон, как бы, добросовестно они ни были изложены и объективно доказаны, всегда несут на себе отпечаток личности наблюдателя. Бэрк с интересом изучал реакцию физиков на ситуацию, которая возникла в результате открытия Даннинга и его смерти. Мартин Нэгл вел себя приблизительно так, как и предполагал Бэрк. В годы учебы они хорошо знали друг друга. Весь день Бэрк сопровождал остальных ученых, осматривавших дом Даннинга. Некоторые, так же как и Март, предпочли посетить дом поодиночке. Другие ездили группами по три-четыре человека. Но к концу дня там побывали все, кроме профессора Вильсона Дикстры. В первый день Дикстра, уединившись в кабинете, занимался изучением магнитофонной записи и протокола. Посетить дом Даннинга он собрался лишь на следующий день. Бэрк приехал за ним в отель на автомашине и ждал пятнадцать минут. Наконец из вращающихся дверей отеля вышел небольшой круглый человек. Дикстре было около шестидесяти лет. Большие, в тяжелой оправе очки делали его похожим на сову. Небо хмурилось, и, направляясь к машине, Дикстра прижимал к груди черный Зонтик. Бэрк ждал, открыв дверцу. - Доброе утро. Похоже, что сегодня утром мы будем одни. Все остальные побывали в доме Даннинга вчера. Дикстра хмыкнул и забрался на сиденье. - Именно это мне и нужно. Я провел вчера целый день за изучением этой смехотворной магнитофонной записи. Бэрк вырулил на улицу. С самого начала его не покидало чувство, что проект вполне мог бы обойтись без участия Дикстры. - Смогли вы хоть что-нибудь узнать из нее? - Я еще не пришел к определенному выводу, доктор Бэрк. Но вряд ли приду к выводу, что молодой Даннинг был гением, как считают некоторые из ваших сотрудников . Они подъехали к старому дому, в котором жил Даннинг. Дикстра оглядел его из ав т омашины. - То, чего следовало ожидать, - фыркнул он. В первой комнате Дикстра быстро осмотрел полки с реактивами. Он снял несколько пузырьков и внимательно изучил наклейки. Некоторые он откупорил и осторожно понюхал, а затем с презрительным видом поставил обратно на полку. Физик довольно долго рассматривал перегонную установку. Заметив лежавший на столе блокнот с вычислениями, физик вынул из кармана старый конверт и сделал какие-то пометки.
В комнате с электронной аппаратурой он повернулся, чтобы взглянуть сквозь открытую дверь на химическую лабораторию. - Зачем человеку вообще могут быть нужны сразу две такие лаборатории? Он обшарил механическую мастерскую. - Хорошо оснащена, - пробормотал он, - то, что нужно человеку, который любит мастерить. Но комната с электронно-вычислительными машинами произвела на него несравненно большее впечатление. Он внимательно осмотрел машины и схемы, открыл все ящики столов и перебрал все валявшиеся в них бумаги. С побагровевшим лицом он повернулся к Бэрку. - Это ерунда! Безусловно, здесь должны были быть графики, записи или хоть какие-нибудь следы расчетов, которые делал этот человек. Машины стоят здесь не напоказ, видно, что ими пользовались. Кто-то изъял материалы с подсчетами из этой комнаты! - Именно в таком виде мы ее нашли, - сказал Бэрк. - Нам это непонятно так же, как и вам. - Не верю, - отрезал Дикстра. С особым интересом Бэрк ожидал, какое впечатление произведет на ученого библиотека. Вначале Дикстра вел себя, как зверь, внезапно попавший в клетку. Он отскочил от полок с мифологической литературой, бросил взгляд на раздел астрологии, оттуда быстро перешел к книгам по религии и описал зигзаг, который привел его к полкам, отданным индусской философии. - Что это, - проревел он хрипло, - шутка? Его пухлая фигура, казалось, еще более раздулась от негодования. - Следующая комната, пожалуй, заинтересует вас еще больше, - сказал Бэрк. Дикстра чуть не бегом бросился в соседнюю комнату. Увидев названия находившихся здесь книг, он облегченно вздохнул и заметно успокоился. Он был среди друзей. Он благоговейно снял с полки потрепанный экземпляр книги Вейла "Пространство. Время. Материя". - Не может быть, - пробормотал он, - чтобы Даннинг был владельцем обеих библиотек и понимал книги обоих сортов. - Он понял и победил земное притяжение, - ответил Бэрк. - И сделал это здесь, в этом доме. Вот последний из ключей к его тайне, которым мы располагаем. - Тут что-то не так, - прошептал Дикстра. - Антигравитация! Слышал ли кто- нибудь о ней? И как ее могли открыть в подобном месте? После обеда ученые вновь собрались на совещание. Они согласились взяться за эту проблему. Как подступиться к решению проблемы, никто не знал. На совещании было решено работать и поодиночке и сообща - в зависимости от обстоятельств, а пока проводить ежедневные семинары с тем, чтобы попытаться натолкнуть друг друга на дельные мысли. Председателем семинара избрали Марта. Он был моложе своих коллег, как по возрасту, так и по стажу и чувствовал себя в этой роли довольно неловко. Март выбрал несколько книг из библиотеки Даннинга и взял их с собой в кабинет. Он уселся за стол, обложившись фолиантами по астрологии, спиритуализму, мистике, религии, левитации, данными о солнечной активности. Конкретной цели у него не было, он просто хотел окунуться в атмосферу, в которой работал Даннинг. Даннинг достиг цели. Необходимо найти путь, по которому он шел, где бы этот путь ни пролегал. Некоторые из книг были скучны, большинство оказалось чистейшим вздором.
Однако кое-какие факты заинтересовали его. Религии знали чудеса. Чудо ли антигравитация или это проявление законов природы? Был Даннинг ученым или чудотворцем, искусству которого нельзя научиться? Март захлопнул книги и отодвинул их на край стола. Вынув из ящика блокнот, он начал лихорадочно выписывать основные уравнения Эйнштейна. К концу первой недели докладывать практически было не о чем. Председательствовать на семинаре оказалось нелегко. В таком собрании ученых непременно появляется самозваный инструктор, пытающийся заново обучить своих коллег всем основам науки. В данном случае положение осложнялось тем, что таким инструктором был прославленный профессор Дикстра. В конце первой недели он поднялся с места и, подойдя к доске, начал мелом набрасывать уравнения. - Я достиг цели, к которой стремился, джентльмены, - сказал он. - Я могу доказать, что аппарат, с которым якобы летал Даннинг, невозможен без нарушения принципа эквивалентности, открытого Эйнштейном. Если мы признаем правильность этого принципа, из первого уравнения легко увидеть... Март рассеянно смотрел на уравнения. Они были выведены правильно. И все же Дикстра был не прав. Дикстра полагал, что они делают глупость, занимаясь проектом, и участвовал в работе лишь потому, что считал своим священным долгом доказать им это. Март чувствовал, что Дикстра тормозит работу всей группы. Но остальные все-таки признали достоверность достижений Даннинга. А это, в конце концов, само по себе уже некоторый успех, решил он. Марту померещилось, что вокруг формул на доске пляшут туманные астрологические знаки. Дикстра умолк, и Март встал. - Поскольку вы столь убедительно изложили свои тезисы, доктор, - сказал он, - и поскольку мы все убеждены в подлинности достижений Даннинга, то единственный вывод, который можно сделать, состоит в том, что неверна основная предпосылка. Я бы сказал, что вы выдвинули блестящие доводы, которые заставляют усомниться в правильности принципа эквивалентности! Дикстра на мгновение застыл, словно не веря своим ушам. - Мой дорогой доктор Нэгл, если в этой комнате есть человек, который не понимает, что принцип эквивалентности неопровержим, я предложил бы ему немедленно отказаться от работы над проектом! Март сдержал улыбку, но почувствовал желание продолжить спор. Ему хотелось подразнить Дикстру. - Нет, серьезно, доктор, и я спрашиваю всех: что случилось бы, если бы принцип эквивалентности оказался неверным? Почему в восточной литературе так много писали о левитации? Я думаю, Даннинг задал этот вопрос и нашел какой-то разумный ответ. Если принцип эквивалентности несовместим с этим ответом, то нам, пожалуй, стоит пересмотреть данный принцип. Если мы действительно хотим повторить достижение Даннинга, нам придется внимательно присмотреться ко всем общепризнанным постулатам, которые имеют какое-то отношение к тяготению. Неожиданно слова попросил Дженнингс, сухопарый физик из Калифорнийского технологического института. - Я полностью согласен с доктором Нэглом, - сказал он. - Что-то случилось со мной за эту неделю. Я вижу, что то же самое произошло с большинством из вас. К сорока годам средний физик, видимо, приобретает способность инстинктивно отклонять все, что не соответствует известным ему законам естествознания. Затем мы становимся руководителями факультетов, а те, кто моложе нас, продолжают исследования и используют информацию, на которую наше поколение не обращало внимания, и делают открытия, мимо которых мы прошли. Мы как бы воз-
двигаем плотины в своих умах, или, если угодно, строим там шлюзы, через которые течет вся масса сведений о физической вселенной. По мере того как мы ста- рем и становимся все более умудренными, мы закрываем ворота шлюзов настолько, что уже ничто новое не может попасть в наш мозг. События прошлой недели до самого основания потрясли меня. Я вновь оказался в состоянии усваивать и накапливать данные, с которыми не сталкивался раньше. Мне кажется, доктор Нэгл прав. Мы должны пересмотреть все, что мы знали до сих пор относительно силы тяготения. Семинар прошел бурно. После семинара Март зашел в кабинет Бэрка. - Привет, Бэрк, - сказал он. - Привет. Как ваши дела? Я уже дня два собирался заглянуть к вам. Пока не видно, чтобы кто-нибудь из вас перебрался в мастерские. По-видимому, вы еще находитесь на стадии теоретических изысканий. - Мы не дошли даже до этого, - буркнул Март. - Но есть вопрос поважнее, чем антигравитация. Как вы относитесь к поездке на рыбную ловлю? - Что ж, пожалуй. Я понимаю вас: одна работа, и никакого отдыха, и все такое прочее... Но вы-то понимаете, как важен проект? - Я еду ловить рыбу, - сказал Март. - Вы поедете со мной или нет? - Еду. Я могу снять бревенчатый дом рядом с горной речкой, где форели больше, чем на рыбном рынке. В домике, арендованном Бэрком, их уже ждал сторож, приготовивший все необходимое . В лесу было сыро от росы, в лощинах, которыми они спускались к реке, еще прятался предрассветный холодок. Март подтянул сапоги повыше и попробовал гибкость купленного им нового удилища из фибергласа. - Наверно, я старомоден, - сказал он. - Прежние удилища мне нравятся больше . Они вошли в речку чуть повыше тихого омута. Клев был хорошим. К полудню Март поймал шесть, а Бэрк семь крупных форелей . После обеда они уселись на берегу и бездумно смотрели на текущий мимо поток . - Приступили ли вы к работе? - прервал молчание Бэрк. Март рассказал ему о последнем семинаре. - Может быть, Дикстра совершенно прав. Его математические выкладки выглядят убедительно. Но я был вполне серьезен, когда предложил пересмотреть принцип эквивалентности - по крайней мере его современную формулировку. - Вы знаете об этом больше, чем я, - сказал Бэрк. - В чем суть принципа эквивалентности? - Его выдвинул Эйнштейн в одной из своих первых работ, кажется, в 1907 году. Он утверждал, что сила инерции эквивалентна силе тяжести. То есть в системе, которая движется с ускорением, человек будет испытывать действие силы, ничем не отличающееся от действия силы тяжести. С другой стороны, человек внутри свободно падающего лифта не замечает воздействия земного притяжения. Если бы он встал на весы, то увидел бы, что ничего не весит. Жидкость не выливалась бы из стакана. Согласно принципу эквивалентности никакой физический эксперимент не может обнаружить земное притяжение внутри любой системы, свободно движущейся в гравитационном поле. Дикстра был совершенно прав, сказав в ходе своих строго научных рассуждений, что такой механизм, как аппарат Даннинга, потребовал бы отказа от принципа экви-
валентности. Но, может быть, принцип эквивалентности и вправду недостаточно точно отражает действительность. Если это так, у нас есть хороший исходный пункт. Каким будет следующий шаг, я пока не знаю. Вода крутилась и пенилась вокруг торчавшего у берега камня. Бэрк швырнул в реку пригоршню палочек. Они устремились к центру водоворота. - Можно было бы сказать, - произнес он, - что эти палочки сблизились друг с другом под воздействием взаимного притяжения. - Здесь дело не в притяжении между ними, - сказал задумчиво Март. - Это было вызвано силами, тянущими и толкающими их. Гравитация - подталкивание может быть. Но что подталкивает, что тянет? Чертов Даннинг! Он знал! Сидя на крыльце в темноте после ужина, Март чувствовал себя удовлетворенным. Его не покидало смутное ощущение, что он чего-то достиг за этот день. Чего именно - он не знал, но это не имело значения. - Знаете, - заговорил он внезапно, - вы, психологи, должны объяснить нам, откуда берутся идеи. Откуда приходят идеи - изнутри человека или снаружи? Он умолк и занялся истреблением москитов. - Продолжайте, - сказал Бэрк. - Мне нечего больше сказать. Я думаю сейчас снова о гравитации. - А что вы думаете? - Как найти новую идею о гравитации? Что происходит в человеке, когда он придумывает новую теорию? Я чувствую себя так, словно меня непрерывно засасывает в эту проблему вместо той, которую я должен решать. Сейчас я думаю о нашем послеобеденном разговоре. Должен сказать, что мне никогда не нравился принцип эквивалентности. Это чувство гнездилось где-то в уголках мозга. Принцип неверен. Я пытаюсь представить себе нечто текущее сквозь пространство. Но это не может быть трехмерным течением, подобным реке. Он выпрямился и медленно вынул сигару изо рта. - ...Но это может быть течением... - Он внезапно встал и повернулся к дому. - Послушай, Бэрк, надеюсь, ты простишь меня. Мне нужно кое-что посчитать. Кончик сигары Бэрка засиял красным огоньком. - Не обращай на меня внимания, - ответил он. Бэрк не знал, когда Март лег спать. Утром он застал его за работой. - Рыба ждет, - сказал Бэрк. Март взглянул на него. - Послушай, рыба может подождать. Мне необходимо вернуться в Управление как можно быстрее. Здесь я кое-что начал и не хочу отрываться. Бэрк улыбнулся. - Делай свое дело, дружище, я сложу все в автомашину. Ты скажешь, когда будешь готов. И поехали. Около трех часов дня в дверь кабинета Марта кто-то постучал. Он с раздражением поднял голову и увидел входящего Дикстру. - Доктор Нэгл, рад, что застал вас. - Чем могу быть полезен? - Я должен обсудить с вами нечто исключительно важное, связанное с проектом, - начал Дикстра. Он доверительно наклонился вперед, щуря глаза за тяжелыми совиными очками. - Знаете ли вы, - сказал он, - что весь этот проект - мошенничество? - Мошенничество? Что вы хотите сказать? - Я самым тщательным образом осмотрел так называемый дом Даннинга. Могу Заверить вас, что никакого Даннинга вообще не было! Мы жертвы подлого обмана! Он хлопнул ладонями по краю письменного стола и с победоносным видом откинулся назад в кресле.
- Не понимаю, - пробормотал Март. - Сейчас поймете. Осмотрите лабораторию в том доме. Изучите полки с реактивами. Спросите себя, какие химические эксперименты можно провести с таким пестрым набором материалов. В секции электроники такая же мешанина, как в телевизионной лавочке на углу улицы. Счетно-вычислительные машины никогда не использовались там, где они сейчас находятся. А библиотека! Совершенно очевидно, что из себя представляет это гнездо для интеллектуальных крыс! Доктор Нэгл, по каким-то непонятным причинам мы стали жертвами подлого обмана. Антигравитация ! Я хочу знать, почему нам дали это дурацкое задание, когда стране так нужны способности каждого из нас? Март почувствовал легкий приступ тошноты. - Я допускаю, что кое-какие странности тут есть. Но если то, что вы говорите, - правда, то как объяснить рассказы очевидцев? - Ложь! - отрезал Дикстра. - Я не представляю себе, чтобы сотрудник Управления национальных исследований мог участвовать в таком деле. К тому же мне удалось уже многое сделать для достижения нашей цели. И я готов со всей определенностью заявить, что принцип эквивалентности будет опровергнут. Дикстра побагровел и встал. - Мне очень жаль, что вы придерживаетесь подобных взглядов, доктор Нэгл. Я всегда считал вас молодым человеком, подающим большие надежды. Может быть, вы еще станете им, когда прояснится недостойный обман. До свидания! Март даже не привстал, когда Дикстра вылетел из кабинета. Этот визит его обеспокоил. Обвинения были абсурдны, но тем не менее они ставили под угрозу основы его работы. Разуверься он в том, что аппарат Даннинга действовал, это могло бы заставить его снова признать антигравитацию ерундой. Он с лихорадочной энергией вновь взялся за свои листки с вычислениями. К концу рабочего дня, когда большинство его коллег обычно уже уходили из Управления, он позвонил математику Дженнингсу. Март не продвинулся еще так далеко, как хотелось бы, но ему надо было знать, действительно ли он нашел выход из тупика. - Не могли бы вы зайти на минутку ко мне? - сказал он. - Я хочу кое-что вам показать. Дженнингс появился через несколько минут. - Вы видели сегодня Дикстру? Он носится с небылицей, будто проект - мошенничество ! - выпалил он, прежде чем Март успел заговорить. Март молча кивнул головой. - Зачем Кейз вообще пустил сюда этого старого дурака?! Дик был хорошим ученым, но он выдохся... Однако что вы хотели мне показать? Что-нибудь похожее на ответ? Март пододвинул к нему лежавшие на столе листки с вычислениями. - Принципа эквивалентности больше нет. Я в этом уверен. Я вычислял возможное поле движения в искривленном пространстве. Получается нечто восьмимерное, но смысл в этом есть. Хотел бы, чтобы вы посмотрели мои вычисления. Брови Дженнингса поползли вверх. - Хорошо. Вы понимаете, конечно, что мне нелегко примириться с опровержением принципа эквивалентности. Он существует уже сорок пять лет. - Мы найдем что-нибудь другое вместо него. - У вас нет другого экземпляра этих расчетов? Март пожал плечами. - Я могу сделать их заново. - Я их буду беречь. - Дженнингс положил листки с вычислениями во внутренний карман. - Но что это нам дает? У вас есть какая-нибудь идея?
- Да, - сказал Март. - Вчера я наблюдал за водоворотом. Вы видели когда- нибудь, что происходит с щепками, когда их бросают в водоворот? Они сближаются друг с другом. Это тяготение. Дженнингс нахмурился. - Подождите-ка, Март... Март засмеялся. - Поймите меня правильно. Подумайте об этом как о течении. Я не знаю его свойства. Оно, видимо, двигается сквозь четырехмерное пространство. Но когда мы доведем расчеты до конца, мы выработаем формулу вихря такого потока, протекающего через материальную субстанцию. Допустим, что такие вихри существуют . Возникают водовороты. Это грубая аналогия. Нужна математическая модель. Пожалуй, можно показать, что вихрь сближает массы, вызывающие его образование. В этом, пожалуй, может быть смысл, как по-вашему? Дженнингс сидел неподвижно. Затем он улыбнулся и положил руки на стол. - Может. Вихрь восьмимерного потока довольно сложная штука. Но если все правильно, что тогда? - Тогда мы построим аппарат, направляющий материю вдоль силовых линий тока этого течения так, чтобы вихри не возникали. Дженнингс откинулся в кресле. - Боже праведный, да вы уже все обдумали! Постойте, но это просто нейтрализует силу тяготения. А как с антигравитацией? Март пожал плечами. - Мы найдем способ введения вихря с противоположным вектором. - Совершенно верно, старик, совершенно верно. Март засмеялся и проводил его до двери. - Да, я знаю, как это все звучит, но поверьте, я действительно не шучу. Если мы получим формулу гравитационного потока, остальное уже несложно. Через день Март рассказал о своих расчетах на семинаре. Тем ученым, которые в какой-то степени склонялись к точке зрения Дикстры, было нелегко принять идею Марта, но математическое обоснование выглядело достаточно убедительным. Единодушно решили попытаться воплотить идею Марта в металл и электромагнитные поля. Решающую роль в завершении теоретических обоснований идеи Марта сыграл Дженнингс. Через три дня он, не постучавшись, ворвался в кабинет Марта и бросил на стол несколько листов бумаги. - Вы правы, Март. В вашем поле действительно возникает вихрь в присутствии материальной субстанции. Мы создадим аппарат Даннинга! Но Марту суждено было пережить тяжелый удар. Вся группа лихорадочно трудилась шесть часов подряд, чтобы довести теоретическую разработку проекта до конца. В результате выяснилось, что антигравитационную машину построить можно. Но она будет со стотонный циклотрон размером. Март сообщил об этом Кейзу. - Это мало похоже на ранец, с которым летал Даннинг. Если хотите, мы поищем пути к уменьшению размеров, но можем представить и конкретный проект машины в нынешнем виде. Кейз взглянул на расчеты, подготовленные Мартом. - Не совсем то, на что мы рассчитывали, но я думаю, ее надо строить. Мастерские в вашем распоряжении. Сколько времени вам понадобится? - Это зависит от того, сколько людей и станков вы нам дадите. При круглосуточной работе, я думаю, образец можно сделать примерно через три недели. - Согласен, - сказал Кейз. - Приступайте.
Прошло, однако, больше месяца, прежде чем состоялась демонстрация антигравитационной машины. Март подошел к щиту управления, который казался крошечным в просторном цехе, включил рубильники и медленно повернул несколько рукояток. Огромный диск, лежавший на полу, медленно поднялся вверх и повис в воздухе без всякой видимой опоры. Диск был диаметром в девять метров и толщиной в девяносто сантиметров . Доктор Кейз потрогал поверхность массивного диска, затем изо всех сил надавил на него. Март улыбнулся и отрицательно покачал головой. - Вы стронете его с места, только если будете давить на него достаточно долго и с достаточной силой. У него такая же инерция, как у небольшого линейного корабля. Как я уже говорил, эта машина мало чем напоминает аппарат Даннинга . Но мы продолжим наши усилия. - Это грандиозное достижение, - сказал Кейз. - Я поздравляю всех вас. Март вновь подошел к щиту управления и медленно опустил массивный диск на опорные балки. - Я хотел бы, чтобы все вы сейчас собрались в зале совещаний, - сказал Кейз. - Там мы сообщим вам некоторые дополнительные данные. По дороге из мастерской Март нагнал Бэрка и пошел рядом с ним. - Что там такое? - спросил он. - Уж не собираются ли они выдать нам по оловянной медали? - Даже лучше, - сказал Бэрк. - Узнаешь сам. Снова они оказались в зале и заняли почти те же места, на которых сидели несколько недель назад. Кейз прошел на свое обычное место впереди. - Незачем говорить вам, джентльмены, что означает это достижение для нашей страны и всего человечества. Антигравитация революционизирует военный и гражданский транспорт всего мира, а в будущем понесет человека к звездам. А сейчас я хотел бы представить вам одного джентльмена. Он сделал знак рукой, и в зал вошел человек. Общий вздох изумления. Перед учеными стоял Леон Даннинг. Он посмотрел на аудиторию со слегка лукавой улыбкой. - Я вижу, вы узнали меня, джентльмены. Надеюсь, никто не будет сердиться на меня или считать меня человеком со скверным характером, каким меня изобразили. Это было нужно по сценарию. Неприятный молодой нахал, так, кажется, меня называли. Дженнингс вскочил с места. - Что это означает, доктор Кейз? Я думаю, мы вправе рассчитывать на объяснение . - Совершенно верно, доктор Дженнингс. И вы его получите. Наш друг, доктор Дикстра, был во многом прав. Информация, которую мы представили вам перед началом работы над проектом, была вымышленной. Волна возгласов изумления и протеста прокатилась по аудитории. Кейз поднял РУку. - Минутку. Выслушайте меня до конца. Я сказал, что первоначальная информация была ложной. Леон Даннинг, изобретатель антигравитационного аппарата, в действительности не существовал. Мы разыграли спектакль и сняли фильм. Антигравитации не было. Зато сегодня антигравитационная машина есть. Так в чем же здесь обман? Наш главный психолог, доктор Кеннет Бэркли, расскажет вам остальное . Бэрк встал и подошел к Кейзу с видом человека, который неохотно подчиняется необходимости.
- Если кто из вас рассердился, - сказал он, - то сердиться нужно на меня. Проект "Левитация" возник по моему предложению. Не думайте, однако, что я извиняюсь перед вами. Я возражаю против таких названий, как обман или мошенничество , которые употреблял профессор Дикстра. Как можно говорить об обмане, если проект привел к открытию, потенциальных возможностей которого мы в данный момент даже не можем осознать? - Но Зачем, доктор, Зачем? - взорвался Дженнингс. - Зачем эти фокусы, вымыслы, зачем астрология, левитация и мистицизм? Мы же не школьники! - Тогда ответьте на один вопрос, - сказал Бэрк. - Как бы вы реагировали на письмо доктора Кейза с приглашением принять участие в создании антигравитационной машины? Сколько из вас осталось бы в своих убежищах здравого смысла, в университетах, где фантазерам не позволяют тратить народные деньги так, это делается в правительственных учреждениях? Мы рады, что в проекте принял участие всего один такой человек, как профессор Дикстра. Он отказался поверить в представленные нами данные и задался целью доказать, что антигравитация невозможна. Многие из вас приехали бы с той же целью, если бы наш маленький спектакль не подтолкнул вас на поиски разгадки. По существу, это проект психологический, а не физический. Мы могли бы избрать какую-нибудь другую проблему, не обязательно антигравитацию. И могу сказать наперед, что результат был бы тот же. Я наблюдал за многими учеными, работающими в лабораториях и библиотеках. Я изучал психологию их подхода к работе. Внутреннее решение относительно того, можно ли найти ответ на проблему, принимается обычно еще до начала поисков ответа. Во многих случаях, как видно на примере профессора Дикстры, все сводится к тому, чтобы доказать правильность этого внутреннего решения. Прошу простить, что мы использовали вас в качестве подопытных кроликов. Но смею утверждать, что я дал вам гораздо более эффективную методику научных исследований, чем та, которой вы располагали до сих пор. Методику убеждения в том, что можно найти ответ на любой вопрос. И в этом смысле вообще никакого обмана не было. Вам был показан новый эффективный метод научной работы. Если вы смогли за считанные недели решить проблему, которая казалась неразрешимой, то сколько же других научных проблем ждут этого нового подхода?! "Понадобится немало времени, чтобы полностью осознать сказанное Бэрком," - подумал Март. Внутри него все еще тлели искорки гнева, и погасить их было трудно. Но ему стало смешно: все-таки Бэрк очень ловко спланировал этот эксперимент. Март готов был держать пари, что Дикстра заставил психиатра пережить немало неприятных минут. Как только они смогли остаться вдвоем, Бэрк взял Марта За руку. - Я чуть не забыл сказать тебе, что ты приглашен сегодня ко мне на обед. - Надеюсь, что на этот раз меня не обманут, - ответил Март. После обеда оба они вышли во внутренний дворик, с помощью которого Бэрк пытался придать своему городскому жилью вид загородной усадьбы. Усевшись на садовую скамейку, они созерцали луну, поднимавшуюся за телевизионной антенной соседнего дома. - Я хочу знать остальное, - сказал Март. - Ты о чем? - Не лукавь. То, что остальные собираются выжать из тебя завтра утром. Хочу узнать первым. Несколько минут Бэрк хранил молчание. Он зажег трубку, хорошенько раскурил ее и лишь затем заговорил: - Дженнингс почти что сказал об этом, когда говорил об умственных шлюзах. Все сводится к вопросу, который ты задал мне в горах: в чем суть процесса
мышления? Откуда приходят оригинальные мысли? Возьми, например, сложные уравнения гравитационного потока в искривленном пространстве, которые вы вывели за несколько дней. Почему ты не сделал этого десять лет назад? Почему никто другой не сделал этого давным-давно? Почему это сделал ты, а не кто-нибудь другой? Тебе известна теория передачи информации. Ты знаешь, что любую информацию можно записать кодом, состоящим из импульсов. Например, сложную фотографию можно закодировать в виде точек. Можно использовать код из точек и тире, можно использовать промежутки времени между импульсами, можно использовать амплитуду импульсов - словом, тысячи различных факторов и их комбинаций. Но любую информацию можно выразить как определенную последовательность импульсов . Одна из таких последовательностей импульсов будет гласить: "Любое тело во вселенной притягивает другое тело во вселенной", другая - "Секрет бессмертия состоит...", а третья - "Гравитация сама по себе является результатом воздействия ... И она может быть нейтрализована посредством..." Любой ответ на любой вопрос может быть выражен в виде определенной последовательности импульсов, в котором взаимосвязь между импульсами представляет собой закодированное изложение информации. Но согласно определению чистый шум является беспорядочным чередованием импульсов, он содержит импульсы во всех возможных сочетаниях и связях. Следовательно, любое несущее информацию сообщение относится к особому подклассу класса "шум". Чистый шум, следовательно, включает в себя все возможные сообщения, всю возможную информацию. Отсюда следует вывод: в чистом шуме или, что то же самое , в чистой вероятности заключено все знание! Но это не просто упражнение в схоластической логике. Это признание того положения, что все можно узнать, можно постичь. - Постой! - воскликнул Март. - Должны же быть какие-то пределы действия этой теории! - Почему? Разве логика моих рассуждений о шуме и информации не верна? - Черт возьми, я не Знаю. Звучит неплохо. Она верна, конечно, но, собственно говоря, какое отношение она имеет к умственной деятельности человека и проекту "Левитации"? - Точно я не могу ответить на этот вопрос пока. Мне кажется, что в мозгу человека должен быть механизм, который является не чем иным, как генератором чистого шума, источником беспорядочных импульсов, чистого шума, в котором кроется все знание. Где-то рядом должен быть другой механизм, который фильтрует этот беспорядочный шум или управляет его генерированием таким образом, что через этот фильтр могут проходить лишь сообщения, имеющие смысловое значение. Очевидно, этот фильтр можно регулировать так, чтобы он отсеивал все то, что мы определяем как шум. Мы постепенно взрослеем, и, по мере того как мы учимся в школе и получаем образование, в наших фильтрах шума появляются ограничительные уровни, которые пропускают лишь ничтожную часть сведений, приходящих из внешнего мира и из нашего воображения. Факты окружающего мира отвергаются, если они не подходят к установленным уровням. Творческое воображение суживается. Фильтр работает слишком хорошо! - И ваш проект, - сказал Март, - эти материалы о вавилонской мистике, астрологии и прочая чепуха... - Вся схема была рассчитана на то, чтобы вызвать как можно больше шума, - ответил Бэрк. - Мы не Знали, как построить антигравитационную машину, и поэтому мы нарисовали вам образ человека, который построил ее, и сделали этот образ по возможности более хаотичным, чтобы расшатать ваши шумовые фильтры. Я ввел в ваши умы дозу универсального шума по проблеме антигравитации и конечный вывод о том, что она была решена. Каждый из вас заранее настроил свои
фильтры на отклонение идеи антигравитации. Дескать, это чепуха! Ее бесполезно искать. Надо работать над чем-нибудь полезным. Поэтому я предложил Кейзу собрать группу виднейших ученых и поставить их перед фактом, что это не бессмысленная затея, что это можно сделать. Мы расшатали ваши умственные фильтры, и в результате появился ответ. Метод сработал, он будет действенным всегда. Все, что необходимо сделать - это избавиться от лишнего груза предрассудков, от окаменевшего мусора в голове, изменить произвольную настройку ваших умственных фильтров в отношении других вещей, которые вам всегда хотелось сделать, и тогда удастся найти нужный ответ на любую проблему, какую вы только пожелаете исследовать. Март взглянул на небо. - Да, вот они, звезды, - сказал он. - Я всегда хотел добраться до звезд. Теперь, когда у нас есть антигравитация... - Вы можете полететь к звездам, если захотите. Март покачал головой. - Вы и Даннинг. Вы заставили нас создать антигравитацию. И это становится совсем простым делом! Конечно, мы смогли бы побывать на планетах, может быть даже слетать за пределы солнечной системы еще до нашей смерти. Но я думаю, что останусь здесь и буду работать с вами. Одна или две жалкие планеты - чего это стоит в конце концов. Но если мы научимся использовать максимальный уровень шума человеческого ума, мы сможем покорить всю вселенную!
Электроника СОЗДАНИЕ USB-УСТРОЙСТВ Ю.Козлов, В.Пронин Интерфейс USB прочно вошел в мир интеллектуальной техники и продолжает завоевывать все большую популярность. Взамен традиционных коммуникационных интерфейсов СОМ и LPT производители компьютеров оснащают современные модели множеством USB-разгьемов. USB против RS До появления USB как способ подключения внешних устройств господствовали ставшие теперь классическим СОМ-интерфейсы по протоколу RS-232/485. Их самое главное достоинство для разработчика, по нашему мнению, это простота реализации и программирования. Но это качество меркнет в тени двух огромных недостатков : низкой скорости передачи данных и невозможности «горячего» подключения устройств. В отсутствии альтернативы с этими недостатками приходилось мириться. Но с появлением USB стала заманчивой возможность повысить потребительские свойства своих продуктов, внедрив в них поддержку этого интерфейса.
Ведь USB это облегчение жизни пользователя: ■ простые разъемы и легкость подключений, ■ поддержка архитектуры Plug-&-Play, самоидентификация устройств, ■ высокая скорость обмена данными. Также интерфейс USB обладает еще рядом достоинств для разработчиков: ■ поддержка многих устройств на шине, а также составных устройств; ■ поддержка разных типов передач данных, гибкая настройка форматов передач; ■ гарантированная пропускная способность; ■ мощные средства контроля и исправления ошибок. Кроме этого, интерфейс USB привлекателен именно своей универсальностью. Ведь кроме СОМ-разъемов большинство компьютеров оснащены разъемами PS/2 мыши и клавиатуры, LPT разъемом и др. Некоторые из них, а иногда большинство просто не используются. Все сказанное не может не сыграть роль в пользу выбора USB для ваших продуктов . Обзор источников информации Главным и непререкаемым источником информации по любым вопросам, связанным с USB, являются документы, распространяемые Форумом разработчиков1 USB. Эти документы, публикуемые на английском языке, являются первоисточником и доступны для свободного скачивания на сайте форума www.usb.org. Также на английском языке существуют две очень достойные внимания, по мнению авторов данной статьи, книги: USB Complete (Jan Axelson) и USB Design by Example (John Hyde). Изложение материала в них ведется доступным языком и в достаточном объеме, а самое главное в них нет лишней информации. Найти ссылки на эту литературу можно с помощью специализированного поисковика электронных книг www.ebdb.ru. Кроме того, в российском интернете активно рекламируется и продается одна книга (в двух редакциях) на русском языке (см. список литературы). Ценность ее весьма сомнительна. Издание перегружено фотографиями usb-мышек, флеш- накопителей и других устройств; бесполезными не комментированными листингами дескрипторов репортов и т.п. Оторванные от контекста куски информации без начала и продолжения буквально выплеснуты на страницы книги и перемешаны без жалости к читателю. Однако, на безрыбье... В отсутствии других русскоязычных источников многим разработчикам, начинающим внедрять поддержку USB в свои продукты, приходится обращаться именно к изданию. В нем рассматриваются примеры реализации USB устройств на основе микроконтроллера АТ89С5131А-М фирмы ATMEL. Стоит отметить, что это весьма разумное решение: недорогая микросхема со встроенным USB-контроллером на хорошо зарекомендовавшем себя ядре MCS51 с приятным ассемблером. Однако и здесь не без проблем: встроенный USB- контроллер содержит достаточно ошибок и разработчику придется потрудиться, чтобы заставить его работать. Закрывая глаза на все другие недостатки книги, мы считаем самым жирным ее минусом построение программных примеров на основе линейной модели. Автор пи- Понятие «форум» означает Здесь не интернет-сервис, позволяющий пользователям общаться посредством текстовых сообщений, а сообщество единомышленников.
шет что «всю работу можно перенести в обработчики прерываний, но линейная структура программы более читабельна и понятна». С последним утверждением мы согласны, но вот практическая ценность примеров теряется, когда они отдалены от практических потребностей. Промышленный код для микроконтроллеров в большинстве случаев должен быть построен на основе системы прерываний: ведь кроме обработки USB-запросов контроллер должен выполнять некую полезную работу. Создается впечатление, что автор линейной модели просто не смог заставить контроллер использовать его систему прерываний. Кроме того, приведенный код написан на языке С, хотя наибольшее представление о контроллере, его архитектуре и принципе работы может дать только код на языке ассемблера. Следует отметить, производитель микросхемы - фирма ATMEL знает о проблемах своего продукта, но скрывает это. Приведенные на их сайте www.atmel.com примеры программирования АТ89С5131А-М так же имеют линейную структуру (интересно, что коды на сайте и в книге как родные братья похожи друг на друга, и кто только у кого содрал:-) Однако, сейчас мы точно знаем: реализовывать поддержку USB на АТ89С5131А-М при помощи системы прерываний можно. А в большинстве практических случаев еще и нужно. Заметим, что в наших работах мы будем двигаться путем, описанным в упомянутой выше книге, модернизируя и дополняя материал до того вида, в котором хотели бы видеть его сами в свое время, но не смогли найти. Для успешной разработки программной части USB-устройства необходимо хорошо знать физическую реализацию шины. В этой статье представлены сведения об общей физической архитектуре шины, логической архитектуре USB-устройств, типах и форматах передач данных по шине USB. Часть работы по формированию служебного трафика и форматированию полезных данных берут на себя контроллеры USB, такие как, например, встроенный в ATMEL АТ89С5131А-М USB-контроллер, освобождая программиста от этой повинности. Однако, знание и понимание этих подробностей позволит наиболее ясно представлять схему взаимодействия устройств на шине и наиболее эффективно реализовать свое устройство. Общая организация шины USB Шина USB имеет древовидную иерархическую топологию (см. рис. 1) . В вершине дерева находится хост-контроллер, осуществляющий централизованное монопольное управление всей шиной. Хост определяет подключение устройств, осуществляет их конфигурирование и назначение им адресов, распределяет питание от шины и полосу пропускания между устройствами, ведет сбор статистики. В виду центрального места хоста на шине направление передачи данных принято определять относительно его положения: если передача идет от хоста к устройству, то поток данных имеет направление OUT и называется нисходящим; при передаче от устройства к хосту направление потока IN, а называется он восходящим. Все другие устройства на шине кроме хоста являются ведомыми. Они делятся на два типа: коммуникационные устройства - хабы и конечные устройства, выполняющие некоторую прикладную функцию. Хабы используются для удлинения и разветвления шины. Хост периодически опрашивает хаб и по изменению его состояния определяет подключение новых устройств к шине или отключение ранее подключенных . Еще раз отметим, активным на шине является только хост. Устройства не вправе передавать данные по шине по своему усмотрению и могут начать передачу
только по требованию хоста. Единственным исключением из этого правила является возможность приостановленного устройства (переведенного в режим пониженного энергопотребления, «засыпания») сообщить хосту о своем пробуждении от внешнего воздействия. В таком случае устройство имеет право сообщить хосту об изменении своего состояния не дожидаясь запроса. Возможность пробуждения указывается в конфигурации устройства. Однако при конфигурировании эта возможность может быть запрещена хостом. Хост Корневой Шина USB поддерживает три скоростных режима передачи данных: • низкоскоростной (Low Speed) со скоростью передачи до 1,5 Мбит/с; • полноскоростной (Full Speed) со скоростью передачи до 12 Мбит/с; • высокоскоростной (High Speed) со скоростью передачи до 480 Мбит/с. Последний режим доступен только на шине USB 2.0. Скоростной режим, установленный для устройства определяется не только возможностями устройства, но и возможностями конкретной шины. Высокоскоростное устройство, подключенное к медленному хосту/хабу, не сможет полностью использовать свой скоростной потенциал, а будет ограничено возможностями ведущего устройства. Питание устройства могут получать от собственного источника либо от внутреннего источника шины. Вновь подключенное к шине устройство не должно потреблять от нее ток более 100 мА. Во время конфигурирования устройство указывает свои потребности тока до 500 мА. Если хаб не сможет обеспечить устройству необходимый ток, то оно не будет использоваться. В режиме приостановки устройство не должно потреблять от шины ток более 500 мкА. Согласно спецификации, к одному разъему можно подключить до 127 устройств одновременно. Однако, на практике это представляется если не сомнительным, то, по крайней мере, довольно напряженным. Не стоит забывать о двух моментах:
• во-первых, об ограниченной мощности шины. Эта проблема касается устройств с питанием от шины и решается подключением их через хабы с автономным питаем. • во-вторых, о том, что ее пропускная способность конечна. У шины стандарта USB 2.0 она довольно велика, но все же конечна и вряд ли ее хватит для нормальной работы 127 в частном случае высокоскоростных устройств. Логическая структура USB-устройств Стандарт USB предусматривает логическое разбиение внутренней структуры устройств по нескольким уровням иерархии. Так же как и топологию шины USB логическую организацию USB-устройств схематично удобно представить в виде дерева. Пример такой организации приведен на рисунке 2. Узлы ветвей обозначают режимы работы, листья дерева определенные функции. Настройка устройства на некоторый конкретный режим работы выполняется указанием узлов соответствующей ветви. Установку и смену режимов осуществляет хост. Режим остается активным до следующей команды смены режима. Функции, доступные в активном режиме, называются конечными точками. Выполнение функции осуществляется при обращении хоста к соответствующей конечной точке. В логической структуре устройства возможны режимы, в которых отсутствуют какие-либо функции (на рисунке 2 ветвь cfgl- ifO-altO). Такие режимы обычно используются для перевода устройства в некое бездействующее состояние типа простоя. Устройство Рис. 2. Общая логическая структура USB-устройства Рассмотрим подробнее элементы логической структуры USB-устройств. Конфигурации (cfg) являются верхним уровнем обобщения и определяют наиболее общие настройки. Устройство может иметь до 255 конфигураций, но хотя бы 1 оно иметь должно. Нумерация конфигураций начинается с 1. Номер 0 используется для обозначения того, что устройство не сконфигурировано.
На следующем уровне иерархии находятся интерфейсы (if). Они позволяют разделить общий режим работы, определяемый конфигурацией, по различным специфическим особенностям. Хотя бы один интерфейс должен присутствовать в любой конфигурации, а максимально их может быть 256. Нумерация интерфейсов начинается с 1. После интерфейсов еще более конкретно уточняют режим работы альтернативные установки (alt), они описывают частные случаи настройки режима работы устройства. Альтернативные установки определяют количество поддерживаемых в данном режиме конечных точек-функций и способы работы с ними. Нумерация альтернативных установок начинается с нуля, а их количество в каждом интерфейсе может быть от 1 до 256. Функции, которые устройство способно выполнять в текущем режиме, определяются доступными конечными точками (ер) . Конечная точка это логический канал передачи данных. При записи данных в канал устройство выполняет некоторую функцию; при чтении из канала устройство возвращает результаты выполнения операций, текущие параметры и т.д. Каждая конечная точка имеет свой уникальный 8-ми разрядный адрес. Конечные точки, входящие в состав альтернативных установок, являются однонаправленными, направление передачи для данной конечной точки определяет старший бит ее адреса: 0 в старшем бите адреса имеют точки направления OUT, 1 - точки, направления IN. Альтернативная установка может содержать до 15 точек направления OUT с адресами 1. . OFh и до 15 точек направления IN с адресами 81h..8Fh. Особое значение имеет конечная точка 0 (ерО). Она называется контрольной и принадлежит не какой-либо альтернативной установке, а всему устройству в целом. Контрольная точка является двунаправленной и доступна в любом режиме работы устройства, через нее осуществляется идентификация и конфигурирование устройства. Для примера организации внутренней структуры USB-устройства рассмотрим некоторый воображаемый мультиметр. Допустим, этот мультиметр может измерять электрическое напряжение, ток, возможно другие электрические параметры; а также имеет функцию генератора электрических импульсов. Безликая структура устройства, представленная на рисунке 2, адаптирована для представления муль- тиметра и с указанием конкретных величин и обозначений представлена на рисунке 3. Первая ветвь-режим cfgl-if0-altO (рис. 2) используется для перевода прибора в режим простоя (idle cfg-idle if-idle alt на рис. 3). Конфигурация cfg2 (рис. 2) предназначена для установки режима измерения электрического напряжения (узел U на рис. 3) . Интерфейс if0 обозначает измерение постоянного напряжения (узел "=" на рис. 3) ; интерфейс ifl - измерение переменного напряжения (узел "~") . Мультиметр способен измерять переменное напряжение в нескольких диапазонах частот: альтернативные установки altO и altl интерфейса измерения переменного напряжения определяют соответственно диапазоны от 25Гц до 100Гц и от 100Гц до 1КГц. На низких частотах мультиметр способен измерять переменное напряжение по 2-м входным каналам (листья chl и сп2 на рис. 3), что определяет наличие в данной альтернативной установке 2-х конечных точек (ер81 и ер82 на рис. 2) направления IN. На частотах от 100Гц до 1КГц прибор способен воспринимать сигнал с одного канала, что определяет только одну конечную точку для данной альтернативной установки.
Конфигурация cfg3 (рис. 2) используется для измерения электрического тока (узел I на рис. 3).Распределение ее подрежимов может быть аналогично таковому для измерения напряжения. Мультиметр Рис. 3. Пример логической организации USB-мультиметра Конфигурация cfgn предназначена для установки режима генератора. Представим, что прибор способен генерировать пилообразные и прямоугольные импульсы. Для выбора одного из этих вариантов используются интерфейсы ifO и ifl конфигурации cfgn (обозначения рис. 2) . Допустим, устройство может генерировать импульсы со значением амплитуды, принадлежащим некоторому дискретному ряду, например, 3 В и 5 В. Альтернативные установки позволяют выбрать конкретную амплитуду генерируемого сигнала. Конечные точки epl направления OUT для каждой из альтернативной установок предназначены для задания частоты импульсов. Отметим еще раз, альтернативные установки могут иметь одновременно как точки направления IN, так и точки направления OUT произвольных адресов из допустимого диапазона. Подключение и работа устройства Подключение устройства к шине производится через порт хаба. Хост, периодически опрашивая состояние хаба, распознает подключение нового устройства и разрешает соответствующий порт. В это время устройство считается не адресованным и не сконфигурированным. Хост обращается к устройству по адресу 0 через контрольную точку ерО, доступную в любом режиме работы устройства. Первой командой хост присваивает устройству уникальный адрес, с которым оно работает до момента отключения от шины. Затем, хост считывает описание устройства и описание всех его конфигураций. Устройство обязано иметь хотя бы одну конфигурацию. Хост устанавливает первую доступную конфигурацию, не анализирую ее назначения. После этого устройство считается сконфигурированным и готовым к работе. Полученная информация позволяет операционной системе идентифицировать устройство и загрузить подходящий драйвер. Дальнейшее управление устройством
передается драйверу. Для выбора требуемого режима драйвер через контрольную точку ерО передает запросы установки соответствующих конфигураций и интерфейсов. Для смены режимов эти запросы выдаются повторно. Для активизации некоторой функции устройства в данном режиме драйвер обращается к какой-либо конечной точке. Передача данных по шине USB На шине USB организована пакетная передача данных. Пакетная передача данных, ведущая роль хоста на шине и контроль целостности данных, заложенный на уровне протокола, в совокупности определяют общий цикл обмена пакетом, состоящий из 3-х тактов: запроса, передачи полезных данных, подтверждения. Запрос определяет тип передачи и адреса получателей: адрес устройства на шине и адрес конечной точки в текущем режиме работы. Подтверждение показывает целостность данных и готовность устройства к продолжению обмена. Формат пакета запроса представлен на рисунке 4. Он состоит из маркера запроса, определяющего его тип, адреса устройства, адреса конечной точки, контрольной суммы CRC5. Маркер запроса Адрес Адрес CRC5 {SETUP | IN | OUT | PING} устройства конечной точки Рис. 4. Формат пакета запроса Маркер запроса может иметь одно из 4-х значений: • SETUP - означает что хост начинает контрольную передачу для указанной точки устройства; • IN - хост ожидает данные от устройства; • OUT - хост начинает передачу данных конечной точке устройства; • PING - хост на высокоскоростной шине проверяет состояние конечной точки направления OUT. За пакетом запроса следует пакет полезных данных. Его формат показан на рисунке 5. Пакет содержит в себе маркер данных, непосредственно данные и контрольную сумму CRC16. Маркер данных Данные CRC16 {DATAO DATA1 DATA2 MDATA} Рис. 5. Формат пакета данных Маркеры данных призваны обеспечивать контроль целостности данных на уровне потока. Применяются следующие значения: • DATAO обозначает четный пакет данных; • DATA1 - нечетный пакет данных; • значения DATA2 и MDATA используются при изохронном обмене на высокоскоростной шине.
Пакеты подтверждения состоят только из соответствующего маркера. Они предназначены для сообщения о результатах передачи данных и текущего статуса конечной точки. В протоколе предусмотрены следующие маркеры подтверждения: • АСК - данные получены без ошибок и будут обработаны; • NAK: для точки направления OUT означает, что данные получены без ошибок, но в данный момент не могут быть обработаны и требуется их повторная передача; для точки направления IN говорит о том, что данные еще не готовы, хост может повторить попытку позднее. • STALL - запрос не поддерживается. • NYET - данные текущего пакета получены корректно и будут обработаны, но следующий пакет точка принять сразу не сможет. Кроме перечисленных в протоколе оговорены еще несколько типов пакетов: SOF, PRE, ERR, SPLIT. Они выполняют служебные функции. Например, пакет SOF используется для синхронизации. На шине USB предусмотрено 4 режима передачи данных: • CONTROL, • BULK, • INTERRUPT, • ISOCHRONOUS. Передача типа CONTROL используется при обращении к контрольной точке устройства. Для такого способа передачи хост гарантированно выделяет 10% полосы пропускания шины. Полная транзакция для данного вида передачи состоит из трех фаз (рис. 6). Фаза SETUP SETUP- запрос SETUP-пакет (8 байт) АСК Фаза данных (опционально) IN- зэпрос Пакет данных АСК Фаза статуса OUT- запрос! Пакет данных 0-й длины NAK IN- запрос NAK Выполнение требования IN- зэлрос Пакет данных OUT- [запрос] Пакет данных 0-й длины АСК АСК Рис. 6. Контрольная передача Первая фаза называется фаза SETUP. Во время нее хост в пакете фиксированной длины 8 байт передает требование, которое необходимо выполнить устройству. Заметим, что в этой фазе маркером подтверждения SETUP-пакета является строго маркер АСК. Если устройство получило неподдерживаемое или некорректное требование, оно должно подтвердить получение маркером АСК, а в следующей фазе вернуть маркер STALL. Вторая фаза - фаза данных, которая является необязательной. Она участвует в транзакции в том случае, если для выполнения указанного требования требуются
дополнительные данные. Рассмотрим подробнее структуру потока данных на этой фазе. На рисунке 6 приведен пример фазы данных направления IN. В указанном примере в первом цикле этой фазы хост сначала передает запрос на получение данных от устройства, устройство отвечает пакетом данных, далее хост подтверждает его получение маркером АСК. Во втором цикле устройство не готово передать второй пакет данных и возвращает маркер NAK. При повторном запросе устройство успело сформировать данные для отправки и успешно передает пакет хосту. Фаза данных может быть как направления IN, так и направления OUT. Пример фазы данных направления OUT отдельно показан на рисунке 7. Здесь хост в течение 2-х циклов успешно передает данные устройству. В 3-м же цикле устройство, занятое обработкой 2-х предыдущих пакетов, маркером NAK сообщает о том, что не может обработать в текущий момент 3-й пакет. Хост впоследствии повторяет передачу того же пакета данных. оит- запрос Пакет данных 1 АСК OUT- запрос Пакет данных 3 АСК OUT- зэлрос Пакет данных 2 АСК OUT- запрос Пакет данных 3 NAK Рис. 7. Фаза данных направления OUT Последней фазой контрольной транзакции является фаза статуса. В этой фазе хост ожидает подтверждение выполнения требования устройством. Он посылает запросы противоположного направления, относительно запросов, которые использовались в фазе данных, а если фаза данных отсутствовала - запросы имеют направление IN. При передаче запроса OUT хост отправляет пакет данных нулевой длины. Во время выполнения запроса устройство отвечает маркером NAK, а по завершении работы с гордостью возвращает маркер АСК. Еще раз обратим внимание на то, что если устройство получило требование, которое не способно исполнить, то оно должно вернуть маркер STALL в фазе данных или статуса, а получение SETUP-пакета обязано подтвердить маркером АСК. Размер пакета для контрольных передач на высокоскоростной шине составляет 64 байта, на полноскоростной - 64, 32, 16 или 8 байт. Передача типа BULK используется в том случае, если требуется гарантированная доставка пакетов, но время доставки не критично. Для пересылки больших объемов данных обычно используется именно BULK-передача. Например, такой способ передачи обычно используется USB-сканерами и принтерами. Протоколом гарантируется целостность доставки данных, которая обеспечивается посредством контрольной суммы CRC16 и различной маркировкой четных и нечетных пакетов. При обнаружении ошибки приемная сторона не подтверждает корректный прием пакета, и передающая сторона повторяет посылку. BULK-трафик занимает всю свободную полосу пропускания шины, но имеет самый низкий приоритет и может приостанавливаться на относительно большие промежутки времени в зависимости от загрузки шины. Размер пакета данных при этом способе обмена может быть любым, в том числе и нулевым, но не превышать максимального значения. Для высокоскоростной шины
эта граница составляет 512 байт, для полноскоростной - 8, 16, 32 или 64 байт. Структура потока данных на шине повторяет таковую для контрольной передачи в фазе данных. Для примера можно еще раз обратиться к рассмотрению контрольной передачи: передача BULK-IN представлена в средней части рисунка 6, передача BULK-OUT - на рисунке 7. Остановимся на последнем чуть подробнее. Он демонстрирует типичный обмен на полноскоростной шине и его главный недостаток. Недостаток заключается в том, что потерянный 3-й пакет необходимо повторять. Это снижает полезную пропускную способность шины. Очевидно, чем больше размер непроизводительного пакета, тем ощутимее снижение. На высокоскоростной шине с этим недостатком борются посредством запроса PING и подтверждения NYET. В подобной ситуации на высокоскоростной шине после приема 2-го пакета устройство ответит маркером NYET. При получении такого ответа, хост отложит передачу 3- го пакета и будет отслеживать готовность устройства с помощью короткого запроса PING. При получении подтверждения АСК хост сможет отправить 3-й пакет. Следует отметить, что и при использовании механизма опроса PING/NYET потери и повторные передачи пакетов возможны, но в кардинально другом случае: из-за некорректного приема данных. Причиной тому может служить, например, действие внешней электрической помехи. Связка же PING/NYET борется именно с проблемой напрасных расходов пропускной способности шины из-за активности хоста, не скорректированной на возможности устройства. Тип передачи INTERRUPT используется тогда, когда необходимо осуществлять обмен через заданный временной интервал. Хост обеспечивает опрос с заданным временным интервалом и учитывает это при планировании загрузки шины. Интервал указывается устройством при конфигурировании и может лежать в переделах 0.125-4 мс для высокоскоростной шины и 1-255 мс для полноскоростной шины. Размер пакета для этого вида передачи колеблется в пределах от 1 до 1024 байт для высокоскоростной шины и от 1 до 64 байт для полноскоростной. Структура потока данных на шине подобна рассмотренной выше. Заметим, что отсутствие данных для конечной точки INTERRUPT-IN является штатной ситуацией. Следующий запрос хост пошлет по истечении еще одного заданного интервала. Передачи типа ISOCHRONOUS в противоположность BULK-передачам используются для трафика, целостностью доставки которого жертвуют в пользу скорости. Контроль целостности в этом режиме передачи производится только при помощи контрольной суммы CRC16. Поврежденный пакет отбрасывается на принимающей стороне, передающая сторона об этом не уведомляется. Такой вид передач подходит для пересылки некомпрессированных аудио- и видеопотоков. В таких потоках потеря одного-двух пакетов будет означать лишь легкое, возможно даже незаметное "заикание" для аудиотрафика либо небольшую искаженную (вероятнее всего просто темную) область для видеотрафика. Обращаем внимание на то, что компрессированные аудио/видеоданные крайне чувствительны к потерям и не могут передаваться с помощью IS0CHR0N0US-передач. Размер пакетов данных для этого вида передачи на высокоскоростной шине может быть до 1024 байт, на полноскоростной - до 1023 байт. Для того чтобы воспользоваться любым типом передачи кроме контрольной устройство должно указать хосту свои возможные режимы работы и доступные в них функции - конечные точки, поддерживаемые ими типы передач. Устройство иденти-
фицирует себя и конфигурируется хостом при помощи стандартных требований протокола USB. О выборе контроллера Как мы уже упоминали, речь пойдет об ATMEL АТ89С5131А-М. Этот контроллер имеет ряд недостатков, однако, он весьма дешев и построен на основе хорошо зарекомендовавшего себя ядра MCS-51 с удобными регистровой моделью, системой команд и системой прерываний. Однако, после определения базовой модели микросхемы отдельного рассмотрения заслуживает вопрос выбора конкретной ее модификации . Мы, как и фирма-производитель ATMEL настоятельно рекомендуем выбрать контроллер с суффиксом М в полной маркировке модели, т.е. контроллер с маркировкой АТ89С5131А-ххххМ, а не AT89C5131A-xxxxL. Оба контроллера имеют одинаковую архитектуру и одинаковую цену. Заявленное производителем отличие М- контроллера от его L-собрата в том, что он имеет более широкий диапазон допустимого напряжения питания. Но, кроме того, М-контроллер имеет еще одно, по нашему мнению гораздо более важное, отличие: М-контроллер содержит меньше ошибок. Часть ошибок, присущих L-версии, отсутствуют в М-версии. Другая часть проявляется в меньшей степени. Поясним, что значит «проявление ошибки в меньшей степени» на примере. В некоторых случаях контроллер не успевает отрабатывать свои функции и для обхода этого приходиться искусственно добавлять задержки . Величина минимальной задержки необходимой для М-варианта в 3.5 раза меньше той же задержки L-контроллера. Обе версии контроллера выглядят одинаково. Их внешний вид в исполнении для использования с подставкой PLCC52 приведен на рисунке 8, а назначение выводов для этого исполнения показано на рисунке 9. Для тех, кто видит его впервые, обратим внимание: одна из граней корпуса имеет скос. Ключ, отмечающий первую ножку микросхемы, находится в центре скошенной плоскости сверху, а также продублирован снизу микросхемы. Рис. 8. Внешний вид микросхемы АТ89С5131А-М в PLCC52-исполнении Типовая схема включения Для демонстрации программирования USB на АТ89С5131А-М мы дополнили типовую схему его включения некоторыми элементами, оснастив ее небольшим набором сервисных возможностей. Они включают в себя кнопку сброса "Reset", перемычки программирования "Program" и подключения к шине "~Detach"; а также светодиод HL1 и вспомогательную кнопку "Debug", которые возможно будет использовать как индикатор и некое условие в наших экспериментах. Схема приведена на рисунке 10.
r-- <V Ul Tj — — Г) •T'i C'-J О ' nnnnnnnnnf F4 LSDA [ e Pi З'ЛП [ РУ 4'A1? [ P2 S'AIJ [ 11 XTAL2 [ ATAL1 [ 13 l'2.S.'A14 [ M =? 7;ai = [ 15 VL1C [ 13 AVnn [ U2AP [ 13 AV5S[ P!S D.'RiD[ 2D 51 50 45 46 47 PLCC52 21 22 23 24 25 26 27 28 29 l 11 11 11 11 11 11 11 11 1 3C 3" - 1-11-11 ]NC -t ]~0 IAD1 44 ]P0 ?.AD? ] RST 4 г ] PO 3.AD3 41 ]VSS 4: ]?0 4/A.D4 -К ]^3 7.RDXED3 м ] =-0 5/AD5 ]=0 Й.АП6 >: ]PQ 7AD7 35 E'WR.'LEDJ .34 •< и t 2 J 0. ^ Рис. 9. Назначение выводов микросхемы АТ89С513 в PLCC52-исполнении С1 ЮОн—Г~ XS1 USB Цепь Конт +5 USB 1 D - 2 D + 3 GND 4 SHELD 5 ХЗ "Program" Рис. 10. Дополненная типовая схема включения микросхемы АТ89С5131А-М.
Обратите внимание, что конденсатор С2 мы взяли номиналом 22 uF в отличие от значения 4.7 uF, приведенного в типовой схеме, представленной в справочных данных на микросхему. Здесь возможно использовать и конденсатор 4.7 uF, однако для обеспечения помехоустойчивости схемы это должен быть танталовый конденсатор. При использовании алюминиевых конденсаторов их емкость должна быть увеличена по сравнению с номинальной в 5-10 раз. Номинал же конденсатора С7 наоборот не должен отстоять от своего заявленного значения 1 uF более чем на 20%. Собирая подобную схему полезно помнить о рекомендации располагать элементы по возможности ближе к микросхеме. Особое внимание стоит уделить элементам С1-С7, R1-R4, ZQ1, а также разъему USB-B XS1. Наш вариант экспериментальной платы вы можете увидеть на рисунке 11. Программирование микроконтроллера Самый удобный путь программирования АТ89С5131А-М это использование непосредственно USB-интерфейса при помощи программатора FLIP (использовалась версия 3.0.5). Он доступен для бесплатного скачивания на сайте производителя www.atmel.com. Отметим, что FLIP написан на языке Java и для его Запуска необходимо наличие установленной в системе среды исполнения Java. Программные инструменты Java (использовалась версия 1.5.0.9 для Windows®) доступны на сайте www.sun.com. Первый раз программировать АТ89С5131А-М можно без премудростей. При программировании, для того чтобы при перезапуске контроллера он начал исполнять пользовательскую программу, а не стандартный загрузчик, необходимо сбросить бит BLJB (Bootloader Jump Bit) . Как выглядит FLIP и где найти бит BLJB показано на рисунке 12. При сброшенном BLJB для перепрограммирования АТ89С5131А-М необходимо выполнить дополнительные действия. Нужно сначала переставить перемычку в положение "Program", нажать кнопку "Reset" и после возвращения перемычки в положение "~Detach" контроллер готов к перепрошивке. Рис. 11. Экспериментальная плата в сборе Представленный материал дает заинтересовавшимся основу для экспериментов.
JMAtmel Flip File Buffer Device Settings Help _l Operations Flow Erase ■'"4) J_ Jl 11 & Blank Check n"4! У Program О !^ Verify FLASH Buffer Information Size 32 KB Range 0x0 - 0x414A Checksum 0x21EF6C Reset Before Loading HEX File: control.hex 38643 bytes AT89C5131 Signature Bytes 58 D7 F7 DF Device Boot Ids 00 00 Hardware Byte BB^^BLJB Bootloader Ver. 1, LPC J OSC J Run Select EEPR0H BSB / EB / SBV 00 FF 00 Security Level FF <* Level 0 (~ Level 1 (~ Level 2 Start Application Reset HEX file parsed. USB ON Рис. 12. Внешний вид главного окна программатора FLIP Кодирование требований USB Одно из наиболее удобных качеств USB-устройств это возможность их «горячего» подключения, а также поддержка унифицированных механизмов самоидентификация и конфигурирования, закрепленных в стандарте. Самоидентификация и общая настройка USB-устройств реализуется посредством специальных требований - расширяемой системы команд протокола. Существуют стандартные - общие требования; требования, относящиеся к устройствам некоторых классов, таких, например, как HID-класс. Кроме этого устройства могут поддерживать дополнительные требования. Обеспечить поддержку необходимых требований - первоочередная задача при разработке USB-устройства. Доставка требований осуществляется с помощью специально предназначенной для этого контрольной передачи. Схема обмена данными при контрольной передаче описана выше. Напомним, что полная транзакция такого вида передачи состоит из 3-х фаз: фазы SETUP, фазы данных и фазы статуса. Данные, идентифицирующие требование и его параметры, передаются в фазе SETUP в одноименном пакете фиксированной длины 8 байт. В формате пакета SETUP различают 5 полей (табл. 1). Таблица 1. Формат пакета SETUP № Поле Размер Описание 1 bmReques tType 1 Битовая маска, определяющая тип требования 2 bRequest 1 Номер требования
3 wValue 2 Значение поля варьируется в зависимости от требования. Обычно содержит некое значение 4 wIndex 2 Значение варьируется. Обычно передает некоторый индекс или смещение 5 wLength 2 Количество байт, для передачи в фазе данных Поле bmRequestType несет в себе информацию о типе требования. Оно содержит 3 субполя. Его формат представлен в таблице 2. Таблица 2. Формат поля bmRequestType Биты Суб- поле Направ- ление передачи в фазе |данных 0 - OUT, 1 — IN Тип требования: 0 - стандартное, 1 - класса, 2 - производителя, 3 - резерв Получатель требования: 0 - устройство, 1 - интерфейс, 2 - точка, 3 - другие получатели, 4..31 - резерв Номера (значения поля bRequest) стандартных требований и некоторых требований, специфичных для USB-устройств класса HID приведены в таблице 3. В этой статье мы будем использовать некоторые термины, применяемые к устройствам HID-класса, без пояснений. Таблица 3. Коды стандартных требований и некоторых требований класса HID Требование Номер Описание Стандартные требования GET STATUS 0 Получить состояние указанного получателя CLEAR FEATURE 1 Получить некоторое свойство получателя SET FEATURE 3 Установить некоторое свойство получателя SET ADDRESS 5 Установить адрес GET DESCRIPTOR 6 Получить описание получателя/свойства SET DESCRIPTOR 7 Установить описание получателя/свойства GET CONFIGURATION 8 Получить номер установленной конфигурации SET CONFIGURATION 9 Установить конфигурацию GET INTERFACE 10 Получить номер текущей альтернативной установки для заданного интерфейса SET INTERFACE 11 Установить номер текущей альтернативной установки для заданного интерфейса SYNCH FRAME 12 Получить номер фрейма Некоторые требования класса HID GET REPORT 1 Получить репорт устройства SET REPORT 9 Установить репорт Назначение полей wValue и wlndex варьируется в зависимости от требования. Поле wLength показывает какое количество информации должно быть передано в фазе данных. Направление передачи определяет старший бит поля bmRequestType (см. табл. 2). При разработке USB-устройств стандарт определяет возможность встроить поддержку новых требований. При этом обязательным является строгое соблюдение
структуры поля bmRequestType и правильное использование поля wLength. Остальные поля разработчик может использовать по своему усмотрению, перед отправкой хост их не анализирует. При добавлении требования, которое будет поддерживать только один тип устройств, следует биты 6 и 5 поля bmRequestType устанавливать в значение 10Ь, что является признаком требования производителя (продавца) . При добавлении требования, которое будет поддерживать целый класс устройств , будет логично описать это требование как принадлежащее классу, т.е. биты 6 и 5 выставить в значение 01Ь. СТАНДАРТНЫЕ ТРЕБОВАНИЯ Требование GET STATUS (получить состояние) Требование GET_STATUS используется хостом для выяснения состояния устройства, интерфейса или конечной точки. Еще раз отметим, что получатель требования указывается в младших 5-ти битах поля bmRequestType (см. табл. 2). В ответ на это требование соответствующий получатель возвращает 16-ти битное слово состояния . При обращении требования к устройству: • поле bmRequestType имеет значение 10000000b, что кодирует IN-передачу в фазе данных (бит 7 равен 1) стандартного требования (биты 6, 5 содержат 0), обращенного к устройству (биты 4-0 содержат 0); • поле wValue содержит 0 (как и для всех требований GET_STATUS - направленных любому получателю); • поле wlndex равно 0; • поле wLength равно 2 - закрепленный размер ответа на это требование в байтах для всех требований GET_STATUS, адресованного любому получателю. Устройство отвечает на это требование 16-ти битной посылкой, в которой старшие 14 бит зарезервированы для будущего использования и должны быть сброшены в ноль. Бит 1 называется RemoteWakeup и показывает возможность устройства самостоятельно сообщить хосту о выходе из приостановленного состояния. Как мы уже указывали при обсуждении общей организации шины USB, пробуждение ото «сна» от внешнего воздействия это единственный случай, когда устройство потенциально может начать передачу данных без приглашения хоста. Наличием такой возможности управляет флаг RemoteWakeup. Хост может сбрасывать и устанавливать этот флаг командами CLEAR_FEATURE и SET_FEATURE соответственно. Бит 0 слова состояния устройства носит имя SelfPowered и показывает источник питания устройства: если бит установлен - устройство имеет независимый источник питания, сброшен - устройство питается от шины USB. Хост на способ питания устройства влияния не имеет. При обращении хоста с требованием GET_STATUS к интерфейсу: • поле bmRequestType имеет значение 10000001b (субполе получателя содержит код интерфейса); • поле wValue содержит 0; • поле wlndex содержит номер интерфейса. Номер интерфейса должен быть допустимым в рамках текущей установленной конфигурации. • поле wLength имеет значение 2.
Интерфейс передает 2-х байтную посылку, все биты которой сброшены в ноль и зарезервированы для будущего использования. Поля пакета требования GET_STATUS, адресованного точке имеют значения: • bmRequestType - 10000010b (получатель - точка); • поля wValue и wLength содержат типичные для этого требования значения - 0 и 2 соответственно; • wlndex содержит номер допустимой в текущем режиме работы устройства точки. Еще раз отметим: контрольная точка 0 доступна в любом режиме работы устройства. В слове состояния точки зарезервированы и имеют нулевое значение 15 старших бит, а младший называется Halt и показывает возможность обмена bulk- и interrupt-точек. Если этот бит имеет установлен, значит точка находится в нетрудоспособном состоянии и на любые попытки хоста завязать с ней диалог отвечает отказом, высылая маркер STALL. Хост может управлять этой чертой с помощью команд CLEAR_FEATURE/SET_FEATURE . Требование CLEAR FEATURE (очистить свойство) Посредством этого требования хост имеет возможность сбросить некоторые свойства устройства, интерфейса или конечной точки. Фаза данных в транзакции обработки этого требования отсутствует, поле wLength для него всегда нулевое. Поле bmRequestType аналогично такому для предыдущего требования с соответствующими получателями за исключением признака направления передачи в фазе данных. Для требования CLEAR_FEATURE и любого другого требования с отсутствующей фазой данных признак направления передачи в поле bmRequestType сброшен в 0 и кодирует несуществующую OUT-передачу в фазе данных. Напомним, что, во-первых, направление запросов в фазе статуса противоположно направлению запросов в фазе данных, а во-вторых, в отсутствии фазы данных запросы в фазе статуса имеют направление IN. Поле wlndex уточняет получателя требования. Для требования, обращенного к устройству, это поле содержит 0. Для требования, направленного к интерфейсу, поле wlndex содержит номер интерфейса. Интерфейс с таким номером должен существовать в текущей активной конфигурации. Для требования CLEAR_FEATURE, адресованного конечной точке, wlndex задает адрес точки. Точка с таким адресом должна поддерживаться в текущей активной конфигурации. Поле wValue определяет свойство, которое необходимо очистить. Для устройства значение 1 в поле wValue означает, что нужно сбросить флаг RemoteWakeup. Это означает, что устройство теряет возможность уведомлять хост о выходе из приостановленного режима, т.е. теряет единственную возможность самостоятельно начать передачу, не дожидаясь запроса хоста. Для конечной точки значение 0 говорит о том, что для нее необходимо сбросить флаг состояния Halt. Это означает перевод точки в рабочее состояние. При отработке этого требования для bulk-IN и interrupt-IN точек необходимо установить маркер DATA0 для следующего пакета данных.
Требование SET FEATURE (установить свойство) Требование SET_FEATURE противоположно требованию CLEAR_FEATURE по назначению и аналогично ему по структуре. Требованием SET_FEATURE хост заставляет получателя установить свойство, которое может быть сброшено аналогичным требованием CLEAR_FEATURE . Фаза данных при обработке этого требования также отсутствует, поле wLength для него всегда нулевое. Поле bmRequestType для требований SET_FEATURE, обращенных к устройству, интерфейсу и точке имеют соответственно значения 00000000b, 00000001b и ООООООЮЬ. Для требования, адресованного устройству, значение 1 в поле wValue указывает, что устройство должно установить флаг RemoteWakeup, поле wlndex при этом содержит 0. Установка флага RemoteWakeup означает, что устройство получает возможность самостоятельно оповещать хост о выходе из приостановленного режима вследствие внешнего воздействия. Во всех остальных случаях устройство имеет право начать передачу только с запроса хоста. Для устройств, работающих в высокоскоростном режиме, в поле wValue допустимо значение 2, обязывающее устройство перейти в тестовый режим и провести тест, номер которого указан в старшем байте поля wlndex. Для требования, адресованного интерфейсу, его номер указывается в поле wlndex. Интерфейс с таким номером должен существовать в активной конфигурации . Для требования, адресованного точке, ее адрес указывается в поле wlndex. Точка с таким адресом должна существовать в текущем режиме работы устройства. Значение 0 в поле wValue определяет, что для точки должен быть установлен флаг Halt. Установка этого флага означает для bulk- или interrupt-точки приостановку нормальной работы: на все запросы хоста она должна отвечать маркером STALL. Требование SET ADDRESS (установить адрес) Требование SET_ADDRESS применяется для установки адреса устройству на шине. Корректными адресами на шине USB являются числа от 1 до 127, а также значение 0, указывающее что устройство является не адресованным. Новый адрес устройства оно получает в поле wValue данного требования. Фаза данных при обработке требования SET_ADDRESS отсутствует - значение поля wLength равно нулю; поле wlndex не используется и содержит ноль. Получателем данного требования разумеется является только устройство, поле bmRequestType также содержит 0. Требование GET DESCRIPTOR (получить описание) Требование GET_DESCRIPTOR используется для получения описаний определенного типа.
Прежде всего, стоит следует обратить внимание на следующее. Все описания, используемые в стандарте USB, можно условно разделить на два вида: • описания общего назначения, применяемые для всех USB-устройств; • описания, специфичные для USB-устройств некоторого класса, например, класса HID. Что касается требований GET_DESCRIPTOR на получение общих описаний, то для них получателем может быть только устройство, что закреплено в спецификации USB. При запросе специфичных описаний получателем требований может являться не только устройство. Например, при запросе HID-специфичных описаний, получателем требований является интерфейс, что закреплено в спецификации HID. Рассмотрим подробнее формат требования. Поле bmRequestType для требований GET_DESCRIPTOR содержит значения lOOxxxxxb, где ххххх - двоичный код получателя, которому адресовано требование. Получатели устройство и интерфейс кодируются значениями 00000 и 00001. Список всех кодов получателей для стандартных требований USB см. в табл. 2. Значения указанного вида в поле bmRequestType означают IN-передачу в фазе данных обработки стандартного требования, обращенного соответствующему получателю. Старший байт поля wValue определяет тип описания, которое требуется получить . Применяемые значения, их смысл, а также смысл младшего байта, уточняющего тип описания, приведены в табл. 4. Таблица 4. Коды типов описаний USB-устройств Значение Тип описания Назначение младшего байта 0x01 Устройство Не используется, всегда 0 0x02 Конфигурация Индекс конфигурации 0x03 Строковое описание Индекс строкового описания 0x06 Устройство при работе в другом скоростном режиме Не используется, всегда 0 0x07 Конфигурация при работе в другом скоростном режиме Не используется, всегда 0 Описания, специфичные для HID-устройств 0x21 Описание HID Не используется, всегда 0 0x22 Описание HID-репорта Не используется, всегда 0 Значения 0x06 и 0x07 применимы только для устройств, работающих в высокоскоростном режиме. Значения 0x21 и 0x22 применимы только для устройств HID- класса. В устройстве может быть несколько описаний типа конфигурация и строка, поэтому в младшем байте поле wValue задается индекс описания этого типа. Для других типов описаний младший байт не используется и должен быть нулевым. Поле wlndex нулевое для всех типов общих описаний кроме строки. Для строковых описаний в поле wlndex задается номер кодовой страницы. Если в качестве номера страницы будет задан 0, то устройство должно вернуть первое доступное описание строки с заданным индексом. Для HID-описаний поле wlndex содержит номер интерфейса, которому обращено требование.
Длина описания заранее не известна, поэтому хост обычно считывает его за два этапа. На первом этапе он задает в поле wLength некоторое ориентировочное значение. Устройство в ответ на требование с таким прогнозируемым значением размера передает начальные wLength байт описания. Первым байтом описания (полный формат описаний мы рассмотрим в следующей статье) передается его размер . Далее хост, повторяет требование с уточненным значением поля wLength. Требование SET DESCRIPTOR (установить описание) Применяется для установки описаний заданного типа. Это требование аналогично требованию GET_DESCRIPTOR по структуре его SETUP-пакета и противоположно ему по действию. Требование GET CONFIGURATION (получить конфигурацию) Требование дает возможность получить номер текущей конфигурации устройства. Поле bmRequestType для этого требования равно 10000000b, а поле wLength содержит значение 1. Вместе эти поля передают, что хост рассчитывает получить от устройства номер его активной конфигурации в фазе данных в посылке размером 1 байт. Возвращаемое значение 0 является признаком того, что устройство не сконфигурировано. Поля wValue и wlndex для этого требования не несут полезной информации и содержат нулевые значения. Требование SET CONFIGURATION (установить конфигурацию) Это требование предназначено для установки конфигурации устройства. Поле bmRequestType содержит значение 00000000b, фаза данных при обработке этого требования отсутствует и поле wLength содержит нулевое значение. Поле wlndex не используется и также содержит нулевое значение. Номер устанавливаемой конфигурации передается в поле wValue. Установка конфигурации номер 0 означает деконфигурирование устройства. Описания доступных конфигураций хост получает в ответ на требование GET_DESCRIPTOR. При выборе доступной конфигурации отличной от 0, необходимо, кроме того, выполнить установку интерфейса 0 в данной конфигурации и альтернативной установки 0. Напомним, что любая конфигурация содержит хотя бы один интерфейс, а любой интерфейс содержит хотя бы одну альтернативную установку. Установка требуемых интерфейса и альтернативной установки осуществляется посредством требования SET_INTERFACE. Для всех bulk- и interrupt-точек направления IN в альтернативной требуется установить маркер DATA0 для следующего пакета данных. Флаг Halt сбрасывается для всех конечных точек. Требование GET INTERFACE (получить интерфейс) С помощью этого требования хост может получить номер текущей альтернативной установки указанного интерфейса активной конфигурации устройства.
Это требование хост адресует интерфейсу, от которого в фазе данных ожидает получить номер альтернативной установки в пакете данных размером 1 байт: поле bmRequestType имеет значение 10000001b, а поле wLength значение 1. Поле wValue не используется, а поле wlndex содержит номер интерфейса, к которому обращено требование. Требование SET INTERFACE (установить интерфейс) Требование SET_INTERFACE используется хостом для выбора альтернативной установки в заданном интерфейсе активной конфигурации устройства. Хост этим требованием обращается к интерфейсу, номер которого задан в поле wlndex, указывая ему установить альтернативную установку с номером, определяемым полем wValue. Фаза данных при обработке этого требования отсутствует. Поле bmRequestType содержит значение 00000001b, а поле wLength - 0. Номера доступных интерфейсов и их альтернативных установок хост узнает с помощью требования GET_DESCRIPTOR. При смене альтернативной установки для всех bulk- и interrupt-точек IN-направления нужно установить маркер DATA0 для следующего пакета данных. Флаг Halt для всех точек сбрасывается. Требование SYNCH FRAME (синхронизировать кадр) С помощью этого требования хост контролирует номер кадра синхронизации для конечной точки в изохронном режиме передачи с неявной синхронизацией. ТРЕБОВАНИЯ КЛАССА HID В данной статье рассматриваются лишь некоторые основные требования для устройств HID класса. Требование GET REPORT (получить репорт) Требование GET_REPORT позволяет хосту получить от устройства репорт - данные в специальном формате - через контрольную точку. Как это ясно из назначения требования, в транзакции его обработки используется фаза данных направления IN. Поле wLength содержит длину репорта. Поле bmRequestType имеет значение 10100001b, что кодирует требование класса, обращенное к интерфейсу, при обработке которого присутствует IN-фаза данных. Поле wlndex содержит номер интерфейса, к которому обращено требование. Поле wValue кодирует тип репорта - младший байт - и его идентификатор - старший байт. Идентификатор репорта может не использоваться: в этом случае старший байт репорта должен содержать 0. Для определения типа репорта используются следующие значения: • 1 - INPUT-репорт, • 2 - OUTPUT-репорт, • 3 - FEATURE-репорт, • значения 4-255 зарезервированы для будущего использования.
Требование SET REPORT (установить репорт) Это требование аналогично предыдущему по назначению и кодированию полей и противоположно ему по назначению: с помощью требования SET_REPORT хост может передать данные устройству через контрольную точку. Поле bmRequestType содержит значение 00100001b. В фазе данных направления OUT хост передает устройству репорт размером, указанном в поле wLength. В младшем байте поля wValue указывается тип репорта, в старшем - его идентификатор. Поле wlndex содержит номер интерфейса, к которому обращено требование. ЛИТЕРАТУРА 1. Universal Serial Bus Specification Revision 2.0. www.usb.org 2. Device Class Definition for Human Interface Devices (HID) v.1.11. www.usb.org 3. Чекунов Д. Стандартные требования USB. Современная электроника. 2004, № 12 4 . Axelson J. USB Complete. 3-d ed. 5. Hyde J. USB Design by Example. 6. Агуров П. В. Интерфейс USB. Практика использования и программиррования. - СПб.: БХВ-Петербург, 2005.
ПРОГРАММИРУЕМЫЙ ЛОГИЧЕСКИЙ КОНТРОЛЛЕР А. Костюк, Е.Фадеев Предлагаемый вашему вниманию Бейсик-контроллер представляет собой масштабную действующую модель программируемых логических контроллеров (ПЛК), которые широко применяются в «большой» автоматике в качестве «строительных» модулей при создании различных систем распределенного контроля и управления. Данный модуль представляет собой небольшое устройство, позволяющее решать задачи управления, регулирования. Тем не менее, этому малышу не составит труда «позвонить» при помощи модема на удалённый компьютер и отправить, например, результаты измерений. Кроме этого, он может реализовывать функции управления, выдавая различные управляющие сигналы. Как и традиционный ПЛК, он имеет дискретный, аналоговый ввод-вывод и коммуникационный интерфейс, который может быть использован для связи с другими устройствами или перезагрузки управляющей программы. Управляющая программа представляет собой текст на языке Бейсик. Задачей контроллера является интерпретация и исполнение команд этого языка. Контроллерная реализация Бейсика имеет средства для работы с линиями ввода- вывода, с АЦП и ЦАП. Внешний вид контроллера показан на рис.1 Контроллер имеет следующие характеристики: 1. Количество каналов дискретного ввода TTL или 5V CMOS, шт. 4 2. Количество каналов дискретного вывода TTL или 5V CMOS, шт. 4 3. Количество каналов аналогового ввода 0...5V, шт. 2 4. Количество каналов аналогового вывода ШИМ, шт. 1 5. Характеристики коммуникационного интерфейса RS232: • бодовая скорость, 57600 bps • количество бит данных 8 • количество стоповых бит 1 • бит чётности отсутствует • согласование потока аппаратное 6. Язык программирования встроенного интерпретатора Tiny-Basic 7. Размер программной области, байт, не менее 2000 8. Среднее время исполнения операторов, не более 500 мкс 9. Хранение программы (текста) в энергонезависимой памяти Схема контроллера приведена на рис. 2 (вкладка). Микросхема U3 - AVR микроконтроллер ATMEGA8. Управляющая программа для этого контроллера, содержащая интерпретатор языка Бейсик, заносится в контроллер, когда схема полностью собрана. Для этой цели служит разъём внутрисхемного программирования ХРЗ. Авторы использовали программатор PonyProg, который можно взять на сайте http://www.lancos.com/prog.html. На рис.3 показано как надо запрограммировать служебные биты микроконтроллера.
Питание Э... 15 Вольт Центральный контакт " Индикатор "RUN" I Интерфейс RS-232 Л— ^° С5 t ■ «-II С2 са С7 Служебный разъём мнутрисхемного программирования микроконтроллера AVR| ATMEGA8 Разъём дискретного ввода.' вывода А С10 С12 Мвсп ese8SiSeu щт => шшшшшшк ^ ЛЦ1 ■ v ^тс\5 ^ * шшт 41 *~ • imi «f - Щ ХР2 *-|H|-*R4 ХР1 Кнопка RESET Разъём аналогового ввода.' вывода □ odd SW5 SW4 SW3 SW2 Входные биты 4 3 2 1 'III ! ■ LEL И UL И Bj Д D4 D3 D2 D1 | Выходные биты 4 3 2 1 Кнопочная и светодиодная эмуляция дискретного ввода/вывода | Биппер | Рис.1 Внешний вид контроллера. Configuration and Security bits Г Г Г Bootl_ock12 Г Boolock11 Г BoolLock02 Г BootLockOI Г Lock2 Г Lockl Г Г WDT0N Р -!-,-■; Г СКОРТ |7 ЕЕ SAVE Г B00TSZ1 Г B00TSZ0 Г B00TRST Г BODLEVEL |7 B0DEN Г SUT1 Р SUT0 Г CKSEL3 Г CKSEL2 Г CKSEL1 17 CKSEL0 Г Refer го device datasheet, please 3 Cancel \ OK Cleat All Set All Write Read Рис.3 Служебные биты микроконтроллера.
Микросхема U1 служит для преобразования уровней сигналов ТТЛ/КМОП в уровни интерфейса RS-232. Микросхема U2 - линейный стабилизатор. Если предполагается питание от стабилизированного источника 5 Вольт, микросхему можно исключить и запаять перемычку между контактными площадками 1 и 3 этой микросхемы. В качестве динамика ("пищалки") может быть использован излучатель любой системы, важно, чтобы он был пассивным (не содержал встроенного генератора) и ток, потребляемый от ножки 5 микросхемы U3, не превышал 20 мА. , что определяется величиной резистора R1. Чтобы избежать возможного непреднамеренного стирания содержимого программной памяти, использована перемычка JP1. предназначена для защиты от случайной перезаписи пользовательской программы. Когда перемычка установлена, запись программы невозможна. Светодиоды D1...D4 предназначены для индикации состояния дискретных выводов. Светодиод D5 служит для индикации состояния программы. Если D5 горит, то программа находится в цикле. Погашенный светодиод означает останов программы, например, ожидание ввода символа при использовании оператора INPUT или при формировании задержки оператором DELAY. Кнопочный переключатель SW1 управляет линией RESET микроконтроллера ATMEGA8 и активно используется при записи программы пользователя, вывода содержимого программной памяти и пуска программы в работу. Кнопочные переключатели SW2...SW5 служат для изменения состояния дискретных линий ввода для тестовых и учебных целей. Разъёмы ХР1 и ХР2 предназначены для включения в схему устройства пользователя. Контроллер как "чёрный ящик" показан на рисунке 4. TINY BASIC CONTROLLER ТВС-1ХХ XS1 2 RXD 3 TXD 4 DTR 5 GND 6 DSR 00 CTS XS2 3 +9...+15V 1 GND XP1 DISCR.OUT 1 1 DISCR.OUT 2 2 DISCR.OUT 3 3 DISCR.OUT 4 4 DISCR.IN 1 5 DISCR.IN 2 6 DISCR.IN 3 7 DISCR.IN 4 00 GND 10 XP2 ANALOG IN 1 1 ANALOG IN 2 3 PWM OUT 2 +5V 9 GND 10 Рис.4 Разъемы контроллера Нагрузочная способность линий дискретного вывода определяется нагрузочной способностью микроконтроллера ATMEGA8 и составляет 20 мА на вывод, следует учитывать, что порядка 8 мА потребляют светодиоды, подключенные к каждому выводу.
1^ см ГО ГО о о 1HI ▲ СМ ю со 1^ 00 О) от от от от от он о \\ го о о ® +—н ю см СП со сч го от 4—II от 2 о о ® ■л оо О. D. сл сл X ч 83 99 IO CN ч- О (N О О О О О 0.0.0-0-2 о ооо ршш > 0-0- СЛ IOCN ч- Ш Ш Ш D.Q- О- О OCJCJ CJ СО О т- J" 9999 «o£*S88 CD О О. \ cs а о_ ч а х к от IS а go.0-2 CD Г- mm a. о_ ч ч оо 88 ох" fcp см m la со n m ООО. D_ Q_ 4 ч ч 155: 33" 1 Q_ o о DC Q_ О Q_ IO Q. X Ш та 00000 000 0 0 + см о а: AA/V сч (О СО со С5> см го о а о ® +4i LdP CL X _£1 00000 00000 Н гЛ л к * CM CL 00 С\Г~ О) ю . О г N L 4 00 4 i 2 см^1 CL О О О О О 00000 1Л + Т7 тгт ТВ ^_ <S> WV \ 8\ п п То® <s> о о ^ Oil т го т ^ £ О О Се се СМ се се + О I + I ^— (N СЧ о а о о ° ° — ^ — см см се се о о I— I— се се > и а > I > С/) X сч г- го оо го см см. о + СО ГО о о о о I 00
Дискретный ввод совместим по уровням с ТТЛ и КМОП при напряжении питания 5 вольт. Необходимо иметь в виду, что к каждому входу подключен кнопочный ключ на плате контроллера, образуя с источником сигнала монтажное ИЛИ. В общем случае, не следует пользоваться кнопочными ключами на плате, при наличии внешнего источника сигнала. На аналоговый входы могут подаваться сигналы в диапазоне от 0 до 5 вольт, что соответствует дискретному представлению от 0 до 1023 единиц. АЦП работает в режиме непрерывной дискретизации (с периодом около 30 мкс), но реальная дискретизация зависит от частоты считывания при помощи оператора ADC и зависит от длины цикла, в который это оператор включен. Аналоговый вывод представляет собой на самом деле дискретный выход с ШИМ частотой 5,4 кГц. Значению 0 соответствует напряжению 0В на ШИМ выходе, а значению 1023 - напряжение питания контроллера +5В. Остальные значения соответствуют усредненному значению импульсного сигнала с шириной импульса, пропорциональной введенному при помощи оператора DAC значению. Параметры RC-цепи определяются пользователем. В общем случае, вместо R10 должна быть запаяна перемычка, а конденсатор С17 отсутствует. Конструктивно контроллер представляет собой печатную плату размером 80 х 90 мм. С целью обеспечения возможности использования «лазерно-утюжной технологии» печатные проводники выполнены с одной стороны. Однако желательно использовать и верхний слой, как экранный, подключенный к цепи GND. Это снизит уровень электромагнитного излучения от цепей контроллера. Рис.5 Вид проводников печатной платы
Под микросхему U3 желательно установить панельку. Это позволит использовать плату контроллера как "программатор". Ведь отлаженный контроллер, предназначенный для встраивания в изделие, может иметь очень ограниченный набор компонентов. В пределе это сам AVR-микроконтроллер, кварцевый резонатор и 3 керамических конденсатора. XS2 С6 ооп I 2" J4 оооо □оооо о сз С8 С7 С11 ]Y1 X U2 сэ JP1 (о о) CTl^CF~OJP~~QCl3 оооооооо обооооооооооо oooooooogcj (N CL СЛ □о оо оо оо оо оооооооооооооо 1П ' JU30 то C14Q" Ё16" С>С 16 ХР2 Ol ЮРЗ ооооп ооооо С17 J0R4 ХР1 ^ ооооо ,{Л ооооо Ш Ш Ш Ш фф SW5 SW4 SW3 SW2 D4 D3 (ЮСЮ* D2 DI fj Рис.6 Сборочный чертёж Позиционное Коли- Наименование компонентов Номинал обозначение чест- во С1...С4, С6...С9, 13 Конденсаторы серии К10-17 импортные 0.1 мкФ 50В С13...С17 С5,С10 2 Электролитические конденсаторы 47мкФ 25 В С11,С12 Конденсаторы серии К10-17 импортные 18 пФ 50 В DI 1 204RD светодиод красный с1=3мм D2...D5 4 204GD светодиод зеленый с1=3мм LSI Пьезоизлучатель КРЕ-120 SW1...SW5 5 TS_A4PS_130 R1,R5...R9 6 С2-23-0.125 5% 470
R2...R4,R10 4 C2-23-0.125 5% 10K Ul 1 ICL232CPE=HIN232CP(MAX232CPE)PDIP16 U2 1 7805 U3 1 ATmega8-16PI PDIP28 XS1 1 DRB9FB XS2 1 Гнездо питания DS-210 XP1...XP3 3 IDC-10,BH-10 Yl Кв.pes. 11.0592 МГц имп. HC-49U 11MHZ0592
Встроенное программное обеспечение микроконтроллера ATMEGA8 содержит интерпретатор языка Бейсик и систему загрузки текста пользовательской программы в постоянное запоминающее устройство. В основе интерпретатора лежит код, найденный в Интернет текст интерпретатора языка Tiny Basic на языке Си под DOS, авторство не указано, текст файла датирован 1992 годом. Надо упомянуть, что Tiny Basic был разработан хакерами1 в середине семидесятых2 годов. Существовало множество реализаций этого языка. Он имел сокращённый набор команд и размещался в нескольких килобайтах памяти. Была даже разработана спецификация на него. В Интернете можно найти Tiny Basic от фирмы Intel для однокристального микроконтроллера MCS-51 (INTEL INSIТЕ LIBRARY FILE BF10:TB51 V2.2, MCS-51 TINY BASIC). Реализация сделана на языке ассемблера. Существует коммерческий продукт фирмы Parallax (www.parallax.com) BASIC Stamp microcontrollers, представляющий собой линейку микроконтроллеров со встроенным интерпретатором языка Parallax PBASIC. Текст программы для такого контроллера подвергается преобразованию в промежуточный язык при помощи специального программного обеспечения на персональном компьютере. Фирма позиционирует свои изделия как ПЛК для малых профессиональных проектов, учебных целей и любительского применения. При реализации данного проекта авторы добавили в Tiny Basic ряд команд, позволяющих обслуживать периферийные устройства предлагаемого модуля. Кроме того, были добавлены, отсутствовавшие в спецификации Tiny Basic операторы SCALE и REM. Первый из них позволяет повысить точность целочисленных вычислений. Назначение второго общеизвестно. Ввод-вывод остался консольным3, вместо консоли теперь можно использовать любой персональный компьютер, подключенный по интерфейсу RS-232, с запущенной терминальной программой. Причём, работа через консоль актуальна только на этапе загрузки и отладки программы или когда контроллер взаимодействует с другим устройством, например с модемом. Следует отметить, что в целях ускорения процесса загрузки пользовательской программы, использован способ обмена с квитированием. Это означает, что загрузочный кабель должен иметь в дополнение к линиям RX, ТХ, GND еще как минимум линии RTS,CTS. Файл для программирования микроконтроллера и симулятор можно скачать здесь: ftp://homelab.homelinux.com/pub/arhiv/2008-09-al.rar Покажем, как нужно настроить терминальную программу для работы с контроллером на примере терминала Hyper Terminal, входящего в операционную систему WINDOWS. Для этого нужно начать движение от меню Пуск по пути Пуск -> Программы -> Стандартные -> HyperTerminal. После чего появится окно программы HyperTerminal и диалоговое окно Описания подключения. Заполнить поле Название подключения и выбрать значок (рис.7), после чего нажать кнопку ОК. В то время это слово употреблялось в смысле: человек досконально изучающий компьютерную технику и программирование. 2 В то время Бил Гейтс еще учился в Гарварде и только начинал работать над своим Бейсиком Альтаир. 3 Когда-то консолью называли телетайпный аппарат, с помощью которого оператор общался с компьютером .
Описание подключения _?Jx] "^Ot Н овое подк лючение Введите название подключения и выберите для него значок: Название |TinyBasic57600 Значог, ок Отмена Рис. 7 Выбрать свободный коммуникационный порт, к которому предполагается подключать контроллер (Рис.8) Подключение TinyBasic57600 Введите сведения о телефонном номере: Страна или регион [~Т Код города: Номер телефона: |~~ Подключаться через: [jj О К Отмена Рис. 8 Установить параметры коммуникационного порта, как показано на рис.9 Последовательно нажать кнопки «Применить» и «ОК». После чего порт терминала готов к работе, но требуется настройка параметров передачи символов, для чего нужно нажать на кнопку в позиции 1, как показано на Рис.10 Далее в свойствах соединения необходимо выбрать закладку «Параметры» (Рис.10, позиция 1). На этой закладке установить эмулятор терминала ANSI или ANSIW, это позволит, при выводе на терминал, управлять цветом и позиционированием курсора. Потом нажать кнопку «Параметры ASCII» (Рис.10, позиция 2) . Установить в параметрах ASCII дополнение символов возврата каретки переводами
строк для отправляемых символов, как показано на Рис. 11. j?jxj Свойства: С0М1 Параметры порта Скорость (бит/с): Б_иты данных: Четность: Стоповые биты: Управление потоком: 157600 |1 Аппаратное 1] Восстановить умолчания □К j Отмена Применить Рис. 9 свойства: TinyBasic57GflO J?jxj П одключени^_Параметрь^ Действие Функциональных клавиш, Ctrl и стрелок. (* клавиши терминала С клавиши Windows Клавиша Backs-pace посылает G Clil+H С р_е| С CW+H. Пробел, Ctrl+H Э муляция терминала [ у| Настройка. Терминал Telnet (ID): ANSI Размер буфера (строк): рОО ^rj Г Звуковой сигнал при подключении или отключении 2 Преобразование символов... С Параметры ASCII {^Параметры ASCII*^^) OK Отмена Рис. 10
JLJxJ Отправка данных в Формате ASCII W Дополнять символы возврата каретки (СЯ| переводами строк |LF| Г" Отображать введенные символы на экране Задержка для строк: 0 мс Задержка для символов. О мс. Прием данных в формате ASCII Г" Дополнять символы возврата каретки (CR) переводами строк (LF) V Преобразовывать входящие данные в 7 разрядный код AS СП Ф Переносить строки, превышающие ширину терминала ОК Отмена Рис.11 Сохранить текущую настройку терминала, воспользовавшись пунктами главного меню терминала Файл -> Сохранить как. Это позволит избежать повторной настройки параметров при следующем вызове терминальной сессии. Для запуска терминала в работу необходимо использовать пункты главного меню Вызов -> Вызов, после чего терминал готов к работе. Подготовка контроллера для записи пользовательской Бейсик программы заключается в том, что необходимо убедиться в отсутствии перемычки JP1. Дело в том, что когда перемычка снята, контроллер, после подачи питания (или нажатия кнопки RESET) не сразу переходит на выполнение пользовательской программы, а ожидает прихода символов по интерфейсу RS-232 в течение секундного интервала - временного окна. Если за время действия временного окна пришёл символ Enter, то контроллер выводит по интерфейсу RS-232 текст содержащейся в нём программы. А если получен символ пробела, то контроллер выводит слово Reflash и ожидает текст Бейсик программы по интерфейсу RS-232. Отменить этот режим можно повторным нажатием кнопки RESET. Ниже показан пример работы с контроллером и с консолью (рис. 12). В текстовом редакторе создаётся текст, а затем копируется в стандартный буфер обмена Windows. Далее на котроллере нажимается кнопка RESET, в течение секундного временного окна с терминала должен быть передан код клавиши пробел (просто нажимается клавиша пробела) и контроллер переходит в режим ожидания текста. В терминале, по нажатию правой кнопки мышки вызывается выпадающее меню и выбирается пункт «Передать главному компьютеру» (главный в данном случае - контроллер). Затем происходит передача текста в контроллер, на каждый записанный блок размером 64 байта, контроллер выводит символ W.
Р Безымянный - Блокнот Файл Правка Формат Вид Справка print print "Sending 10 stars to the terminal for i=1 to 1 print nextf I Отменить Вырезать Копировать Вставить Удалить _J Рис.12 TinyBasic57600 - HyperTerminal Файл Правка Вид Вызов Передача Справка □Ml _АЖ\ о|э] й\ JSJXJ 3 Tiny-Basic Uer. 1.5Й Progran area 2492 bytes Reflash Отправить фай п. Принять файл... Печать.,, Передать главному компьютеру Ctrl+V Выделить все Согласовать размеры 1L Отправка содержимого буфера обмена удаленному компьютеру Рис.13 f TinyBasic57600 - HyperTerminal Одйп Прдвгл Вид Вы^св Пяреда-и <_прдлкд п|в*| ,;з| р|а: &\ 3 Reflash WW OK Tiny Basic Uer. 1.5ft Progran area 2492 bytes Sending 18 stars to the terminal Время подключения: 0:00:3* ;AM51 =760D8-,i|-l РИС.14
По окончании загрузки выводится ОК. Для запуска приложения нужно снова нажать RESET, через одну секунду программа запустится на исполнение. Данный пример показывает весь цикл работы с контроллером. Из этого видно, что специальную программистскую "кухню" организовывать не придётся. Для загрузки в контроллер собственной программы на языке Бейсик никакого специального оборудования или программного обеспечения не требуется. Для этой цели годится практически любой компьютер, у которого есть интерфейс RS-232 и может быть запущена терминальная программа (наладонные компьютеры, ноутбуки современные и древние, настольные PC). А вот так выглядит консоль на КПК Basic Session 57600 8r 4$ 23:35 О Tiny-Basic Ver. 1. ЗА Program ar»a 2492 bytes Ш sett' 12* ad a clrb ll& ad.: b print a, b Delay 20 goto 100 <J !!! ill 12^ l|2 |3 |5 |6 7 8 9 □ -| = Tab q w e r t У u i о P lr 1 CAP a s d f h )U 1 ; ' Shift z > : с v 1 b | n | m| Ctll En * \ 1*1 t File Edit Keys A Рис.15 КОНТРОЛЛЕРНАЯ ВЕРСИЯ ЯЗЫКА TINY-BASIC Особенностью данного диалекта языка Tiny Basic является то, что в одной строке записывается один оператор, и строки не нумеруются. Для обозначения точек перехода используются метки. Операторы Оператор Действие Пример использования Описание PRINT Оператор вывода. Вывод на консоль сообщений PRINT Переводит вывод на новую строчку PRINT "Это сообщение" Выводит сообщение PRINT X Выводит значение переменной или выражения PRINT "$";Х; PRINT "$";65; Выводит одиночный символ с кодом, указанным явно или через выражение
PRINT "X= Выводит список, символ ";" « . a <jj и ;C; означает, что вывод производится подряд без пробелов. Пробелы, указанные внутри кавычек, выводятся. Символ ";" в конце строчки означает, что следующий оператор PRINT продолжит печать в текущей строчке PRINT X,Y ,z, Выводит список, символ "," означает, что вывод производится с табуляцией на 8. Символ "," в конце строчки означает, что следующий оператор PRINT продолжит печать в текущей строчке в текущей позиции табуляции. INPUT Оператор ввода INPUT X Выводит знак вопроса "?" и ожидает ввода числа INPUT "X= ",X Выводит сообщение в двойных кавычках и ожидает ввода числа INPUT ,c Ожидает ввода одиночного символа в переменную IF Условный IF X<10 THEN X=X+1 Если условие истина, то вычисляется выTHEN оператор ражение IF X= 0 THEN GOTO Если условие истина, то производится 100 переход на строчку с меткой 100 IF Z= 65 THEN GOSUB Если условие истина, то производится 200 вызов подпрограммы меткой 200 FOR TO Оператор FOR I =32 TO 127 Производит действие 127-32+1 раз с наNEXT цикла PRINT NEXT ;i, I ращиванием переменной цикла. В качестве действия, вывод переменной как символа с кодом I и вывод значения переменной GOTO Оператор перехода GOTO 100 Производится переход на строчку с меткой 100 GOSUB Оператор вывода подпрограммы GOSUB 200 Производит вызов подпрограммы меткой 200 RETURN Возврат из под100 PRINT RETURN X программы END Завершает IF Z= 0 THEN END выполнение программы Операторы, добавленные в контроллерную реализацию языка ADC Чтение текущего канала АЦП ADC А Производит чтение текущего канала АЦП в переменную DAC Вывод в DAC X Выводит в ЦАП значение, определяемое ЦАП DAC 255 выражением DAC Х+100
SETB Установка бита SETB 1 SETB X SETB X+l Устанавливает бит, номер которого определяется выражением CLRB Сброс бита CLRB 1 CLRB X CLRB X+l Очищает бит, номер которого определяется выражением TSTB Чтение бита TSTB B,l TSTB B,X TSTB B,X+1 Производит чтение в переменную состояния бита, номер которого определяется выражением DELAY Формирование задержки DELAY 100 DELAY X DELAY X + I * 10 Формирует задержку, длительность которой определяется выражением. Дискретность задания 1 миллисекунда. SCALE Оператор масштабирования SCALE X,100,Y Рассчитывает процент числа X от числа Y. Сначала производится умножение X на 100 и результат помещается в 32-х битную временную переменную, затем производится деление на Y, результат помещается в X SCALE X,1000,Y Тоже, но с точностью до десятых долей процента STOP Оператор останова Применяется только в симуляторе для отладочных целей. Когда интерпретатор встречает этот оператор, выполнение останавливается для просмотра состояния переменных и периферии. Выполнение программы может быть продолжено REM Оператор комментирования REM Это комментарий Комментарий, интерпретатор не исполняет эту строчку REM GOTO 100 Шунтирование оператора GOTO, строчка превращается в комментарий Числа Все числа являются знаковыми целыми в диапазоне -32767 до +32767 Переменные Существует 2 6 переменных, обозначаемых буквами от А до Z. Внутреннее представление 16-битное. Операторы Арифметические: • + сложение • - вычитание • * умножение • / целочисленное деление (нужно иметь в виду, что, например, 14/5=2) • % - взятие остатка от деления (14%5=4) • & побитное И
• I побитное или Сравнения: (используются только оператором IF): • = равно • > больше • < меньше Выражения Выражения составляются из чисел, переменных, арифметических и битовых операторов . Операторы сравнения не могут быть использованы в выражениях. Вычисления производятся слева направо. Применением скобок можно изменить порядок вычислений. Существует 3 уровня: 1. сначала вычисляются выражение с унарными операторами + и -. 2. затем вычисляются выражения с * / % & 3. вычисляются выражения с + - и | Метки Набор от 1 до 3 символов, состоящий из цифр. Метка ставится в начале строки, на которую предполагается делать переход или адресовать вызов подпрограммы. Пример допустимых меток: 10, 200, 210. Системные биты контроллера Биты ввода: Номер Назначение бита 1 Дискретный ввод 1 2 Дискретный ввод 2 3 Дискретный ввод 3 4 Дискретный ввод 4 126 Бит-признак наличия данных в буфере консоли. Служит для организации чтения символов на лету Пример 1. Программа циклически считывает состояние бита ввода и выводит состояние этого бита на терминал. 100 TSTB Х,1 IF X=l THEN PRINT "1" IF Х=0 THEN PRINT "0" GOTO 100 Пример 2. Программа на лету опрашивает состояние консоли и, если в буфере есть данные, выполняет оператор INPUT
10 tstb a,126 if a=0 then goto 10 input "$",b print "$";b; goto 10 Биты вывода: Номер Назначение бита 1 Дискретный вывод 1 2 Дискретный вывод 2 3 Дискретный вывод 3 4 Дискретный вывод 4 127 Бит разрешения генерации звука биппером 128 Бит переключения канала АЦП 0 - канал 1 1 - канал 2 Пример. Программа формирует двойной сигнал биппера GOSUB 200 GOSUB 200 END 200 SETB 127 DELAY 100 CLRB 127 DELAY 100 RETURN Интерпретатор осуществляет диагностику времени исполнения. Когда встречается ошибка, выполнение останавливается, и на консоль выводятся код ошибки и номер строки, в которой ошибка была встречена: Код Значение ошибки ошибки 0 Синтаксическая ошибка 1 Нарушена парность скобок 2 Ожидалось выражение 3 Ожидался знак выражения 4 Ожидалась переменная 5 Таблица меток переполнена 6 Несколько меток с одинаковыми именами 7 Неопределённая метка 8 Ожидался оператор THEN 9 Ожидался оператор ТО 10 Слишком много вложенных циклов 11 Встречен оператор NEXT, не принадлежащий оператору FOR 12 Слишком много вложенных подпрограмм 13 Встретился оператор RETURN, но вызова подпрограммы не было
Далее приведены небольшие проекты, реализованные с использованием данного контроллера. 1. Пример простой программы "Бегущий огонь" rein ********************************************* rem * Бегущий огонь * rem * Состояние бита 1 изменяет направление * rem * перемещения огонька * rem ********************************************* print print "**************************" print "* Running light *" print "* 23.06.2006 TbcGroup *" print "**************************" 100 for i=l to 4 tstb у,1 x = 5-i if y=l then goto 400 x = i 400 setb x delay 100 clrb x next delay 200 goto 100 2. Покажем применение контроллера при создании электронного ключа кода Морзе. Данный вариант реализации, вполне имеет право на жизнь и хорошо демонстрирует возможности контроллера. Кроме собственно функций ключа, выполнена функция телеграфного VOX. "Ввод" скорости и времени задержки отпускания VOX производится путём измерения напряжения на движках потенциометров как показано на рис. 16. rem ********************************************* rem * ELBUG KEY rem * d - длительность элемента (точки) rem * p - задержка на отпускание РТТ rem * t - "одновибратор" задержки отпускания rem * ВЫХодные биты: rem * 1 - манипуляция rem * 2 - РТТ rem * ВХодные биты: rem * 1 - точки rem * 2 - тире rem * Аналоговые входы: rem * 1 - перем. резистор "Скорость манипуляции" rem * 2 - перем. резистор "Время удержания РТТ" rem **********************************************
print print print "* ElbugKey Version 1.1 *" print "* 23.06.2006 TbcGroup *" print 50 clrb 2 100 adc d d=d+15 setb 128 tstb A,l if a=0 then gosub 200 tstb a,2 if a=0 then gosub 300 adc p p=p+50 clrb 128 if t=0 then goto 50 t=t-l goto 100 rem Подпрограмма точек rem 200 setb 1 setb 2 t=P setb 127 clrb 3 delay d clrb 1 clrb 127 delay d return rem Подпрограмма тире rem 300 setb 2 setb 127 setb 1 t=P delay d delay d delay d clrb 1 clrb 127 delay d return
TINY BASIC CONTROLLER TBC-1XX DISCR.OUT 1 1 DISCR.OUT 2 2 DISCR.OUT 3 3 DISCR.OUT 4 4 DISCR.IN 1 5 DISCR.IN 2 6 DISCR.IN 3 7 DISCR.IN 4 8 GND 10 ANALOG IN 1 1 ANALOG IN 2 3 PWM OUT 2 +5V 9 GND 10 R2 KEY VT1 KT315 PTT VT2 KT315 Точки Тире Манипулятор Задержка Рис.16 3. Другой пример, автоматический измеритель КСВ. Схема включения будет иметь вид, показанный на рис. 17. В данном приложении контроллер является точнее вычислителем, входящим в состав измерителя. На входы АЦП подаются нормированные, детектированные сигналы от направленных ответвителей. Нормирование должно быть выполнено таким образом, чтобы максимальной мощности соответствовало напряжение питания AVR-микроконтроллера (5 Вольт). Вывод показаний производится на стрелочный прибор. Положение "С", переключателя является сервисным и служит для градуировки шкалы при изготовлении измерителя. В этом положении (терминальная программа должна быть подключена) производится запрос ввода значений КСВ, умноженных на 100 (для КСВ 1.5 нужно вводить 150) . Перед началом градуировки нужно ввести значение -1, это приведёт к тому, что в ЦАП будет выведено значение 1000, для которого нужно подобрать величину резистора R1 на ток полного отклонения стрелки миллиамперметра. Далее производить последовательный ввод значений КСВ для градуировки шкалы. Значение резистора R1 можно предварительно рассчитать по формуле:
Rl = 0.976 * U/I - Rp, где U - напряжение питания контроллера; I - ток полного отклонения стрелки прибора; Rp - сопротивление рамки постоянному току. Назначение некоторых переменных в программе: N - количество отсчётов для усреднения; К - определяет "растяжку" шкалы" Конечная точка шкалы в КСВ определяется по формуле КСВ=(10+К)/К Ноль шкалы соответствует КСВ=1 При К=1, конечная точка шкалы 11 При К=2, конечная точка шкалы 6 При К=3, конечная точка шкалы 4.333 При К=4, конечная точка шкалы 3.5 При К=5, конечная точка шкалы 3 При К=6, конечная точка шкалы 2.666 TINY BASIC CONTROLLER ТВС-1ХХ 470 DISCR.OUT 1 1 DISCR.OUT 2 2 DISCR.OUT 3 3 DISCR.OUT 4 4 DISCR.IN 1 5 DISCR.IN 2 6 DISCR.IN 3 7 DISCR.IN 4 8 GND 10 ANALOG IN 1 1 ANALOG IN 2 3 PWM OUT 2 +5V 9 GND 10 -►+5V ERROR SWR -O V SW1 A1 R1 -HZZr -> +5V A2 FORWARD REFLECTED mA) 0..1 rtiA Рис.17 PRINT PRINT PRINT "* SWR-meter Version 1.0 *" PRINT "* 24.06.2006 TbcGroup *" PRINT N=10 K=4 50 CLRB 1 F=0
R=0 FOR 1=1 TO N CLRB 128 ADC A F=F+A SETB 128 ADC A R=R+A NEXT F=F/N R=R/N TSTB A,l IF A=0 THEN GOSUB 100 TSTB A, 2 IF A=0 THEN GOSUB 200 TSTB A,3 IF A=0 THEN GOSUB 300 TSTB A,4 IF A=0 THEN GOSUB 400 IF DXL023 THEN D=1023 DAC D GOTO 50 REM REM Вывод КСВ REM 100 X=F+R Y=F-R IF Y=0 THEN GOTO 110 SCALE X, K*100, Y PRINT "F=";F;" R=";R;" SWR=";X/K D=X-K*100 RETURN 110 SETB 1 DELAY 250 PRINT "SWR can't be calculated" D = 1023 RETURN REM REM Вывод падающей мощности REM 200 D=F PRINT "F=";F RETURN REM REM Вывод отражённой мощности REM 300 D=R PRINT "R=";R RETURN REM REM Градуировка
REM 400 INPUT "SWR=",X D=K*(X-100) IF X=-l THEN D=1000 PRINT D RETURN СИМУЛЯТОР КОНТРОЛЛЕРА Для того, чтобы можно было в комфортных условиях, не прибегая к программированию реального контроллера, освоить язык, отладить алгоритмы, произвести предварительное тестирование, был разработан симулятор контроллера на PC. Си- мулятор эмулирует практически все ресурсы реального контроллера, за исключением эмуляции биппера, к тому же консоль симулятора не распознаёт управляющие последовательности ANSI терминала. Симулятор позволяет создавать, сохранять, загружать тексты программ и запускать их в работу. Возможно пошаговое исполнение команд, запуск и останов на лету. Для остановки программы в нужном месте, в текст вставляется оператор STOP, после чего программу нужно перезапустить. При выполнении оператора STOP, исполнение останавливается. Можно просмотреть состояние переменных и периферии и продолжить исполнение в пошаговом режиме или в режиме запуска. Панель симулятора показана на рис. 18. I/'.J I к л Загрузить - Сохранить Старт Шш Сброс Останов »?.: TinvBasic Simulator ГТ \ТГТУПТГ[| ■1ИМ1||_|Л1 j ill fjlf Debug hefc XJ Очистить консоль 12 13 11» 15 16 17 18 19 70 21 22 в tstb у then goto delay delay F9 _*J F8 F4 iS] F2 Ol Discrete Ou-pUs D-jc-elclnpUs ADC1 ADC2 G 66 г г г w fU DAC Г ЛХс*(12&) HHi" J-=_ -L=_ JL=_ Tiny Dasic Uer. Output console 1.ЗА < :kh< i м >Hi ' Mill **«*»«К ««»**«**«*»**» » Running light » • 23.06.2006 TbcGroup • ************************** Все ресурсы контроллера лежат на поверхности, видны все переменные и периферия. Загрузка, сохранение программ производится через меню File командами
Load, Save и Save as... Процесс отладки производится четырьмя клавишами или соответствующими кнопками: • F2 - принудительный останов запущенной программы. Программа останавливается на следующем операторе. Текущий оператор будет выполнен до конца. Поэтому, например Задержка, сформированная оператором DELAY, будет выполнена до конца и только после этого произойдёт останов на следующей строчке. После останова можно модифицировать переменные и изменять состояние других ресурсов. • F4 - Сброс симулятора, • F9 - запуск программы, при этом обнуляются все переменные. После запуска можно наблюдать состояние ресурсов и влиять на ресурсы (дискретный, аналоговый ввод и состояние бита готовности данных в приёмнике RS-232) • F8 - пошаговое исполнение, при этом индицируется текущее состояние всех ресурсов контроллера. В окне редактора работают все обычные операции копирования, вставки и отмены, вызываемые по Ctrl+C, Ctrl+V, Ctrl+Z.
ЗАГОТОВКА ДЛЯ ИССЛЕДОВАНИЯ ПЕРЕХОДНЫХ ПРОЦЕССОВ В ПИД-РЕГУЛЯТОРЕ Это исследовательская программа для изучения законов регулирования. Регулятор, предназначенный для встраивания, будет содержать намного меньше строк, так как не нужно будет организовывать процедуры возмущения и коммутации звеньев. Данное приложение иллюстрирует возможности контроллера. Программа запрашивает коэффициенты для звеньев обратной связи и выводит значение регулируемого параметра на терминал в столбик. На терминале включался вывод протокола в файл. После записи нескольких периодов переключения задающего параметра, запись останавливалась. Результаты, записанные в файл, были скопированы в таблицу EXCEL, таким образом, были получены графики переходных процессов. TINY BASIC CONTROLLER TBC-1XX DISCR.OUT 1 1 DISCR.OUT 2 2 DISCR.OUT 3 3 DISCR.OUT 4 4 DISCR.IN 1 5 DISCR.IN 2 en DISCR.IN 3 DISCR.IN 4 00 GND 10 INTEG^_sW1 D ERIV SW2 ANALOG IN1 1 ANALOG IN2 3 PWM OUT 2 +5V en GND 10 R1 430 -> +5V C1 100u Рис. 1 В данной программе, возмущающее воздействие приложено в виде изменения задающего параметра от 200 до 800 дискретов АЦП - 20 и 80 процентов зоны регулирования . РТДМ ***************************** REM * Отладочная версия PID регулятора * REM * коэффициенты P,I,D пронормированы * REM * как 100 к некоторому знаменателю. * REM * При выводе сумма сигналов дополни- *
REM * тельно делится на 10. * REM * Например, необходим коэффициент 0.5 * REM * тогда * REM * знаменатель 10 / 0.5 = 20 * ВТГ.М *************************************** PRINT print "******************************" print "* PID-регулятор Версия 1.2 *" print "* 02.03.2007 UA6ANN *" print "******************************" X=800 50 input "PROP=",L input "INTEG=",M input "DERIV=",Q 1=0 100 GOSUB 300 SETB 128 ADC Y Z=(X-Y) TSTB B,l IF B=l THEN GOSUB 800 D=0 TSTB B,2 IF B=l THEN GOSUB 900 GOSUB 700 C=(P+I+D)/10 PRINT Y REM PRINT "X=",X;" Z=",Z;" P=",P;" I=",I;" D=",D;" C=";C," 0=",0 IF C<0 THEN C=0 IF O1023 THEN C=1023 DAC С TSTB A,126 IF A=0 THEN GOTO 100 input "$",A PRINT PRINT "PROP=",L;" INTEG=",M;" DERIV=",Q GOTO 50 ВТГ.М ****************************************** REM * Переключатель значения задающего * REM * параметра. Каждые 50 отсчётов * REM * происходит перепад задающего параметра * REM * для исследования переходной * REM * характеристики * ВТГ.М ****************************************** 300 S=S+1 if S=50 then goto 330 if S=100 then goto 380 return REM Задающ. параметр на 200 ед. 330 Х=200 return REM Задающ. параметр на 800 ед. REM и начать отсчёт времени REM переключения сначала
380 Х=800 S=0 return ВТГ.М ********************************* REM * Пропорциональное звено * ВТГ.М ********************************* 700 P=Z SCALE P,100,L RETURN ВТГ.М ********************************* REM * Интегрирующее звено * ВТГ.М ********************************* 800 J=Z SCALE J,100,M I=I+J RETURN ВТГ.М ********************************* REM * Дифференцирующее звено * ВТГ.М ********************************* 900 D=W-Z W=Z SCALE D,100,Q RETURN 900 и 0 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89 93 97 Рис.2 Графики переходных процессов Масштаб времени в данном эксперименте был 1.5 сек на 50 отсчётов.
МИКРОКОНСОЛЬ ДЛЯ БЕЙСИК-КОНТРОЛЛЕРА Практически каждый, кто повторил тини бейсик-контроллер, отмечает, что хотелось иметь средства автономного ввода-вывода, хотя бы простейшую клавиатуру и индикатор. Ресурсы контроллера не позволяют подключить индикатор и кнопки непосредственно, но можно использовать имеющийся интерфейс RS-232 и модуль микроконсоли, описанный ниже. Так же как и бейсик-контроллер, микроконсоль выполнена на ATMEGA8. В качестве индикатора применён двухстрочный символьный индикатор 2x16 символов, клавиатура матричная 12-кнопочная. Ниже показаны схема микроконсоли и перечень элементов. Позиционное обозначение Кол. Наименование компонентов Примечание С2..С8, С12, С13 9 Конденсаторы серии К10-17 импортные, 0.1 мкФ 50В С1,С9 2 Электролитические конденсаторы, 47мкФ 25 В СЮ,СИ 2 Конденсаторы серии К10-17 импортные, 18 пФ 50 В LSI 1 Пьезоизлучатель Rl ,R2 2 С2-23-0.125 5%-330 R3 1 С2-23-0.125 5%-10К Ul 1 ICL232CPE=HIN232CP(MAX232CPE)PDIP16 U2 1 ATmega8-16PI PDIP28 CN1 1 PLS-6 Power and
RS232 CN2 1 PLS-8 KeyPad CN3 1 PBS-14 LCD Yl 1 Кварцевый резонатор 11.0592 МГц имп. HC-49U При сборке устройства необходимо учесть расположение первого контакта на вашем LCD. В нашем случае, в качестве разъёма CN2 мы применили линейку PBS-14 (гнёзда на плату) и запаяли с обратной стороны платы, а на индикаторе установили линейку штырей. Возможно, запаять разъём CN2 со стороны компонентов, а высокие детали запаять с другой стороны, так, чтобы ничто не мешало соединению платы микроконсоли с индикатором. После сборки контроллер необходимо запрограммировать. Микроконсоль не имеет специального разъёма для программирования, но все необходимые сигналы имеются на контактах разъёмов клавиатуры и питания. Прошивку возьмите по ссылке: ftp://homelab.homelinux.com/pub/arhiv/2008-09-a2.zip ПРОШИВКА, ВЕРСИЯ 1.0A Первое включение следует произвести удерживая кнопку 0 на клавиатуре, при этом вступят в действие настройки по умолчанию и модуль готов к работе. КЛАВИАТУРА Основная раскладка клавиатуры: 1 2 3 4 5 6 7 8 9 F 0 Ent Следующая раскладка вступает в силу после нажатия клавиши F и доступна для ввода одного символа, после чего снова становится активной первая раскладка: А в 1 С D Е 1 F G н 1 I II Если удерживать клавишу F дольше одной секунды (это время настраивается), становится доступной раскладка, показанная ниже. Этот слой так же доступен для ввода одного символа, после чего снова становится активной первая раскладка : К L 1 М N 0 1 Р
avdA3>i CM <ФЮ СМ Ю о о оси ОС О ОС ОС Z kls/ls/ls/ls/ls/ls/N/N ГО g о ГО о + I- ГО ОС о о со 00 см см см го см СО см ю см ю to GO Ю ф—e—е—е см ^ ю см CMjCMjCM см см О) 00 см о со ю О) со ф—ф—ф—ф ф—ф—ф—ф £7100 гпоо поо 5 о се см ю $ о о о се ее се (О 1Л о о а. а. о a сл сл 99 ГО см о см о о о о о CL CL о. о. z \ \ \ о ГО СМ о о о о о 9999 СО О CL \ о ^ см го q_ п. Q_ Q_ Ш X X 7 7 a о. ^o oo x> шо Ш о сл со ш ш а. а. см оо сл сл §53 ^ ю ш ш а. а. О см ело сл о см ш ш а. а. ш ^ о о о о сл сл СО ш емго О о см ю to 1^ ® о ® 8 i СО см ГО ш fee см ОС ГО ГО а. со о см О) , о Г N L ГО ГО о а. со о а: О)! row- ю if- -goo Ktr- см F О О а: а: ^ см — см crSo о Р Р а: а: + I + I см см о оо о о о о + о со< см ГО о со со см о ГО см + О) to toko teM Of* к—|i- г^сою^-юсм*-® m m m m m m m m QQQQQQQQ \DiUipz a: >- о о о ООП pqaiXs 3 х 91 о о см о о о ii' col о о о о ■ ■ ГО о СЛ О ГО О О СЛ ГО ■ ■ ГО о о сл со ■ ■ ГО о сл ш а: о + ■ ■ о а о + Z£ZSH Pud УЗ/AOd
Нажатие клавиш озвучено, короткий бип сопровождает нажатие клавиши, длинный бип вырабатывается при удержании клавиши F дольше некоторого порогового значения, что индицирует доступность третьей раскладки клавиатуры. Микроконсоль имеет Setup, если по какой-либо причине не устраивают параметры по умолчанию, их можно изменить, для этого Setup нужно активизировать, проделав следующие действия: 1. Выключить питание микроконсоли 2. Нажать и удерживать клавишу F 3. Включить питание микроконсоли 4 . Отпустить клавишу F В результате на дисплее появится первый пункт Setup: Contrast 2-Up 8-Down[nnn] Это настройка контраста дисплея. В квадратных скобках показано текущее значение в относительных единицах. Изменить значение можно нажимая клавиши 2 и 8. Дикретность изменения 10 единиц. По умолчанию установлено число 10. Одновременно с изменением условного числа, изменяется и контрастность. Необходимо подобрать желаемый уровень и нажать клавишу Ent, после чего произойдёт переход к следующему пункту Setup: Веер[nnn]>_ Это длительность короткого бипа. В квадратных скобках стоит длительность звука в милисекундах, по умолчанию это 60 мс. Нулевое значение отключает короткий бип. В этом и последующем пунктах настроек числовые значения вводятся с клавиатуры. Могут быть ввдены значения от 0 до 32767 мс. Если значение устраивает или данный пункт необходимо пропустить, просто нажмите клавишу Ent. F-beep[nnn]>_ Это длительность звуковой индикации перехода на третий слой раскладки клавиатуры, этот звук должен заметно отличаться по длительности от короткого бипа. Нулевое значение отключает этот звук. Значение по умолчанию 300. Auto repeat delay[nnn]>_ Задержка перед началом автопосылки кода нажатой клавиши. Значение по умолчанию 500. Автоповтор срабатывает для клавиш 2,8 и 4,6 основной раскладки Symbol delay[nnn]>_ Задержка между символами при автоповторе, значение по умолчанию 50 F-pressing delay[nnn]>_ Задержка на срабатывание "долгого" удержания клавиши F, значение по умолчанию 1000.
Debounce delay[nnn]>_ Защитная задержка от дребезга контактов, можно вводить значения от 1 до 255 мс, значение по умолчанию 2 0. Setup: l=Exit 2-Save>_ Это завершающий пункт Setup. 1 - выход без сохранения введённых параметров, 2 -выход с сохранением, Ent без ввода параметров возвращает к первому пункту Setup. ДИСПЛЕЙ Дисплей отображает принятые по интерфейсу RS-232 символы. Если в потоке символов встречается управляющая ANSI последовательность, предварённая кодом 27 (Escape), производится распознавание, ниже приведены те последовательности , которые микроконсоль распознаёт и выполняет. Управляющие ESC последовательности ESC - символ с кодом 27 (1В - в шестнадцатеричном коде) Управляющая последовательность Выполняемое действие ESC[2J Очищает экран и устанавливает курсор в позицию строка=1,колонка=1 ESC[<строка>;<колонка>г или ESC[<строка>;<колонка>Н Устанавливает курсор в позицию строка,колонка ESC[f или ESC[H Устанавливает курсор в позицию 1,1 ЕЗС[<кол сдвигов>С Сдвигает курсор на кол сдвигов вправо ESC[C Сдвигает курсор на одну позицию вправо ЕЗС[<кол сдвигов>Б Сдвигает курсор на кол сдвигов влево ESC[D Сдвигает курсор на одну позицию влево Нестандартные управляющие последовательности, только для данного терминала Управляющая последовательность Выполняемое действие ESCOD Прячет курсор ESCOC Включает курсор Реакция на некоторые одиночные символы Символ Реакция 0x08 Сдвигает курсор на одну позицию влево ОхОА Игнорируе т ся
ОхОС Очищает экран и устанавливает курсор в позицию строка=1, колонка=1 OxOD Игнорируе т ся Пример, приведённый ниже, показывает как нужно выполнять позиционирование курсора при выводе значений. Необходимо отметить, что операция очистки экрана довольно медленная. Нужно дождаться её завершения, для этого следует вставить задержку, гарантированно перекрывающую длительность этой операции, что и сделано во второй строчке программы после очистки дисплея. print "$";27;"[2J"; delay 100 print "$";27;"[1;1Н ADC #1 "; print "$";27;"[2;1Н ADC #2 "; 10 adc х setb 128 print "$";27;"[1;9H";x;" " adc у clrb 128 print "$";27;"[2;9H";y;" " goto 10 Можно полностью отладить вывод используя гипертерминал, если включить в его настройках эмуляцию ANSI терминала, а тексты стремиться выводить только в первые 16 позиций верхних двух строк.
А V R BASINT A.Костюк, E.Фадеев 1. ВВЕДЕНИЕ BASINT - это интерпретатор языка Бейсик для AVR микроконтроллеров AT Mega 16/32/64. Как продукт, представляет собой машинный код и предназначен для помещения в программную память AVR микроконтроллера. В комплексе, микроконтроллер и код интерпретатора BASINT, образуют программируемый логический контроллер, языком программирования которого является язык Бейсик. Далее в тексте под словом контроллер подразумевается такое программируемое логическое устройство . Основной принцип использования контроллера состоит в том, что все операции по созданию и загрузке программы пользователя на языке Бейсик производятся без применения специального оборудования и программного обеспечения. Например, в программе NotePad пишется программа, а загрузка производится при помощи терминальной программы HyperTerminal (OS WINDOWS). Эти средства стандартно присутствуют в операционной системе. Во время загрузки программы текстовый файл преобразуется в промежуточный
код, который является сокращённой формой текстового исходного файла, например, лишние пробелы в тексте удаляются, числа в символах ASCII преобразуются в двоичный эквивалент, строки снабжаются счётчиками, имена операторов и функций заменяются кодами, в таком виде программа хранится во флеш-памяти. Во время исполнения интерпретатор пользуется этой сокращённой формой записи В отличие от Тини Бейсик Контроллера, контроллер с интерпретатором BASINT позволяет пользователю самому специфицировать функции линий ввода/вывода. Это свойство сильно влияет на конструкцию контроллера. В пределе это контроллер AVR с зашитым интерпретатором. Имеется пример такого подхода, например, английская фирма Revolution Education Ltd продаёт запрограммированные PIC- контроллеры со встроенным интерпретатором под маркой PICAXE и дело пользователя, как он ими распорядится, в какую схему запаяет. А вот фирма PARALLAX выпускает симпатичные модули, похожие на почтовые марки, отсюда, наверное, и название этих модулей BASIC STAMP. Такой модуль содержит собственно микроконтроллер, цепи питания, сброса, кварцевый резонатор и подключается к целевому устройству через колодку. Этот принцип использовали и мы, создавая вариант жилища для интерпретатора BASINT. Необходимые для повторения материалы приведены ниже. Печатная плата
Так выглядит начальная заставка на экране гипертерминала. г IryBa»ic57600 - HyperTerminal Файл фавка В<-д Еыюв Передача ^геавка 2& fl[ JSJxj HfisiNi :'.:'н P' uyr.Ki ji't'd 17916 t>ytс [•ii: i;n».,|i ;чн1г 1 Lbt 2 Lead 3 Run 4 About Очини) p'-(iU'i;t |iin to dis.ilili' this м ixm1. Б^пяпо£кггсч5ни?: C:00:i8 ANSI 576X 8-N-1
+ со О ю О 00 СМ со со °J ^ ^ DC DC z?00 — OJ ^ oj £(XOO Pl-DCDC + > О о > см со см + О . + т- см ОО см О О О см СП О со о ю ю оот- Оо со О I' I' ю ю о О) 00 со ю ю ю ю ю С\| С\| С\| С\| С\| С\| С\| tad 9С 8С 6С 0fr It г» Y7 oo QQ << ю << eoav/evc?- °- 20aV/2Vd i-oav/i-Vd ooav/ovd ЭОЛ oad/oi Lad/u 29d/0NIV sad/i-Niv l79d/SS/ юсо со m Q_ Q_ 0°2 CD Is- о о ш □ QCC <<< со << Q_ Q_ DO см zoo O>co <<o о о CO о H CO о Q_ Ю о Q_ CD < LU Is- m Q_ coSE> CM T- °.<< ^|_|- (3xx О T- Q-q_ о Q H О Q_ si/Mi/eod »0±/S0d vas/i-Od lOS/OOd aN0 00Л zad/гоо 9ad/doi 9ad/vi-oo tad/а юо ead/UNi CM a a. о CM 4fr Ю CO 00 Ud CO о X N CD LO О CL CM CM О CM О Q_ CM CM I >I0 U гг iZ 03 61 81 91 Tad
Прошивка для AT Mega 16: ftp://homelab.homelinux.com/pub/arhiv/2008-09-a3.zip Прошивка для AT Mega 32 ftp://homelab.homelinux.com/pub/arhiv/2008-09-a4.zip 2. КОНТРОЛЛЕРНАЯ ВЕРСИЯ ЯЗЫКА AVR BASINT, КОМАНДЫ И ФУНКЦИИ Особенностью данного диалекта языка Basic является то, что строки не нумеруются. Для обозначения точек перехода используются числовые метки. Числа Все числа являются знаковыми целыми в диапазоне -32767 до +32767. Допускаются три формы записи чисел: - десятичная; - шестнадцатеричная, числа имеют префикс &Н; - двоичная, числа имеют префикс &В; При выводе листинга из памяти контроллера действует только десятичная форма представления, вне зависимости от формы записи в загружаемом тексте программы. Переменные В программе допускается использования до 26 переменных. В качестве имен переменных можно использовать совокупность заглавных букв латинского алфавита от А до Z, общая длина может быть любой, но из расчёта, что длина строки в программе не должна превышать 64 символа. При присвоении переменным символических имен следует учитывать, что значащим является только первый символ. Таким образом, различные имена, но начинающиеся с одинаковой буквы будут указывать на одну и ту же переменную Внутреннее представление переменных 16-битное. Допускается использование до 26 одномерных массивов, размер которых изначально не определён. Актуальный размер Задаётся на этапе исполнения. Максимальный размер зависит от наличия свободной памяти. К выбору имени массива следует подходить так же, как и к именам переменных. Доступ к элементу массива осуществляется через индекс в круглых скобках, например А(0) , В(1) . Следует иметь в виду, что это А и А(п) - это разные переменные . Операторы Арифметические: • + сложение • - вычитание • * умножение
• / целочисленное деление (нужно иметь в виду, что, например, 14/5=2) • MOD - взятие остатка от деления (14 MOD 5=4) • AND - побитное И • OR - побитное ИЛИ • XOR - побитное исключающее ИЛИ Сравнения (используются только оператором IF): • = равно • О (или X) не равно • > больше • < меньше • >= (или =>) больше или равно • <= (или =<) меньше или равно Выражения Выражения составляются из чисел, переменных, арифметических и битовых операторов . Операторы сравнения не могут быть использованы в выражениях. Вычисления производятся слева направо. Применением скобок можно изменить порядок вычислений. Существует 3 уровня. 1. сначала вычисляются выражение с унарными операторами + и -, например: А=-В*2, при этом первым будет выполнено взятие В с противоположным знаком; 2. затем вычисляются выражения с * и / 3. вычисляются выражения с + - и MOD,AND,OR,XOR; Метки Метками являются положительные числа от 0 до 32767. Метка ставится в начале строки, на которую предполагается делать переход или адресовать вызов подпрограммы. Не рекомендуется нумеровать все строки, количество меток ограничено размером таблицы меток и составляет 64. Команды KeyWord Small Mini Maxi Model Atmegal6 Atmega32 Atmega64 ABS * * * ADC * * * AT * * ATTR * * BCD * * BIN * * CHR * * * CLEAR * * * CLS * * DATA * * * DEFPIN AS * * *
DELAY * * * DELETEVECTOR * * DIM * * * DISABLE * * ENABLE * * END * * * FOR TO NEXT * * * GETATOMIC * * GOTO * * * GOSUB * * * HEX * * HIGH * * * IF THEN ELSE * * * INK * * INKEY * * * INLINE * * INPUT * * * INTERRUPT * * LASTERROR * * * LOW * * * PAPER * * PEEK * * * POKE * * * PRINT * * * PULSEIN * * * PULSEOUT * * * PUTATOMIC * * PWM * * * READ * * * READEEPROM * * * REM * * * RESTORE * * * RETURN * * * ROL * * * ROR * * * SCALE * * * SETADMUX * * * SET * * * SHIFTIN * * * SHIFTOUT * * * STOP * * * TEST * * * TOGGLE * * * TWIINIT * * * TWIREAD * * * TWISTOP * * * TWIWRITE * * * WAITKEY * * * WRITEEEPROM * * *
Small Mini Базовый чип ATMEGA16 ATMEGA32 Размер доступной программной памяти ЗК байт 16К байт 2.1 КОНСОЛЬНЫЙ ВВОД/ВЫВОД CLS Действие: Очищает экран консоли и переводит курсор в верхний левый угол Синтаксис: CLS PRINT Действие: Оператор вывода, выводит на консоль сообщения Синтаксис: PRINT [список] Примеры: PRINT Переводит вывод на новую строчку PRINT "Это сообщение" Выводит сообщение PRINT "Х=";Х; " Y=";Y; Выводит список, символ ";" означает, что вывод производится подряд без пробелов. Пробелы, указанные внутри кавычек, выводятся. Символ ";" в конце строчки означает, что следующий оператор PRINT продолжит печать в текущей строчке PRINT X,Y,Z, Выводит список, символ ","означает, что вывод производится с табуляцией на 8. Символ "," в конце строчки означает, что следующий оператор PRINT продолжит печать в текущей строчке в текущей позиции табуляции. AT Действие: Функция позиционирования, входит как элемент списка в оператор PRINT Синтаксис: PRINT АТ(х,у);[список] х - выражение, определяющее позицию в строке (от 1 до 80) у - выражение, определяющее номер строки (от 1 до 24) Пример: PRINT AT (35,12) ;"Это сообщение"; AT (1,1) ; Выводит сообщение в центре экрана и перемещает курсор в левый верхний угол
CHR Действие: Функция вывода на консоль числа как символа, входит как элемент списка в оператор PRINT Синтаксис: PRINT [список1; или ,] CHR(val)[; или , [список2]] val - код символа от 0 до 255 Пример: FOR 1=32 ТО 127 PRINT I,CHR(I) NEXT Выводит в столбик код символа и соответствующий символ HEX, BCD, BIN Действие: HEX - вывод значения числа в шестнадцатеричной форме, BCD - вывод значения числа в двоично-десятичной форме, BIN - вывод значения числа в двоичной форме. Функции HEX, BCD, BIN входят как элементы списка в оператор PRINT, Синтаксис: PRINT [список1]; или , HEX(value, digits)[; или PRINT [список1]; или , BCD(value, digits)[; или PRINT [список1]; или , BIN(value, digits)[; или value - выводимое значение, выражение digits - количество выводимых цифр Пример: [список2]] [список2]] [список2]] 10 INPUT X PRINT Х,НЕХ(Х,4);BIN(X,16) GOTO 10 Выводит значение переменной в трёх представлениях: десятичном, шестнадцатеричном и двоичном Примечание 1. Действие оператора BCD не отличается от действия оператора HEX в силу свойств двоично-десятичного представления Примечание 2. функции AT, HEX, BCD, BIN, CHR могут быть использованы самостоятельно для вывода на консоль, при этом они возвращают количество выведенных символов, например, при выполнении строки N=BIN(X,8) будет произведён вывод числа X в двоичном виде на консоль, а переменная N примет значение 8. Функция AT возвращает нулевое значение ATTR Действие: Оператор установки атрибутов вывода Синтаксис: ATTR выражение Здесь значение выражения определяет особенности вывода на консоль 0 - нормальный режим 1 - повышенная яркость 4 - подчёркивание 5 - мерцание
7 - инверсия цвета фона и цвета символов 8 - цвет символов принимает цвет фона Последовательное применение оператора ATTR с различными параметрами, отличными от нуля, приводит к накоплению эффектов вывода. Нулевое значение восстанавливает нормальный режим. INK, PAPER Действие: Операторы задания цветовых атрибутов INK - задаёт цвет символов PAPER - задаёт цвет фона Синтаксис: INK выражение PAPER выражение Здесь значение выражения определяет цветовой параметр вывода на консоль 0 - чёрный 1 - красный 2 - зелёный 3 - жёлтый 4 - синий 5 - розовый 6 - голубой 7 - белый Примечание. Применение функции AT, операторов CLS, ATTR, PAPER, INK предполагает, что консоль является ANSI терминалом. Многие терминальные программы имеет в своём составе эмулятор для работы в этом режиме. INPUT Действие: Оператор ввода, ожидает ввода значения в переменную Синтаксис: INPUT [сообщение,] переменная Примеры: INPUT X Выводит знак вопроса "?" и ожидает ввод числа INPUT "Х=",Х Выводит сообщение в двойных кавычках и ожидает ввода числа INKEY Действие: Оператор ввода, проверяет состояние приёмного буфера консоли. Немедленно возвращает -1, если буфер пуст или код очередного символа, если буфере имеются принятые символы. Синтаксис: Переменная = INKEY() Примеры: A=INKEY() Считывает текущее состояние буфера
10 C=INKEY() IF C=-l THEN GOTO 10 Ожидание ввода символа 10 C=INKEY() IF CO-1 THEN GOTO 20 повторяющиеся действия GOTO 10 20 реакция на принятые символы GOTO 10 Выполнение повторяющихся действий на фоне ожидания приёма символов WAITKEY Действие: Оператор ввода, ожидает прихода символа, возвращает код принятого символа. Синтаксис: Переменная = WAITKEY() Примеры: A=WAITKEY() Считывает содержимое буфера 2.2 УПРАВЛЕНИЕ ПРОЦЕССОМ IF / THEN / ELSE Действие: Условный оператор. В данной реализации интерпретатора используется "неструктурная" версия оператора, поэтому допускается только запись в одну строку. Синтаксис: IF условие THEN оператор1 [ELSE оператор2] Примеры: IF Х<10 THEN Х=Х+1 Если условие истина, то вычисляется выражение IF Х=0 THEN GOTO 100 ELSE GOTO 200 Если условие истина, то производится переход на строчку с меткой 100, иначе переход на метку 200 IF Z=65 THEN GOSUB 200 Если условие истина, то производится вызов подпрограммы с меткой 200 FOR / ТО / NEXT Действие: Оператор цикла Синтаксис: FOR переменная = выражение! ТО выражение2
операторы тела цикла (действия, которые необходимо повторять в цикле) NEXT Примечание: выражение1 - начальное значение переменной цикла; выражение2 - конечное значение переменной цикла; шаг переменной цикла равен единице. Примеры: FOR 1=32 ТО 127 Производит действие 127-32+1 раз с наращиванием перемен- PRINT CHR(I),I ной цикла. В качестве действия, вывод переменной как сим- NEXT вола с кодом I и вывод значения переменной (таблица символов) GOTO Действие: Оператор перехода Синтаксис: GOTO метка Пример: GOTO 100 Производится переход на строчку с меткой 100 GOSUB Действие: Оператор вызова подпрограммы Синтаксис: GOSUB метка Пример: GOSUB 100 Производит вызов подпрограммы с меткой 200 RETURN Действие: Возврат из подпрограммы Синтаксис: RETURN Пример: 100 PRINT X Производит возврат подпрограммы RETURN END Действие:
Завершает выполнение программы. В любом месте, где интерпретатор встретит оператор END, он прекращает выполнение программы. Ставить оператор END в конце программы, считается хорошим тоном. Синтаксис: END Примеры: IF Z=0 THEN END Завершает выполнение программы STOP Действие: Приостанавливает выполнение программы и очищает приёмный буфер консоли, продолжение при получении любого символа в буфер консоли Синтаксис: STOP Примеры: IF Z=0 THEN STOP Приостанавливает выполнение REM Действие: Оператор комментирования Синтаксис: REM [любая строка] оператор : REM [любая строка] Примеры: REM Это комментарий Интерпретатор не исполняет эту строчку А=10: REM комментарий Интерпретатор исполняет только оператор перед REM DELAY Действие: Формирование задержки Синтаксис: DELAY выражение Примеры: DELAY 100 Формирует задержку, длительность которой определяется DELAY X выражением. Дискретность задания 1 миллисекунда. DELAY X + I * 10
2.3 ДАННЫЕ DIM Действие: Определяет размер одномерного массива Синтаксис: 01Мсписок Примечание: Размер массива определяется размером текущей доступной памяти. Начальный доступный размер свободной памяти зависит от типа контроллера Small Mini Базовый чип ATMEGA16 ATMEGA32 Размер доступной памяти 140 байт/ 70 элементов 1000 байт/ 500 элементов Примеры: DIM А(10) ,В(20) Массив А - зарезервирована память для 10 элементов Массив В - зарезервирована память для 20 элементов DATA Действие: Определяет блок данных. Максимальное количество данных в строке определяется длиной строки, которая не должна превышать 64 символа. Максимальное количество строк с данными ограничено только размером свободной памяти программ. Синтаксис: DATA список После старта интерпретатора, указатель устанавливается на начало первого блока данных. Примеры: DATA 9999, -1, 23456 Определён блок данных из трёх значений READ Действие: Читает данные из блока DATA и передвигает указатель на следующее значение Синтаксис: READ список Примеры: READ А,В,С Последовательное чтение данных в переменные А,В и С
RESTORE Действие: Передвигает указатель на необходимый блок данных. Синтаксис: RESTORE [метка] Оператор RESTORE без параметров устанавливает указатель на начало первого блока данных. Примеры: 100 DATA 1,2,3,4,5,6 DATA 7,8,9 110 DATA 555,777,888 RESTORE 110 Устанавливает указатель на блок с меткой 110, первое, считанное оператором READ значение, будет 555 RESTORE Устанавливает указатель на первый в программе блок DATA WRITEЕЕPROM Действие: Записывает байт по указанному адресу в энергонезависимую память Синтаксис: WRITEEEPROM адрес, байт READEEPROM Действие: Возвращает значение, хранящееся по указанному адресу в энергонезависимой памяти Синтаксис: переменная = READEEPROM(адрес) Small Mini Базовый чип ATMEGA16 ATMEGA32 Размер доступной энергонезависимой памяти, байт 512 1024 2.4 ПРЕРЫВАНИЯ И МАШИННЫЙ КОД ENABLE Действие: Разрешает прерывания Синтаксис: ENABLE
DISABLE Действие: Запрещает прерывания Синтаксис: DISABLE INLINE Действие: Создаёт блок машинного кода на этапе Загрузки программы. Несколько INLINE строк в любом месте программы последовательно образуют единый блок кода в специальной области памяти. Если блок кода образован несколькими строчками INLINE, необходимо позаботиться, чтобы интерпретатор проходил только по первой из них. Остальные нужно спрятать, например, сразу после ближайшего оператора RETURN или GOTO или END. Блок кода должен быть оформлен как подпрограмма, последним оператором должен быть оператор RET. Связь с переменными бейсика простая, регистры R16,R17 содержат указатель на переменную А. Принцип формирования адреса любой из 26 (от А до Z) скалярных переменных следующий: адрес = содepжимoe_Rl6R17 + 2 * (код_символа_переменной - 65) Синтаксис: INLINE opcodel, opcode2... . Пример: 10 INLINE opcodel, opcode2... . Простой случай применения оператора INLINE, блок кода помещается в одну строчку 10 INLINE opcodel, opcode2... . RETURN INLINE opcoden, opcoden+1... . При интерпретации будет использован только первый оператор INLINE, он извлечёт адрес первой команды блока кода и произведёт вызов подпрограммы по этому адресу. Если оператор RETURN стоял бы в конце всех строчек INLINE, то последовательно исполнялись всё меньшие порции одного и того же кода. Соблюдение правила разделения первого оператора INLINE - плата За простоту реализации и компактность интерпретатора Примечание. Для автоматизации создания блоков кода можно применять утилиту bin21ine, которая создаёт блоки кода INLINE из машинного кода. Ниже показано содержимое командного файла, осуществляющего последовательную цепочку запуска ассемблера от AVR студии, конвертера HEX в BIN и конвертера машинного кода в блоки INLINE avrasm32 -fl -1 %l.lst -о %l.hex %l.asm hex2bin %l.hex %l.bin bin21ine -i %l.bin -o %l.bas Для примера рассмотрим плохо поддающуюся интерпретации процедуру доступа к 16-битным аппаратным регистрам AVR контроллеров. Ассемблерная процедура вывода содержимого регистра А в регистр OCR1A:
.include "m64def.inc" mov r30,rl6 mov r31,rl7 Id rl8,z+ Id rl9,z+ cli out 0CR1AH,R19 out 0CR1AL,R18 sei ret INLINE-блок после цепочки преобразования: INLINE 12256,12273,37153,37169,38136,48443 INLINE 48426,38008,38152 Осталось поместить блок в текст бейсик программы, снабдить меткой и отделить первый оператор INLINE 200 INLINE 12256,12273,37153,37169,38136,48443 RETURN INLINE 48426,38008,38152 INTERRUPT Действие: Создаёт блок машинного кода на этапе загрузки программы Подключает код к вектору на этапе исполнения. Если код обработчика не умещается в одной строке, можно продолжить уже с использованием оператора INLINE. Строка с INTERRUPT должна быть отделена от остального кода одним из операторов RETURN, GOTO, END. На этапе исполнения строчка с INLINE должна вызываться один раз для инициализации прерывания. Требования по оформлению блока кода такие же как и для оператора INLINE. Может быть одновременно назначено до 10 векторов. Невозможно задать прерывания для UART0 и TIMER0, так как они используются системой. Синтаксис: INTERRUPTvector, opcodel, opcode2... . Пример: INTERRUPT vector,opcodel, Простой случай, обработчик умещается в одной opcode2... строке 200 INTERRUPT vector, При интерпретации будет использован только opcodel, opcode2... оператор INTERRUPT, он извлечёт адрес первой RETURN команды блока кода и свяжет адрес вызова с ноINLINE opcoden, мером вектора opcoden+1... DELETEVECTOR Действие: Отключает код от вектора и запрещает соответствующее прерывание Синтаксис: DELETEVECTOR vector
PUTATOMIC Действие: Присвоение значения переменной, используемой в подпрограмме прерывания. Во время действия этого оператора производится присваивание значения переменной при запрещённых прерываниях, это обеспечивает целостную (атомарную) модификацию двухбайтовой переменной. Это необходимо, так как операция присваивания содержит цепочку из нескольких команд, которая могла быть разорвана прерыванием, осуществляющим доступ к этой же переменной. Синтаксис: PUTATOMIC переменная, значение GETATOMIC Действие: Взять значение переменной, используемой в прерывании. Во время действия этого оператора производится извлечение значения переменной при запрещённых прерываниях, Синтаксис: переменная1 = GETATOMIC(переменная) 2.5 НАЗНАЧЕНИЕ И ИСПОЛЬЗОВАНИЕ ЛИНИЙ КОНТРОЛЛЕРА Номер Линия Дополнительная ножки порта функция 0 РАО ADC0 1 РА1 ADC1 2 РА2 ADC2 3 РАЗ ADC3 4 РА4 ADC4 5 РА5 ADC5 6 РА6 ADC6 7 РА7 ADC7 8 РВО 9 РВ1 10 РВ2 11 РВЗ 12 РВ4 13 РВ5 14 РВ6 15 РВ7 16 РСО 17 РС1 18 РС2 19 РСЗ 20 РС4 21 РС5 27 PD3 28 PD4 PWM0 29 PD5 PWM1
30 PD6 31 PD7 DEFPIN Действие: Оператор назначает функцию линии контроллера. Линии контроллера имеют сквозную нумерацию от нуля, до некоторого максимального значения, определяемого типом контроллера. Все ножки могут быть назначены для дискретного ввода или вывода. Возможность назначения дополнительных функций ножек (аналоговый ввод, ШИМ) зависит от конкретного типа контроллера Small Mini Базовый чип ATMEGA16 ATMEGA32 Общее количество линий (ножек) 26 26 Номера ножек, которым может быть назначена функция DIN/DOUT 0. .21, 27..31 0. .21, 27. .31 Номера ножек, которым может быть назначена функция AIN 0. .7 0. .7 Номера ножек, которым может быть назначена функция PWM 28,29 28,29 Синтаксис: DEFPIN ножка AS тип Примечание: тип функция DIN Дискретный ввод DOUT Дискретный вывод AIN Аналоговый ввод PWM ШИМ Пример: DEFPIN 8 AS DOUT Настроить линию 8 для работы на вывод CLEAR Действие: Установить линию в ноль Синтаксис: CLEAR pin SET Действие: Установить линию в единицу Синтаксис: SET pin
TOGGLE Действие: Изменить состояние линии на противоположное Синтаксис: TOGGLE pin TEST Действие: Прочитать состояние линии Синтаксис: var=TEST(pin) PWM Действие: Вывод значения в канал ШИМ Синтаксис: PWR pwm_pin, value SETADMUX Действие: Настройка мультиплексора АЦП Синтаксис: SETADMUXvalue Примечание: value = источник опоры + канал мультиплексора источник опоры 0 Источник опорного напряжения - ножка AREF 64 Источник опорного напряжения - ножка AVCC 192 Внутренний источник напряжения 2.56 Вольт ADC Действие: Чтение измеренного значения напряжения текущего канала АЦП Синтаксис: var = ADC
2.6 ДОСТУП К РЕСУРСАМ МИКРОКОНТРОЛЛЕ РА РОКЕ Действие: Помещает байт Синтаксис: POKE adr, val в ячейку памяти (внутреннюю или регистр ввода/вывода) РЕЕК Действие: Чтение ячейки памяти (внутренней или регистров ввода/вывода) Синтаксис: var=PEEK(adr) Примечание. В каждом конкретном случае, для определения адреса нужного регистра, необходимо сверяться с документацией на микроконтроллер. В документации для регистров обычно указывается два адреса, по одному осуществляется доступ как регистрам ввода-вывода, а по другому как к ячейке памяти. Оператор РОКЕ и функция РЕЕК оперируют с адресами ячеек памяти, поэтому, если известен адрес для ввода-вывода, нужно прибавить к этому адресу 32 для получения адреса в пространстве ячеек памяти. 2.6.1 Доступ к 16-битным регистрам AVR-микроконтроллера Доступ к 16-битным регистрам AVR микроконтроллера имеет особенность. Для обеспечения одновременной модификации всех 16 бит таких регистров аппаратно задействуется временный 8-битный регистр. С точки зрения программы это происходит прозрачно, необходимо только выдержать последовательность обращения к половинкам этих регистров: сначала к старшей, потом младшей при записи и, наоборот , при чтении, обязательно с использованием ассемблерных команд IN и OUT. Эти команды трудно параметризировать, они используют константы в своём теле и пришлось бы создать дополнительное число редко используемых бейсик операторов по числу регистров. Это в данном интерпретаторе не реализовано. Но, благодаря возможностям оператора INLINE, возможно создание подпрограмм для каждого конкретного случая. В качестве примера приведены две подпрограммы для доступа к регистру 0CR1A через переменную А. REM .include "m64def.inc" REM REM REM REM REM REM REM REM REM REM 200 mov r30,rl6 mov r31,rl7 Id rl8,z+ Id rl9,z+ cli out 0CR1AH,R19 out 0CR1AL,R18 sei ret WRITE to OCR1A INLINE 12256,12273,37153,37169,38136,48443
RETURN INLINE 48426,38008,38152 REM .include "m64def.inc" REM mov r30,rl6 REM mov r31,rl7 REM cli REM in R18,0CR1AL REM in R19,0CR1AH REM sei REM st z+, rl8 REM st z+, rl9 REM ret REM READ from OCR1A 300 INLINE 12256,12273,38136,46378,46395,38008 RETURN INLINE 37665,37681,38152 2.7 ВЫЧИСЛЕНИЯ HIGH Действие: Возвращает старший байт числа Синтаксис: переменная=Н1СН(выражение) LOW Действие: Возвращает младший байт числа Синтаксис: nepeMeHHaH=LOW(выражение) ABS Действие: Возвращает абсолютное значение числа Синтаксис: переменная =ABS(выражение) ROL Действие: Сдвигает число в переменной влево, при этом в младший разряд втягиваются нули Синтаксис: ROL переменная, число_сдвигов ROR Действие: Сдвигает число в переменной влево, при этом в старший разряд втягиваются нули
Синтаксис: ROR переменная, число_сдвигов SCALE Действие: Оператор масштабирования Синтаксис: SCALE переменная, множитель, делитель Примеры: SCALE X,100,Y Рассчитывает процент числа X от числа Y. Сначала производится умножение X на 100 и результат помещается в 32-х битную временную переменную, затем производится деление на Y, результат помещается в X SCALE X,1000,Y Тоже, но с точностью до десятых долей процента 2.8 ТРАДИЦИОННЫЕ РАСШИРЕНИЯ (BASIC STAMP, BASCOM) PULSEIN Действие: Возвращает длительность импульса на выводе контроллера, каждая единица соответствует приблизительно 1 микросекунде при частоте кварца 14.745 Мгц Синтаксис: var=PULSEIN(pin, option, timeout) Примечание: option 0 ожидание положительного фронта и измерение длительности до изменения фронта 1 ожидание отрицательного фронта и измерение длительности до изменения фронта PULSEOUT Действие: Изменяет состояние вывода, формирует паузу и снова изменяет состояние вывода Синтаксис: PULSEOUT pin, duration pin - номер ножки, на которую предполагается выводить импульс duration - определяет длительность импульса, одна единица соответствует приблизительно 1 микросекунде при частоте кварца 14.745 Мгц SHIFTIN Действие:
Возвращает принятую последовательность бит Синтаксис: var=SHIFTIN(data_pin, clock_pin, bits, delay, option, timeout) Примечание: data pin входные последовательные данные clock pin синхронизация, режим определяется в option Bits количество втягиваемых бит Delay в усл. единицах при формировании импульсов синхронизации, приблизительно 1 микросекунда при частоте кварца 14.745 Мгц Option режим синхронизации: elk pin - выход: 0 - старший бит первый по положительному фронту 1 - старший бит первый по отрицательному фронту 2 - младший бит первый по положительному фронту 3 - младший бит первый по отрицательному фронту elk pin - вход: option = option + 4 timeout время в мс, по истечению которого функция возвращает ноль и переменная LASTERROR принимает значение 1. Значение timeout актуально когда elk pin работает как вход синхронизации SHIFOUT Действие: Выводит содержимое переменной как последовательность бит Синтаксис: SHIFTOUT var, data_pin, clock_pin, bits, delay, option Примечание: Var переменная- буфер, содержит число, которое нужно преобразовать в последовательный код Data pin входные последовательные данные clock pin синхронизация, режим определяется в option Bits количество втягиваемых бит Delay в усл. единицах при формировании импульсов синхронизации, приблизительно 1 микросекунда при частоте кварца 14.745 Мгц Option режим синхронизации: elk pin - выход: 0 - старший бит первый по положительному фронту 1 - старший бит первый по отрицательному фронту 2 - младший бит первый по положительному фронту 3 - младший бит первый по отрицательному фронту 2.9 ДВУХПРОВОДНЫМ ИНТЕРФЕЙС TWIINIT Действие: Инициализация TWI (I2C) интерфейса Синтаксис:
TWIINIT bps, prescale bps - коэффициент для бодовой скорости prescale - показатель для предделителя Скорость на ножке SCL определяется по формуле, приведённой ниже: SCL frequency = CPU Clock frequency / (16 + 2(bps) * 4Aprescale ) TWISTART Действие: Генерирует START условие на выводах SDA,SCL Синтаксис: TWISTART TWIWRITE Действие: Отправляет байт на TWI (I2C) устройство Синтаксис: TWIWRITE байт TWIREAD Действие: Принимает байт от TWI (I2C) устройства, генерирует ACK/NACK Синтаксис: Пepeмeннaя=TWIREAD(аск) Значение параметра аск: 0 - генерируется NACK 1 - генерируется АСК TWISTOP Действие: Генерирует STOP условие на выводах SDA,SCL Синтаксис: TWISTOP Пример: print print "* DS1339U TWI TEST *" print DIM A(16) TWIINIT 16,2 TWISTART rem DS1339U Slave address to write TWIWRITE &HDO rem Trickle Charger Register (lOh) TWIWRITE &H10:TWIWRITE &B10100101 TWISTOP 10 A=0:TWISTART:TWIWRITE &HD0:TWIWRITE A:TWISTOP TWISTART:TWIWRITE &HD1 FOR i=0 to 5 A(i) =TWIREAD (1) NEXT
A(6)=TWIREAD (0) :TWISTOP PRINT "Year:"; if (A(5)AND 128)=0 then print "19",-else print "20"; print bed(a(6),2); print " Month:";bcd(a(5) AND 127,2); print " Date:";bcd(a(3),2);" Day:";bcd(a(3),2); print " ";bcd(a(2),2);":";bcd(a(l),2);":";bcd(a(0) GOTO 10 2.10 ДИАГНОСТИКА При выполнении программы могут возникать ситуации, при которых интерпретатор останавливает свою работу и выводит сообщение об ошибке, в котором указывается код и номер строки. Код Значение ошибки ошибки 0 Синтаксическая ошибка 1 Нарушена парность скобок 2 Ожидалось выражение 3 Ожидался знак выражения 4 Ожидалась переменная 5 Таблица меток переполнена 6 Несколько меток с одинаковыми именами 7 Неопределённая метка 8 Ожидался оператор THEN 9 Ожидался оператор ТО 10 Слишком много вложенных циклов 11 Встречен оператор NEXT, не принадлежащий оператору FOR 12 Слишком много вложенных подпрограмм 13 Встретился оператор RETURN, но вызова подпрограммы не было 14 Размер массива не определён 15 Повторное определение размера массива 16 Недостаточно памяти 17 Индекс за пределами массива 18 Указатель вне блока DATA 20 Невозможно назначить ещё один вектор прерывания Существует ряд критических ситуаций, при которых работа не прекращается и эту ситуации можно детектировать при помощи функции LASTERROR. LASTERROR Действие: Возвращает код последней ошибки или критической ситуации Синтаксис: переменная = LASTERROR() Примечание: Код ошибки Значение ошибки 0 Нет ошибок
1 Ошибка таймаута (в функциях PULSEIN и SHIFTIN) 2 Ошибка в работе TWI 3. ИСПОЛЬЗОВАНИЕ ПРЕПРОЦЕССОРА Язык Бейсик является чрезвычайно простым языком, но в то же время, на нём трудно писать большие программы, особенно в реализациях языка, где имена переменных зарезервированы, а длина составляет 1-2 символа, в таких случаях комментарии не сильно помогают. Идеальный случай, когда длина имени переменной такова, что понятен смысл и без комментариев, то есть, когда можно говорить, о "самокомментируемости" объекта языка, сказанное относится и к именам меток. Длинные имена находятся в противоречии с быстродействием интерпретатора и размером памяти программ. Эту проблему может разрешить применение препроцессора, специальной программы-конвертора . В тексте программы помешаются строчки с директивой препроцессора DEFINE, пишется желаемое длинное имя, знак "=", а За ним численное Значение или имя переменной. В тексте программы размещается необходимое количество пояснений, их можно писать с использованием оператора REM и с использованием знака апострофа. Далее, везде, где необходимо, вместо коротких имён и численных значений, можно использовать символьные определения, сделанные ранее при помощи директивы DEFINE. В конечном итоге, текст будет похож на пример , который приведён ниже. ТВС GROUP 2006 SHIFTOUT TEST Опции для тактового сигнала define MSB_FIRST_POSITIVE = 0 'старший бит первый, по положительному фронту MSB_FIRST_NEGATIVE = 1 'старший бит первый, по отрицательному фронту LSB_FIRST_POSITIVE = 2 'младший бит первый, по положительному фронту LSB FIRST NEGATIVE = 3 'младший бит первый, по отрицательному фронту define define define define define define define define define TotalBits SrcData DataPin ClockPin Options = N = A = D = С = В PulseDelay = 100 MainLoop = 10 define CLS PRINT PRINT "* SHIFTOUT TEST *" PRINT input "DATA PIN=",DataPin DEFPIN DataPin AS DOUT:SET DataPin input "CLOCK PIN=",ClockPin Количество бит от 1 до 16 Переменная с исходным словом Номер ножки данных номер ножки синхронизации опция клоков ' определяет длительность тактовых импульсов, ' которая получается равной 2 * PulseDelay ' Значение метки, просто число
DEFPIN ClockPin AS DOUT:CLEAR ClockPin MainLoop input "TOTAL BITS=",TotalBits input "options=",options input "data=",SrcData shiftout SrcData,DataPin,ClockPin,TotalBits,PulseDelay,Options GOTO MainLoop Полученный текст сохраняется под именем, например, shift.bas. Далее, в командной строке набирается: BASPREP.EXE -I shift.bas -О shift.out Примечание. BASPREP.EXE должен находиться в этом же каталоге или быть видимым из текущего расположения. Чтобы он был виден из любого места, самый простой способ - поместить его в директорию С:, например. В результате работы препроцессора, будет получен файл shift.out (содержимое показано ниже), в котором отсутствуют комментарии, а вместо символьных имён подставлены значения, расположенные в правой части определений. CLS PRINT PRINT"* SHIFTOUTTEST *" PRINT INPUT "DATA PIN=",D DEFPIN D AS DOUT:SET D INPUT "CLOCK PIN=",C DEFPIN С AS DOUT:CLEAR С 10 INPUT "TOTAL BITS=",N INPUT "options=",B INPUT "data=",A SHIFTOUT A,D,C,N,100,B GOTO 10 Такой текст займёт меньше места в контроллере Скачать препроцессор можно здесь: ftp://homelab.homelinux.com/pub/arhiv/2008-09-a5.zip
Компьютер САМОУЧИТЕЛЬ ПО ASSEMBLER Если вы создаете систему управления прибора или установки, то вам возможно понадобится знание ассемблера, особенно если будет использоваться материнская плата от морально устаревшего компьютера. Ассемблер позволяет делать максимально короткие программы, а значит можно выбросить жесткий диск и ограничиться одним флоппи для всего или даже ПЗУ. На родном IBM PC-XT/AT в ПЗУ прошивался даже Бэйсик. Там было гнездо для микросхемы ПЗУ, в клонах оно пустовало. Если вы освоите ассемблер для интелловских процессоров , то сможете без труда писать программы и для микроконтроллеров на основе других процессоров.
Введение Микропроцессоры корпорации 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 чаще используются однозадачная текстовая система 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-разрядного приложения в состав программы необходимо включить (в соответствующем месте) описатель use32. Однако следует иметь в виду, что MS-DOS не позволяет пускать 32-разрядные приложения, которые, таким образом, должны быть приложениями Windows. В то же время приложения Windows обычно составляются не на языке ассемблера, а на одном из языков высокого уровня - Паскаль, С или С++, где тип создаваемой программы (16-разрядная или 32-разрядная) определяется настройками компилятора. Поэтому вопросы разработки 32-разрядных приложений на языке ассемблера здесь не рассматриваются. Как известно, система Windows допускает запуск приложений DOS (программ реального режима), организуя для этого так называемый сеанс DOS, в котором программы фактически выполняются в режиме 86-го процессора. Кроме этого, есть возможность загрузки компьютера в режиме эмуляции DOS. Наконец, компьютер можно сконфигурировать так, чтобы он позволял загружать как Windows, так и "чистую" DOS (например, MS-DOS 6.22), без всякой Windows. Каким вариантом загрузки компьютера пользоваться - дело вкуса и привычек читателя. Приводимые примеры в своем большинстве просты, не затрагивают каких-то специальных системных средств и будут работать в любом режиме. Последнее замечание не относится к примеру программы защищенного режима, приводимому в гл. 4, а также к обработчику прерываний от мыши, рассматриваемому в гл. 3. Эти программы следует запускать на "чистой" DOS. ГЛАВА 1. АРХИТЕКТУРА РЕАЛЬНОГО РЕЖИМА Память и процессор Среди устройств и узлов, входящих в состав компьютера, наиболее важными для выполнения любой программы катаются оперативная память и центральный микропроцессор, который мы для краткости будем в дальнейшем называть просто процессором. В оперативной памяти хранится выполняемая программа вместе с принадлежащими ей данными; процессор выполняет вычисления и другие действия, описанные в программе. Программа загружается в память с жесткого или гибкого магнитного диска, где она хранится, операционной системой в ответ ввод с клавиатуры команды запуска программы. Операционная система, загрузив программу, и при необходимости настроив ее для выполнения в той области памяти, куда она попала, сообщает процессору начальный адрес загруженной программы и инициирует процесс ее выполнения . Процессор считывает из памяти первую команду программы, находит в памяти или в своих регистрах данные, необходимые для ее выполнения (если, конечно, команда требует данных) и, выполнив требуемую операцию, возвращает в память
или, возможно, оставляет в регистрах результат своей работы (рис. 1.1). Команды и данные Оперативная память Процессор Результаты операций Рис. 1.1. Взаимодействие оперативной памяти и процессора. Выполнив первую команду, процессор переходит к следующей, и так дальше до конца программы. Завершив программу, процессор не будет знать, что ему дальше делать, поэтому любая программа должна завершаться командами, передающими управление операционной системе компьютера. Оперативная память компьютера представляет собой электронное устройство, состоящее из большого числа двоичных запоминающих элементов, а также схем управления ими. Минимальный объем информации, к которому имеется доступ в памяти, составляет один байт (8 двоичных разрядов, или битов). Все байты оперативной памяти нумеруются, начиная с нуля. Нужные байты отыскиваются в памяти по их номерам, выполняющим функции адресов. Некоторые данные (например, коды символов) требуют для своего хранения одного байта; для других данных этого места на хватает, и под них в памяти выделяется 2, 4, 8 или еще большее число байтов. Обычно пары байтов называют словами, а четверки - двойными словами (рис. 1.2), хотя иногда термином "слово" обозначают любую порцию машинной информации. Байт Номера байтов в слове 1 О Старший Младший байт байт Слово Номера байтоа в двойном слове 3 2 1 0 Старший Младший Двойное байт байт слово Рис. 1.2. Байт, слово и двойное слово. При обсуждении содержимого многобайтового данного приходится ссылаться на составляющие его байты; эти байты условно нумеруются от нуля и располагаются (при их изображении на бумаге) в порядке возрастания номера справа налево, так что слева оказываются байты с большими номерами, а справа - байты с меньшими номерами. Крайний слева байт принято называть старшим, а крайний справа - младшим. Такой порядок расположения байтов связан с привычной для нас формой записи чисел: в многоразрядном числе слева указываются старшие разряды, а справа - младшие. Следующее число, если его написать за предыдущим, опять
начнется со старшего разряда и закончится младшим. Однако в памяти компьютера данные располагаются в более естественном порядке непрерывного возрастания номеров байтов и, таким образом, каждое слово или двойное слово в памяти начинается с его младшего байта и заканчивается старшим (рис. 1.3). Дэнное-слово Данное- двойное слово Данное-байт Относительные номера байтов в каждом данном О 1 0 12 3 0 0 1 2 3 4 5 6 Последовательные номера байтов памяти Рис. 1.3. Нумерация байтов в многобайтовых данных. Строго говоря, в памяти компьютера можно хранить только целые двоичные числа , так как память состоит из двоичных запоминающих элементов. Для записи иных данных, например, символов или дробных чисел, для них предусматриваются правила кодирования, т.е. представления в виде последовательности битов той или длины. Так, действительное число одинарной точности занимает в памяти двойное слово (32 бит) , в котором 23 бит отводятся под мантиссу, 8 бит под порядок и еще один бит под знак числа. Программы, работающие с такого рода данными, должны, естественно, знать правила их записи и руководствоваться ими при обработке и представлении этих данных. Двоичная система счисления, в которой работают все цифровые электронные устройства, неудобна для человека. Для удобства представления двоичного содержимого ячеек памяти или регистров процессора используют иногда восьмеричную, а чаще - шестнадцатеричную системы счисления. Для процессоров Intel используется шестнадцатеричная система. Каждый разряд шестнадцатеричного числа может принимать 16 значений, из которых первые 10 обозначаются обычными десятичными цифрами, а последние 6 - буквами латинского алфавита от А до F, где А обозначает 10, В - И, С - 12, D - 13, Е - 14, a F - 15. В языке ассемблера шестнадцатеричные числа, чтобы отличать их от десятичных, завершаются буквой h (или Н) . Таким образом, 100 - это десятичное число, a 100h - шестнадцатеричное (равное 256). Поскольку одна шестнадцатеричная цифра требует для записи ее в память компьютера четырех двоичных разрядов, то содержимое байта описывается двумя шестнадцатеричными цифрами (от 00h до FFh, или от 0 до 255) , а содержимое слова - четырьмя (от OOOOh до FFFFh, или от 0 до 65535). Помимо ячеек оперативной памяти, для хранения данных используются еще запоминающие ячейки, расположенные в процессоре и называемые регистрами. Достоинство регистров заключается в их высоком быстродействии, гораздо большем, чем у оперативной памяти, а недостаток в том, что их очень мало - всего около десятка . Поэтому регистры используются лишь для кратковременного хранения данных. В режиме МП 86, который мы здесь обсуждаем, все регистры процессора имеют длину 16 разрядов, или 1 слово (в действительности в современных процессорах их длина составляет 32 разряда, но в МП 86 от каждого регистра используется лишь его половина). За каждым регистром закреплено определенное имя (на-
пример, АХ или DS), по которому к нему можно обращаться в программе. Состав и правила использования регистров процессора будут подробно описаны ниже, здесь же мы коснемся только назначения сегментных регистров, с помощью которых осуществляется обращение процессора к ячейкам оперативной памяти. Казалось бы, для передачи процессору адреса какого-либо байта оперативной памяти, достаточно записать в один из регистров процессора его номер. В действительности поступить таким образом в 16-разрядном процессоре нельзя, так как максимальное число (данное или адрес), которое можно записать в 16- разрядный регистр, составляет всего 216 - 1 = 65535, или 64К-1, и мы получим возможность обращения лишь к первым 64 Кбайт памяти. Для того, чтобы с помощью 16-разрядных чисел адресовать любой байт памяти, в МП 86 предусмотрена сегментная адресация памяти, реализуемая с помощью сегментных регистров процессора . Суть сегментной адресации заключается в следующем. Обращение к памяти осуществляется исключительно с помощью сегментов - логических образований, накладываемых на те или иные участки физической памяти. Исполнительный адрес любой ячейки памяти вычисляется процессором путем сложения начального адреса сегмента, в котором располагается эта ячейка, со смещением к ней (в байтах) от начала сегмента (рис. 1.4). Это смещение иногда называют относительным адресом . Сегментный адрес в сетментном регистре дсегд3 №..,,и IЬ бит 1 + 16 бит I ?П бит j ; i_ начало сегмента Б памяти смещение (в одном из регистров или в ячейке памяти ) физический 20-и разрядный адрес адресуемой ячейки Рис. 1.4. Образование физического адреса из сегментного адреса и смещения. Начальный адрес сегмента без четырех младших битов, т.е. деленный на 16, помещается в один из сегментных регистров и называется сегментным адресом. Сам же начальный адрес хранится в специальном внутреннем регистре процессора, называемом теневым регистром. Для каждого сегментного регистра имеется свой теневой регистр; начальный адрес сегмента загружается в него процессором в тот момент, когда программа заносит в соответствующий сегментный регистр новое значение сегментного адреса. Процедура умножения сегментного адреса на 16 (или, что то же самое, на 10п) является принципиальной особенностью реального режима, ограничивающей диапазон адресов, доступных в реальном режиме, величиной 1 Мбайт. Действительно, максимальное значение сегментного адреса составляет FFFFh, или 64К-1, из чего следует, что максимальное значение начального адреса сегмента в памяти равно
FFFFOh, или 1 Мбайт - 16. Если, однако, учесть, что к начальному адресу сегмента можно добавить любое смещение в диапазоне от 0 до FFFFh, то адрес последнего адресуемого байта окажется равен lOFFEFh, что соответствует величине 1 Мбайт + 64 Кбайт - 17. Диапазон адресов, формируемых процессором, называют адресным пространством процессора; как мы видим, в реальном режиме он немного превышает 1 Мбайт. Заметим еще, что для описания адреса в пределах 1 Мбайт требуются 20 двоичных разрядов, или 5 шестнадцатеричных. Процессор 8086 имел как раз 20 адресных линий и не мог, следовательно, выйти за пределы 1 Мбайт; современным 32 - разрядным процессорам, если они работают в реальном режиме, доступно несколько большее (почти на 64 Кбайт) адресное пространство. Если же процессор работает в защищенном режиме (с использованием 32-разрядных регистров), то его адресное пространство увеличивается до 232 = 4 Гбайт. Распределение адресного пространства Не следует думать, что термины "адресное пространство" и "оперативная память" эквивалентны. Адресное пространство - это просто набор адресов, которые умеет формировать процессор; совсем не обязательно все эти адреса отвечают реально существующим ячейкам памяти. В зависимости от модификации персонального компьютера и состава его периферийного оборудования, распределение адресного пространства может несколько различаться. Тем не менее, размещение основных компонентов системы довольно строго унифицировано. Типичная схема использования адресного пространства компьютера приведена на рис. 1.5. Значения адресов на этом рисунке, как и повсюду дальше в книге, даны в шестнадца- теричной системе счисления. Объем адресн пространства 1 Кбайт 256 Кбайт ого 64 Кбайт 32 Кбайт 32 Кбайт 64 Кбайт 128 Кбайт 64 Кбайт 64 Кбайт До 4 Гбайт Векторы прерываний Область даннык 8IOS Операционная система MS-DOS Свободная память для загружаемых прикладных н Системных лрофзыы Графический видеобуфер Свободные адреса Текстовый видеобуфер ПЗУ-расширения 8IOS Свободные адреса ПЗУ BIOS НМА XMS Физические адреса 00000h 00400h 00500h Обычкэя память (640 Кбайт) < Старшая память (384 Кбайт) Расширенная память J Сегментные адреса 0000h 0040 h 0050 h Рис. 1.5. Типичное распределение адресного пространства.
Первые 640 Кбайт адресного пространства с адресами от OOOOOh до 9FFFF11 (и, соответственно, с сегментными адресами от OOOOh до 9FFFh) отводятся под основную оперативную память, которую еще называют стандартной (conventional). Начальный килобайт оперативной памяти занят векторами прерываний, которые обеспечивают работу системы прерываний компьютера, и включает 256 векторов по 4 байта каждый. Вслед за векторами прерываний располагается так называемая область данных BIOS, которая занимает всего 256 байт, начиная с сегментного адреса 40h. Сама BIOS (от Basic In-Out System, базовая система ввода-вывода) является частью операционной системы, хранящейся в постоянном запоминающем устройстве. Это запоминающее устройство (ПЗУ BIOS) располагается на системной плате компьютера и является, таким образом, примером встроенного, или "зашитого" программного обеспечения. В функции BIOS входит тестирование компьютера при его включении, загрузка в оперативную память собственно операционной системы MS-DOS, хранящейся на магнитных дисках, а также управление штатной аппаратурой компьютера - клавиатурой, экраном, дисками и прочим. В области данных BIOS хранятся разнообразные данные, используемые программами BIOS в своей работе. Так, здесь размещаются: • входной буфер клавиатуры, куда поступают коды нажимаемых пользователем клавиш; • адреса видеоадаптера, а также последовательных и параллельных портов; • данные, характеризующие текущее состояние видеосистемы (форма курсора и его текущее положение на экране, видеорежим, используемая видеостраница и проч.) ; • ячейки для отсчета текущего времени и т.д. Область данных BIOS заполняется информацией в процессе начальной загрузки компьютера, а затем динамически модифицируется системой по мере необходимости. Многие прикладные программы, особенно, написанные на языке ассемблера, обращаются к этой области с целью чтения или модификации содержащихся в них данных. С некоторыми ячейками области данных BIOS мы столкнемся при рассмотрении примеров конкретных программ. В области памяти, начиная с адреса 500h, располагается собственно операционная система MS-DOS, которая обычно занимает несколько десятков Кбайт. Программы MS-DOS, как и другие системные составляющие (векторы прерываний, область данных BIOS) записываются в память автоматически в процессе начальной загрузки компьютера. Вся оставшаяся память до границы 640 Кбайт свободна для загрузки любых системных или прикладных программ. Как правило, в начале сеанса в память загружают резидентные программы (русификатор, антивирусные программы). При наличии резидентных программ объем свободной памяти уменьшается. Оставшиеся 384 Кбайт адресного пространства между границами 640 Кбайт и 1 Мбайт, называемые старшей, или верхней (upper) памятью, первоначально были предназначены для размещения постоянных запоминающих устройств (ПЗУ). Практически под ПЗУ занята только небольшая часть адресов, а остальные используются в других целях. Часть адресного пространства старшей памяти отводится для адресации к графическому и текстовому видеобуферам графического адаптера. Графический адаптер представляет собой отдельную микросхему или даже отдельную плату, в со-
став которой входит собственное запоминающее устройство (видеопамять). Это запоминающее устройство не имеет никакого отношения к оперативной памяти компьютера, однако, его схемы управления настроены на диапазоны адресов AOOOOh...AFFFFh и B8000h...BFFFFh, входящих в общее с памятью адресное пространство процессора. Поэтому любая программа может обратиться по этим адресам и, например, записать данные в видеобуфер, что приведет к появлению на экране некоторого изображения. Бели видеосистема находится в текстовом режиме, а запись осуществляется по адресам текстового видеобуфера, на экране появятся изображения тех или иных символов (букв, цифр, различных знаков). Если же перевести видеосистему в графический режим, и записывать данные в графический видеобуфер, то на экране появятся отдельные точки или линии. Можно также прочитать текущее содержимое ячеек видеобуфера. В самом конце адресного пространства, в области адресов FOOOOh...FFFFFh, располагается ПЗУ BIOS - постоянное запоминающее устройство, о котором уже говорилось выше. Часть адресного пространства, начиная с адреса COOOOh, отводится еще под одно ПЗУ - так называемое ПЗУ расширений BIOS для обслуживания графических адаптеров и дисков. В состав компьютера, наряду со стандартной памятью (640 Кбайт), входит еще расширенная (extended) память, максимальный объем которой может доходить до 4 Гбайт. Эта память располагается за пределами первого мегабайта адресного пространства и начинается с адреса lOOOOOh. Реально на машине может быть установлен не полный объем расширенной памяти, а лишь несколько десятков Мбайт или даже меньше. Поскольку функционирование расширенной памяти подчиняется "спецификации расширенной памяти" (Extended Memory Specification, сокращенно XMS), то и саму память часто называют XMS-памятью. Как уже отмечалось выше, доступ к расширенной памяти осуществляется в защищенном режиме, поэтому для MS-DOS, работающей только в реальном режиме, расширенная память недоступна. Однако в современные версии MS-DOS включается драйвер HIMEM.SYS, поддерживающий расширенную память, т.е. позволяющий ее использовать, хотя и ограниченным образом. Конкретно в расширенной памяти можно разместить электронные диски (с помощью драйвера RAMDRIVE.SYS) или дисковые кэш-буферы (с помощью драйвера SMARTDRV.SYS). Первые 64 Кбайт расширенной памяти, точнее, 64 Кбайт - 16 байт с адресами от lOOOOOh до lOFFEFh, носят специальное название область старшей памяти (High MemoryArea, НМА). Эта область замечательна тем, что хотя она находится за пределами первого мегабайта, к ней можно обратиться в реальном режиме работы микропроцессора, если определить сегмент, начинающийся в самом конце мегабайтного адресного пространства, с сегментного адреса FFFFh, и разрешить использование адресной линии А20. Первые 16 байт этого сегмента заняты ПЗУ, область же со смещениями OOlOh...FFFFh можно в принципе использовать под программы и данные. MS-DOS позволяет загружать в НМЛ (директивой файла CONFIG.SYS DOS=HIGH) значительную часть самой себя, в результате чего занятая системой область стандартной памяти существенно уменьшается. Старшую память обслуживает тот же драйвер HIMEM.SYS, поэтому загрузка DOS в НМЛ возможна, только если установлен драйвер HIMEM.SYS. Как видно из приведенного выше рисунка, часть адресного пространства верх-
ней памяти, не занятая расширениями BIOS и видеобуферами, оказывается свободной. Эти свободные участки можно использовать для адресации к расширенной памяти (конечно, не ко всей, а лишь к той ее части, объем которой совпадает с общим объемом свободных адресов старшей памяти). Отображение расширенной памяти на свободные адреса старшей памяти выполняет драйвер EMM386.EXE, а сами участки старшей памяти, "заполненные" расширенной, называются блоками верхней памяти (Upper Memory Blocks, UMB). MS-DOS позволяет загружать в UMB устанавливаемые драйверы устройств, а также резидентные программы. Загрузка системных программ в UMB освобождает от них стандартную память, увеличивая ее транзитную область. Загрузка в UMB драйверов осуществляется директивой файла CONFIG.SYS DEVICEHIGH (вместо директивы DEVICE), а Загрузка резидентных программ - командой DOS LOADHIGH. На оптимально сконфигурированном компьютере системными компонентами заняты лишь около 20...25 Кбайт основной памяти, а вся остальная память в объеме около 620 Кбайт может использоваться для загрузки прикладных программ. Регистры процессора Как уже отмечалось выше, в современных микропроцессорах типа, например, Pentium, можно выделить часть (мы назвали ее МП 86) , предназначенную для использования в реальном режиме и практически соответствующую процессору 8086. Ниже, используя термин "процессор", мы будем иметь в виду именно МП 86. Процессор содержит двенадцать 16-разрядных программно-адресуемых регистров, которые принято объединять в три группы: регистры данных, регистры-указатели и сегментные регистры. Регистры данных и регистры-указатели часто объединяют под общим названием "регистры общего назначения". Кроме того, в состав процессора входят указатель команд и регистр флагов (рис. 1.6). Регистры данных Регистры указатели АН AL Аккумулятор Базовый регистр SI Индекс источника Индекс приемника ВН BL DI СН CL Счетчик BP Указатель базы Указатель стека DH DL Регистр данных SP Сегментные регистры CS DS ES SS Регистр сегмента команд Регистр сегмента данных Регистр дополнительного сегмента данных Регистр сегмента стйкй Прочие регистры Указатель команд Регистр флагов FLAGS Рис. 1.6. Регистры процессора. В группу регистров данных включаются четыре регистра АХ, ВХ, СХ и DX. Программист может использовать их по своему усмотрению для временного хранения любых объектов (данных или адресов) и выполнения над ними требуемых операций. При этом регистры допускают независимое обращение к старшим (АН, ВН, СН и DH) и младшим (AL, BL, CL и DL) половинам. Так, команда
mov BL, AH пересылает старший байт регистра АХ в младший байт регистра ВХ, не затрагивая при этом вторых байтов этих регистров. Заметьте, что сначала указывается операнд-приемник, а после запятой - операнд-источник, т.е. команда как бы выполняется справа налево. Во многих случаях регистры данных вполне эквивалентны, однако предпочтительнее пользоваться регистром АХ, поскольку многие команды занимают в памяти меньше места и выполняются быстрее, если их операндом является регистр АХ (или его половина AL) . С другой стороны, ряд команд использует определенные регистры неявным образом. Так, все команды циклов используют регистр СХ в качестве счетчика числа повторений; в командах умножения и деления регистры АХ и DX выступают в качестве неявных операндов; операции ввода-вывода можно осуществлять только через регистры АХ или AL и т.д. Индексные регистры SI и DI так же, как и регистры данных, могут использоваться произвольным образом. Однако их основное назначение - хранить индексы, или смещения относительно некоторой базы (т.е. начала массива) при выборке операндов из памяти. Адрес базы при этом может находиться в базовых регистрах ВХ или BP. Специально предусмотренные команды работы со строками используют регистры SI и DI в качестве неявных указателей в обрабатываемых строках. Регистр BP служит указателем базы при работе с данными в стековых структурах, но может использоваться и произвольным образом в большинстве арифметических и логических операций. Последний из группы регистров-указателей, указатель стека SP, стоит особняком от других в том отношении, что используется исключительно как указатель вершины стека - специальной структуры, которая будет рассмотрена ниже. Регистры SI, DI, BP и SP, в отличие от регистров данных, не допускают побайтовую адресацию. Четыре сегментных регистра CS, DS, ES и SS являются важнейшим элементом архитектуры процессора, обеспечивая, как уже отмечалось выше, адресацию 20- разрядного адресного пространства с помощью 16-разрядных операндов. Подробнее о них будет рассказано в следующем разделе. Указатель команд IP "следит" за ходом выполнения программы, указывая в каждый момент относительный адрес команды, следующей за исполняемой. Регистр IP программно недоступен (IP - это просто его сокращенное название, а не мнемоническое обозначение, используемое в языке программирования); наращивание адреса в нем выполняет микропроцессор, учитывая при этом длину текущей команды. Команды переходов, прерываний, вызова подпрограмм и возврата из них изменяют содержимое IP, осуществляя тем самым переходы в требуемые точки программы. В следующем разделе мы еще вернемся к роли регистра IP в выполнении программы. Регистр флагов (его часто называют FLAGS), эквивалентный регистру состояния процессора других вычислительных систем, содержит информацию о текущем состоянии процессора (рис. 1.7). Он включает 6 флагов состояния и 3 бита управления состоянием процессора, которые, впрочем, тоже называются флагами.
13 I ] OF 10 09 DF IF БИТЫ 08 07 TF SF Jb U6 ZF 04 AF U3 03 FF UU CF Рис. 1.7. Регистр флагов Флаги состояния заново устанавливаются процессором после выполнения каждой очередной команды, и по ним можно в какой-то степени судить о результате выполнения этой команды (например, не равен ли ее результат, нулю) . Флаги управления позволяют изменять некоторые условия работы процессора, например, разрешать или запрещать аппаратные прерывания. Рассмотрим сначала флаги состояния . Флаг переноса CF (Carry Flag) индицирует перенос или заем при выполнении арифметических операций. Переносом называется ситуация, когда в результате выполнения правильной, в общем, команды образуется число, содержащее более 16 двоичных разрядов и, следовательно, не помещающееся в регистр или ячейку памяти. Пусть, например, в регистре АХ содержится число 60000, а в регистре ВХ - 40000. При выполнении команды сложения add АХ,ВХ в регистре-приемнике результата, которым в данном случае будет служить регистр АХ, должно быть записано число 100000, которое, разумеется, там поместиться не может. В этом случае и устанавливается флаг CF, по состоянию которого можно установить, что произошел перенос и, следовательно, содержимое АХ (которое в данном случае будет равно 100000 - 65536 = 344 64) не является правильным результатом. Необходимо подчеркнуть, что ситуация переноса, как и вообще любая ошибка, возникшая по ходу выполнения программы, не приводит ни к каким последствиям, кроме установки соответствующего флага. Процессор, установив флаг, считает свою миссию выполненной и переходит к выполнению следующей команды. Если перенос в данном случае действительно является индикатором ошибки, программа должна после выполнения команды сложения проанализировать состояние флага CF, и при установленном флаге перейти на фрагмент обработки этой ошибки. Такой анализ выполняется с помощью команд условного перехода, в данном случае с помощью команды jc (jump if carry, переход по переносу): add АХ.ВХ jc error ;В случае переноса переход на метку error /Нормальное продолжение Сказанное справедливо по отношению ко всем ошибочным ситуациям, возникающим в программе, - программа сама обязана отлавливать все ошибки и выполнять предусмотренные для таких случаев действия. Единственное, что может сделать процессор - это сообщить программе о подозрительном результате установкой того или иного флага. Флаг паритета PF (Parity Flag) устанавливается в 1, если результат операции
содержит четное число двоичных единиц, и сбрасывается в 0, если число двоичных единиц нечетно. Этот флаг можно использовать, например, для поиска ошибок при передаче данных и при выполнении диагностических тестов. Флаг вспомогательного переноса AF (Auxiliary Flag) используется в операциях над двоично-десятичными числами. Он индицирует перенос или заем из старшей тетрады (бита 4). Двоично-десятичный формат подразумевает запись в каждой половинке байта десятичной цифры в виде ее двоичного эквивалента, что позволяет хранить в байте двухразрядное десятичное число в диапазоне от 0 до 99. Двоично-десятичные числа используются, в частности, для обмена данными с измерительными приборами. Для их обработки в процессоре предусмотрен целый ряд специфических команд, при использовании которых приходится анализировать состояние флага вспомогательного переноса. Флаг нуля ZF (Zero Flag) устанавливается в 1, если результат операции равен 0. Например, флаг ZF установится, если из 5 вычесть 5 или к 10 прибавить -10. Флаг знака SF (Sign Rag) показывает знак результата операции, устанавливаясь в 1 при отрицательном результате. Как будет показано в следующей главе, процессор различает числа без знака, т.е. существенно положительные, и числа со знаком, которые могут быть как положительными, так и отрицательными. Признаком отрицательности числа служит установленный старший бит этого числа (бит 15 для слов или бит 7 для байтов) . Флаг SF устанавливается, если в результате какой-либо операции сформировано число с установленным старшим битом, например, SOOOh или FFFFh. Флаг переполнения OF (Overflow Rag) фиксирует переполнение, т.е. выход результата за пределы допустимого диапазона значений для чисел со знаком. В Знаковом представлении числа от OOOOh до 7FFFh считаются положительными, а числа от 8000h до FFFFh, т.е. числа с установленным старшим битом - отрицательными. Флаг OF устанавливается, если, например, при сложении двух положительных чисел получился результат, превышающий 7FFFh (потому что, начиная с 8000h, идут уже отрицательные числа), или при вычитании из отрицательного числа получился результат, меньший 8000h (потому что такие числа считаются положительными). Позже этот вопрос будет рассмотрен более детально. Перейдем теперь к управляющим флагам, которых в регистре флагов реального режима всего три. Управляющий флаг трассировки (ловушки) TF (Trace Rag) используется для осуществления пошагового выполнения программы. Если TF=1, то после выполнения каждой команды процессор реализует процедуру прерывания через вектор с номером 1, расположенный по физическому адресу 04. Этот флаг активно используется в программах отладчиков, которые должны допускать выполнение отлаживаемой программы по шагам или с точками останова. Управляющий флаг разрешения прерываний IF (Interrupt Rag) разрешает (если равен 1) или запрещает (если равен 0) процессору реагировать на прерывания от внешних устройств. Тем самым создается возможность выполнения особо ответственных фрагментов программ без каких-либо помех. Управляющий флаг направления DF (Direction Rag) используется командами обработки строк. Если DF=0, строка обрабатывается в прямом направлении, от меньших адресов к большим; если DF=1, обработка строки идет в обратном на-
правлении. Примеры использования этого флага будут приведены при рассмотрении соответствующих команд процессора. Для установки и сброса управляющих флагов предусмотрены особые команды, например sti (set interrupt, установить прерывания) или cli (clear interrupt, сбросить прерывания). Сегментная структура программ Как было показано выше, обращение к памяти осуществляется исключительно посредством сегментов - логических образований, накладываемых на любые участки физического адресного пространства. Начальный адрес сегмента, деленный на 16, т.е. без младшей шестнадцатеричной цифры, заносится в один из сегментных регистров; после этого мы получаем доступ к участку памяти, начинающегося с заданного сегментного адреса. Каким образом понятие сегментов памяти отражается на структуре программы? Следует заметить, что структура программы определяется, с одной стороны, архитектурой процессора (если обращение к памяти возможно только с помощью сегментов, то и программа, видимо, должна состоять из сегментов), а с другой - особенностями той операционной системы, под управлением которой эта программа будет выполняться. Наконец, на структуру программы влияют также и правила работы выбранного транслятора - разные трансляторы предъявляют несколько различающиеся требования к исходному тексту программы. При подготовке этой книги для трансляции и отладки примеров программ использовался пакет TASM 5.0 корпорации Borland International; он удобен, в частности, наличием наглядного многооконного отладчика. Вопрос этот, однако, не принципиален, и читатель может для отладки примеров, приведенных в книге, воспользоваться любым ассемблером, ознакомившись предварительно с его описанием. В настоящем разделе мы на простом примере рассмотрим особенности сегментной адресации и роль регистров процессора в выполнении прикладной программы. Однако для того, чтобы программа была работоспособна, нам придется включить в нее ряд элементов, не имеющих прямого отношения к рассматриваемым вопросам, но необходимых для ее правильного функционирования. К таким элементам, в частности, относится вызов функций DOS. Приведя полный текст программы, мы дадим краткие пояснения. Пример 1-1. Простая программа с тремя сегментами ;Укажем соответствие сегментных регистров сегментам assume CS:code,DS:data ;Опишем сегмент команд code segment ;Откроем сегмент команд begin: mov АХ,data ;Настроим DS mov DS,AX ;на сегмент данных; ;Выведем на экран строку текста mov AH,09h ;Функция DOS вывода на экран mov DX,offset msg ;Адрес выводимой строки int 2lh ;Вызов DOS ;Завершим программу mov АХ,4СОOh ;Функция DOS завершения программы int 21h ;Вызов DOS
code ends /Опишем сегмент данных data segment msg db "Программа работает!$' data ends /Опишем сегмент стека stk segment stack db 256 dup (?) stk ends end begin /Закроем сегмент команд /Откроем сегмент данных / Выводимая строка /Закроем сегмент данных /Откроем сегмент стека /Отводим под стек 256 байт /Закроем сегмент стека /Конец текста с точкой входа Следует заметить, что при вводе исходного текста программы с клавиатуры можно использовать как прописные, так и строчные буквы/ транслятор воспринимает, например, строки MOV АХ,DATA и mov ах,data одинаково. Однако с помощью соответствующих ключей можно заставить транслятор различать прописные и строчные буквы в отдельных элементах предложений. В настоящей книге в текстах программ и при описании операторов языка в основном используются строчные буквы, за исключением обозначений регистров, которые для наглядности выделены прописными буквами. Предложения языка ассемблера могут содержать комментарии, которые отделяются от предложения языка знаком точки с запятой (/). При необходимости комментарий может занимать целую строку (тоже, естественно, начинающуюся со знака "/"). Поскольку в языке ассемблера нет знака завершения комментария, комментарий нельзя вставлять внутрь предложения языка, как это допустимо делать во многих языках высокого уровня. Каждое предложение языка ассемблера, даже самое короткое, должно занимать отдельную строку текста. В программе 1-1 описаны три сегмента: сегмент команд с именем code, сегмент данных с именем data и сегмент стека с именем stk. Описание каждого сегмента начинается с ключевого слова segment, предваряемого некоторым именем, и заканчивается ключевым словом end, перед которым указывается то же имя, чтобы транслятор знал, какой именно сегмент мы хотим закончить. Имена сегментов выбираются вполне произвольно. Текст программы заканчивается директивой ассемблера end, завершающей трансляцию. В качества операнда этой директивы указывается точка входа в программу/ в нашем случае это метка begin. Порядок описания сегментов в программе, как правило, не имеет значения. Часто программу начинают с сегмента данных, это несколько облегчает чтение программы, и в некоторых случаях устраняет возможные неоднозначности в интерпретации команд, ссылающиеся на данные, которые еще не описаны. Мы в начале программы расположили сегмент команд, за ним - сегмент данных и в конце - сегмент стека/ такой порядок предоставляет некоторые удобства при отладке программы. Важно только понимать, что в оперативную память компьютера сегменты попадут в том же порядке, в каком они описаны в программе (если специальными средствами ассемблера не задать иной порядок загрузки сегментов в память) . Сегменты вводятся в программу с помощью директив ассемблера segment и ends. Что такое директива ассемблера? В тексте программы встречаются ключевые слова двух типов: команды процессора (mov, int) и директивы транслятора (в данном случае термины "транслятор" и "ассемблер" являются синонимами, обозначая программу, преобразующую исходный текст, написанный на языке ассемблера, в коды, которые будут при выполнении программы восприниматься процессором). К дирек-
тивам ассемблера относятся обозначения начала и конца сегментов segment и ends; ключевые слова, описывающие тип используемых данных (db, dup); специальные описатели сегментов вроде stack и т. д. Директивы служат для передачи транслятору служебной информации, которой он пользуется в процессе трансляции программы. Однако в состав выполнимой программы, состоящей из машинных кодов, эти строки не попадут, так как процессору, выполняющему программу, они не нужны. Другими словами, операторы типа segment и ends не транслируются в машинные коды, а используются лишь самим ассемблером на этапе трансляции программы. С этим вопросом мы еще столкнемся при рассмотрении листингов программ. Еще одна директива ассемблера используется в первом предложении программы: assume CS:code,DS:data Здесь устанавливается соответствие сегмента code сегментному регистру CS и сегмента data сегментному регистру DS. Первое объявление говорит о том, что сегмент code является сегментом команд, и встречающиеся в этом сегменте метки принадлежат именно этому сегменту, что помогает ассемблеру правильно транслировать команды переходов. В нашей программе меток нет, и эту часть предложения можно было бы опустить, однако в более сложных программах она необходима (при использовании транслятора MA.SM эта часть объявления необходима в любой, даже самой простой программе). Второе объявление помогает транслятору правильно обрабатывать предложения, в которых производится обращение к полям данных сегмента data. Выше уже отмечалось , что для обращения к памяти процессору необходимо иметь две составляющие адреса: сегментный адрес и смещение. Сегментный адрес всегда находится в сегментном регистре. Однако в процессоре два сегментных регистра данных, DS и ES, и для обращения к памяти можно использовать любой из них. Разумеется, процессор при выполнении команды должен знать, из какого именно регистра он должен извлечь сегментный адрес, поэтому команды обращения к памяти через регистры DS или ES кодируются по-разному. Объявляя соответствие сегмента data регистру DS, мы предлагаем транслятору использовать вариант кодирования через регистр DS. Однако отсюда совсем не следует, что к моменту выполнения команды с обращением к памяти в регистре DS будет содержаться сегментный адрес требуемого сегмента. Более того, можно гарантировать, что нужного адреса в сегментном регистре не будет. Директива assume влияет только на кодирование команд, но отнюдь не на содержимое сегментных регистров. Поэтому практически любая программа должна начинаться с предложений, в которых в сегментный регистр, используемый для адресации к сегменту данных (как правило, это регистр DS) заносится сегментный адрес этого сегмента. Так сделано и в нашем примере с помощью двух команд mov АХ,data ;Настроим DS mov DS,AX ;на сегмент данных с которых начинается наша программа. Сначала значение имени data (т.е. адрес сегмента data) загружается командой mov в регистр общего назначения процессора АХ, а затем из регистра АХ переносится в регистр DS. Такая двухступенчатая операция нужна потому, что процессор в силу некоторых особенностей своей архитектуры не может выполнить команду непосредственной загрузки адреса
в сегментный регистр. Приходится пользоваться регистром АХ в качестве "перевалочного пункта". Поместив в регистр DS сегментный адрес сегмента данных, мы получили возможность обращаться к полям этого сегмента. Поскольку в программе может быть несколько сегментов данных, операционная система не может самостоятельно определить требуемое значение DS, и инициализировать его приходится "вручную". Назначением программы 1-1 предполагается вывод на экран текстовой строки "Программа работает!", описанной в сегменте данных. Следующие предложения программы как раз и выполняют эту операцию. Делается это не непосредственно, а путем обращения к служебным программам операционной системы MS-DOS, которую мы для краткости будем в дальнейшем называть просто DOS. Дело в том, что в составе команд процессора и, соответственно, операторов языка ассемблера нет команд вывода данных на экран (как и команд ввода с клавиатуры, записи в файл на диске и т.д.). Вывод даже одного символа на экран в действительности представляет собой довольно сложную операцию, для выполнения которой требуется длинная последовательность команд процессора. Конечно, эту последовательность команд можно было бы включить в нашу программу, однако гораздо проще обратиться за помощью к операционной системе. В состав DOS входит большое количество программ, осуществляющих стандартные и часто требуемые функции - вывод на экран и ввод с клавиатуры, запись в файл и чтение из файла, чтение или установка текущего времени, выделение или освобождение памяти и многие другие. Для того, чтобы обратиться к DOS, надо загрузить в регистр общего назначения АН номер требуемой функции, в другие регистры - исходные данные для выполнения этой функции, после чего выполнить команду int 21h (int - от interrupt, прерывание), которая передаст управление DOS. Вывод на экран строки текста можно осуществить функцией 09п, которая требует, чтобы в регистрах DS:DX содержался полный адрес выводимой строки. Регистр DS мы уже инициализировали, осталось поместить в регистр DX относительный адрес строки, который ассоциируется с именем поля данных msg. Длину выводимой строки указывать нет необходимости, так как функция 09h DOS выводит на экран строку от указанного адреса до символа доллара, который мы предусмотрительно включили в выводимую строку. Заполнив все требуемые для конкретной функции регистры, можно выполнить команду int 2lh, которая осуществит вызов DOS. Как завершить выполняемую программу? В действительности завершение программы - это довольно сложная последовательность операций, в которую входит, в частности, освобождение памяти, занятой завершившейся программой, а также вызов той системной программы (конкретно - командного процессора C0MMAND.COM), которая выведет на экран запрос DOS, и будет ожидать ввода следующих команд оператора. Все эти действия выполняет функция DOS с номером 4Ch. Эта функция предполагает, что в регистре AL находится код завершения нашей программы, который она передаст DOS. Если программа завершилась успешно, код завершения должен быть равен 0, поэтому мы в одном предложении mov AX,4C00h загружаем в АН 4Ch, а в AL - 0, и вызываем DOS уже знакомой нам командой int 21h. Для того, чтобы выполнить пробный прогон приведенной программы, ее необходимо сначала оттранслировать и скомпоновать. Пусть исходный текст программы хранится в файле с именем P.ASM. Трансляция осуществляется вызовом ассемблера TASM.EXE с помощью следующей команды DOS: tasm /z/zi/п р/р,р
Ключ /z разрешает вывод на экран строк исходного текста программы, в которых ассемблер обнаружил ошибки (без этого ключа поиск ошибок пришлось бы проводить по листингу трансляции). Ключ /zi управляет включением в объектный файл информации, не требуемой при выполнении программы, но используемой отладчиком. Ключ /п подавляет вывод в листинг перечня символических обозначений в программе, от чего несколько уменьшается информативность листинга, но сокращается его размер. Стоящие далее параметры определяют имена файлов: исходного (P.ASM), объектного (P.OBJ) и листинга (P.LST). При желании можно в строке вызова транслятора указать полные имена файлов с их расширениями, однако необходимости в этом нет, так как по умолчанию транслятор использует именно указанные выше расширения . Строка вызова компоновщика имеет следующий вид: tlink /х/v р,р Ключ /х подавляет образование листинга компоновки, который обычно не нужен. Ключ /v передает в загрузочный файл информацию, используемую отладчиком. Стоящие далее параметры обозначают имена модулей: объектного (P.OBJ) и загрузочного (Р.ЕХЕ). Поскольку при изучении этой книги вам придется написать и отладить большое количество программ, целесообразно создать командный файл (с именем, например, А. ВАТ), автоматизирующий выполнение однотипных операций трансляции и компоновки. Текст командного файла в простейшем варианте может быть таким (в предположении, что путь к каталогу с пакетом TASM был указан в параметре команды PATH) : tasm /z/zi/п р,р,р tlink /х/v р,р Запуск подготовленной программы Р.ЕХЕ осуществляется командой р.ехе или просто р. При загрузке программы сегменты размещаются в памяти, как показано на рис. 1.9. Образ программы в памяти начинается с сегмента префикса программы (Program Segment Prefics, PSP), образуемого и заполняемого системой. PSP всегда имеет размер 256 байт; он содержит таблицы и поля данных, используемые системой в процессе выполнения программы. Вслед за PSP располагаются сегменты программы в том порядке, как они объявлены в программе. Сегментные регистры автоматически инициализируются следующим образом: ES и DS указывают на начало PSP (что дает возможность, сохранив их содержимое, обращаться затем в программе к PSP), CS - на начало сегмента команд, a SS - на начало сегмента стека. В указатель команд IP загружается относительный адрес точки входа в программу (из операнда директивы end), а в указатель стека SP - величина, равная объявлен-
ному размеру стека, в результате чего указатель стека указывает на конец стека (точнее, на первое слово за его пределами). DS.ES Перфикс программы (PSP) 25В Кбайт Сегмент команд IP Сегмент данных SS Сегмент стека . SP Рис. 1.9. Образ программы в памяти. Таким образом, после загрузки программы в память адресуемыми оказываются все сегменты, кроме сегмента данных. Инициализация регистра DS в первых строках программы позволяет сделать адресуемым и этот сегмент. Рисунок 1.9 еще раз подчеркивает важнейшую особенность архитектуры процессоров Intel: адрес любой ячейки памяти состоит из двух слов, одно из которых определяет расположение в памяти соответствующего сегмента, а другое - смещение в пределах этого сегмента. Смысл сегментной части адреса, хранящейся всегда в одном из сегментных регистров, в реальном и защищенном режиме различен; в МП 86 сегментная часть адреса, после умножения ее на 16, определяет физический адрес начала сегмента в памяти. Отсюда следует, что сегмент всегда начинается с адреса, кратного 16, т.е. на границе 16-байтового блока памяти (параграфа). Сегментный адрес можно рассматривать , как номер параграфа, с которого начинается данный сегмент. Размер сегмента определяется объемом содержащихся в нем данных, но никогда не может превышать величину 64 Кбайт, что определяется максимально возможной величиной смещения. Сегментный адрес сегмента команд хранится в регистре CS, а смещение к адресуемому байту - в указателе команд IP. Как уже отмечалось, после загрузки программы в IP заносится смещение первой команды программы; процессор, считав ее из памяти, увеличивает содержимое IP точно на длину этой команды (команды процессоров Intel могут иметь длину от 1 до 6 байт), в результате чего IP указывает на вторую команду программы. Выполнив первую команду, процессор считывает из памяти вторую, опять увеличивая значение IP. В результате в IP всегда находится смещение очередной команды, команды, следующей за выполняемой. Описанный алгоритм нарушается только при выполнении команд переходов , вызовов подпрограмм и обслуживания прерываний. Сегментный адрес сегмента данных обычно хранится в регистре DS, а смещение может находится в одном из регистров общего назначения, например, в ВХ или SI. Однако в МП 86 два сегментных регистра данных - DS и ES. Дополнительный сегментный регистр ES часто используется для обращения к полям данных, не входящим в программу, например к видеобуферу или системным ячейкам. Однако
при необходимости его можно настроить и на один из сегментов программы. В частности, если программа работает с большим объемом данных, для них можно предусмотреть два сегмента и обращаться к одному из них через регистр DS, а к другому - через ES. Стек Стеком называют область программы для временного хранения произвольных данных. Разумеется, данные можно сохранять и в сегменте данных, однако в этом случае для каждого сохраняемого на время данного надо заводить отдельную именованную ячейку памяти, что увеличивает размер программы и количество используемых имен. Удобство стека заключается в том, что его область используется многократно, причем сохранение в стеке данных и выборка их оттуда выполняется с помощью эффективных команд push и pop без указания каких-либо имен. Стек традиционно используется, например, для сохранения содержимого регистров, используемых программой, перед вызовом подпрограммы, которая, в свою очередь, будет использовать регистры процессора "в своих личных целях". Исходное содержимое регистров извлекается из стека после возврата из подпрограммы. Другой распространенный прием - передача подпрограмме требуемых ею параметров через стек. Подпрограмма, зная, в каком порядке помещены в стек параметры, может забрать их оттуда и использовать при своем выполнении. Отличительной особенностью стека является своеобразный порядок выборки содержащихся в нем данных: в любой момент времени в стеке доступен только верхний элемент, т.е. элемент, загруженный в стек последним. Выгрузка из стека верхнего элемента делает доступным следующий элемент. Элементы стека располагаются в области памяти, отведенной под стек, начиная со дна стека (т.е. с его максимального адреса) по последовательно уменьшающимся адресам. Адрес верхнего, доступного элемента хранится в регистре- указателе стека SP. Как и любая другая область памяти программы, стек должен входить в какой-то сегмент или образовывать отдельный сегмент. В любом случае сегментный адрес этого сегмента помещается в сегментный регистр стека SS. Таким образом, пара регистров SS:SP описывают адрес доступной ячейки стека: в SS хранится сегментный адрес стека, а в SP - смещение последнего сохраненного в стеке данного (рис. 1.10, а) . Обратите внимание на то, что в исходном состоянии указатель стека SP указывает на ячейку, лежащую под дном стека и не входящую в него. О о ■::-.р Рис. 1.10. Организация стека: а - исходное состояние, б - после загрузки одного элемента (в данном примере - содержимого регистра АХ) , в - после загрузки второго элемента (содержимого регистра DS) , г - после выгрузки одного элемента, д - после выгрузки двух элементов и возврата в исходное состояние.
Загрузка в стек осуществляется специальной командой работы со стеком push (протолкнуть). Эта команда сначала уменьшает на 2 содержимое указателя стека, а затем помещает операнд по адресу в SP. Если, например, мы хотим временно сохранить в стеке содержимое регистра АХ, следует выполнить команду push АХ Стек переходит в состояние, показанное на рис. 1.10, б. Видно, что указатель стека смещается на два байта вверх (в сторону меньших адресов) и по этому адресу записывается указанный в команде проталкивания операнд. Следующая команда загрузки в стек, например, push DS переведет стек в состояние, показанное на рис. 1.10, в. В стеке будут теперь храниться два элемента, причем доступным будет только верхний, на который указывает указатель стека SP. Если спустя какое-то время нам понадобилось восстановить исходное содержимое сохраненных в стеке регистров, мы должны выполнить команды выгрузки из стека pop (вытолкнуть): pop DS pop АХ Состояние стека после выполнения первой команды показано на рис. 1.10, г, а после второй - на рис. 1.10, д. Для правильного восстановления содержимого регистров выгрузка из стека должна выполняться в порядке, строго противоположном загрузке - сначала выгружается элемент, загруженный последним, затем предыдущий элемент и т.д. Совсем не обязательно при восстановлении данных помещать их туда, где они были перед сохранением. Например, можно поместить в стек содержимое DS, а извлечь его оттуда в другой сегментный регистр - ES; push DS pop ES ; Теперь ES=DS, а стек пуст Это распространенный прием для перенесения содержимого одного регистра в другой, особенно, если второй регистр - сегментный. Обратите внимание (см. рис 1.10) на то, что после выгрузки сохраненных в стеке данных они физически не стерлись, а остались в области стека на своих местах. Правда, при "стандартной" работе со стеком они оказываются недоступными. Действительно, поскольку указатель стека SP указывает под дно стека, стек считается пустым; очередная команда push поместит новое данное на место сохраненного ранее содержимого АХ, затерев его. Однако пока стек физически не затерт, сохраненными и уже выбранными из него данными можно пользоваться, если помнить, в каком порядке они расположены в стеке. Этот прием часто используется при работе с подпрограммами. Какого размера должен быть стек? Это зависит от того, насколько интенсивно он используется в программе. Если, например, планируется хранить в стеке массив объемом 10 000 байт, то стек должен быть не меньше этого размера. При этом надо иметь в виду, что в ряде случаев стек автоматически используется системой, в частности, при выполнении команды прерывания int 21h. По этой ко-
манде сначала процессор помещает в стек адрес возврата, а затем DOS отправляет туда же содержимое регистров и другую информацию, относящуюся к прерванной программе. Поэтому, даже если программа совсем не использует стек, он все же должен присутствовать в программе и иметь размер не менее нескольких десятков слов. В нашем первом примере мы отвели под стек 128 слов, что безусловно достаточно . Система прерываний Система прерываний любого компьютера является его важнейшей частью, позволяющей быстро реагировать на события, обработка которых должна выполнятся немедленно : сигналы от машинных таймеров, нажатия клавиш клавиатуры или мыши, сбои памяти и пр. Рассмотрим в общих чертах компоненты этой системы. Сигналы аппаратных прерываний, возникающие в устройствах, входящих в состав компьютера или подключенных к нему, поступают в процессор не непосредственно, а через два контроллера прерываний, один из которых называется ведущим, а второй - ведомым (рис. 1.11) Видимый контроллер IPC? IPO to грерыоэний :RQ11 iROi;' :RQ13 ■Т'ЙГТУИИ диск S: (-►.TOfJ I.V.'i IROI 5 Таймер IR'UU IRQ I IP 02 IRC6 IP07 Принтер IP j3 Мышь IP. J4 IR 05 Гибкий дис > Ведущий контсоллер прерыЕ'Змий Базовый вектор Свп IN Т HOW*5 г 1 ь у тор ы П Р Рис. 1.11. Аппаратная организация прерываний. Два контроллера используются для увеличения допустимого количества внешних устройств. Дело в том, что каждый контроллер прерываний может обслуживать сигналы лишь от 8 устройств. Для обслуживания большего количества устройств контроллеры можно объединять, образуя из них веерообразную структуру. В современных машинах устанавливают два контроллера, увеличивая тем самым возможное число входных устройств до 15 (7 у ведущего и 8 у ведомого контроллеров). К входным выводам IRQ1...IRQ7 и IRQ8...IRQ15 (IRQ - это сокращение от Interrupt Request, запрос прерывания) подключаются выводы устройств, на которых возникают сигналы прерываний. Выход ведущего контроллера подключается к входу INT микропроцессора, а выход ведомого - к входу IRQ2 ведущего. Основная функция контроллеров - передача сигналов запросов прерываний от внешних устройств на единственный вход прерываний микропроцессора. При этом, кроме сигнала INT, контроллеры передают в микропроцессор по линиям данных номер вектора, который образуется в контроллере путем сложения базового номера, записанного в одном из его регистров, с номером входной линии, по которой поступил запрос прерывания. Номера базовых векторов заносятся в контроллеры автоматически в процессе начальной загрузки компьютера. Для ведущего контроллера ба-
зовый вектор всегда равен 8, для ведомого - 70h. Таким образом, номера векторов , закрепленных за аппаратными прерываниями, лежат в диапазонах 8h...Fh и 70h...77h. Очевидно, что номера векторов аппаратных прерываний однозначно связаны с номерами линий, или уровнями IRQ, а через них - с конкретными устройствами компьютера. На рис. 1.11 указаны некоторые из стандартных устройств компьютера, работающих в режиме прерываний. Процессор, получив сигнал прерывания, выполняет последовательность стандартных действий, обычно называемых процедурой прерывания. Подчеркнем, что здесь идет речь лишь о реакции самого процессора на сигналы прерываний, а не об алгоритмах обработки прерываний, предусматриваемых пользователем в программах обработки прерываний. Объекты вычислительной системы, принимающие участие в процедуре прерывания, и их взаимодействие показаны на рис. 1.12. Адреса памяти Гтщг г гор "П Г г?. и Г'С CSOnpnpU IP Joprb' F г ^ IP Х'рГЬ n ctoopnp г. IP С S паси г Вектор прерывания bei'T.jp HL'C'IJL'IEi Зчия n ВИКТОР П["1!?рмЕ:-ЗНИЧ гроцессп ";.P H3 MOI.'PHT ГТкПЫВПМИЯ Рис. 1.12. Процедура обслуживания прерывания. Самое начало оперативной памяти от адреса OOOOh до 03FFh отводится под векторы прерываний - четырехбайтовые области, в которых хранятся адреса обработчиков прерываний (ОбрПр на рис. 1.12). В два старшие байта каждого вектора записывается сегментный адрес обработчика, в два младшие - смещение (относительный адрес) точки входа в обработчик. Векторы, как и соответствующие им прерывания, имеют номера, причем вектор с номером 0 располагается, начиная с адреса 0, вектор 1-е адреса 4, вектор 2-е адреса 8 и т.д. Вектор с номером п занимает, таким образом, байты памяти от п*4 до п*4+3. Всего в выделенной под векторы области памяти помещается 256 векторов. Получив сигнал на выполнение процедуры прерывания с определенным номером, процессор сохраняет в стеке выполняемой программы текущее содержимое трех регистров процессора: регистра флагов, CS и IP. Два последних числа образуют полный адрес возврата в прерванную программу. Далее процессор загружает CS и IP из соответствующего вектора прерываний, осуществляя, тем самым, переход на обработчик прерывания, связанный с этим вектором.
Обработчик прерываний всегда заканчивается командой iret (interrupt return, возврат из прерывания), выполняющей обратные действия - извлечение из стека сохраненных там слов и помещение их назад в регистры IP и CS, а также в регистр флагов. Это приводит к возврату в основную программу в ту самую точку, где она была прервана. В действительности запросы на обработку прерываний могут иметь различную природу. Помимо описанных выше аппаратных прерывания от периферийных устройств, называемых часто внешними, имеются еще два типа прерываний: внутренние и программные. Внутренние прерывания возбуждаются цепями самого процессора при возникновении одной из специально оговоренных ситуаций, например, при выполнении операции деления на ноль или при попытке выполнить несуществующую команду. За каждым из таких прерываний закреплен определенный вектор, номер которого известен процессору. Например, за делением на 0 закреплен вектор 0, а за неправильной командой - вектор 6. Если процессор сталкивается с одной из таких ситуаций, он выполняет описанную выше процедуру прерывания, используя закрепленный за этой ситуацией вектор прерывания. Наконец, еще одним чрезвычайно важным типом прерываний являются программные прерывания. Они вызываются командой int с числовым аргументом, который рассматривается процессором, как номер вектора прерывания. Если в программе встречается, например, команда int 13h то процессор выполняет ту же процедуру прерывания, используя в качестве номера вектора операнд команды int. Программные прерывания применяются в первую очередь для вызова системных обслуживающих программ - функций DOS и BIOS. С командой int 2In вызова DOS мы уже сталкивались в примере 1-1 и будем встречаться еще многократно. В дальнейшем будут также приведены примеры использования команды int для вызова прикладных обработчиков программных прерываний. Важно подчеркнуть, что описанные действия процессора выполняются совершенно одинаково для всех видов прерываний - внутренних, аппаратных и программных, хотя причины, возбуждающие процедуру прерывания, имеют принципиально разную природу. Большая часть векторов прерываний зарезервирована для выполнения определенных действий; часть из них автоматически заполняется адресами системных программ при загрузке системы. Приведем краткую выдержку из таблицы векторов, позволяющую продемонстрировать разнообразие ее состава: • 0Oh - внутреннее прерывание, деление на 0; • Olh - внутреннее прерывание, пошаговое выполнение (при TF=1); • 02h - немаскируемое прерывание (вывод NMI процессора); • 08h - аппаратное прерывание от системного таймера; • 09h - аппаратное прерывание от клавиатуры; • OEh - аппаратное прерывание от гибкого диска; • 10h - программное прерывание, программы BIOS управления видеосистемой; • 13h - программное прерывание, программы BIOS управления дисками;
• 16h - программное прерывание, программы BIOS управления клавиатурой; • lDh - не вектор, адрес таблицы видеопараметров, используемой BIOS; • lEh - не вектор, адрес таблицы параметров дискеты, используемой BIOS; • 2lh - программное прерывание, диспетчер функций DOS; • 22h - программное прерывание, адрес перехода при завершении процесса, используемый DOS; • 23h -программное прерывание, обработчик прерываний по <Ctrl>/C, используемый DOS; • 25h - программное прерывание, абсолютное чтение диска (функция DOS); • 26h - программное прерывание, абсолютная запись на диск (функция DOS); • 60h...66h - зарезервировано для программных прерываний пользователя; • 68h...6Fh - программные прерывания, свободные векторы; • 7Oh -аппаратное прерывание от часов реального времени (с питанием от аккумулятора) ; • 76h -аппаратное прерывание от жесткого диска; Как видно из таблицы, векторы прерываний можно условно разбить на следующие группы: • векторы внутренних прерываний процессора (Olh, 02h и др.); • векторы аппаратных прерываний (08h...OFh и 70h...77h); • программы BIOS обслуживания аппаратуры компьютера (10h, 13h, 16h и др.); • программы DOS (21h, 22h, 23h и др.); • адреса системных таблиц BIOS (IDh, lEh и др.). Системные программы, адреса которых хранятся в векторах прерываний, в большинстве своем являются всего лишь диспетчерами, открывающими доступ к большим группам программ, реализующих системные функции. Так, видеодрайвер BIOS (вектор 10h) включает программы смены видеорежима, управления курсором, задания цветовой палитры, загрузки шрифтов и многие другие. Особенно характерен в этом отношении вектор 21h, через который осуществляется вызов практически всех функций DOS: ввода с клавиатуры и вывода на экран, обслуживания файлов, каталогов и дисков, управления памятью и процессами, службы времени и т.д. Для вызова требуемой функции надо не только выполнить команду int с соответствующим номером, но и указать системе в одном из регистров (для этой цели всегда используется регистр АН) номер вызываемой функции. Иногда для "многофункциональных" функций приходится указывать еще и номер подфункции (в регистре AL) . Система ввода-вывода Система ввода-вывода, т. е. комплекс средств обмена информацией с внешними устройствами, является важнейшей частью архитектуры процессора и машины в целом. К системе ввода-вывода можно отнести и способы подключения к системной шине различного оборудования, и процедуры взаимодействия процессора с этим оборудованием, и команды процессора, предназначенные для обмена данными с внешними устройствами. Непрерывное совершенствование микропроцессоров и стремление максимально повысить производительность всей вычислительной системы привело к существенному усложнению внутренней организации компьютеров: повышению разрядности шин, появлению внутренних быстродействующих магистралей обмена данными, использова-
нию кэш-буферов для ускорения обмена с памятью и дисками и проч. Если, однако, отвлечься от важных с точки зрения производительности, но несущественных для программиста деталей, то логическую схему современного компьютера можно представить традиционным образом, в виде системной шины (магистрали), к которой подключаются сам микропроцессор и все устройства компьютера (рис. 1.13). w А Микропроцессор Щ W D м/ю' Оперативная память Адреса 00000h...9tnrh Клавивтура Адреса 60h...61h Видеомонитор Устройство управления W А -л Щ D " М/Ю' Контроллер клавиатуры А D М/Ю' Контроллер прерываний А D ...21h,A0h...A1h " М/Ю' Видеоадаптер А -л Щ D Адреса 3B0h...3BBh,3C0h...3DFh М/Ю" Видеопамять Устройство управления А D Адреса A00000h...AFFFFh BBOOOh.. BFFFFh М/Ю 03 1 ГЦ 03 ш I- о X о Рис. 1.13. Подключение устройств компьютера к системной шине(А - адреса; D - данные; М/Ю - один из сигналов управления) Системная шина представляет собой, в сущности, набор линий - проводов, к которым единообразно подключаются все устройства компьютера. В более широком плане в понятие системной шины следует включить электрические и логические характеристики сигналов, действующих на линиях шины, их назначение, а также правила взаимодействия этих сигналов при выполнении тех или иных операций на шине - то, что обычно называют протоколами обмена информацией. Сигналы, распространяющиеся по шине, доступны всем подключенным к ней устройствам, и в задачу каждого устройства входит выбор предназначенных ему сигналов и обеспечение реакции на них, соответствующей протоколу обмена. Процессор связан с системной шиной большим количеством линий (практически всеми своими выводами), из которых нас будут интересовать только линии трех категорий: набор линий адресов, набор линий данных и один из сигналов управления, носящий название М/Ю' (М - "10 с отрицанием"). Последний сигнал, строго говоря, имеется только среди выходных сигналов микропроцессора, а на системную шину приходят производные от этого сигнала, образованные, как комбинации сигнала М/Ю' с управляющими сигналами записи и чтения. Однако суть
дела от этого не изменяется, и для простоты мы опустили эти подробности. Процессор, желая записать данные по некоторому адресу в памяти, выставляет на линии адресов требуемый адрес, а на линии данных - данное. Устройство управления памятью расшифровывает поступивший адрес и, если этот адрес принадлежит памяти, принимает с линий данных поступившее данное и заносит его в соответствующую ячейку памяти. Описанная процедура отражает выполнение процессором команды типа mov mem,АХ где mem - символическое обозначение ячейки памяти, принадлежащей сегменту данных программы. Если процессор, выполняя команду типа mov АХ,mem должен прочитать данные из памяти, он выставляет на линии адресов требуемый адрес и ожидает поступления данных. Устройство управления памятью, расшифровав поступивший адрес и убедившись в наличии такого адреса в памяти, отыскивает в памяти требуемую ячейку, считывает из нее данное и выставляет его на линии данных. Процессор снимает данное с шины и отправляет его в указанный в команде операнд (в данном случае в регистр АХ). Описанные процедуры записи и чтения справедливы не только по отношении к памяти; для всех остальных устройств компьютера они выглядят точно так же. За каждым устройством закреплена определенная группа адресов, на которые оно должно отзываться. Обнаружив свой адрес на магистрали, устройство, в зависимости от заданного процессором направления передачи данных, либо считывает с магистрали поступившие данные, либо, наоборот, устанавливает имеющиеся в нем данные на магистраль. Из рис. 1.13 видно, что все устройства компьютера можно разбить на две категории. Представителем одной категории является видеобуфер, входящий в видеосистему компьютера. Устройство управления видеобуфером настроено на две группы адресов, которые как бы продолжают адреса, относящиеся к оперативной памяти. Действительно, адрес последнего байта оперативной памяти составляет 9FFFFh, а уже следующий адрес AOOOOh является адресом первого байта графического видеобуфера. Графический видеобуфер занимает 64 Кбайт адресного пространства до адреса AFFFFh (реально немного меньше, но в плане рассматриваемого вопроса это не имеет значения). Текстовый видеобуфер расположен на некотором расстоянии от графического и занимает 32 Кбайт, начиная с адреса B8000h. Таким образом, адреса оперативной памяти и памяти видеобуфера разнесены и не перекрываются. Ко второй категории устройств можно отнести все устройства, адреса которых перекрываются с адресами оперативной памяти. Например, за контроллером клавиатуры закреплены два адреса: 60h и 61h. По адресу 60h выполняется чтение кода нажатой клавиши, а адрес 61h используется для управления работой контроллера. И тот, и другой адрес имеются в оперативной памяти и, таким образом, возникает проблема распознавания устройства, к которому происходит обращение . Аналогичная ситуация наблюдается и со многими другими устройствами компьютера. Например, контроллер прерываний, служащий для объединения сигна-
лов прерываний от всех устройств компьютера и направления их на единственный вход прерывания микропроцессора, управляется через два адреса. Поскольку в состав машины всегда включают два контроллера, для них выделяются две пары адресов. Во всех компьютерах типа IBM PC контроллерам прерываний назначаются адреса 20h-21h и AOh-Alh, которые так же отвечают и некоторым байтам оперативной памяти. Проблема идентификации устройств с перекрывающимися адресами имеет два аспекта : аппаратный и программный. Идентификация устройств на системной шине осуществляется с помощью сигнала М/Ю', которой генерируется процессором в любой операции записи или чтения. Однако значение этого сигнала зависит от категории адресуемого устройства. При обращении к памяти или видеобуферу процессор устанавливает значение сигнала М/Ю' = 1 (М обозначает memory, память) . При обращении к остальным устройствам этот сигнал устанавливается в О (10 обозначает in-out, ввод-вывод, и если 10 с отрицанием равно 0, то 10 равно 1, и это олицетворяет не операцию с памятью, а операцию ввода-вывода) . В то же время все устройства, подключенные к шине, анализируют значение сигнала М/Ю' . При этом память и видеобуфер отзываются на операции чтения-записи на шине, только если они сопровождаются значением М / 10' = 1, а остальные устройства воспринимают сигналы магистрали только при значении М/Ю' = 0. Таким образом, осуществляется аппаратное разделение устройств "типа памяти" и устройств "ввода-вывода". Программное разделение устройств реализуется с помощью двух наборов команд процессора - для памяти и для устройств ввода-вывода. В первую группу команд входят практически все команды процессора, с помощью которых можно обратиться по тому или иному адресу - команды пересылки mov и movs, арифметических действий add, mul и div, сдвигов rol, ror, sal и sar, анализа содержимого байта или слова test и многие другие. Фактически в эту группу команды входит большинство команд процессора. Вторую группу команд образуют специфические команды ввода-вывода. В МП 86 их всего две - команда ввода in и команда вывода out. При выполнении команд первой группы процессор автоматически генерирует М /10' = 1; при выполнении команд in и out процессор устанавливает сигнал М/Ю' = 0. Таким образом, при обращении к памяти и к видеобуферу программист может использовать все подходящие по смыслу команды процессора, при этом, работая, например, с видеобуфером, можно не только засылать в него (или получать из него) данные, но и выполнять прямо в видеобуфере любые арифметические, логические и прочие операции. Обращаться же к контроллерам тех или иных устройств (и, между прочим, к видеоадаптеру) , допустимо только с помощью двух команд - in и out. Арифметические операции или анализ данных в устройстве невозможен. Необходимо сначала прочитать в процессор данные из внешнего устройства, и лишь затем выполнять над ним требуемую операцию. Наличие двух категорий адресов устройств дает основание говорить о существовании двух адресных пространств - пространства памяти, куда входит сама память, а также видеобуферы и ПЗУ, и пространства ввода-вывода (пространства портов), куда входят адреса остальной аппаратуры компьютера. При этом, если объем адресного пространства памяти составляет 1 Мбайт (а в защищенном режиме 4 Гбайт), то адресное пространство портов гораздо меньше - его размер составляет всего 64 Кбайт. Эта величина определяется форматом команд ввода-вывода.
Адрес адресуемого порта должен быть записан в регистр DX (и ни в какой другой) и, таким образом, максимальное значение этого адреса составляет величину FFFFh. Реально из 64 Кбайт адресного пространства портов используется лишь очень малая часть. Практические вопросы программирования через общее с памятью адресное пространства и через пространство портов будут рассмотрены в следующих главах. ГЛАВА 2. ОСНОВЫ ПРОГРАММИРОВАНИЯ Подготовка и отладка программы Процесс подготовки и отладки программы на языке ассемблера включает этапы подготовки исходного текста, трансляции, компоновки и отладки. Подготовка исходного текста программы выполняется с помощью любого текстового редактора, хотя бы редактора, встроенного в программу Norton Commander, или еще более удобного редактора Norton Editor. При использовании одного из более совершенных текстовых процессоров, вроде Microsoft Word, следует иметь в виду, что эти программы добавляют в выходной файл служебную информацию о формате (размер страниц, тип шрифта и др.), которая будет непонятна транслятору. Однако практически все текстовые редакторы и процессоры позволяют вывести в выходной файл "чистый текст", без каких-либо служебных символов. Именно таким режимом и надлежит воспользоваться в нашем случае. В принципе для подготовки исходного текста можно воспользоваться любым редактором системы Windows, например, программой WordPad или Блокнотом. Однако в этом случае возникнут неприятности с русским шрифтом. Как известно, корпорация Microsoft приняла для своих русифицированных продуктов собственную кодировку русских символов, расходящуюся со стандартной, используемой в приложениях DOS. Если программу, использующую русский текст в качестве комментариев, или выводящую его на экран, подготовить в одном из редакторов Windows, то при ее просмотре и запуске в среде DOS вместо русского текста вы увидите бессмысленный набор символов. Поэтому программы, предназначенные для выполнения под управлением MS-DOS, лучше и подготавливать в среде DOS. Файл с исходным текстом должен иметь расширение .ASM. Следующая операция состоит в трансляции исходного текста программы, т.е. в преобразовании строк исходного языка в коды машинных команд. Эта операция выполняется с помощью транслятора с языка ассемблера (т.е. с помощью программы ассемблера). Известные разработчики программного обеспечения - корпорации IBM, Borland, Microsoft и др. предлагают свои варианты трансляторов, несколько различающиеся своими возможностями и системой обозначений. Однако входной язык любого транслятора, включающий в себя мнемонику машинных команд и других операторов и правила написания предложений ассемблера, для всех ассемблеров одинаков, поэтому при подготовке и отладке примеров данной книги можно с равным успехом воспользоваться любой из указанных программ. Мы, как уже отмечалось, использовали программы пакета TASM 5.0 (фирменные названия этих программ - Turbo Assembler, Turbo Link и Turbo Debugger, а имена соответствующих им файлов - TASM.EXE, TLINK.EXE и TD.EXE). После трансляции образуются два файла - листинг трансляции и объектный файл
с расширением OBJ. Листинг представляет собой текстовый файл, предназначенный для чтения в каком-либо редакторе, и содержит исходный текст оттранслированной программы вместе с машинными кодами команд. В случае обнаружения транслятором каких-либо ошибок, в листинг также включаются сообщения об этих ошибках . Рассмотрим элементы листинга трансляции примера 1-1 из предыдущей главы. На рис. 2.1 приведен несколько сокращенный текст этого листинга, из которого удалены комментарии к отдельным предложениям. Номера предложений ассемблера - Смещение команд относительно начала сегмента —Машинные коды команд 0000 0000 0003 Исходный текст BS 0000s 8Е D ;Выведем строку текста на экран 0005 В4 09 0007 BAOOOOr 000А CD 21 10 ; Завершим программу 1 1 000С В3 4С00 1 2 000F СВ21 1 3 001 1 ^— Размер сегмента команд в байтах 14 ; Опишем сегмент данных 15 0000 ;Опишем сегмент команд assume CS:code,DS:data code segment begin: mov AX.data movDS.AX movAH,09h mov DX, offset msg int 21 h movAX,4C00h int 21 h code ends data segment Коды символов, образующих сообщение 16 0000 17 18 19 0014 8F ЕО АЕ A3 ЕО АО АС + msg db 'Программа работает! $ АС АО 20 ЕО АО А1, АЕ+ Е2АОА5 Е2 21 24 data ends t_ Размер сегмента данных в байтах 20 ; Опишем сегмент стека 21 0000 22 0000 01 □□*(??) 23 0100 t_ Размер сегмента стека в байтах 24 stk segment db 256 dup (?) stk ends end begin Рис. 2.1. Листинг трансляции программы 1-1. Рассматривая листинг, можно отметить ряд полезных моментов общего характера. Предложения программы с операторами assume, segment, ends, end, как уже отмечалось ранее, не транслируются в какие-либо машинные коды и не находят отражения в памяти. Они нужны лишь для передачи транслятору служебной инфор-
мации о способе трансляции команд (assume), границах сегментов (segment и end) и строке, на которой следует завершить обработку исходного текста (end). Каждому транслируемому предложению программы соответствует определенное смещение, причем задание смещений выполняется в каждом сегменте в отдельности. Первая команда mov АХ,data имеет смещение от начала сегмента команд, равное нулю. Она занимает 3 байта, поэтому следующая команда начинается с байта 3 и имеет соответствующее смещение. Транслятор не смог полностью определить код команды mov АХ,data. В этой команде в регистр АХ засылается сегментный адрес сегмента data. Однако этот адрес станет известен лишь в процессе загрузки выполнимого файла программы в память. Поэтому в листинге на месте этого адреса стоят нули, помеченные буквой s, напоминающей о том, что здесь должен быть пока неизвестный сегментный адрес. Еще одна помеченная команда с кодом ВА 0000 располагается в строке 8 листинга. В этой команде в регистр DX заносится смещение поля с именем msg, расположенное в сегменте данных (ключевое слово offset, указанное перед именем поля, говорит о том, что речь идет не о содержимом ячейки msg, а об ее смещении) . Поле msg расположено в самом начале сегмента данных, и его смещение от начала сегмента равно 0, что и указано в коде команды. Почему же эта команда помечена буквой г, являющейся сокращением слова relocatable, переместимый? Чтобы ответить на этот вопрос, нам придется рассмотреть, как сегменты программы размещаются в памяти. Как уже говорилось, любой сегмент может располагаться в памяти только с адреса, кратного 16, т.е. на границе 16-байтового блока памяти (параграфа). Конкретный адрес программы в памяти зависит от конфигурации компьютера, - какой размер занимает DOS, сколько загружено резидентных программ и драйверов, а также в каком режиме запускается программа - в отладчике или без него. Предположим, что сегментный адрес сегмента команд оказался равным 1306h (рис. 2.2, а) . В нашей программе сегмент команд имеет размер llh байт (что указано в строке 13 листинга), т.е. занимает целый параграф плюс один байт. Сегмент данных имеет размер 14h байт (строка 19 листинга) и тоже требует для своего размещения немного больше одного параграфа. Из- за того, что сегмент данных должен начаться на границе параграфа, ему будет назначен сегментный адрес 1308h и между сегментами образуется пустой промежуток размером 15 байт. Потеря 15 байт из многомегабайтовой памяти, разумеется, не имеет никакого значения, однако в некоторых случаях, например, при компоновке единой программы из большого количества модулей с небольшими по размеру подпрограммами, суммарная потеря памяти может оказаться значительной. Для того, чтобы устранить потери памяти, можно сегмент данных объявить с выравниванием на байт: data segment byte Такое объявление даст возможность системе загрузить сегмент данных так, как показано на рис. 2.2, б. Сегмент данных частично перекрывает сегмент команд, начинаясь на границе его последнего параграфа (в нашем случае по адресу 1307h). Для того, чтобы данные не наложились на последние команды сегмента команд, они смещаются вниз так, что начинаются сразу же за сегментом команд. В нашем примере, где сегмент команд "выступает" за сегментный адрес 1307h
всего на 1 байт, данные и надо сместить на этот 1 байт. В результате поле msg, с которого начинается сегмент данных, и которое в листинге имело смещение 0, получит смещение 1. Все остальные адреса в сегменте данных также сместятся на один байт вперед. В результате данные будут располагаться в физической памяти вплотную за командами, без всяких промежутков, однако все обращения в сегменте команд к данным должны быть скорректированы на величину перекрытия сегментов, в нашем случае - на 1 байт. Эта коррекция выполняется системой после загрузки программы в память, но еще до ее запуска. Адреса, которые могут потребовать описанной коррекции, и помечаются в листинге трансляции буквой Из сказанного следует очень важный и несколько неожиданный вывод: коды команд программы в памяти могут не совпадать с кодами, показанными в листинге трансляции. Это обстоятельство необходимо учитывать при отладке программ с помощью интерактивного отладчика, который, естественно, показывает в точности то, что находится в памяти, и что не всегда соответствует листингу трансляции. г егментные -адреса 1-:£bh r-ifi/h 1 ill -h Сегмент КОМ.ЧНД |. м еще ни я О 1 Команды Сегментные адреса м еще ни я 10h Пустое место между сегментами Смещения Сегмент данных данные !0h 13h 1307h Сегмент команд Команды Смещения 10h 130Sh Сегмент дайны:»: Дзмнь-.е 130% 10h IHi 13h 14h Рис. 2.2. Расположение сегментов программы в памяти при выравнивании по умолчанию (а) и на байт (б). Вернемся к рассмотрению листинга трансляции. Данные, введенные нами в программу, также оттранслировались: вместо символов текста в загрузочный файл попадут коды ASCII этих символов. Так, буква "П" преобразовалась в код 8Fh,
буква "р" в код ЕО и т. д. При выводе этих кодов на экран видеосистема компьютера преобразует их назад в изображения символов, записанных в исходном тексте программы. Из листинга трансляции легко определить размер отдельных составляющих программы. В нашем случае длина сегмента команд составляет llh = 17 байт, длина сегмента данных - 14h = 20 байт, а под стек отведено ровно столько, сколько мы запросили в программе - 10Oh = 256 байт. Размер же всей программы окажется больше суммы длин сегментов, во-первых, из-за пустых промежутков между сегментами (у нас на них уйдет 15 + 12 = 27 байт), и, во-вторых, за счет подсоединения к программе обязательного префикса программы, имеющего всегда размер 256 байт. Как мы уже отмечали, в результате трансляции программы образуется два файла - с листингом и с объектным модулем программы. Объектный файл является основным результатом работы транслятора и представляет собой текст программы, преобразованный в машинные коды. Хотя в этом файле уже присутствуют коды команд, он не может быть выполнен. Для того чтобы получить выполнимую программу, объектный файл необходимо скомпоновать. Компоновка объектного файла выполняется с помощью программы компоновщика (редактора связей). Эта программа получила такое название потому, что ее основное назначение - подсоединение к файлу с основной программой файлов с подпрограммами и настройка связей между ними. Однако компоновать необходимо даже простейшие программы, не содержащие подпрограмм. Дело в том, что у компоновщика имеется и вторая функция - изменение формата объектного файла и преобразование его в выполнимый файл, который может быть загружен в оперативную память и выполнен. Файл с программой компоновщика обычно имеет имя LINK.EXE, хотя это может быть и не так. Например, компоновщик пакета TASM назван TLINK.EXE. В результате компоновки образуется загрузочный, или выполнимый файл с расширением .ЕХЕ. Отладку и изучение работы готовой программы удобнее всего осуществлять с помощью интерактивного отладчика, который позволяет выполнять отлаживаемую программу по шагам или с точками останова, выводить на экран содержимое регистров и областей памяти, модифицировать (в известных пределах) загруженную в память программу, принудительно изменять содержимое регистров и выполнять другие действия, позволяющие в наглядной и удобной форме контролировать выполнение программы. Рассмотрим вкратце основные приемы работы с "турбоотладчиком" TD.EXE из пакета TASM. Приступая к работе с отладчиком, следует убедиться, что в рабочем каталоге имеются и загрузочный (Р.ЕХЕ), и исходный (P.ASM) файлы, так как отладчик в своей работе использует оба эти файла. Для запуска отладчика следует ввести команду td р На экране появится кадр отладчика, в котором видны два окна - окно Module с исходным текстом отлаживаемой программы и окно Watches для наблюдения за ходом изменения заданных переменных в процессе выполнения программы2 (рис. 2 Приведенный рисунок носит иллюстративный характер, и не относятся к данному примеру.
2.3) . Окно Watches нам не понадобится, и его можно убрать, щелкнув мышью по маленькому квадратику в левом верхнем углу окна, или введя команду <Alt>+<F3>, предварительно сделав это окно активным. Переключение (по кругу) между окнами осуществляется клавишей <F6>. Е File Edit Uiew Run Breakpoints Data Options Window Help ^■READV mam pr<x mov AX, OFOOOh; Занесем n OS mov DS.AX: Сегиеншый адрес ПЗУ BIOS mov si.0FFF5n; Смещение к итересуккцему нас пояю mov AX.data; Настроим RS mov RS.AX; на сммсш длимый (ipoip«MWbi mov DI.off set Ыо»; Смещение к полю для хранения дани mov СХ.8; Перенести 8 Ь*мт eld; Движение по о реже пперед rep moveb; Перенос Слмюв ;Выоедсм полученную информацию не экран • mov AX.data; Теперь настроим OS • mov DS.AS; иа ceruem данных про(раммы (Pi-Help F2-Bkpt P3-tfod F4-Here F5-Zoon РЬ-Next F7-Trace F8-Step F9-Run FlO-Ивпи Рис. 2.3. Начальный кадр отладчика с текстом отлаживаемой программы. В процессе отладки программы на экран приходится выводить много дополнительных окон; они перекрываются и часто скрывают друг друга. Чтобы увидеть их все одновременно, размер окон приходится уменьшать, а сами окна перемещать по экрану. Режим изменения размеров и положения окна включается командой <Ctrl>+<F5>, после чего клавиши со стрелками перемещают окно по экрану, а те же клавиши при нажатой клавише <Shift> позволяют изменять его размер. Выход из режима настройки окна осуществляется нажатием клавиши <Enter>. Начальное окно отладчика дает слишком мало информации для отладки программы. В нем можно выполнять программу по частям до местоположения курсора (клавиша <F4>) и команда За командой (клавиша <F8>) ; можно также с помощью окна Watches наблюдать изменения заданных полей данных. Однако для отладки программы на уровне языка ассемблера необходимо контролировать все регистры процессора , включая регистр флагов, а также, во многих случаях, поля данных вне программы (например, векторы прерываний или системные таблицы). Гораздо более информативным является "окно процессора", которое вызывается с помощью пункта View>CPU верхнего меню или командой <Alt>+<V>+<C> (рис3. 2.4) . Окно процессора состоит, в свою очередь, из 5 внутренних окон для наблюдения текста программы на языке ассемблера и в машинных кодах, регистров процессора, флагов, стека и содержимого памяти. С помощью этих окон можно полностью контролировать ход выполнения отлаживаемой программы. Для того чтобы можно было работать с конкретным окном, например, прокручивать его содержимое, надо сделать его активным, щелкнув по нему мышью. Перейти из окна в окно можно также с помощью клавиатуры, нажимая клавишу Tab. Посмотрим, какие све- 3 Приведенный рисунок носит иллюстративный характер, и не относятся к данному примеру.
дения можно извлечь из содержимого окна процессора. Рис. 2.4. Окно процессора с внутренними окнами. Содержимое сегментных регистров DS и ES одинаково и составляет llF5h. Эта значит, что программа загружена в память, начиная с физического адреса 11F50, т.е. приблизительно с 70-го килобайта. Чем заняты первые 70 Кбайт памяти? Обычно компьютер конфигурируется так, что в обычной памяти размещается только малая часть DOS (около 16 Кбайт), драйверы обслуживания расширенной памяти и резидентная часть C0MMAND.COM. Основная часть DOS, остальные драйверы и необходимые резидентные программы (например, русификатор) переносятся в расширенную память. В этом случае системные области в начале памяти занимают всего 20 - 25 Кбайт. Тем не менее, наша программа начинается не с 25-го, а с 70-го килобайта. Произошло это из-за того, что программа запущена под управлением отладчика, который сначала загружается в память сам, и лишь затем загружает отлаживаемую программу. Но отсюда следует, что если бы мы запустили программу без отладчика, она попала бы на другое место в памяти, гораздо ближе к ее началу. В большинстве случаев это обстоятельство не имеет особого значения, так как любая программа должна одинаково успешно выполняться в любом месте памяти , однако необходимо отдавать себе отчет, что отладчик изменяет операционную среду программы (в частности, переносит ее на другое место в памяти). Строго говоря, программа под управлением отладчика выполняется не совсем так, как она выполнялась бы непосредственно в DOS. Еще один пример "самодеятельности" отладчика можно увидеть в том же окне регистров процессора. Содержимое всех регистров общего назначения (АХ, ВХ, СХ, DX, SI, DI и BP) равно 0. Отсюда можно сделать вывод, что DOS, Загружая программу в память, очищает регистры процессора. Однако на самом деле это совсем не так! Регистры очищает не DOS, а отладчик. При обычном запуске программы исходное содержимое регистров практически непредсказуемо, и ни в коем случае нельзя рассчитывать, что в них будут нули. Иногда можно столкнуться и
с более тонким влиянием отладчика на ход выполнения программы, вплоть до того, что некоторые виды программ, например, управляющие подключенной к компьютеру аппаратурой, в отладчике будут выполняться просто неверно. Итак, после загрузки программы в память содержимое регистров DS и ES оказалось одинаковым. Это вполне естественно, если вспомнить, что перед выполнением оба регистра указывают на префикс программы (см. рис. 1.9). Вслед за префиксом располагается сегмент команд и поскольку префикс всегда занимает точно 10Oh байт (т.е. 10h параграфов по 16 байт) , то содержимое CS в нашем случае должно быть равно llF5h + 10h = 1205h. В нашем примере программа должна начать выполняться с метки begin, поскольку именно эту метку мы указали в качестве операнда завершающей директивы end. Эта метка относится к самой первой команде сегмента команд и ее значение (или, что то же самое, смещение первой команды программы) должно быть равно 0. Поэтому исходное значение указателя команд, как это видно из рис. 2.4, тоже равно 0. В дальнейшем, по мере выполнения команд, значение IP будет возрастать. Выполним две первые команды программы, дважды нажав клавишу <F8>. Состояние программы после этой операции показано на рис4. 2.5. -Mod P4-Here PS-Zoom F6-Next Р?-Тглсв PB-Stcp P9-Run FlO-Mcnu Рис. 2.5. Состояние программы после выполнения двух первых команд. Видно, что указатель команд получил значение 5 и показывает на очередную (еще не выполнявшуюся) команду mov AH,09h, относительный адрес которой равен 5. Сегментный регистр DS получил значение 1207h, что должно соответствовать сегментному адресу сегмента данных. Вспомним, что сегмент команд у нас занимает llh байт и требует в памяти 2 параграфа. Сегмент команд имеет сегментный адрес 1205h, следовательно, сегментный адрес сегмента данных должен быть равен 1207h, что мы и получили. Обратим внимание на самую правую колонку в окне процессора, в которой индицируются состояния флагов процессора. Как уже говорилось, состояния флагов Приведенный рисунок носит иллюстративный характер, и не относятся к данному примеру.
заново устанавливаются процессором после выполнения каждой команды, и по ним можно в определенной степени судить о результате команды. С самого начала у нас был установлен только флаг IF (i в окне отладчика), что свидетельствует о включенном механизме аппаратных прерываний; остальные флаги сброшены. После выполнения двух первых команд состояние регистра флагов не изменилось. Произошло это потому, что команда пересылки mov не изменяет состояния флагов. Поскольку в нашей программе нет никаких команд, кроме mov и int, а команда int тоже состояния флагов обычно не изменяет, то наблюдать с помощью нашего примера функционирование регистра флагов не удастся. Рассмотрим теперь стек. Сегмент данных имеет у нас размер 14h байт, и под него в памяти надлежит выделить 2 параграфа. Это объясняет содержимое сегментного регистра стека SS - 1209п. Под стек отведено 256 байт, поэтому исходное положение SP (под дном стека) соответствует смещению 100п. Наконец, стоит еще обратить внимание на нижнюю половину окна команд, заполненную странными командами add [bx+si],al. Таких команд, да еще в таком количестве, в нашей программе нет, их "придумал" отладчик, пытаясь деассемблиро- вать промежуток между сегментом команд и сегментом данных, заполненный нулями. Код OOOOh соответствует команде add [bx+si],al, которую и изобразил отладчик . Таким образом, рассмотрев информацию, предоставленную отладчиком, мы подтвердили все предыдущие рассуждения о расположении в памяти сегментов программы и об инициализации регистров процессора при загрузке программы в память . Обратимся теперь к окну дампа. При запуске отладчика в окно дампа выводится содержимое памяти, начиная с адреса DS:OOOOh, т.е. начало префикса программы (см. рис. 2.4 и 2.5) . Для того, чтобы вывести на экран что-либо иное, надо воспользоваться командой <Alt>+<F10>, которая для каждого внутреннего окна процессора открывает дополнительное меню. Вид этого меню зависит от того, какое окне было активным в момент ввода команды. На рис. 2.6 показано дополнительное меню окна дампа. Go to... Search... Next Previous Display as ► Block ► Рис. 2.6. Дополнительное меню окна дампа памяти. Чаще всего приходится пользоваться первым пунктом этого меню Goto, с помощью которого можно задать любой адрес (входящий или не входящий в сегменты программы), и получить дамп этого участка.. На рис5. 2.7. изображено содержимое окна дампа после ввода начального адреса в виде DS:0 (тот же результат Far code Offset to data Segment:offset to data Base segment:Q to data 5 Приведенный рисунок носит иллюстративный характер, и не относятся к данному примеру.
даст начальный адрес DS:msg, а так же и просто msg, так как по умолчанию сегментный адрес берется из DS). Как и следовало ожидать, по этому адресу расположено наше единственное данное - строка текста, выводимая программой на экран. Кстати, в окне дампа видно начало промежутка между сегментами (данных и стека), заполненного нулями. Рис. 2.7. Дамп сегмента данных. Представление данных В языке ассемблера имеются средства записи целых и вещественных чисел, а также символьных строк и отдельных символов. Целые числа могут быть со знаком и без знака, а также записанными в двоично-десятичном формате. Для целых чисел и символов в составе команд микропроцессора и, соответственно, в языке ассемблера, есть средства обработки - анализа, сравнения, поиска и проч. Для вещественных чисел таких средств в самом микропроцессоре нет, они содержатся в арифметическом сопроцессоре. Поскольку программирование сопроцессора в настоящей книге не рассматривается, то и вещественными числами мы заниматься не будем. Рассмотрим сначала целые числа без знака и со знаком. Числа без знака получили свое название потому, что среди этих чисел нет отрицательных. Это самый простой вид чисел: они представляют собой весь диапазон двоичных чисел, которые можно записать в байте, слове или двойном слове. Для байта числа без знака могут принимать значения от 0Oh (0) до FFh (255) ; для слова - от OOOOh (0) до FFFFh (65535); для двойного слова - от 00000000h (0) до FFFFFFFFh (4294967295). В огромном количестве приложений вычислительной техники для чисел нет понятия знака. Это справедливо, например, для адресов ячеек памяти, кодов ASCII символов, результатов измерений многих физических величин, кодов управления устройствами, подключаемыми к компьютеру. Для таких чисел естественно использовать весь диапазон чисел, записываемых в ячейку того или иного размера. Если, однако, мы хотим работать как с положительными, так и с отрицательными числами, нам придется половину чисел из их полного диапазона считать положительными, а другую половину - отрицательными. В результате диапазон изменения числа уменьшается в два раза. Кроме того, необходимо предусмотреть систему кодирования, чтобы положительные и отрицательные числа не перекрывались. В вычислительной технике принято записывать отрицательные числа в так называемом дополнительном коде, который образуется из прямого путем замены всех двоичных нулей единицами и наоборот (обратный код) и прибавления к полученному числу единицы. Это справедливо как для байтовых (8-битовых) чисел, так и для чисел размером в слово или в двойное слово (рис. 2.8) Такой способ образования отрицательных чисел удобен тем, что позволяет выполнять над ними арифметические операции по общим правилам с получением правильного результата. Так, сложение чисел +5 и -5 дает 0; в результате вычита-
ния 3 из 5 получается 2; вычитание -3 из -5 дает -2 и т.д. Дня байта Для слова Прямой код числа 5 0000 0101 0000 00 on oonu 0101 Обратный кпд 1-inг п."5 5 МП im;i +1 1111 1111 1111 1010 + 1 Дополнитеnt.nt.ii-t кпд чис ла 5 Ml 1 1011 1111 1111 1 i • i : Li l 1 Дпд двойного г нова Прямой код чис п.л 5 Обратный код числа 5 III IIII III inn lllllll 1 lllllll 1 lllllll lllllll llllllll 11111 1111 nil 1111 I'M 1 111 Ml 1 Г 1 спи + 1 Дополни1ельный код числа 5 111! 1111 111' 11 M 111 1111 MM 1011 Рис. 2.8. Образование отрицательных чисел различного размера. Анализируя алгоритм образования отрицательного числа, можно заметить, что для всех отрицательных чисел характерно наличие двоичной единицы в старшем бите. Положительные числа, наоборот, имеют в старшем бите 0. Это справедливо для чисел любого размера. Кроме того, из рис. 2.8 видно, что для преобразования отрицательного 8-битового числа в слово достаточно дополнить его слева восемью двоичными единицами. Легко сообразить, что для преобразования положительного 8-битового числа в слово его надо дополнить восемью двоичными нулями. То же справедливо и для преобразования слова со знаком в двойное слово со знаком, только добавить придется уже не 8, а 16 единиц или нулей. В системе команд МП 86 и, соответственно, в языке ассемблера, для этих операций предусмотрены специальные команды cbw и cwd. IG-ричнве Десятичное представление представление Бе; знака Со знаком OOOOh 00000 00000 0001 h 00001 +00001 Q002h 00002 +00002 □D03h □□□□3 +00003 0004h 00004 +00004 7FFCh 32764 +32764 7FFDh 32765 +32765 7FFEh 327I5S +32766 7FFFh 32767 +32767 BOOOh 32766 -32768 8001 h 32763 -32767 8002h 32770 -32766 8Q03h 32771 -32765 FFFBh 65531 -00005 FFFCh 65532 ■00004 FFFDh 65533 -00003 FFFEh 65534 -00002 FFFFh 65535 -00001 Минимальное положительное число S Диапазон положительных чисел Максимальное положительное число Минимальное отрицательное число \ Диапазон отрицательных чисел Максимальное отрицательное число Рис. 2.9. Представление 16-битовых чисел без знака и со знаком.
Следует подчеркнуть, что знак числа условен. Одно и то же число, например, изображенное на рис. 2.8 8-битовое число FBh можно в одном контексте рассматривать, как отрицательное (-5), а в другом - как положительное, или, правильнее, число без знака (FBh=251). Знак числа является характеристикой не самого числа, а нашего представления о его смысле. На рис. 2.9 представлена выборочная таблица 16-битовых чисел с указанием их машинного представления, а также значений без знака и со знаком. Из таблицы видно, что для чисел со знаком размером в слово диапазон положительных значений простирается от 0 до 32767, а диапазон отрицательных значений - от -1 до -32768. На рис. 2.10 представлена аналогичная таблица для 8-битовых чисел. Из таблицы видно, что для чисел со знаком размером в байт диапазон положительных значений простирается от 0 до 127, а диапазон отрицательных значений - от -1 до -128. Ш-ричное Десятичное представление представление Бе;знака Со знаков 00 h 000 0D0 Ноль 01 h 001 +001 ^ Минимальное положительное число 02 h 002 +002 03 h □□3 + 003 04 h 004 +004 >Диапазон положительных чисел 7Ch UA +124 7Dh 125 +125 7Eh 125 +126 7Fh 127 +127 J Максимальное положительное число B0h 123 -128 ^ Минимальное отрицательное число Slh 123 127 62h 130 -126 G3h 131 -125 251 -005 > Диапазон отрицательных чисел FBh FCh 252 ■004 FDh 253 -Q03 FEh 2Ъй -002 FFh 255 -001 j Максимальное отрицательное число Рис. 2.10. Представление 8-битовых чисел без знака и со знаком. Среди команд процессора, выполняющих ту или иную обработку чисел, можно выделить команды, безразличные к знаку числа (например, inc, add, test), команды, предназначенные для обработки чисел без знака (mul, div и др.), а также команды, специально рассчитанные на обработку чисел со знаком (imul, idiv и т.д.). Особенности использования этих команд будут описаны в следующей главе. Рассмотрим теперь другой вид представления чисел - двоично-десятичный формат (binary-coded decimal , BCD), используемый в ряде прикладных областей. В таком формате выдают данные некоторые измерительные приборы; он же используется КМОП-часами реального времени компьютеров IBM PC для хранения информации
о текущем времени. В МП 86 предусмотрен ряд команд для обработки таких чисел. Двоично-десятичный формат существует в двух разновидностях: упакованный и распакованный. В первом случае в байте записывается двухразрядное десятичное число от 00 до 99. Каждая цифра числа занимает половину байта и хранится в двоичной форме. Из рис. 2.11 можно заметить, что для записи в байт десятичного числа в двоично-десятичном формате достаточно сопроводить записываемое десятичное число символом h. 1000 01 10 Двоичное содержимое байта Десятичное обозначение числа S 6h Шестнадцатеричное обозначение числа Рис. 2.11. Упакованный двоично-десятичный формат. В машинном слове или в 16-разрядном регистре можно хранить в двоично- десятичном формате четырехразрядные десятичные числа от 0000 до 9999 (рис.2.12) . 1001 о 11 Li 0000 0100 Двоичное содержимое слова 9 £ 0 4 Десятичное обозначение числа 9 £ 0 4h Шестнадцатеричное обозначение числа Рис. 2.12. Запись десятичного числа 9604 в слове. Распакованный формат отличается от упакованного тем, что в каждом байте записывается лишь одна десятичная цифра (по-прежнему в двоичной форме). В этом случае в слове можно записать десятичные числа от 00 до 99 (см. рис. 2.13) 1000 Двоичное содержимое слова Десятичное обозначение числа 8h Шестнадцатеричное обозначение числа Рис. 2.13. Запись десятичного числа 98 в распакованном виде. При хранении десятичных чисел в аппаратуре обычно используется более экономный упакованный формат; умножение и деление выполняются только с распакованными числами, операции же сложения и вычитания применимы и к тем, и к другим. Примеры операций с двоично-десятичными числами будут рассмотрены в следующей главе. 0000 1001 0000 0 9
Описание данных Практически любая программа содержит в себе перечень данных, с которыми она работает. Это могут быть символьные строки, предназначенные для вывода на экран; числа, определяющие ход выполнения программы или участвующие в вычислениях; адреса подпрограмм, обработчиков прерываний или просто тех или иных полей программы; специальные коды, например, коды цвета выводимых на экран символов и т.д. Кроме данных, определяемых в тексте программы, в программу часто входят зарезервированные поля, предназначенные для заполнения по ходу выполнения программы, например, результатами вычислений или путем чтения из файла. Все эти данные и зарезервированные поля должны быть определены в составе сегмента данных программы (в принципе они могут быть определены, и часто определяются, не в сегменте данных, а в сегменте команд, но здесь мы не будем касаться этого вопроса). Для определения данных используются, главным образом, три директивы ассемблера: db (define byte, определить байт) для записи байтов, dw (define word, определить слово) для записи слов и dd (define double, определить двойное слово) для записи двойных слов: db 255 dw 6.5535 dd 100000000 Кроме перечисленных, имеются и другие директивы, например df (определить поле из 6 байт), dq (определить четверное слово) или dt (определить 10- байтовую переменную), но они используются значительно реже. Для того чтобы к данным можно было обращаться, они должны иметь имена. Имена данных могут включать латинские буквы, цифры (не в качестве первого знака имени) и некоторые специальные знаки, например, знаки подчеркивания (_), доллара ($) и коммерческого at (@). Длину имени некоторые ассемблеры ограничивают (например, ассемблер MA.SM - 31 символом) , другие - нет, но в любом случае слишком длинные имена затрудняют чтение программы. С другой стороны, имена данных следует выбирать таким образом, чтобы они отражали назначение конкретного данного, например counter для счетчика или filename для имени файла: counter dw 10000 filename db "a:\myfile.001' Значения числовых данных можно записывать в различных системах счисления; чаще других используются десятичная и 16-ричная запись: size dw 256 ;В ячейку size записывается ;десятичное число 256 setb7 db 80h ;В ячейку setb7 записывается ;16-ричное число 8 Oh Необходимо отметить неточность приведенных выше комментариев. В памяти компьютера могут храниться только двоичные коды. Если мы говорим, что в какой-то ячейке записано десятичное число 128, мы имеем в виду не физическое содержимое ячейки, а лишь форму представления этого числа в исходном тексте программы. В слове с именем size фактически будет записан двоичный код 0000000100000000, являющийся двоичным эквивалентом десятичного числа 256. Во
втором случае в байте с именем setb7 будет записан двоичный эквивалент шестнадцатиричного числа 8Oh, который составляет 10000000 (т.е. байт с установленным битом 7, откуда и получила имя эта ячейка). Для резервирования места под массивы используется оператор dup (duplicate, дублировать), который позволяет "размножить" байт, слово или двойное слово заданное число раз: rawdata dw 300 dup (1) /Резервируются 300 слов, /заполненных числом 1 string db 80 dup ('А') /Резервируются 80 байтов, ;заполненных знаком 'Л' Присвоение данным символических имен позволяет обращаться к ним в программных предложениях, не заботясь о фактических адресах этих данных. Например, команда mov АХ,size занесет в регистр АХ содержимое ячейки size (число 256), независимо от того, в каком месте сегмента данных эта ячейка определена, и в какое место физической памяти она попала. Однако программист, использующий язык ассемблера, должен иметь отчетливое представление о том, каким образом назначаются адреса ячейкам программы, и уметь работать не только с символическими обозначениями, но и со значениями адресов. Для обсуждения этого вопроса рассмотрим пример сегмента данных, в котором определяются данные различных типов. В левой колонке укажем смещения данных (в шестнадцатеричной форме), вычисляемые относительно начала сегмента. data segment 0000h counter dw 10000 0002h pages db "Страница 1" OOOCh numbers db 0, 1, 2, 3, 4 OOllh page_addr dw pages data ends Сегмент данных начинается с данного по имени counter, которое описано, как слово (2 байт) и содержит число 10000. Очевидно, что его смещение равно 0. Поскольку это данное занимает 2 байт, следующее за ним данное pages получило смещение 2. Данное pages описывает строку текста длиной 10 символов и занимает в памяти столько же байтов, поэтому следующее данное numbers получило относительный адрес 2 + 10 = 12 = Ch. В поле numbers записаны 5 байтовых чисел, поэтому последнее данное сегмента с именем page_addr размещается по адресу Ch + 5 = llh. Ассемблер, начиная трансляцию сегмента (в данном случае сегмента данных) начинает отсчет его относительных адресов. Этот отсчет ведется в специальной переменной транслятора (не программы!), которая называется счетчиком текущего адреса и имеет символическое обозначение знака доллара ($). По мере обработки полей данных, их символические имена сохраняются в создаваемой ассемблером таблице имен вместе с соответствующими им значениями счетчика текущего адреса . Другими словами, введенные нами символические имена получают значения, равные их смещениям. Таким образом, с точки зрения транслятора counter равно 0, pages - 2, numbers - Ch и т.д. Поэтому предложение
page_addr dw pages трактуется ассемблером, как page_addr dw 2 и приводит к записи в слово с относительным адресом llh числа 2 (смещения строки pages). Приведенные рассуждения приходится использовать при обращении к "внутренностям" объявленных данных. Пусть, например, мы хотим выводить на экран строки "Страница 2", "Страница 3", "Страница 4" и т.д. Можно, конечно, все эти строки описать в сегменте данных по отдельности, но это приведет к напрасному расходу памяти. Экономнее поступить по-другому: выводить на экран одну и ту же строку pages, но модифицировать в ней номер страницы. Модификацию номера можно выполнить с помощью, например, такой команды: mov pages + 9, ' 2' Здесь мы "вручную" определили смещение интересующего нас символа в строке, зная, что все данные размещаются ассемблером друг за другом в порядке их объявления в программе. При этом, какое бы значение не получило имя pages, выражение pages + 9 всегда будет соответствовать байту с номером страницы. Таким же приемом можно воспользоваться при обращении к данному numbers, которое в сущности представляет собой небольшой массив из 5 чисел. Адрес первого числа в этом массиве равен просто numbers, адрес второго числа - numbers + 1, адрес третьего - numbers + 2 и т.д. Следующая команда прочитает последний элемент этого массива в регистр DL: mov DL,numbers+4 Какой смысл имело объединение ряда чисел в массив numbers? Да никакого, если к этим числам мы все равно обращаемся по отдельности. Удобнее было объявить этот массив таким образом: nmbO db О nmbl db 1 nmb2 db 2 nmb3 db 3 nmb4 db 4 В этом случае для обращения к последнему элементу не надо вычислять его адрес, а можно воспользоваться именем nmb4. Если, с другой стороны, мы хотим работать с числами, как с массивом, используя индексы отдельных элементов (о чем речь будет идти позже), то присвоение массиву общего имени представляется естественным. Получение последнего элемента массива по его индексу выполняется с помощью такой последовательности команд: mov SI,4 /Индекс элемента в массиве mov DL,numbers[SI] /Обращение по адресу /numbers + содержимое SI
Иногда желательно обращаться к элементам массива (обычно небольшого размера) то с помощью индексов, то по их именам. Для этого надо к описанию массива, как последовательности отдельных данных, добавить дополнительное символическое описание адреса начала массива с помощью директивы ассемблера label (метка): numbers label byte nmbO db 0 nmbl db 1 nmb2 db 2 nmb3 db 3 nmb4 db 4 Метка numbers должна быть объявлена в данном случае с описателем byte, так как данные, следующие за этой меткой, описаны как байты и мы планируем работать с ними именно как с байтами. Если нам нужно иметь массив слов, то отдельные элементы массива следует объявить с помощью директивы dw, а метке numbers придать описатель word: numbers label word nmbO dw 0 nmbl dw 1 nmb2 dw 2 nmb3 dw 3 nmb4 dw 4 В чем состоит различие двух последних описаний данных? Различие есть, и весьма существенное. Хотя в обоих случаях в память записывается натуральный ряд чисел от 0 до 4, однако в первом варианте под каждое число в памяти отводится один байт, а во втором - слово. Если мы в дальнейшем будем изменять значения элементов нашего массива, то в первом варианте каждому числу можно будет задавать значения от 0 до 255, а во втором - от 0 до 65535. Выбирая для данных способ их описания, необходимо иметь в виду, что ассемблер выполняет проверку размеров используемых данных и не пропускает команды, в которых делается попытка обратиться к байтам, как к словам, или к словам - как к байтам. Рассмотрим последний вариант описания массива numbers. Хотя под каждый элемент выделено целое слово, однако, реальные числа невелики и вполне поместятся в байт. Может возникнуть искушение поработать с ними, как с байтами, перенеся предварительно в байтовые регистры: mov AL,nmbO /Переносим nmbO в AL mov DL,nmbl /Переносим nmbl в DL mov CL,nmb2 /Переносим nmb2 в CL Так делать нельзя. Транслятор сообщит о грубой ошибке - несоответствии типов, и не будет создавать объектный файл. Однако довольно часто возникает реальная потребность в операциях такого рода. Для таких случаев предусмотрен специальный атрибутивный оператор byte ptr (byte pointer, байтовый указатель) , с помощью которого можно на время выполнения одной Команды изменить размер операнда: mov AL,byte ptr nmbO mov DL,byte ptr nmbl
mov CL,byte ptr nmb2 Эти команды транслятор рассматривает, как правильные. Часто возникает необходимость выполнить обратную операцию - к паре байтов обратиться, как к слову. Для этого надо использовать оператор word ptr: okey db 'OK' mov AX,word ptr okey Здесь оба байта из байтовой переменной okey переносятся в регистр АХ. При этом первый по порядку байт, т.е. байт с меньшим адресом, содержащий букву "О" (можно считать, что он является младшим в слове "ОК"), отправится в младшую половину АХ - регистр AL, а второй по порядку байт, с буквой "К", займет регистр АН. До сих пор речь шла о данных, которые, в сущности, являлись переменными, в том смысле, что под них выделялась память и их можно было модифицировать. Язык ассемблера позволяет также использовать константы, которые являются символическими обозначениями чисел и могут использоваться всюду в тексте программы, как наглядные эквиваленты этих чисел: maxsize = OFFFFh mov СХ,maxsize mov CX,OFFFFh Последние две команды полностью эквивалентны. При определении констант допустимо выполнение арифметических операций. Пусть нам надо Задать позицию символа (или строки символов) на экране. Учитывая, что каждый символ записывается в видеопамяти в двух байтах (в первом - код ASCII символа, а во втором - его атрибут), строка экрана имеет длину 80 символов, а высота экрана составляет 25 строк, то для вывода некоторого символа в середину экрана его смещение в видеопамяти от начала видеостраницы можно определить следующим образом: position=80*2*12+40*2 Такая запись достаточно наглядна, и ее легко модифицировать, если мы решим вывести символ в какую-то другую область экрана. Константами удобно пользоваться для определения длины текстовых строк: mes db 'Ждите' mes_len = $-mes В этом примере константа mes_len получает значение длины строки mes (в данном случае 5 байт), которая вычисляется как разность значения счетчика текущего адреса после определения строки и ее начального адреса mes. Такой способ удобен тем, что при изменении содержимого строки достаточно перетранслировать программу, и та же константа mes len автоматически получит новое значение.
Структуры Структуры представляют собой шаблоны с описаниями форматов данных, которые можно накладывать на различные участки памяти, чтобы затем обращаться к полям этих участков с помощью мнемонических имен, определенных в описании структуры. Структуры особенно удобны в тех случаях, когда мы обращаемся к областям памяти, не входящим в сегменты программы, т.е. к полям, которые нельзя описать с помощью символических имен. Используются структуры также и в тех случаях, когда в программе многократно повторяются сложные коллекции данных с единым строением, но различающимися значениями. Пусть в программе, выполняющей обработку медицинской информации о пациентах, надо объявить несколько блоков данных с однородными сведениями о нескольких пациентах. Такой комплект данных удобно оформить в виде структуры, придав как всей структуре, так и составляющим се данным наглядные имена: meddata struc index dd О sex db 0 birth dw 0 datein db ' / / dateout db ' / / meddata ends /Структура с именем meddata ; Номер карты ;Пол ;Год рождения ;Дата поступления ;Дата выписки /Конец описания структуры Описание структуры можно располагать в любом месте программы, но до описания конкретных структурных переменных. Транслятор, встретившись с описанием структуры, не транслирует ее текст, т.е. не выделяет место в памяти, а просто запоминает приведенное описание, чтобы воспользоваться им в дальнейшем, если в программе встретятся объявления переменных типа этой структуры. В сегменте данных можно объявить любое количество переменных, соответствующих по составу описанной ранее структуре, дав им произвольные имена. Эти переменные можно заполнить при их объявлении конкретными данными (разумеется, соответствующими элементам описанной ранее структуры), но можно и не указывать конкретных данных, если данную переменную предполагается инициализировать не на этапе ее объявления, а по ходу выполнения программы. В последнем случае транслятор выделяет под переменную место в памяти (в нашем примере 23 байт), заполнив ее той конкретной информацией, которая была указана в описании структуры: data segment pat 1 meddata <1234567, 'м',1955, 13/06/981, 45/06/98'> pat2 meddata <1982234, 'м',1932, '18/06/98', '25/06/98 '> pat3 meddata <4389012, 'ж',1966, '01/12/97', '15/12/97'> pattemp meddata <> data ends Имена patl, pat2 и т.д. будут служить именами переменных, каждая из которых содержит полный комплект данных об одном пациенте. Угловые скобки ограничивают конкретные данные, поступающие в каждую структурную переменную. Для переменной с именем pattemp транслятор выделит в памяти 23 байт, поместив в нее в точности то, что было указано в описании структуры (нули и два символьные шаблона для даты):
0,0,0, ' / / ',' / / При обработке данных в программе можно пользоваться мнемоническими обозначениями всей структуры и ее составляющих, причем имена элементов структуры должны отделяться точкой: mov ЕАХ,patl.index ;ЕАХ=1234567 mov SI,offset patl.datein ;31=смещение элемента patl.datein mov DL,pat3.sex ;БЬ='ж' Особенности использования в приложениях DOS 32-разрядных регистров (ЕАХ в первой строке приведенного фрагмента) будут описаны в гл. 4. Адрес конкретной структурной переменной можно поместить в базовый или индексный регистр, и пользоваться им в конструкциях с косвенной адресацией: mov ВХ,offset pat3 ;ВХ=смещение pat3 mov ЕАХ,[ВХ].index ;ЕАХ=4389012 mov [BX].sex='M' /Программная инициализация Имена элементов структуры являются, в сущности, смещениями к этим элементам от начала структуры. В некоторых случаях их можно использовать в этом качестве и без предваряющей точки: mov ВХ, offset pat2 ;ВХ=смещение pat2 add BX,sex ;ВХ=смещение pat2.sex mov DL, [BX] ;DL='M' mov SI,birth ;SI=5 (сомнительная команда) Записи Записи, как и структуры, представляют собой шаблоны, накладываемые на реальные данные с целью введения удобных мнемонических обозначений отдельных элементов данных. В отличие от структур, дающих имена байтам, словам, двойным словам или целым массивам, в записях определяются строки битов внутри байтов, слов или двойных слов. Известно, что дата создания файла хранится в каталоге диска в виде 16- битового слова, в котором старшие 7 бит обозначают год (от 1980), следующие 4 бит - месяц и последние 5 бит - день (рис. 2.14). Биты слова 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 А А . А А _ _! Год Месяц День Рис. 2.14. Формат записи даты в каталоге диска. Эти данные удобно специфицировать с помощью записи filedate, определяемой в программе следующим образом:
fdate record year:7, month: 4, day:5 Ключевое слово record говорит о том, что имя fdate относится к записи, а мнемонические обозначения year, month и day являются произвольными именами отдельных битовых полей описываемого слона. Включение в программу описания шаблона битовых полей позволяет отказаться от утомительного и чреватого ошибками определения "вручную" содержимого полного данного по задаваемым значениям его отдельных составляющих. Для приведенной выше записи объявления конкретных переменных будут выглядеть следующим образом: filel fdate <5,6,7> ;7 июня 1985г. file2 fdate <18,12,30> ;30 декабря 1998г. file3 fdate О /"Пустая" (пока) переменная Переменная filel будет определена, как число 0AC7h, file2 - как число 259Eh, a file3 - как число OOOOh. При необходимости программного заполнения переменной типа fdate можно пользоваться именами ее составляющих, которые трактуются ассемблером, как индексы соответствующих битовых полей, отсчитываемые от младшего конца слова. Однако в системе команд МП 86 практически нет средств работы с битовыми полями. Поэтому программное заполнение придется осуществлять с помощью команд сдвигов и логического сложения: mov flle3,30 mov АХ,12 mov CL,month shl AX,CL or file3,AX mov AX, 18 mov CL,month shl AX,CL or file3,AX /Помещаем день /Месяц пока в АХ /Будем сдвигать на month бит / Сдвинули месяц в АХ на 5 бит /Добавили биты месяца в file3 /Год пока в АХ /Будем сдвигать на year бит /Сдвинули год в АХ на 9 бит /Добавили биты года в file3 В итоге в переменной file3 окажется тот же код 259Eh, что и в переменной file2. Способы адресации Способом, или режимом адресации называют процедуру нахождения операнда для выполняемой команды. Если команда использует два операнда, то для каждого из них должен быть задан способ адресации, причем режимы адресации первого и второго операнда могут, как совпадать, так и различаться. Операнды команды могут находиться в разных местах: непосредственно в составе кода команды, в каком-либо регистре, в ячейке памяти/ в последнем случае существует несколько возможностей указания его адреса. Строго говоря, способы адресации являются элементом архитектуры процессора, отражая заложенные в нем возможности поиска операндов. С другой стороны, различные способы адресации определенным образом обозначаются в языке ассемблера и в этом смысле являются разделом языка. Следует отметить неоднозначность термина "операнд" применительно к программам, написанным на языке ассемблера. Для машинной команды операндами являются те данные (в сущности, двоичные числа), с которыми она имеет дело. Эти данные могут, как уже отмечалось, находиться в регистрах или в памяти. Если же рас-
сматривать команду языка ассемблера, то для нее операндами (или, лучше сказать, параметрами) являются те обозначения, которые позволяют сначала транслятору, а потом процессору определить местонахождение операндов машинной команды. Так, для команды ассемблера mov mem, АХ в качестве операндов используется обозначение ячейки памяти mem, а также обозначение регистра АХ. В то же время, для соответствующей машинной команды операндами являются содержимое ячейки памяти и содержимое регистра. Было бы правильнее говорить об операндах машинных команд и о параметрах, или аргументах команд языка ассемблера. По отношению к командам ассемблера было бы правильнее использовать термин "параметры", оставив за термином "операнд" обозначение тех физических объектов, с которыми имеет дело процессор при выполнении машинной команды, однако обычно эти тонкости не принимают в расчет, и говоря об операндах команд языка, понимают в действительности операнды машинных команд. В архитектуре современных 32-разрядных процессоров Intel предусмотрены довольно изощренные способы адресации; в МП 86 способов адресации меньше. В настоящем разделе будут описаны режимы адресации, используемые в МП 86. В книгах, посвященных языку ассемблера, можно встретить разные подходы к описанию способов адресации: не только названия этих режимов, но даже и их количество могут различаться. Разумеется, способов адресации существует в точности столько, сколько их реализовано в процессоре; однако, режимы адресации можно объединять в группы по разным признакам, отчего и создается некоторая путаница, в том числе и в количестве имеющихся режимов. Мы будем придерживаться распространенной, но не единственно возможной терминологии. Регистровая адресация. Операнд (байт или слово) находится в регистре. Этот способ адресации применим ко всем программно-адресуемым регистрам процессора. inc СН ;Плюс 1 к содержимому СН push DS ;DS сохраняется в стеке xchg ВХ,ВР ;ВХ и BP обмениваются содержимым mov ES, АХ ;Содержимое АХ пересылается в ES Непосредственная адресация. Операнд (байт или слово) указывается в команде и после трансляции поступает в код команды; он может иметь любой смысл (число, адрес, код ASCII), а также быть представлен в виде символического обозначения . mov АН, 4Oh ;Число 4Oh загружается в АН mov AL,'*' ;Код ASCII символа "*' загружается в AL int 21h ;Команда прерывания с аргументом 21h limit = 528 ;Число 528 получает обозначение limit mov СХ,limit ;Число, обозначенное limit, загружается в СХ Команда mov, использованная в последнем предложении, имеет два операнда; первый операнд определяется с помощью регистровой адресации, второй - с помощью непосредственной.
Важным применением непосредственной адресации является пересылка относительных адресов (смещений). Чтобы указать, что речь идет об относительном адресе данной ячейки, а не об ее содержимом, используется описатель offset (смещение): ; Сегмент данных mes db "Урок 1' /Строка символов ;Сегмент команд mov DX,offset mes /Адрес строки засылается в DX В приведенном примере относительный адрес строки mes, т.е. расстояние в байтах первого байта этой строки от начала сегмента, в котором она находится, Заносится в регистр DX. Прямая адресация памяти. Адресуется память; адрес ячейки памяти (слова или байта) указывается в команде (обычно в символической форме) и поступает в код команды: ;Сегмент данных meml dw 0 /Слово памяти содержит О mem2 db 230 ;Байт памяти содержит 230 ;Сегмент команд inc meml /Содержимое слова meml увеличивается на 1 mov DX, meml /Содержимое слова с именем menu загружается в DX mov AL, mem2 /Содержимое байта с именем mem2 загружается в AL Сравнивая этот пример с предыдущим, мы видим, что указание в команде имени ячейки памяти обозначает, что операндом является содержимое этой ячейки; указание имени ячейки с описателем offset - что операндом является адрес ячейки. Прямая адресация памяти на первой взгляд кажется простой и наглядной. Если мы хотим обратиться, например, к ячейке meml, мы просто указываем ее имя в программе. В действительности, однако, дело обстоит сложнее. Вспомним, что адрес любой ячейки состоит из двух компонентов: сегментного адреса и смещения. Обозначения meml и mem2 в предыдущем примере, очевидно, являются смещениями. Сегментные же адреса хранятся в сегментных регистрах. Однако сегментных регистров четыре: DS, ES, CS и SS. Каким образом процессор узнает, из какого регистра взять сегментный адрес, и как сообщить ему об этом в программе? Процессор различает группу кодов, носящих название префиксов. Имеется несколько групп префиксов: повторения, размера адреса, размера операнда, замены сегмента. Здесь нас будут интересовать префиксы замены сегмента. Команды процессора, обращающиеся к памяти, могут в качестве первого байта своего кода содержать префикс замены сегмента, с помощью которого процессор определяет, из какого сегментного регистра взять сегментный адрес. Для сегментного регистра ES код префикса составляет 26h, для SS - 36h, для CS - 2Еп. Если префикс отсутствует, сегментный адрес берется из регистра DS (хотя для него тоже предусмотрен свой префикс). Если в начале программы с помощью директивы assume указано соответствие сегменту данных сегментного регистра DS assume DS:data
то команды обращения к памяти транслируются без какого-либо префикса, а процессор при выполнении этих команд берет сегментный адрес из регистра DS. Если в директиве assume указано соответствие сегмента данных регистру ES assume ES:data (в этом случае сегмент данных должен располагаться перед сегментом команд), то команды обращения к полям этого сегмента транслируются с добавлением префикса замены для сегмента ES. При этом предложения программы выглядят обычным образом; в них по-прежнему просто указываются имена полей данных, к которым производится обращение. Однако в ряде случаев префикс замены сегмента должен указываться в программе в явной форме. Такая ситуация возникает, например, если данные расположены в сегменте команд, что типично для резидентных обработчиков прерываний. Для обращения к таким данным можно, конечно, использовать регистр DS, если предварительно настроить его на сегмент команд, но проще выполнить адресацию через регистр CS, который и так уже настроен должным образом. Если в сегменте команд содержится поле данных с именем mem, то команда чтения из этого поля будет выглядеть следующим образом: mov АХ,CS:mem В этом случае транслятор включит в код команды префикс замены для сегмента CS. Другие примеры команд с заменой сегмента будут приведены ниже. До сих пор мы обсуждали адресацию ячеек, содержащихся в сегментах данных программы. Однако часто бывает нужно обратиться к памяти вне пределов программы: к векторам прерываний, системным таблицам, видеобуферу и т.д. Разумеется, такое обращение возможно, только если мы знаем абсолютный адрес интересующей нас ячейки. В этом случае необходимо сначала настроить один из сегментных регистров на начало интересующей нас области, после чего можно адресоваться к ячейкам по их смещениям. Пусть требуется вывести в левый верхний угол экрана несколько символов, например , два восклицательных знака. Эту операцию можно реализовать с помощью следующих команд: mov AX,0B800h ;Сегментный адрес видеобуфера mov Е S,АХ ;Отправим его в Е S mov byte ptr ES:0, '!' /Отправим символ на 1-е знакоместо экрана mov byte ptr ES:2, '!' /Отправим символ на 2-е знакоместо экрана Настроив регистр ES на сегментный адрес видеобуфера В800п, мы пересылаем код знака "!" сначала по относительному адресу 0 (в самое начало видеобуфера, в байт со смещением 0), а затем на следующее знакоместо, имеющее смещение 2 (в нечетных байтах видеобуфера хранятся атрибуты символов, т.е. цвет символов и фона под ними). В обеих командах необходимо с помощью обозначения ES: указать сегментный регистр, который используется для адресации памяти. Встретившись с этим обозначением, транслятор включит в код команды префикс замены сегмента, в данном случае код 2 6h.
В приведенном примере мы снова столкнулись с использованием атрибутивного оператора byte ptr, который позволяет в явной форме задать размер операнда. Однако если раньше этот оператор использовался, чтобы извлечь байт из данных, объявленного, как слово, то здесь его назначение иное. Транслятор, обрабатывая команду mov byte ptr ES:0, '!' не имеет возможности определить размер операнда-приемника. Разумеется, видеобуфер , как и любая память, состоит из байтов, однако надо ли рассматривать эту память, как последовательность байтов или слов? Команда без явного задания размера операнда mov ES:0, '!' вызовет ошибку трансляции, так как ассемблер не сможет определить, надо ли транслировать это предложение, как команду пересылки в видеобуфер байта 2lh, или как команду пересылки слова 002lh. Между прочим, на первый взгляд может показаться, что в обсуждаемой команде достаточно ясно указан размер правого операнда, так как символ (в данном случае "!") всегда занимает один байт. Однако транслятор, встретив обозначение "!", сразу же преобразует его в код ASCII этого символа, т.е. в число 21h, и уже не знает, откуда это число произошло, и какой размер оно имеет. Стоит еще отметить, что указание в команде описателя word ptr mov word ptr ES:0, ' ! ' не вызовет ошибки трансляции, но приведет к неприятным результатам. В этом случае в видеобуфер будет записано слово 0021h, которое заполнит байт 0 видеобуфера кодом 21h, а байт 1 кодом 00h. Однако атрибут 00h обозначает черный цвет на черном фоне, и символ на экране виден не будет (хотя и будет записан в видеобуфер). При желании можно избавиться от необходимости вводить описатель размера операнда. Для этого надо пересылать не непосредственное данное, а содержимое регистра: mov AL, ' ! ' mov ES:0,AL Здесь операндом-источником служит регистр AL, размер которого (1 байт) известен, и размер операнда-приемника определять не надо. Разумеется, команда mov ES:0,АХ заполнит в видеобуфере не байт, а слово. Для адресации к видеобуферу в вышеприведенном примере использовался сегментный регистр дополнительных данных ES. Это вполне естественно, так как обычно регистр DS служит для обращения к полям данных программы, а регистр ES как раз и предназначен для адресации всего остального. Однако при необходимости можно было воспользоваться для записи в видеобуфер регистром DS:
mov AX,0B800h mov DS,AX mov byte ptr DS:0, /Сегментный адрес ; видеобуфера в DS ; Символ в видеобуфер Любопытно, что хотя обозначение DS: здесь необходимо, транслятор не включит в код команды префикс замены сегмента, так как команда без префикса выполняет адресацию по умолчанию через DS. Если, однако, по умолчанию выполняется адресация через DS, то нельзя ли опустить в последней команде обозначение сегментного регистра? Нельзя, так как обозначение DS: число указывает, что число является не непосредственным операндом, а адресом операнда. Команда (неправильная) должна была бы переслать число 10 в число 6, что, разумеется, лишено смысла и выполнено быть не может. Команда же mov DS:6,10 пересылает число 10 по относительному адресу 6, что имеет смысл. Таким образом, обозначение сегментного регистра с двоеточием перед операндом говорит о том, что операнд является адресом. В дальнейшем мы еще столкнемся с этим важным правилом. Мы рассмотрели три важнейших способа адресации: регистровую, непосредственную и прямое обращение к памяти. Все остальные режимы адресации относятся к группе косвенной адресации памяти, когда в определении адреса ячейки памяти участвует один или несколько регистров процессора. Рассмотрим последовательно эти режимы. Регистровая косвенная (базовая и индексная). Адресуется память (байт или слово). Относительный адрес ячейки памяти находится в регистре, обозначение которого заключается в прямые скобки. В МП 86 косвенная адресация допустима только через регистры ВХ, BP, SI и DI. При использовании регистров ВХ или BP адресацию называют базовой, при использовании регистров SI или DI - индексной . Преобразуем приведенный выше пример, чтобы продемонстрировать использование косвенной адресации через регистр. mov AX,0B800h /Сегментный адрес mov ES,AX ; видеобуфера в ES mov ВХ,2000 /Смещение к середине экрана mov byte ptr ES:[ВХ], '!' /Символ на экран Настроив ES, мы засылаем в регистр ВХ требуемое смещение (для разнообразия к середине видеобуфера, который имеет объем точно 4000 байт), и в последней команде засылаем код в видеобуфер с помощью косвенной базовой адресации через пару регистров ES:BX с указанием замены сегмента (ES:). mov 6,10 Если косвенная адресация осуществляется через один из регистров ВХ, SI или DI, то подразумевается сегмент, адресуемый через DS, поэтому при адресации
через этот регистр обозначение DS: можно опустить: mov AX,0B800h mov DS,AX mov BX,2000 mov byte ptr [BX], /Сегментный адрес /видеобуфера в DS /Смещение к середине экрана / Символ на экран Кстати, этот фрагмент немного эффективнее предыдущего в смысле расходования памяти. Из-за отсутствия в коде последней команды префикса замены сегмента он занимает на 1 байт меньше места. Регистры ВХ, SI и DI в данном применении совершенно равнозначны, и с одинаковым успехом можно воспользоваться любым из них: mov D1,2 0 0 0 /Смещение к середине экрана mov byte ptr [DI] , '!' /Символ на экран Не так обстоит дело с регистром BP. Этот регистр специально предназначен для работы со стеком, и при адресации через этот регистр в режимах косвенной адресации подразумевается сегмент стека/ другими словами, в качестве сегментного регистра по умолчанию используется регистр SS. Обычно косвенная адресация к стеку используется в тех случаях, когда необходимо обратиться к данным, содержащимся в стеке, без изъятия их оттуда (например, если эти данные приходится считывать неоднократно). Пример такого рода операций будет приведен при обсуждении следующего режима адресации. Сравнивая приведенные выше фрагменты программ, можно заметить, что использование базовой адресации, на первый взгляд, снижает эффективность программы, так как требует дополнительной операции - загрузки в базовый регистр требуемого адреса. Действительно, базовая адресация в нашем примере не оправдана - в случае прямого обращения к памяти вместо двух команд mov ВХ,2000 /Смещение к середине экрана mov byte ptr ES: [ВХ] , '!' /Символ на экран можно использовать одну mov byte ptr ES:2000, ' ! ' /Выведем символ в середину экрана Однако команда с базовой адресацией занимает меньше места в памяти (так как в нее не входит адрес ячейки) и выполняется быстрее команды с прямой адресацией (из-за того, что команда короче, процессору требуется меньше времени на ее считывание из памяти). Поэтому базовая адресация эффективна в тех случаях, когда по заданному адресу приходится обращаться многократно, особенно, в цикле. Выигрыш оказывается тем больше, чем большее число раз происходит обращение по указанному адресу. С другой стороны, возможности этого режима адресации невелики, и на практике чаще используют более сложные способы, которые будут рассмотрены ниже. Регистровая косвенная адресация со смещением (базовая и индексная). Адресуется память (байт или слово). Относительный адрес операнда определяется, как сумма содержимого регистра ВХ, BP, SI или DI и указанной в команде константы, иногда называемой смещением. Смещение может быть числом или адресом. Так же,
как и в случае базовой адресации, при использовании регистров ВХ, SI и DI подразумевается сегмент, адресуемый через DS, а при использовании BP подразумевается сегмент стека и, соответственно, регистр SS. Рассмотрим применение косвенной адресации со смещением на примере прямого вывода в видеобуфер. mov АХ,0В800п mov ES,AX mov DI, 80*2*24 mov byte ptr ES: [DI],'O' mov byte ptr ES:2[DI],'K' mov byte ptr ES:4[DI],'!' /Сегментный адрес /видеобуфера в ES /Смещение к нижней строке экрана /Символ на экран /Запишем символ в следующую позицию /Запишем символ в следующую позицию В этом примере в качестве базового выбран регистр DI; в него заносится базовый относительный адрес памяти, в данном случае смещение в видеобуфере к началу последней строки экрана. Модификация этого адреса с целью получить смещение по строке экрана осуществляется с помощью констант 2 и 4, которые при вычислении процессором исполнительного адреса прибавляются к содержимому базового регистра DI. Иногда можно встретиться с альтернативными обозначениями того же способа адресации, которые допускает ассемблер. Вместо, например, 4[ВХ] можно с таким же успехом написать [ВХ+4], 4+[ВХ] или [ВХ]+4. Такая неоднозначность языка ничего, кроме путаницы, не приносит, однако ее надо иметь в виду, так как с этими обозначениями можно столкнуться, например, рассматривая текст дезассемблированной программы. Рассмотрим теперь пример использования базовой адресации со смещением при обращении к стеку: /Основная программа push DS /В стек загружаются значения push ES /трех регистров, push SI /передаваемых подпрограмме call mysub /Вызов подпрограммы mysub, /использующей эти параметры /Подпрограмма mysub mov BP,SP /Поместим в BP текущий адрес вершины стека mov АХ,2[BP] /Читаем в АХ последний параметр (SI) mov ВХ,4[ВР] /Читаем в ВХ предыдущий параметр (ES) mov СХ,6[ВР] /Читаем в СХ первый параметр (DS) Здесь продемонстрирован классический прием чтения содержимого стека без извлечения из него этого содержимого. После того, как основная, программа сохранила в стеке три параметра, которые потребуются подпрограмме, командой call вызывается подпрограмма mysub. Эта команда сохраняет в стеке адрес возврата (адрес следующего за call предложения основной программы) и осуществляет переход на подпрограмму. Состояние стека при входе в подпрограмму приведено на рис. 2.15. Если бы подпрограмма просто сняла со стека находящиеся там параметры, она первым делом изъяла бы из стека адрес возврата, и лишила бы себя возможности вернуться в основную программу (подробнее вопросы вызова подпрограммы и воз-
врата из нее будут обсуждаться в последующих разделах). Поэтому в данном случае вместо команд pop удобнее воспользоваться командами mov. Подпрограмма копирует в BP содержимое трех параметров и перехода на мое SP и использует затем этот адрес в качестве базового, модифицируя его с помощью базовой адресации со смещением. Кстати, мы опять сталкиваемся здесь с той весьма обычной ситуацией, когда программист не имеет возможности обращаться по наглядным символическим адресам, которых в стеке, естественно, нет, а вынужден определять "вручную" смещения к интересующим его элементам стека. При этом необходимо учесть и алгоритм выполнения команды call, которая, сохраняя в стеке адрес возврата в основную программу, смещает указатель стека еще на одно слово. Смещения в сетке относительно текущего состояния SP О 2 4 6 Адрес возврата SI ES DS _Состояние SP после перехода на подпрограмму Параметры, загружаемые в стек основной программой -Исходное состояние SP Рис.2.15. Состояние стека после загрузки в него трех параметров и перехода на подпрограмму В нашем фрагментарном примере мы не рассматриваем вопрос возврата в основную программу. Вдумчивый читатель мог также усомниться в правильности или, лучше сказать, в разумности текста подпрограммы. Ведь перенося параметры из стека в регистры общего назначения, подпрограмма затирает их исходное содержимое. Если же они не содержали ничего нужного, то ими можно было воспользоваться для передачи параметров в подпрограмму, а не связываться с мало наглядными операциями со стеком. Действительно, ради краткости мы опустили операции, практически необходимые в любой подпрограмме - сохранение в стеке (опять в стеке!) тех регистров, которые будут использоваться в подпрограмме. Кстати, это относится и к регистру BP. В реальной подпрограмме эти действия следовало выполнить, что привело бы к изменению смещений при регистре ВХ, которые приняли бы значения (с учетом сохранения 4 регистров) 10, 12 и 14. Во всех приведенных выше примерах регистр использовался для хранения базового адреса, а смещение, если оно требовалось, указывалось в виде константы. Возможна и обратная ситуация, когда в качестве смещения выступает адрес массива, а в регистре находится индекс адресуемого элемента в этом массиве. Рассмотрим относительно реальный пример такого рода. Пусть нам надо заполнить массив из 10000 слов натуральным рядом чисел. Зарезервируем в сегменте данных место под этот массив, а в сегменте команд организуем цикл занесения в последовательные слова массива ряда нарастающих чисел. Нам придется воспользоваться несколькими новым командами (inc, add и
loop), которые в дальнейшем будут рассмотрены более подробно. ;Сегмент данных array dw 10000 ;Сегмент команд mov SI, 0 mov АХ, 0 mov СХ,10000 fill: mov array[SI],АХ inc AX add SI,2 loop fill /Начальное значение индекса элемента в массиве /Первое число-заполнитель /Число шагов в цикле (всегда в СХ) /Занесение числа в элемент массива /Инкремент числа-заполнителя /Смещение в массиве к следующему слову /Возврат на метку fill (СХ раз) Цикл начинается с команды, помеченной меткой fill (правила образования имен меток такие же, как и для имен полей данных) . В этой команде содержимое АХ, поначалу равное 0, переносится в ячейку памяти, адрес которой вычисляется, как сумма адреса массива array и содержимого индексного регистра SI, в котором в первом шаге никла тоже 0. В результате в первое слово массива заносится 0. Далее содержимое регистра АХ увеличивается на 1, содержимое регистра SI - на 2 (из-за того, что массив состоит из слов), и командой loop осуществляется переход на метку fill, после чего тело цикла повторяется при новых значениях регистров АХ и SI. Число шагов в цикле, отсчитываемое командой loop, определяется исходным содержимым регистра СХ. Базово-индексная адресация. Адресуется память (байт или слово). Относительный адрес операнда определяется, как сумма содержимого следующих пар регистров : [ВХ] [SI] (подразумевается DS:[BX][SI]) [ВХ] [DI] (подразумевается DS:[BX][DI]) [BP] [SI] (подразумевается SS:[BP][SI]) [BP] [DI] (подразумевается SS:[BP][DI]) Это чрезвычайно распространенный способ адресации, особенно, при работе с массивами. В нем используются два регистра, при этом одним из них должен быть базовый (ВХ или BP) , а другим - индексный (SI или DI) . Как правило, в одном из регистров находится адрес массива, а в другом - индекс в нем, при этом совершенно безразлично, в каком что. Трансформируем предыдущий пример, введя в него более эффективную базово-индексную адресацию. /Сегмент данных array dw 10000 /Сегмент команд mov ВХ,offset array /Базовый адрес массива в mov SI, 0 /базовом регистре /Начальное значение индекса mov АХ, 0 mov СХ,10000 fill: mov [ВХ][SI],АХ inc АХ add SI, 2 loop fill /элемента в массиве /Первое число-заполнитель /Число шагов в цикле /Отправим число в массив /Инкремент числа-заполнителя /Смещение в массиве к следующему слову /На метку fill (СХ раз)
Повышение эффективности достигается за счет того, что команда занесения числа в элемент массива оказывается короче (так как в нее не входит адрес массива) и выполняется быстрее, так как этот адрес не надо каждый раз считывать из памяти. Базово-индексная адресация со смещением. Адресуется память (байт или слово) . Относительный адрес операнда определяется как сумма содержимого двух регистров и смещения. Это способ адресации является развитием предыдущего. В нем используются те же пары регистров, но полученный с их помощью результирующий адрес можно еще сместить на значение указанной в команде константы. Как и в случае базово- индексной адресации, константа может представлять собой индекс (и тогда в одном из регистров должен содержаться базовый адрес памяти), но может быть и базовым адресом. В последнем случае регистры могут использоваться для хранения составляющих индекса. Приведем формальный пример рассматриваемого режима адресации. Пусть в сегменте данных определен массив из 24 байтов, в котором записаны коды латинских и русских символов верхнего ряда клавиатуры: sims db "QWERTYUIOP{}' db "ЙЦУКЕНПШЦЗХЪ' Последовательность команд mov ВХ,12 /Число байтов в строке mov SI, 6 mov DL,syms[BX][SI] Загрузит в регистр DL элемент с индексом 6 из второго ряда, т.е. код ASCII буквы Г. Тот же результат можно получить, загрузив в один из регистров не индекс, а адрес массива: mov ВХ, offset sym mov SI,6 mov DL, 12 [BX] [SI] Переходы Как уже отмечалось в гл. 1, присущий процессору алгоритм выполнения программы заставляет его выполнять команды программы друг за другом, в том порядке, как они были описаны в исходном тексте программы и содержатся в выполнимом модуле. Однако часто программисту требуется нарушить этот порядок, заставив процессор обойти некоторый участок программы, перейти на выполнение другой ветви или передать управление подпрограмме, имея в виду после ее завершения вернуться на прежнее место. Все эти операции осуществляются с помощью команд переходов. Переходы разделяются на безусловные, когда передача управления в другую точку программы осуществляется в безусловном порядке, независимо ни от каких обстоятельств, и условные, осуществляемые или не осуществляемые в зависимости от тех или иных условий: результатов сравнения, анализа, поиска и т.п. Безусловные переходы подразделяются на собственно переходы (без возврата в точку перехода) и вызовы подпрограмм (с возвратом после завершения подпрограммы).
Операции переходов и вызовов подпрограмм, помимо их практической ценности, представляют значительный методический интерес, так как затрагивают основу архитектуры процессора - сегментную адресацию памяти. Многочисленные разновидности команд переходов и вызовов обязаны своим существованием не столько потребностям практического программирования, сколько принципиальным архитектурным особенностям процессора. Отчетливое понимание этих особенностей и, соответственно, условий применения и возможностей различных операций переходов необходимо не только при использовании языка ассемблера, но и при программировании на языках высокого уровня, где иногда используется несколько иная терминология, но существо дела остается без изменения. Безусловные переходы осуществляются с помощью команды jmp, которая может использоваться в 5 разновидностях. Переход может быть: • прямым коротким (в пределах -128... + 127 байтов); • прямым ближним (в пределах текущего сегмента команд): • прямым дальним (в другой сегмент команд); • косвенным ближним (в пределах текущего сегмента команд через ячейку с адресом перехода); • косвенным дальним (в другой сегмент команд через ячейку с адресом перехода) . Рассмотрим последовательно структуру программ с переходами разного вида. Прямой короткий (short) переход. Прямым называется переход, в команде которого в явной форме указывается метка, на которую нужно перейти. Разумеется, эта метка должна присутствовать в том же программном сегменте, при этом помеченная ею команда может находиться как до, так и после команды jmp. Достоинство команды короткого перехода заключается в том, что она занимает лишь 2 байт памяти: в первом байте записывается код операции (EBh), во втором - смещение к точке перехода. Расстояние до точки перехода отсчитывается от очередной команды, т.е. команды, следующей за командой jmp. Поскольку требуется обеспечить переход как вперед, так и назад, смещение рассматривается, как число со знаком и, следовательно, переход может быть осуществлен максимум на 127 байт вперед или 128 байт назад. Прямой короткий переход оформляется следующим образом: code segment jmp short go ;Код ЕВ dd go: code ends Если программа транслируется ассемблером TASM, и в строке вызова транслятора указано, что трансляцию следует выполнить в два прохода tasm /т2 р,р,р то описатель short можно опустить, так как ассемблер сам определит, что расстояние до точки перехода укладывается в короткий переход, даже если метка до расположена после строки с командой jmp. При использовании транслятора
MASM указание описателя short обязательно (если метка до расположена после команды jmp). Здесь проявляются незначительные различия ассемблеров разных разработчиков. В комментарии указан код команды; dd (от displacement, смещение) обозначает байт со смещением к точке перехода от команды, следующей за командой jmp. При выполнении команды прямого короткого перехода процессор прибавляет значение байта dd к младшему байту текущего значения указателя команд IP (который, как уже говорилось, всегда указывает на команду, следующую за выполняемой) . В результате в IP оказывается адрес точки перехода, а предложения, находящиеся между командой jmp и точкой перехода, не выполняются. Между прочим, конструкция с прямым переходом вперед часто используется для того, чтобы обойти данные, которые по каким-то причинам желательно разместить в сегменте команд. Прямой ближний (near), или внутрисегментный переход. Этот переход отличается от предыдущего только тем, что под смещение к точке перехода отводится целое слово. Это дает возможность осуществить переход в любую точку 64- кбайтного сегмента. code segment jmp go ;Код E9 dddd go: code ends Метка go может находиться в любом месте сегмента команд, как до, так и после команды jmp. В коде команды dddd обозначает слово с величиной относительного смещения к точке перехода от команды, следующей за командой jmp. При выполнении команды прямого ближнего перехода процессор должен прибавить значение слова dddd к текущему значению указателя команд IP и сформировать тем самым адрес точки перехода. Что представляет собой смещение dddd? Какая это величина, со знаком или без знака? Если рассматривать смещение как величину без знака, то переход будет возможен только вперед, что, конечно, неверно. Если же смещение является величиной со знаком, то переход возможен не более чем на полсегмента вперед или на полсегмента назад, что тоже неверно. В действительности, рассматривая вычисление адреса точки перехода, следует иметь в виду явление оборачивания, суть которого можно кратко выразить такими соотношениями: FFFFh+0001h=0000h 0000h-0001h=FFFFh Если последовательно увеличивать содержимое какого-либо регистра или ячейки памяти, то, достигнув верхнего возможного предела FFFFh, число "перевалит" через эту границу, станет равным нулю и продолжит нарастать в области малых положительных чисел (1, 2, 3, и т.д.). Точно так же, если последовательно уменьшать некоторое положительное число, то оно, достигнув нуля, перейдет в область отрицательных (или, что то же самое, больших без знаковых) чисел, проходя значения 2, 1, 0, FFFFh, FFFEh и т.д.
Таким образом, при вычислении адреса точки перехода смещение следует считать числом без знака, но при этом учитывать явление оборачивания. Если команда jmp находится где-то в начале сегмента команд, а смещение имеет величину порядка 64 К, то переход произойдет вперед, к концу сегмента. Если же команда находится в конце сегмента команд, а смещение имеет ту же величину порядка 64 К, то для определения точки перехода надо двигаться по сегменту вперед, дойти до его конца и продолжать перемещаться от начала сегмента по- прежнему вперед, пока не будет пройдено заданное в смещении число байтов. Для указанных условий мы попадем в точку, находящуюся недалеко от команды jmp со стороны меньших адресов. Итак, с помощью команды ближнего перехода (команда jmp без каких-либо спецификаторов) можно перейти в любую точку в пределах данного сегмента команд. Для того, чтобы перейти в другой сегмент команд, следует воспользоваться командой дальнего перехода. Прямой дальний (far), или межсегментный переход. Этот переход позволяет передать управление в любую точку любого сегмента. При этом, очевидно, предполагается, что программный комплекс включает несколько сегментов команд. Команда дальнего перехода имеет длину 5 байт и включает, кроме кода операции EAh, еще и полный адрес точки перехода, т.е. сегментный адрес и смещение. Транслятору надо сообщить, что этот переход - дальний (по умолчанию команда jmp транслируется, как команда ближнего перехода). Это делается с помощью описателя far ptr, указываемого перед именем точки перехода. codel segment assume CS: codel /Сообщим транслятору, что это сегмент команд jmp far ptr go ,'Код EA dddd ssss codel ends code2 segment assume CS: code2 /Сообщим транслятору, что это сегмент команд до: code2 ends Метка до находится в другом сегменте команд этой двухсегментной программы. В коде команды ssss - сегментный адрес сегмента code2, a dddd - смещение точки перехода до в сегменте команд code2. Заметим, что при наличии в программе нескольких сегментов команд, каждый из них необходимо предварять директивой ассемблера assume CS:имя_сегмента, которая сообщает транслятору о том, что начался очередной сегмент команд. Это поможет транслятору правильно обрабатывать адреса меток, встречающихся в этом сегменте. Освоив применение команд дальних переходов, мы получили возможность создавать программы любой длины. Действительно, предусмотрев в конце каждого программного сегмента команду дальнего перехода на начало следующего, мы можем включить в программный комплекс любое число сегментов по 64 Кбайт. Единственное ограничение - чтобы они все поместились в памяти. В действительности так,
конечно, не делают. Разумнее дополнительные сегменты команд заполнить подпрограммами и вызывать их из основного сегмента (или друг из друга) по мере необходимости. Однако и в этом случае команды вызовов подпрограмм должны быть дальними. Разновидности подпрограмм и команд их вызова будут рассмотрены ниже . Все виды прямых переходов требуют указания в качестве точки перехода программной метки. С одной стороны, это весьма наглядно; просматривая текст программы, можно сразу определить, куда осуществляется переход. С другой стороны, такой переход носит статический характер - его нельзя настраивать по ходу программы. Еще более серьезный недостаток прямых переходов заключается в том, что они не дают возможность перейти по известному абсолютному адресу, т.е. не позволяют обратиться ни к системным средствам, ни вообще к другим загруженным в память программам (например, резидентным). Действительно, программы операционной системы не имеют никаких меток, так как метка - это атрибут исходного текста программы, а программы операционной системы транслировались не нами и присутствуют в компьютере только в виде выполнимых модулей. А вот адреса каких-то характерных точек системных программ определить можно, хотя бы из векторов прерываний. Для обращения по абсолютным адресам надо воспользоваться командами косвенных переходов, которые, как и прямые, могут быть ближними и дальними. Косвенный ближний (внутрисегментный) переход. В отличие от команд прямых переходов, команды косвенных переходов могут использовать различные способы адресации и, соответственно, иметь много разных вариантов. Общим для них является то, что адрес перехода не указывается явным образом в виде метки, а содержится либо в ячейке памяти, либо в одном из регистров. Это позволяет при необходимости модифицировать адрес перехода, а также осуществлять переход по известному абсолютному адресу. Рассмотрим случай, когда адрес перехода хранится в ячейке сегмента данных. Если переход ближний, то ячейка с адресом состоит из одного слова и содержит только смещение к точке перехода. code segment jmp DS:go_addr ;Код FF 26 dddd go: ; Точка перехода code ends data segment go_addr dw go ;Адрес перехода (слово) data ends Точка перехода go может находиться в любом месте сегмента команд. В коде команды dddd обозначает относительный адрес слова go_addr в сегменте данных, содержащем эту ячейку. В приведенном фрагменте адрес точки перехода в слове go_addr задан однозначно указанием имени метки до. Такой вариант косвенного перехода выполняет фактически те же функции, что и прямой (переход по единственному заданному заранее адресу), только несколько более запутанным образом. Достоинства кос-
венного перехода будут более наглядны, если представить, что ячейка go_addr поначалу пуста, а по ходу выполнения программы в нее, в зависимости от каких- либо условий, помещается адрес той или иной точки перехода: mov go_addr, offset gol mov go_addr, offset go2 mov go_addr, offset go3 Разумеется, приведенные выше команды должны выполняться не друг за другом, а альтернативно. В этом случае создается возможность перед выполнением перехода определить или даже вычислить адрес перехода, требуемый в данных условиях . Ассемблер допускает различные формы описания косвенного перехода через ячейку сегмента данных: jmp DS:go_addr jmp word ptr go_addr jmp go_addr В первом варианте, использованном в приведенном выше фрагменте, указано, через какой сегментный регистр надлежит обращаться к ячейке go_addr, содержащей адрес перехода. Здесь допустима замена сегмента, если сегмент с ячейкой go_addr адресуется через другой сегментный регистр, например, ES или CS. Во втором варианте подчеркивается, что переход осуществляется через ячейку размером в одно слово и, следовательно, является ближним. Ячейка go_addr могла быть объявлена с помощью директивы dd и содержать полный двухсловный адрес перехода, требуемый для реализации дальнего перехода. Однако ею можно воспользоваться и для ближнего перехода. Описатель word ptr перед именем ячейки с адресом перехода заставляет транслятор считать, что она имеет размер 1 слово (независимо от того, как она была объявлена), и что переход, следовательно, является ближним. Наконец, возможен и самый простой, третий вариант, который совпадает по форме с прямым переходом, но, тем не менее, является косвенным, так как символическое обозначение go_addr является именем поля данных, а не программной меткой. В этом варианте предполагается, что сегмент, в котором находится ячейка go_addr, адресуется по умолчанию через регистр DS, хотя, как и во всех таких случаях, допустима замена сегмента. Тип перехода (ближний или дальний) определяется, исходя из размера ячейки go_addr. Однако этот вариант не всегда возможен. Для его правильной трансляции необходимо, чтобы транслятору к моменту обработки предложения jmp go_addr было уже известно, что собой представляет имя go_addr. Этого можно добиться двумя способами. Первый - расположить сегмент данных до сегмента команд, а не после, как в приведенном выше примере. Второй - заставить транслятор обрабатывать исходный текст программы не один раз, как он это делает по умолчанию, а несколько. Число проходов для транслятора TASM можно задать при его вызове с помощью ключа /т#, где # - требуемое число проходов. В нашем случае достаточно двух проходов.
В приведенных примерах адрес поля памяти с адресом точки перехода задавался непосредственно в коде команды косвенного перехода. Однако этот адрес можно Задать и в одном из регистров общего назначения (ВХ, SI или DI) . Для приведенного выше примера косвенного перехода в точку до, адрес которой находится в ячейке go_addr в сегменте данных, переход с использованием косвенной регистровой адресации может выглядеть следующим образом: mov ВХ, offset go_addr ;В ВХ смещение поля с адресом перехода jmp [ВХ] /Переход в точку до Особенно большие возможности предоставляет методика косвенного перехода с использованием базово-индексной адресации через пары регистров, например, [ВХ] [SI] или [ВХ] [DI] . Этот способ удобен в тех случаях, когда имеется ряд альтернативных точек перехода, выбор которых зависит от некоторых условий. В этом случае в сегменте данных создается не одно поле с адресом, а таблица адресов переходов. В базовый регистр ВХ загружается адрес этой таблицы, а в один из индексных регистров - определенный тем или иным способом индекс в этой таблице. Переход осуществляется в точку, соответствующую заданному индексу. Структура программы, использующий такую методику, выглядит следующим образом: code segment mov ВХ, offset go_tbl mov SI, 4 jmp [BX] [SI] gol: go2 : go3: code ends /Загружаем в ВХ базовый адрес таблицы /Вычисленное каким-то /образом смещение в таблице /Если индекс =4, переход в точку доЗ /1-я точка перехода /2-я точка перехода /3-я точка перехода data segment go_tbl label word /Таблица адресов переходов gol_addr dw gol /Адрес первой альтернативной /точки перехода go2_addr dw go2 /Адрес второй альтернативной /точки перехода go3_addr dw доЗ /Адрес третьей альтернативной /точки перехода data ends Приведенный пример носит условный характер/ в реальной программе индекс, помещаемый в регистр SI, должен вычисляться по результатам анализа некоторых условий. Наконец, существует еще одна разновидность косвенного перехода, в котором не используется сегмент данных, а адрес перехода помещается непосредственно в один из регистров общего назначения. Часто такой переход относят к категории прямых, а не косвенных, однако, это вопрос не столько принципа, сколько терминологии .
Применительно к обозначениям последнего примера такой переход будет выглядеть, например, следующим образом: mov ВХ, offset gol jmp ВХ Здесь, как и в предыдущих вариантах, имеется возможность вычисления адреса перехода, однако нельзя этот адрес индексировать. Косвенный дальний (межсегментный) переход. Как и в случае ближнего перехода, переход осуществляется по адресу, который содержится в ячейке памяти, однако эта ячейка имеет размер 2 слова, и в ней содержится полный (сегмент плюс смещение) адрес точки перехода. Программа в этом случае должна включать, по меньшей мере, два сегмента команд. Структура программы с использованием косвенного дальнего перехода может выглядеть следующим образом: codel segment assume CS:codel,DS:data jmp DS:go_addr ; Код FF 2E dddd codel ends code2 segment assume CS:code2 go: ;Точка перехода в другом сегменте команд code2 ends data segment go_addr dd go /Двухсловный адрес точки перехода data ends Точка перехода go находится в другом сегменте команд этой двухсегментной программы. В коде команды dddd обозначает относительный адрес слова go_addr в сегменте данных. Ячейка go_addr объявляется директивой dd (define double, определить двойное слово) и содержит двухсловный адрес точки перехода; в первом слове содержится смещение до в сегменте команд codel, во втором слове сегментный адрес codel. Оба компонента адреса перехода могут быть вычислены и помещены в ячейку go_addr по ходу выполнения программы. Как и в случае ближнего косвенного перехода, ассемблер допускает различные формы описания дальнего косвенного перехода через ячейку сегмента данных: jmp DS:go_addr /Возможна Замена сегмента jmp dword ptr go_addr ;Если поле go_addr объявлено /операторами dw jmp go_addr /Характеристики ячейки должны ;быть известны
Для дальнего косвенного перехода, как и для ближнего, допустима адресация через регистр общего назначения, если в него поместить адрес поля с адресом перехода: mov ВХ,offset go_addr jmp [ВХ] Возможно также использование базово-индексной адресации, если в сегменте данных имеется таблица с двухсловными адресами точек переходов. Вызовы подпрограмм Практически в любой программе, независимо от ее содержания, встречаются участки, которые требуется выполнять (возможно, с небольшими изменениями) несколько раз по ходу программы. Такие повторяющиеся участки целесообразно выделить из общей программы, оформить в виде подпрограмм и обращаться к ним каждый раз, когда в основной программе возникает необходимость их выполнения. Подпрограмма, в зависимости от выполняемых ею функций, может требовать передачи из вызывающей программы определенных данных (называемых аргументами, или параметрами), возвращать в вызывающую программу результаты вычислений или обходиться и без того, и без другого. Подпрограмма может быть оформлена в виде процедуры, и тогда имя этой процедуры будет служить точкой входа в подпрограмму: drawline proc /Подпрограмма-процедура . . . /Тело подпрограммы ret /Команда возврата в вызывающую программу drawline endp С таким же успехом можно обойтись без процедуры, просто пометив первую строку программы некоторой меткой: drawline: /Подпрограмма, начинающаяся с метки . . . /Тело подпрограммы ret /Команда возврата в вызывающую программу . . . /Продолжение основной программы или /другие подпрограммы В любом случае вызов подпрограммы осуществляется командой call. Подпрограмма должна завершаться командой ret, служащей для возврата управления в ту точку, откуда подпрограмма была вызвана. Вопросы использования подпрограмм, передачи в них параметров и возвращения результата будут рассмотрены в следующей главе. Здесь мы остановимся только на таких принципиальных архитектурных вопросах, как механизм выполнения и возможности команд call и ret. При этом надо иметь в виду, что синтаксические особенности и закономерности использования команд call и jmp во многом совпадают, и значительная часть пояснений к командам перехода справедлива и для команд вызова. Команда вызова подпрограммы call может использоваться в 4 разновидностях. Вызов может быть:
прямым ближним (в пределах текущего сегмента команд); прямым дальним (в другой сегмент команд); косвенным ближним (в пределах текущего сегмента команд через ячейку с адресом перехода); косвенным дальним (в другой сегмент команд через ячейку с адресом перехода) . Рассмотрим последовательно перечисленные варианты. Прямой ближний вызов. Как и в случае прямого ближнего перехода, в команде прямого вызова в явной форме указывается адрес (смещение) точки входа в подпрограмму; в качестве этого адреса можно использовать как имя процедуры, так и имя метки, характеризующей точку входа в подпрограмму. В код команды, кроме кода операции E8h, входит смещение к вызываемой подпрограмме. В приведенном ниже примере подпрограмма оформлена в виде процедуры. code segment main proc call sub /Основная программа ;Код E8 dddd main endp sub proc near ret sub endp code ends ;Подпрограмма ;Код СЗ Процедура-программа находится в том же сегменте команд, что и вызывающая программа. В коде команды dddd обозначает смещение в сегменте команд к точке входа в подпрограмму. При выполнении команды call процессор помещает адрес возврата (содержимое регистра IP) в стек выполняемой программы (рис. 2.16), после чего к текущему содержимому IP прибавляет dddd. В результате в IP оказывается адрес подпрограммы. Команда ret, которой заканчивается подпрограмма, выполняет обратную процедуру - извлекает из стека адрес возврата и заносит его в IP. Состояние стека после входа в подпрограмму Исходное состояние SP Рис. 2.16. Участие стека в механизме вызова ближней подпрограммы. Участие стека в механизме вызова подпрограммы и возврата из нее является решающим. Поскольку в стеке хранится адрес возврата, подпрограмма, сама используя стек, например, для хранения промежуточных результатов, обязана к моменту выполнения команды ret вернуть стек в исходное состояние. Команда ret, естественно, никак не анализирует состояние или содержимое стека. Она просто снимает со стека верхнее слово, считая его адресом возврата, и загружает это слово в указатель команд IP. Если к моменту выполнения команды ret указатель стека окажется смещенным в ту или иную сторону, команда ret по-прежнему будет рассматривать верхнее слово стека, как адрес возврата, и передаст по нему
управление, что неминуемо приведет к краху системы. Прямой дальний вызов Этот вызов позволяет обратиться к подпрограмме из В код команды, кроме кода операции 9Ah, входит полный адрес вызываемой подпрограммы. Обычно в исходном тексте другого сегмента (сегмент плюс смещение) программы с помощью описателя far ptr указывается, что вызов является дальним, хотя, если транслятор настроен на трансляцию в два прохода, этот описатель не обязателен. Структура программного комплекса, содержащая дальний вызов подпрограммы, может выглядеть следующим образом: codel segment assume CS:codel main proc call far ptr subr /Основная программа ; Код 9A dddd ssss main endp codel ends code2 segment assume CS:code2 subr proc far /Объявляем подпрограмму дальней ret subr endp code2 ends ;Код CB - дальний возврат Процедура-подпрограмма находится в другом сегменте команд той же программы. В коде команды dddd обозначает относительный адрес точки входа в подпрограмму в ее сегменте команд, a ssss - ее сегментный адрес. При выполнении команды call процессор помещает в стек сначала сегментный адрес вызывающей программы, а затем относительный адрес возврата (рис. 2.17). Далее в сегментный регистр CS заносится ssss (у нас это значение code2), а в IP - dddd (у нас это значение subr) . Поскольку процедура-подпрограмма атрибутом far объявлена дальней, команда ret имеет код, отличный от кода аналогичной команды ближней процедуры и выполняется по-другому: из стека извлекаются два верхних слова и переносятся в IP и CS, чем и осуществляется возврат в вызывающую программу, находящуюся в другом сегменте команд. В языке ассемблера существует и явное мнемоническое обозначение команды дальнего возврата - retf. IP Состояние стека после входа в подпрограмму Исходное состояние SP Рис. 2.17. Участие стека в механизме вызова дальней подпрограммы. Косвенный ближний вызов. Адрес подпрограммы содержится либо в ячейке памяти, либо в регистре. Это позволяет, как и в случае косвенного ближнего перехода, модифицировать адрес вызова, а также осуществлять вызов не с помощью метки, а по известному абсолютному адресу. Структура программы с косвенным вызовом подпрограммы может выглядеть следующим образом:
code segment main proc /Основная программа call DS:subadr main endp subr proc near ;Код FF 16 dddd ; Подпрограмма ret subr endp code ends data segment ;Код C3 subadr dw subr data ends ;Яейка с адресом подпрограммы Процедура-программа с атрибутом near находится в том же сегменте, что и вызывающая программа, а ее относительный адрес в ячейке subadr в сегменте данных. В коде команды dddd обозначает относительный адрес слова subadr в сегменте данных. Второй байт кода команды (16h в данном примере) зависит от способа адресации. Косвенный вызов позволяет использовать разнообразные способы адресации подпрограммы: call ВХ ;В ВХ адрес подпрограммы call[ВХ] ;В ВХ адрес ячейки с адресом подпрограммы call[ВХ][SI] ;В ВХ адрес таблицы адресов подпрограмм, Косвенный дальний вызов. Отличается от косвенного ближнего вызова лишь тем, что подпрограмма находится в другом сегменте, а в ячейке памяти содержится полный адрес подпрограммы, включающий сегмент и смещение. codel segment tbl[SI] в SI индекс в этой таблице. tbl - адрес таблицы адресов подпрограмм, в SI индекс в этой таблице main proc /Основная программа call dword ptr subadr ;Код FF IE dddd main endp codel ends code2 segment subr proc far ; Подпрограмма ret subr endp code2 ends data segment ;Код C3 subadr dd subr /Двухсловная ячейка с /адресом подпрограммы data ends Процедура-подпрограмма с атрибутом far находится в другом сегменте команд той же программы, а ее полный двухсловный адрес - в ячейке subadr в сегменте
данных. Второй байт кода команды (1Е в данном примере) зависит от способа адресации. Косвенный дальний вызов, как и косвенный ближний, позволяет использовать различные способы адресации. МАКРОСРЕДСТВА АССЕМБЛЕРА Современные ассемблеры содержат в себе так называемые макросредства и по этой причине называются иногда макроассемблерами. Общая идея макросредств заключается в том, что включением в исходный текст программы предложений специального языка макросредств (макроязыка) мы в какой-то степени управляем процессом трансляции программы. Макроязык позволяет выполнять или не выполнять трансляцию отдельных участков программы в зависимости от некоторого нами же определяемого условия (условная трансляция); осуществлять размножение участка исходного текста программы, в том числе, с модификацией каждого повторения (блоки повторения); включать в программу написанные отдельно фрагменты с настройкой их текста в соответствии с заданными параметрами (макрокоманды). Объекты, создаваемые с помощью директив макроязыка, обычно называют макросами. Иногда, правда, термин макрос относят только к одному конкретному виду макросредств, именно, к макрокоманде. Использование макросов упрощает составление исходного текста программы и иногда делает этот текст более наглядным, хотя в отдельных случаях, как, например, в случае директив условной трансляции , наоборот, может привести к существенному усложнению исходного текста. Как и во всяком языке программирования, в языке макросредств имеется много разного рода тонкостей, но в прикладном программировании зачастую используются лишь базовые возможности этого языка. Поэтому мы ограничимся здесь рассмотрением основных макросредств ассемблера. Блоки повторения Блоки повторения заставляют транслятор повторить заданный блок исходного текста указанное число раз. Повторяемый блок может состоять из директив описания данных (и тогда он включается в состав сегмента данных) или из команд процессора (и тогда он описывается в программном сегменте). Например, следующий фрагмент сегмента данных позволяет образовать массив, состоящий из кодов ASCII прописных русских букв: sym='A' /Начальное значение временной переменной symbols: ;Имя массива для ссылок на него rept 32 /Повторять столько раз db sym /Повторяемая директива sym=sym+l /Изменение переменной endm /Конец блока повторения Как видно из приведенного фрагмента, блок повторения начинается с директивы ассемблера rept (от repetition, повторение), а заканчивается директивой endm (end macro, конец макроса). Реально в сегменте данных выделяется 32 байт, заполненных числами от 8lh до 9Fh, которые предполагается рассматривать, как последовательность русских букв. Того же результата можно было достигнуть с помощью следующего предложения: symbols db "А", "Б", "В", "Г", и т.д. до буквы Я или проще, хотя и менее наглядно:
symbols db 128,129,130,131, и т.д. до числа 159. Макрос повторения несколько сокращает время, требуемое для описания в тексте программы требуемого массива, хотя, возможно, снижает наглядность этого описания. При подключении к компьютеру измерительного или управляющего оборудования иногда возникает необходимость замедлить работу процессора при обращении к портам этого оборудования. Замедление осуществляется включением в текст программы одной или, если требуется, нескольких команд безусловного перехода на следующее предложение: in AL,300h /Первое обращение к оборудованию jmp а /Задержка на время a: jmp b /выполнения b: jmp с /трех команд jmp с: in AL,301h /Следующее обращение к оборудованию Для того, чтобы не создавать много ненужных, в сущности, меток, такого рода предложения часто записывают следующим образом: in AL, 300h /Первое обращение к оборудованию jmp $+2 /Задержка на время jmp $+2 /выполнения jmp $+2 /трех команд jmp in AL,301h /Следующее обращение к оборудованию Здесь используется обозначение счетчика текущего адреса $. При трансляции любой команды в счетчике текущего адреса содержится адрес этой команды (смещение ее первого байта). Команда короткого перехода занимает 2 байт, поэтому команда jmp $+2 осуществляет переход на команду, идущую следом. Часто в подобных случаях ограничиваются одной командой jmp, которая создает необходимую задержку в доли микросекунды. В тех случаях, однако, когда устройство сопряжения с оборудованием работает заметно медленнее процессора, приходится включать между командами обращения к портам 5-6 команд jmp. Такой фрагмент можно оформить в виде блока повторения: rept 6 jmp $+2 endm Это, пожалуй, проще, чем писать 6 команд jmp. Макросы повторения имеют несколько разновидностей, которые мы не будем здесь рассматривать. Макрокоманды Программы, написанные на языке ассемблера, часто содержат повторяющиеся участки текста с одинаковой структурой. Такой участок текста можно оформить в виде макроопределения, характеризующегося произвольным именем и необязательным списком формальных аргументов. После того, как такое определение сделано, появление в программе строки, содержащей имя макроопределения и список фактических аргументов (все это вместе называют макрокомандой), приводит к генера-
ции всего требуемого текста, называемого макрорасширением. Варьируя фактические аргументы, можно, сохраняя неизменной структуру макрорасширения, изменить отдельные его элементы. Макроопределение должно начинаться строкой с именем макроопределения и директивой macro, в поле аргументов которой указывается список формальных аргументов. Заканчивается макроопределение директивой endm. Пусть в программе требуется неоднократно сохранять в стеке содержимое трех регистров, но в каждом конкретном случае номера регистров и их порядок отличаются. Оформим эти действия в виде макроопределения: psh macro a,b,c push a push b push с endm Появление в исходном тексте программы строки psh АХ, ВХ, СХ приведет к генерации следующего фрагмента текста: push АХ push ВХ push СХ Если же в исходном тексте имеется строка psh DX, ES, BP то соответствующее макрорасширение будет иметь вид: push DX push ES push BP В качестве фактических аргументов могут выступать любые обозначения ассемблера, допустимые для данной команды. В частности, макровызов psh mem, [ВХ], ES: [17h] приведет к следующему макрорасширению: push mem push [ВХ] push ES:[17h] Если какие-то строки макроопределения должны быть помечены (например, с целью организации циклов), то обозначения меток следует объявить локальными с помощью оператора local. В этом случае ассемблер, генерируя макрорасширения, будет создавать собственные обозначения меток, не повторяющиеся при повторных вызовах одной и той же макрокоманды:
delay macro local point mov CX,200 point: loop point endm Макрокоманды схожи с подпрограммами в том отношении, что в обоих случаях мы описываем некоторый программный фрагмент один раз, а обращаемся к нему многократно , возможно, с передачей различных параметров. Однако эти вычислительные средства различаются как по способу использования, так и по своим возможностям. Подпрограммы позволяют сократить объем выполнимого файла за счет описания повторяющихся участков программы лишь однажды. При каждом вызове подпрограммы командой call происходит переход на один и тот же фрагмент программы, содержащий подпрограмму, а после выполнения подпрограммы - возврат назад в точку вызова. Текст подпрограммы полностью определяется на этапе ее написания, и изменения в ходе выполнения подпрограммы возможны только за счет передачи ей тех или иных конкретных значений. Механизм использования макроса иной. Каждая макрокоманда, встретившаяся транслятору в тексте программы, заменяется им на полный текст макроопределения. Если макрокоманда содержит параметры, то в процессе этой замены происходит подстановка параметров в текст макроопределения. Образованное таким образом макрорасширение составляет часть текста программы, неотличимо от остальных предложений программы и не нуждается в каких-либо вызовах. В силу этих обстоятельств макрокоманды оказываются несколько эффективнее подпрограмм по скорости выполнения, особенно, если учесть время, требуемое для подготовки параметров перед вызовом подпрограммы (например, проталкивание их в стек). Вряд ли стоит, однако, проводить такое сравнение. Подпрограммы и макрокоманды имеют различные области применения. Подпрограммы служат для сокращения объема программы, повышения ее наглядности и упрощения перестройки алгоритма выполнения всего программного комплекса путем изменения состава и порядка вызываемых подпрограмм. При этом активное использование подпрограмм может уменьшить размер всей программы в десятки раз. Смысл использования макрокоманд совсем иной. Макрокоманды позволяют упростить процесс написания программы и, можно сказать, являются средством автоматизации программирования. При этом язык макрокоманд предоставляет большие возможности по изменению текста макрорасширения в зависимости от указываемых в макрокоманде параметров. Проиллюстрируем эти возможности на простом примере макрокоманды вывода на экран символа. Такой макрокомандой можно пользоваться в процессе отладки сложных программ, чтобы получать информацию о содержимом любых ячеек памяти. Пример оформлен в виде законченной программы, которая носит чисто демонстрационный характер. /Пример 2-1. Использование макрокоманды sym macroc ;Имя и формальный аргумент push АХ /Сохраним используемые push DX ;в макроопределении регистры mov АН, 02h /Функция DOS вывода символа
mov DL,c /Заберем символ int 2In /Вызов DOS pop DX /Восстановим pop AX /регистры endm /Конец макроопределения code segment assume cs:code main proc sym 'w' sym ES:0 sym CS:msg lea BX,msg+l sym [BX] mov AX, 4Oh mov DS,AX sym DS:4 9h mov AX,4C00h int 21h main endp msg db 'OK' code ends /Символ указан непосредственно /Вывод первого байта PSP /Вывод первой буквы из msg /Адрес второй буквы из msg /Вывод второй буквы /Настроим DS /на начало памяти /Вывод номера видеорежима /Завершение программы Тексты макроопределений обычно размещаются в самом начале программы, что дает возможность вызывать макрокоманды из любых точек программы. Содержательная часть макроса sym состоит в вызове функции 02h DOS, которая выводит на экран символ из регистра DL. Поскольку макрос использует регистры АХ и DX, они в начале макроса сохраняются в стеке, а перед его завершением восстанавливаются. В качестве параметра макрокоманды можно использовать любое обозначение ассемблера, которое может интерпретироваться, как адрес символа. Сама программа умышленно построена несколько нестандартным образом. В ней имеется единственный сегмент с текстом программы, в конце которого помещена строка данных (слово 'ОК'). Такое расположение данных допустимо, однако для обращения к ним необходимо использовать замену сегмента (как это сделано в третьей строке программы), так как программный сегмент адресуется через регистр CS. Сегмент стека в программе отсутствует, что не очень хорошо, но для небольших программ допустимо. Фактически под стек будет использован самый низ сегмента команд, начиная с адреса FFFEh. Поскольку наша программа имеет размер, существенно меньше 64К, такое расположение стека не приведет ни к каким неприятностям (при большом размере программы стек мог бы начать затирать нижние строки программы). F:\CURRENT> р.ехе w=OK» Рис. 2.18. Вывод программы 2.1. В программе проиллюстрировано использование в качестве фактического аргумента макрокоманды различных конструкций языка: непосредственного обозначения символа (что, наверное, лишено смысла), прямого обращения к различным участкам памяти по абсолютным адресам через регистры ES и DS, адресации с исполь-
зованием символического обозначения поля данных. На рис. 2.18 приведен вывод программы. Как уже отмечалось, при загрузке программы в память в регистры DS и ES Заносится сегментный адрес префикса программы, поэтому адресация через ES позволяет прочитать содержимое PSP. Префикс содержит, главным образом, данные, необходимые системе для обслуживания текущей программы, но, кроме того, и несколько команд. В частности, префикс начинается с команды CD 2Oh, которая уже давно не используется, но в префиксе присутствует ради обеспечения совместимости со старыми версиями DOS. Первый байт этой команды, если его рассматривать, как код символа, соответствует элементу двойной горизонтальной рамки (длинный знак равенства). Занеся в регистр DS число 4Oh, мы настроили его на начало области данных BIOS, которая начинается с абсолютного адреса 400h, занимает 256 байт и содержит разнообразные данные, используемые BIOS в процессе обслуживания аппаратуры компьютера. Так, например, по адресу 0 от начала этой области хранится базовый адрес первого последовательного порта; по адресу 8 - адрес первого параллельного порта, а по адресу 4 9h - код текущего видеорежима. При работе в DOS видеоадаптер обычно настраивается на режим 3 (80x25 символов, 16 цветов). Будучи выведен на экран, код 3 образует изображение червонного туза. В тех случаях, когда макрокоманды составляются для конкретной программы, они включаются в текст программы так, как это было сделано в примере 2.1. Однако часто программист оформляет в виде макрокоманд стандартные процедуры общего назначения, например, программную задержку или вывод на экран строки текста. В этом случае тексты макроопределений целесообразно поместить в макробиблиотеку . Макробиблиотека представляет собой файл с текстами макроопределений. Макроопределения записываются в этот файл точно в таком же виде, как и в текст программы. Ниже приведен текст файла макробиблиотеки с произвольным именем MYMACRO.MAC, содержащей две макрокоманды. /Макрокоманда endpr завершения программы endpr macro /Макрокоманда без параметров Для того чтобы транслятору были доступны макрокоманды из файла MYMACRO.MAC, его следует на этапе трансляции подсоединить к исходному тексту программы ди- mov AX,4C00h int 2 In endm /Макрокоманда delay delay macro time local label1,label2 push CX mov CX,time label2: push CX mov CX, 0 label1: loop label1 pop CX loop label2 pop CX endm настраиваемой программной задержки /Параметр - число шагов /Локальные метки /Сохраним внешний счетчик /Получим фактический параметр /Сохраним его в стеке /Пусть будет 64К шагов /Внутренний цикл /Извлечем внешний счетчик /Внешний цикл /Восстановим СХ программы /Конец макрокоманды /Конец макрокоманды
рективой ассемблера include: include mymacro, mac Все макрокоманды, включенные в этот файл, можно использовать в любом месте программы. Директивы условной трансляции Директивы условной трансляции (условного ассемблирования) позволяют иметь в исходном тексте программы различные варианты отдельных фрагментов программы, и путем задания определенных условий управлять процессом трансляции. Таким образом, можно, например, включать или исключать из текста программы служебные, отладочные фрагменты или настраивать программу для выполнения на заданном процессоре. Пусть, например, в процессе отладки сложной программы мы используем подпрограмму regs вывода на экран содержимого всех регистров процессора. Включая в разные места программы вызов этой подпрограммы, мы имеем возможность контролировать ход ее выполнения, в том числе и такие тонкие моменты, как, например , расположение программы в памяти или интенсивность использование стека. Для управления процессом трансляции предусмотрим константу debug (отладка), ненулевое значение которой будет требовать отладочного варианта трансляции, а нулевое - рабочего. Начало программы, а также участки с вызовом отладочной подпрограммы будут выглядеть следующим образом: ;debug=l /Удалите символ ';'для отладочной трансляции ;debug=0 /Удалите ';' для рабочей трансляции ... /Текст программы if debug /Транслировать только если debug=l call regs /Вызов отладочной подпрограммы endif /Конец блока условной трансляции ... / Продолжение программы if debug /Следующее включение отладочного блока call regs endif ... /Продолжение программы Разумеется, можно отлаживать программу в отладочном варианте, а затем удалить все вызовы вспомогательной подпрограммы regs вручную и получить рабочий вариант, однако на практике обычно (или даже всегда) оказывается, что после эксплуатации программы в течение некоторого времени в ней обнаруживаются незамеченные ранее ошибки, что приводит к необходимости снова вставлять в нее отладочные строки. Часто эту процедуру приходится повторять многократно. Использование в программе директив условной трансляции сокращают процедуру преобразования программы из отладочного варианта в рабочий или наоборот до операции стирания одного символа "/" в начале программы и устраняют вероятность случайного внесения в программу новых ошибок в процессе удаления или вставки отладочных строк. Рассмотрим еще один пример применения директив условной трансляции. Как уже отмечалось, современные процессоры предоставляют программисту значительное
количество дополнительных команд, которые можно использовать в программах реального режима, но только, разумеется, если компьютер оснащен соответствующим процессором. Нетрудно составить универсальную программу, которую можно выполнять как на современных процессорах (в более эффективном режиме), так и на более старых (с некоторой потерей эффективности), если включить в нее директивы условной трансляции этих дополнительных команд. К таким командам, в частности, относятся команды сохранения в стеке всех регистров общего назначения pusha и восстановления всех регистров рора. Приведем пример условной трансляции этих команд, в котором используется конструкция макроязыка if... else... endif: i386=l if i386 .386 endif code segment usel6 assume CS:code main proc if i386 push /Сохранение всех регистров одной командой else push АХ push СХ push DX push ВХ push BP push SI push DI endif . . . /Использование регистров после /сохранения их значений if 1386 рора /Восстановление всех регистров одной командой else pop DI pop SI pop BP pop BX pop DX pop CX pop AX endif Если в начале программы имеется объявление i386=l, то, во-первых, в программу будет включена директива .386, позволяющая использовать в программе дополнительные команды, а во-вторых, в последующих условных блоках будут транслироваться те их участки, которые содержат команды процессора 80386. Если же объявление i386=l изъять, то в условных блоках будут транслироваться эквивалентные по существу, но менее эффективные последовательности команд МП 86.
ГЛАВА 3. КОМАНДЫ И АЛГОРИТМЫ Организация приложений MS-DOS Как уже отмечалось выше, язык ассемблера является отражением архитектуры процессора, и изучение языка, в сущности, означает изучение системы команд и способов адресации, реализуемых процессором. Однако любой язык программирования полезен лишь постольку, поскольку на нем можно написать какие-то работоспособные программы. В то же время трудно представить себе реальную программу, которая выполняет чисто логические или вычислительные действия, ничего не вводя и не выводя и не взаимодействуя с другими программами. Однако такие вопросы, как организация выполнимой программы, ее запуск, взаимодействие с разнообразными аппаратными и программными объектами вычислительной системы (клавиатурой, дисками, таймером, памятью, системными драй верами и проч.) и, наконец, завершение являются прерогативой операционной системы. Поэтому в программах на языке ассемблера всегда широко используются системные средства, например, для вывода па экран или ввода с клавиатуры, чтения или записи файлов, управления памятью и проч. Более того, сама внутренняя организация программы, ее структура и, в определенной степени, алгоритмы поведения в сильной степени определяются правилами организации вычислительного процесса, заложенными в DOS. Изучение языка ассемблера в отрыве от конкретной операционной системы вырождается в схоластическое занятие, результатом которого будет знание формальных правил написания программных предложений без возможности применить эти правила для создания работоспособных программ. В то же время возможности даже такой относительно простой операционной системы, как MS-DOS, весьма велики и многообразны, и их изучение составляет самостоятельный раздел программирования. В настоящей книге средства DOS рассматриваются лишь в том минимальном объеме, который необходим для создания простых, но работоспособных программ на языке ассемблера, а также для демонстрации основных алгоритмов и приемов программирования. Желающие получить более глубокое представление о возможностях MS-DOS и использовании функций DOS в прикладном программировании, могут обратиться к книге: Финогенов К.Г. "Самоучитель по системным функциям MS-DOS", М. , Радио и связь, Энтроп, 1995. К числу важнейших вопросов, требующих хотя бы минимального рассмотрения, следует отнести требования, предъявляемые MS-DOS к структуре прикладных программ, а также к особенностям их взаимодействия с самой DOS и с другими программами . Программы, предназначенные для выполнения под управлением MS-DOS, можно классифицировать по разным признакам. По внутренней организации все программы принадлежат к одному из двух типов, которым соответствуют расширения имен программных файлов .ЕХЕ и .СОМ. По взаимодействию с самой DOS программы подразделяются на транзитные и резидентные. Наконец, следует выделить важнейший класс программ, служащих для обработки аппаратных или программных прерываний, и называемых обычно обработчиками прерываний. Мы не касаемся здесь таких специфических программ, как устанавливаемые драйверы устройств, командные процессоры (к их числу принадлежит C0MMAND.COM) или оболочки DOS (например, широко распространенная программа Norton Commander), которые можно выделить в самостоятельные классы.
Первый пример законченной программы, рассмотренный нами в гл. 2, относился к наиболее распространенному типу ЕХЕ-приложений. Для такой программы характерно наличие отдельных сегментов команд, данных и стека; для адресации к полям каждого сегмента используется свой сегментный регистр. Удобство ЕХЕ- программы заключается в том, что ее можно почти неограниченно расширять за счет увеличения числа сегментов. В случае большого объема вычислений в программу можно включить несколько сегментов команд, обеспечив, разумеется, переходы из сегмента в сегмент с помощью команд дальних переходов или дальних вызовов подпрограмм. Если же программа должна обрабатывать большие объемы данных, в ней можно предусмотреть несколько сегментов данных. Каждый сегмент не может иметь размер более 64 Кбайт, однако в сумме их объем ограничивается только наличной оперативной памятью. Правда, в реальном режиме затруднительно обратиться к памяти за пределами 1 Мбайт адресного пространства, так что максимальный размер программы, если не предусматривать в ней какие-то специальные средства поочередной загрузки сегментов, ограничен величиной 550 ... 600 Кбайт. Наличие в МП 86 лишь двух сегментных регистров данных (DS и ES) несколько усложняет алгоритмы обработки больших объемов данных, так как приходится постоянно переключать эти регистры с одного сегмента на другой. Однако реально в современных процессорах имеются не два, а четыре сегментных регистра данных (DS, ES, FS и GS) , которые вполне можно использовать в приложениях DOS, упростив тем самым процедуры обращения к данным и ускорив выполнение программ. Позже все эти возможности будут рассмотрены более подробно. Во многих случаях объем программы оказывается невелик - меньше, а часто и много меньше, чем 64 Кбайт. Такую программу нет никакой необходимости составлять из нескольких сегментов: и команды, и данные, и стек можно разместить в единственном сегменте, настроив на его начало все 4 сегментных регистра. Для односегментных программ в MS-DOS существует специальный формат и специальные правила их составления. Программные файлы с программами, составленными по этим правилам, имеют расширение .СОМ. В формате СОМ обычно пишутся резидентные программы и драйверы, хотя любую прикладную программу небольшого объема можно оформить в виде СОМ-приложения. Если посмотреть список системных программ, входящих в DOS, и реализующих, в частности, внешние команды DOS, то можно заметить, что приблизительно треть этих программ написана в формате СОМ (COMMAND.COM, F0RMAT.COM, SYS.COM и др.), а две трети - в формате ЕХЕ (FC.EXE, PRINT.EXE, XC0PY.EXE и т.д.). Ниже мы рассмотрим правила составления и особенности исполнения как ЕХЕ-, так и СОМ-программ. Другой критерий классификации программ определяет способ взаимодействия прикладной программы с другими программами и самой DOS. По этому критерию программы делятся на два вида: транзитные и резидентные. Ход выполнения транзитной программы (а к транзитным относится подавляющее большинство приложений DOS) выглядит следующим образом. Пользователь запускает программу, вводя с клавиатуры ее имя, завершаемое нажатием клавиши Enter. Соответствующие программы-компоненты DOS отыскивают на диске файл с указанным именем, загружают его в память и передают управление на входную точку этой программы. Далее программа выполняется, фактически монополизируя ресурсы компьютера. Пока она не завершилась, пользователь не имеет доступа к DOS и, соответственно, лишен возможности запустить другую программу или выполнить какую-либо команду DOS. Ввод с клавиатуры возможен только в ответ на запрос текущей программы, если в ней предусмотрено обращение к клавиатуре за получением каких-либо данных.
Совсем по-другому функционирует резидентная программа. Пользователь запускает ее точно так же, как и транзитную, вводя с клавиатуры ее имя. Программы DOS загружают программный файл в память и передают управление на точку входа. Однако дальше вычислительный процесс развивается по-иному. Программа выполняет только свой начальный, инициализирующий фрагмент, после чего вызывает специальную функцию DOS (с номером 31h). Эта функция завершает программу и возвращает управление в DOS, но не освобождает память от завершившейся программы, а оставляет эту программу в памяти, делая ее резидентной. Программа остается в памяти и, можно сказать, ничего не делает. Поскольку управление передано DOS, пользователь может вводить с клавиатуры любые команды и, в частности, запускать другие транзитные (или резидентные) программы. Когда будет активизирована находящаяся в памяти резидентная программа? Как правило, резидентные программы включают в себя обработчики аппаратных или программных прерываний. Если, например, в резидентной программе имеется обработчик прерываний от системного таймера, который, как известно, выдает сигналы прерываний приблизительно 18 раз в секунду, то каждое такое прерывание будет предавать управление резидентной программе, которая может, например, периодически выводить на экран текущее время или какую-то иную информацию. Работа резидентной программы будет протекать независимо от других программ и параллельно с ними. Другим классическим примером резидентной программы является русификатор клавиатуры, который получает управление при нажатии любой клавиши, независимо от того, какая программа сейчас выполняется. Задача русификатора - определить по имеющемуся в нем флагу, на каком языке работает пользователь, и в необходимых случаях сформировать соответствующий нажатой клавише код ASCII русской буквы. Следует заметить, что необходимость в резидентных программах возникла лишь потому, что MS-DOS является однозадачной системой. В многозадачной операционной системе Windows понятие резидентной программы в принципе отсутствует. Разумеется, своими особенностями составления и функционирования обладают и обработчики прерываний - чрезвычайно важный класс программ, обслуживающих многочисленные внешние устройства компьютера - клавиатуру, мышь, магнитные диски и проч., а также нестандартную аппаратуру, если компьютер используется для управления научной установкой или технологическим процессом. Рассмотрим основные правила составления и функционирования перечисленных типов программ, чтобы в дальнейшем можно было использовать их в примерах, иллюстрирующих те или иные средства языка ассемблера. Программа типа ЕХЕ Характерные особенности программ типа ЕХЕ подробно рассматривались в предыдущих главах. Приведем еще несколько обобщающих соображений. Структура типичной программы на языке ассемблера выглядит следующим образом . .586 code segment usel6 assume CS:code, DS:data main proc mov AX, data mov DS, AX mov AX,4C00h ; Размещение трансляции всех ; команд (386-486-Pentium) ; Начало сегмента команд ; 16-разрядное приложение ; Начало главной процедуры ; Инициализация /сегментного регистра DS /Текст главной процедуры /Вызов функции DOS
int 21h main endp code ends Завершение программы Конец главной процедуры Конец сегмента команды data segments usel6 Начало сегмента данных Определения данных Конец сегмента данных data ends stk segment stack db 256 dup(O) stk ends end main Начало сегмента данных Стек Конец сегмента стека Конец программы и точка входа Программа начинается с директивы ассемблера .586, разрешающей использовать в тексте программы весь набор команд процессора Pentium (кроме привилегированных) . Если программа будет использовать только базовый набор команд МП 86, указание этой директивы не обязательно. С другой стороны, ее указание не обязывает нас обязательно использовать команды Pentium. Если в программе предполагается использовать лишь дополнительные команды процессоров 486 или 386, то вместо .586 можно написать .486 или .386. Указание любого номера 32-разрядного процессора приведет к тому, что по умолчанию программа будет транслироваться, как 32-разрядное приложение, в то время как нам нужно создать обычное 16-разрядное приложение. Для того, чтобы все адреса в программе рассматривались, как 16-битовые, необходимо придать сегментам команд и данных описатели usel6. Для сегмента стека этот описатель не нужен, так как в стеке нет поименованных ячеек. Программа состоит из трех сегментов - команд, данных и стека. Имена сегментов выбраны произвольно. Собственно программа обычно состоит из процедур. Деление на процедуры не обязательно, но повышает ее наглядность и облегчает передачу управления на подпрограммы. В рассматриваемом примере сегмент команд содержит единственную процедуру main, открываемую оператором ргос (от procedure, процедура) и закрываемую оператором endp (end procedure, конец процедуры). Перед обоими операторами указывается имя процедуры, которое в дальнейшем может использоваться в качестве относительного адреса процедуры (в сущности, относительного адреса первого выполнимого предложения этой процедуры) . У нас это имя выступает в качестве параметра завершающей программу директивы end. Имена процедур, так же, как и имена сегментов, выбираются произвольно . Если программа имеет сегмент данных с какими-либо данными, то для того, чтобы к этим данным можно было обратиться, необходимо занести сегментный адрес сегмента данных в один из сегментных регистров. Обычно в качестве такого регистра выбирают DS. Таким образом, предложения, с которых начался текст главной процедуры mov АХ,data /Инициализация mov DS,AX /сегментного регистра DS где data - имя, данное сегменту данных, практически являются обязательными для любой программы.
Точно также обязательными являются и завершающие предложения mov АХ,4СОOh /Вызов функции DOS int 21h /Завершения программы в которых вызывается функция DOS с номером 4Ch. Эта функция, как уже отмечалось , завершает программу, освобождает занимаемую ею память и передает управление командному процессору C0MMAND.COM. Еще два замечания следует сделать относительно процедуры трансляции и компоновки программы. Если сегмент данных расположить после сегмента команд, как это сделано в нашем примере, то у транслятора возникнут сложности при обработке встречающихся в программных предложениях имен полей данных, так как эти имена еще неизвестны транслятору. Для того, чтобы такие, как говорят, "ссылки вперед" могли правильно обрабатываться , следует в команде вызова транслятора TASM заказать два прохода. Это делается указанием ключа /т2. С другой неприятностью мы столкнемся, если попытаемся включить в программу операции с 32-разрядными операндами (даже и с командами МП 86) . Компоновщик TASM по умолчанию запрещает такого рода операции. Чтобы преодолеть этот запрет, следует в команде вызова компоновщика указать ключ /3. Таким образом, приведенный в гл. 1 командный файл должен выглядеть (для подготовки программы P.ASM) следующим образом: tasm /z /zi /п /т2 р,р,р tlink /х /v /3 р,р Включение указанных описателей и ключей не обязывает нас использовать новые команды или 32-разрядные операнды, так что приведенные выше тексты командного файла и самой программы можно использовать как образец для подготовки всех приведенных в этой книге программных примеров, даже если они используют только средства МП 86. В дальнейших примерах программ, в основном посвященных системе команд МП 86, эти описатели будут опускаться. Приведем в качестве еще одного примера простую законченную программу типа ЕХЕ, которая выясняет букву - обозначение текущего диска и выводит ее на экран с поясняющей надписью. Пример 3-1. Получение текущего диска / Опишем сегмент команд assume CS:code,DS:data code segment main proc move AX, data mov DS,AX mov AH,19h int 21h add disk,AL mov AH,09h mov DX,offset msg int 21h Настроим DS на сегмент данных Функция DOS получения текущего диска Преобразуем номер в код ASCII Функция DOS вывода на экран Адрес строки Вызов DOS
mov AH,01h int 21h mov AX,4C00h int 21h code ends Функция DOS ввода символа Вызов DOS Функция DOS завершения программы /Опишем сегмент данных data segment usel6 msg db "Текущий диск" disk db " A: ",13,10,"$ Выводимый на экран текст Продолжение текста data ends ; Опишем сегмент стека stk segment stack db 256 dup(0) stk ends end main Стек Рассмотрим текст приведенного примера. После настройки сегментного регистра DS на сегмент данных, вызывается функция DOS с номером 19h, которая позволяет получить код текущего диска. У этой функции нет никаких параметров, а результат своей работы она возвращает в регистре AL в виде условного кода. 0 обозначает диск А:, 1 диск В:, 2 диск С: и т.д. Если, например, пользователь работает на диске F, то функция 19h вернет в AL код 5. Для преобразования кода диска в его буквенное обозначение, мы воспользовались широко распространенным приемом. В полях данных определена символьная строка, которая будет выводиться на экран. Для удобства работы она разделена на две части, каждая из которых имеет свое имя. Началу строки присвоено имя msg, а той ее части, которая начинается с обозначения диска А:, имя disk (разумеется, имена выбраны произвольно). Если посмотреть на таблицу кодов ASCII, то можно заметить, что код каждой следующей буквы алфавита на 1 больше предыдущей. Таким образом, если к коду латинской буквы A (41h) прибавить 1, получится код буквы В, а если прибавить, например, 5, получится код буквы F. Именно эта операция и выполняется в предложении add disk,AL /Преобразуем номер в код ASCII где к байту с адресом disk прибавляется код, возвращенный функцией DOS. Выполнив модификацию строки, мы выводим ее на экран уже знакомой нам функцией DOS 09h. Она выводит все символы строки, пока не встретится с символом $, которым наша строка и завершается. Перед знаком $ в строке имеются два числа: 13 и 10. При выводе текстовой строки на экран любой функцией DOS код 13 трактуется DOS, как команда вернуть курсор в начало строки ("возврат каретки") , а код 10 - как команда на перевод строки. Два эти кода переводят курсор в начало следующей строки экрана. В данном случае, когда на экран ничего больше не выводится, можно было обойтись и без этих кодов, которые включены лишь в познавательных целях. Между прочим, правильная работа программы основана на том предположении (безусловно правильном), что ассемблер расположит наши данные в памяти в точности в том же порядке, как они описаны в программе. Именно это обстоятельство и позволяет дробить единую строку на части, не опасаясь, что в память они
попадут в разные места, что привело бы, разумеется, к непредсказуемому результату. После вывода на экран сообщения о текущем диске в программе вызывается функция DOS с номером 0lh. Эта функция вводит с клавиатуры один символ. Если символов нет (мы после запуска программы не нажимали на клавиши), функция Olh ждет нажатия фактически любой клавиши (более точно - любой алфавитно- цифровой или функциональной клавиши). Такой весьма распространенный прием позволяет остановить выполнение программы до нажатия клавиши, что дает возможность программисту посмотреть, что вывела программа на экран, и оценить правильность ее работы. Наконец, последнее действие носит, как уже отмечалось, сакраментальный характер. Вызовом функции DOS 4Ch программа завершается с передачей управления DOS. Взглянем еще раз на текст программы 3-1. Если не считать первых предложений инициализации регистра DS, то в программе имеется лишь одна строка, носящая, можно сказать, вычислительный характер - это прибавление полученного кода диска к содержимому байта памяти. Все остальные строки служат для вызова тех или иных функций DOS - получения информации о текущем диске, вывода строки на экран, остановки программы и, наконец, ее завершения. Это подтверждает высказанное выше утверждение о важности изучения системных средств и широком использовании их в программах на языке ассемблера. Разумеется, в программе могут быть и сколь угодно сложные и протяженные участки обработки данных и других вычислений, но такие операции, как ввод с клавиатуры, вывод на экран, работа с файлами, получение, как в нашем примере, системной информации и многое другое выполняется исключительно с помощью вызова тех или иных функций DOS (или BIOS). Программу на языке ассемблера просто невозможно написать без использования системных средств. Структура и образ памяти программы СОМ Как уже отмечалось, программа типа СОМ отличается от программы типа ЕХЕ тем, что содержит лишь один сегмент, включающий все компоненты программы: PSP, программный код (т.е. оттранслированные в машинные коды программные строки), данные и стек. Структура типичной программы типа СОМ на языке ассемблера выглядит следующим образом: code segment: assume CS:text,DS:text org lOOh main proc main endp code ends end main Программа содержит единственный сегмент code. В операторе ASSUME указано, что сегментные регистры CS и DS будут указывать на этот единственный сегмент. Оператор ORG lOOh резервирует 256 байт для PSP. Заполнять PSP будет по- прежнему система, но место под него в начале сегмента должен отвести программист . В программе нет необходимости инициализировать сегментный регистр DS, поскольку его, как и остальные сегментные регистры, инициализирует система. /Место для PSP ; Текст программы ; Определения данных
Данные можно разместить после программной процедуры (как это показано в приведенном примере), или внутри нее, или даже перед ней. Следует только иметь в виду, что при загрузке программы типа СОМ регистр IP всегда инициализируется числом 100п, поэтому сразу вслед за оператором ORG 100h должна стоять первая выполнимая команда программы. Если данные желательно расположить в начале программы, перед ними следует поместить оператор перехода на фактическую точку входа, например jmp entry. Образ памяти программы типа СОМ показан на рис. 3.1. После загрузки программы все сегментные регистры указывают на начало единственного сегмента, т.е. фактически на начало PSP. Указатель стека автоматически инициализируется числом FFFEh. Таким образом, независимо от фактического размера программы, ей выделяется 64 Кбайт адресного пространства, всю нижнюю часть которого занимает стек. Поскольку верхняя граница стека не определена и зависит от интенсивности и способа использования стека программой, следует опасаться затирания стеком нижней части программы. Впрочем, такая опасность существует и в программах типа ЕХЕ, так как в реальном режиме нет никаких механизмов защиты, и при сохранении в стеке большего объема данных, чем может так поместиться, данные начнут затирать поля того сегмента, который расположен за стеком (если таковой сегмент существует). CS, DS.ES.SS Префикс программы (PSP) 256 байт Программа и данные Стек IP=0100h SP=FFFEh Рис. 3.1. Образ памяти программы СОМ Программы типа СОМ отличаются от ЕХЕ-программ не только отсутствием сегментов данных и стека. В гл. 2 было показано, что при выравнивании сегментов на байт, что делается с помощью описателя byte data segment byte системные программы располагают сегменты загружаемой программы с некоторым перекрытием, что позволяет избежать пустых промежутков между сегментами в памяти, возникающих из-за того, что размеры сегментов могут быть не кратны величине параграфа - 16 байт. Такое расположение сегментов требует изменения значений ссылок на адреса ячеек памяти. В состав программного файла с расширением ЕХЕ входит таблица с перечнем байтов программы, содержимое которых может подвергнуться изменению в процессе загрузки программы в память. Поэтому, кстати, размер файла с расширением ЕХЕ может превышать истинный размер программы в памяти. Программа типа СОМ состоит из единственного сегмента, и проблема настройки ссылок не возникает. Файл с расширением СОМ почти в точности отражает содержимое памяти после загрузки программы. Отличие заключается только в том, что в программном файле отсутствует префикс программы PSP, который система вставляет в программу в процессе ее загрузки. Таким образом, файл с расширением СОМ обычно оказывается на 256 байт короче своего образа в памяти.
Если оттранслировать и скомпоновать программу, написанную в формате СОМ, обычным образом, образуется программный файл с расширением ЕХЕ. Этот файл можно запустить на выполнение, однако, работать он будет неверно. Дело в том, что система, загружая файл типа ЕХЕ в память, пристраивает перед загруженной программой префикс и настраивает на него регистры DS и ES. В результате значение DS окажется на 10п меньше, чем сегментный адрес сегмента с командами и данными, что приведет к неправильной адресации при обращении к полям данных. Программу, написанную в формате СОМ, можно запускать только в виде файла с расширением СОМ, для которого в DOS предусмотрен CBI алгоритм загрузки и запуска. Для того, чтобы компоновщик создал файл с расширением СОМ, в строке запуска компоновщика необходимо предусмотреть ключ /t (при использовании компоновщика TLINK.EXE): tlink /х /v /3 /t р,р Для того, чтобы избежать ошибок при подготовке программ, целее образно подготовить два командных файла для трансляции и компоновки программных примеров - один для программ типа ЕХЕ, и другой для программ типа СОМ. Разумеется, файлам надо назначить различающие имена. Рассмотрим пример законченной программы типа СОМ, которая выводит на экран строку текста. Пример 3-2. Простая СОМ- программа assume CS:code,DS:code code segment org 256 main proc mov AH, 09h mov DX,offset msg int 21h mov AX,4C00h int 21h main endp msg db 16,16,16 code ends end main Место под PSP Функция вывода на экран ; Функция завершения ; программы Программа типа .СОМ'17,17,17,' $ F:\CURRENT>p.com ►^Программа типа .СОМ*ч^ Рис. 3.2. Вывод программы 3.2. В начале программы отведено 256 байт под PSP; в программе отсутствует инициализация регистра DS; поле данных размещено в программном сегменте непосредственно после последней команды. Для разнообразия в строку, выводимую на экран, включены коды 16 и 17, которые отображаются на экране в виде залитых треугольников (рис. 3.2). Как видно из этого рисунка, программа имела имя Р. СОМ и запускалась из каталога F:\CURRENT.
Рассмотрим важный в принципиальном плане вопрос о месте размещения данных в СОМ-программе. В нашем примере данные описаны в конце программного сегмента вслед за процедурой main, которая, как и в предыдущих примерах, введена скорее для порядка, чем по необходимости. С таким же успехом можно было предложение с именем msg поместить после вызова int 21h, внутри процедуры main. Третий возможный вариант, с которым мы еще столкнемся в примерах резидентных программ, приведен ниже. assume CS:code,DS:code code segment org 256 ; Место под PSP main proc jmp start ; Первая выполнимая команда msg db 16,16,16,'Программа типа .COM',17,17,17,'$' start: mov AH,09h ; Функция вывода на экран mov DX,offset msg int 21h ... /Продолжение программы Таким образом, данные могут быть размещены как после программы, так и среди выполнимых предложений программы. Важно только соблюсти обязательное условие: ни при каких обстоятельствах на данные не должно быть передано управление. В первом случае (пример 3-2) данные помещены за вызовом функции DOS, завершающей программу. Ясно, что после выполнения этой функции управление уже не вернется в нашу программу, а будет передано командному процессору, поэтому размещение здесь данных вполне возможно. В последнем фрагменте данные описаны, можно сказать, в середине программы. Однако перед ними стоит команда безусловного перехода jmp, которая приводит при выполнении программы к обходу данных . А вот чего нельзя было сделать, так это разместить данные после закрытия сегмента, как это сделано в приведенном ниже (неправильном!) фрагменте: main endp ; Конец процедуры code ends ; Конец сегмента msg db 16,16,16' Программа типа .СОМ',17,17,17,'$' end main Это второе обязательное условие: из чего бы ни состояла программа, все ее компоненты должны входить в те или иные сегменты. Вне сегментов допускаются только нетранслируемые директивы ассемблера типа .586 или assume. Наконец, третье условие, о котором уже говорилось, относится только к программам типа СОМ. DOS, Загрузив программу в память, инициализирует указатель команд числом 100п, т.е. адресом первой команды вслед за оператором org 100h. Поэтому главная процедура СОМ-программы (если в ней имеется несколько процедур) обязательно должна быть первой, причем первое предложение этой процедуры должно быть выполнимой командой (например, командой jmp, как это показано выше) .
Обработчики аппаратных прерываний Обработчики прерываний являются важнейшей составной частью многих программных продуктов. Как было показано в гл. 1, прерывания разделяются на внутренние, возникающие в самом микропроцессоре в случае определенных сбоев (попытка деления на 0, несуществующая команда), внешние, приходящие из периферийного оборудования (клавиатура, мышь, диски, нестандартные устройства, подключенные к компьютеру) и программные, являющиеся реакцией процессора на команду int с тем или иным номером. В прикладных программах приходится обрабатывать, главным образом, внешние и программные прерывания. Общие принципы обслуживания тех и других прерываний одинаковы, однако условия функционирования обработчиков аппаратных прерываний имеют значительную специфику, связанную, главным образом, с тем, что прерывания от аппаратуры приходят в произвольные моменты времени и могут прервать текущую программу в любой ее точке. Обработчик прерывания должен быть написан таким образом, чтобы его выполнение ни в какой степени не отразилось на правильном функционировании текущей (прерываемой) программы. Рассмотрим схематически структуру и функционирование программного комплекса, включающего собственный обработчик какого-либо аппаратного прерывания (рис. 3.3). Инициализация обработчика прерываний Прерывание 1 \( Прерывание 2 \ го? / 1 Дальнейший 7 ~ / Обработчик прерываний ret Рис. 3.3. Функционирование программного комплекса с обработчиком прерываний. Обработчик прерываний может входить в состав программы в виде процедуры, или просто являться частью программы, начинающейся с некоторой метки (входной точки обработчика) и завершающейся командой выхода из прерывания iret. Пока мы не будем рассматривать более сложный случай, когда обработчик представляет собой самостоятельную резидентную программу.
Программа, начиная свою работу, прежде всего, должна выполнить инициализирующие действия по установке обработчика прерываний. В простейшем случае эти действия заключаются в занесении в соответствующий вектор полного адреса (сегмента и смещения) обработчика. Поскольку обработчик входит в состав программы, его относительный адрес известен; это имя его процедуры или метка входной точки. Что же касается сегментного адреса, то обработчик может входить в сегмент основной части программы, если она невелика по объему и занимает один сегмент, но может образовывать и самостоятельный сегмент. В любом случае в качестве сегментного адреса можно использовать имя соответствующего сегмента. Часто инициализация обработчика, помимо установки вектора, предполагает и другие действия: сохранение исходного содержимого вектора прерывания, размас- кирование соответствующего уровня прерываний в контроллере прерываний, посылка в устройство команды разрешения прерываний и проч. Установив обработчик, программа может приступить к дальнейшей работе. В случае прихода прерывания, процессор сохраняет в стеке флаги и текущий адрес программы, извлекает из вектора адрес обработчика и передает управление на его входную точку. Все время, пока выполняется программа обработчика, основная программа, естественно, стоит. Завершающая обработчик команда iret извлекает из стека сохраненные там данные и возвращает управление в прерванную программу, которая может продолжить свою работу. Последующие прерывания обслуживаются точно так же. Функции обработчика прерываний зависят от решаемой задачи и назначения того устройства, от которого поступают сигналы прерываний. В случае прерываний от клавиатуры задача обработчика прерываний - принять и сохранить код нажатой клавиши. Прерывания от мыши свидетельствуют о ее перемещении, что требует обновления положения курсора на экране. Если обслуживаемым устройством является физическая установка, то сигнал прерывания может говорить о том, что в установке накоплен определенный объем данных, которые надо перенести из памяти установки в память компьютера. В любом случае обработчик прерываний должен быть программой несложной, для выполнения которой не требуется много машинного времени. Рассмотрим структуру программы с обработкой аппаратных прерываний. Наиболее удобным аппаратным прерыванием, которое можно использовать в исследовательских целях, является прерывание от системного таймера, которое генерируется 18.2 раза в секунду и служит источником сигналов для хода системных часов, отсчитывающих время, истекшее после включения машины. Замена системного обработчика на прикладной не приводит к каким-либо неприятностям, кроме, возможно , остановки на некоторое время системных часов. Будем считать, что наш программный комплекс представляет собой программу типа ЕХЕ и что обработчик прерываний входит в общий с основной программой программный сегмент. Для определенности будем использовать вектор 08п, хотя, разумеется, для любого другого аппаратного вектора структура программы останется той же. Поначалу приведем текст программы с некоторыми купюрами. Пример 3-3. Обработчик прерываний от таймера code segment
assume CS:code,DS:data /Главная процедура main proc mov AX,data mov DS,AX /Сохраним исходный вектор mov АН,35h mov AL,08h int 21h mov word ptr old_08,BX mov word ptr old_08+2,ES /Установим наш обработчик mov AH,25h mov AL,08h mov DX,offset new_08 push DS push CS pop DS int 21h pop DS Инициализация регистра DS сегментного Функция получения вектора Номер вектора Смещение исходного обработчика Сегмент исходного обработчика Функция заполнения вектора Номер вектора Смещение нашего обработчика Сохраним DS=data Перепишем CS в DS через стек. DS:DX->new 08 ; Восстановим DS=data ... ; Продолжение основной программы ; Перед завершением программы восстановим исходный вектор Ids DX ,old_08 ; Заполним DS:DX из old_08 mov AH,25h ; Функция заполнения вектора move AL,08h ; Номер вектора int 21h mov AX,4COOh ; Функция завершения программы int 21h main endp /Процедура обработчика прерываний от таймера new_08 proc ... ; Действия, выполняемые 18 раз в секунду mov AL,20h ; Разблокировка прерываний out 20h,AL ; в контроллере прерываний iret ; Возврат в прерванную програму new_0 8 endp code ends data segment old_08 db 0 data ends stk segment stack db 256 dup(0) stk ends end main Ячейка для хранения исходного вектора В приведенном примере обработчик прерываний расположен в конце программы, после главной процедуры main. Взаимное расположение процедур не имеет ни малейшего значения; с таким же успехом обработчик можно было поместить в начале программы. Не имеет также значения, выделен ли обработчик в отдельную процедуру или просто начинается с метки. Для того чтобы прикладной обработчик получал управление в результате прерываний, его адрес следует поместить в соответствующий вектор прерывания. При этом исходное содержимое вектора будет затерто, и если прерывания будут по-
ступать и после завершения программы, возникнет весьма неприятная ситуация, когда управление будет передаваться по адресу, по которому в памяти может располагаться что угодно. Поэтому стандартной методикой является сохранение в памяти исходного содержимого вектора и восстановление этого содержимого перед завершением программы. Хотя и чтение, и заполнение вектора прерываний можно выполнить с помощью простых команд mov, однако предпочтительнее использовать специально предусмотренные для этого функции DOS. Для чтения вектора используется функция с номером 35h. В регистр AL помещается номер вектора. Функция возвращает исходное содержимое вектора в паре регистров ES:BX (легко догадаться, что в ES сегментный адрес, а в ВХ смещение). Для хранения исходного содержимого вектора в сегменте данных предусмотрена двухсловная ячейка old_08. В младшем слове этой ячейки (с фактическим адресом old_08) будет хранится смещение, в старшем (с фактическим адресом old_08+2) - сегментный адрес. Для того, чтобы обратиться к словам, составляющим эту ячейку, приходится использовать описатель word ptr, который как бы заставляет транслятор на время забыть о начальном объявлении ячейки и позволяет рассматривать ее, как два отдельных слова. Если бы мы отвели для исходного вектора две 16-битовые ячейки, например old_08_offs dw 0 ; Для смещения old_08_seg dw 0 ; Для сегментного адреса то к ним можно было бы обращаться без всяких описателей. Сохранив исходный вектор, можно установить в нем адрес нашего обработчика. Для установки вектора в DOS предусмотрена функция 25h. Она требует указания номера устанавливаемого вектора в регистре AL, а его полного адреса - в паре регистров DS:DX. Здесь нас подстерегает неприятность. Занести в регистр DX смещение нашего обработчика new_08 не составляет труда, это делается командой mov DX,offset new_08 /Смещение нашего обработчика Однако регистр DS у нас занят - в нем хранится сегментный адрес сегмента данных. Придется на какое-то время сохранить этот адрес, для чего удобнее всего воспользоваться стеком. Откуда взять сегментный адрес обработчика? Между прочим, в языке ассемблера существует специальная конструкция, позволяющая определить сегментный адрес любого поля. В нашем случае она выглядела бы таким образом: mov AX,seg new_08 ; Получим сегмент с процедурой new_08 mov DS,AX ; Перепишем его в DS В примере 3-3 использован другой прием - содержимое CS отправляется в стек и тут же извлекается оттуда в регистр DS: push CS pop DS После возврата из DOS надо не забыть восстановить исходное содержимое DS, сохраненное в стеке. Инициализация обработчика прерываний закончена. Начиная с этого момента, каждый сигнал таймера будет приводить к прерыванию продолжающейся основной программы и передаче управления на процедуру new 08.
Перед завершением программы необходимо поместить в вектор 8 адрес исходного, системного обработчика, который был сохранен в двухсловном поле old_08. Перед вызовом функции 25h установки вектора в регистры DS:DX надо занести содержимое этого двухсловного поля. Эту операцию можно выполнить одной командой Ids, если указать в качестве ее первого операнда регистр DX, а в качестве второго - адрес двухсловной ячейки, в нашем случае old_08. Именно имея в виду использование этой команды, мы и объявили поле для хранения вектора двухсловным, отчего возникли некоторые трудности при его заполнении командами mov. Если бы мы использовали второй предложенный выше вариант и отвели для хранения вектора две однословные ячейки (old_08_offs и old_08_seg), то команду Ids пришлось бы снабдить описателем изменения размера ячейки: Ids DX, dword ptr old_08_offs Между прочим, здесь так же разрушается содержимое DS, но поскольку сразу же вслед за функцией 25h вызывается функция 4Ch завершения программы, это не имеет значения. Последнее, что нам осталось рассмотреть - это стандартные действия по завершению самого обработчика прерываний. Выше уже говорилось, что последней командой обработчика должна быть команда iret, возвращающая управление в прерванную программу. Однако перед ней необходимо выполнить еще одно обязательное действие - послать в контроллер прерываний команду конца прерываний. Дело в том, что контроллер прерываний, передав в процессор сигнал прерывания INT, блокирует внутри себя линии прерываний, начиная с той, которая вызвала данное прерывание, и до последней в порядке возрастания номеров IRQ. Таким образом, прерывание, пришедшее, например, по линии IRQ 6 (гибкий диск) заблокирует дальнейшую обработку прерываний по линиям 6 и 7, а прерывание от таймера (IRQO) блокирует вообще все прерывания (IRQO...IRQ7, а также и IRQ8...IRQ15, поскольку все они являются разветвлением уровня IRQ2, см, гл. 1, рис. 1.11) . Любой обработчик аппаратного прерывания обязан перед своим завершением снять блокировку в контроллере прерываний, иначе вся система прерываний выйдет из строя. Снятие блокировки осуществляется посылкой команды с кодом 20п в один из двух портов, закрепленных за контроллером прерываний. Для ведущего контроллера эта команда посылается в порт 20п, для ведомого - в порт АОп. Таким образом, если бы мы обрабатывали прерывания от часов реального времени (линия прерываний IRQ8, вектор 7Oh, ведомый контроллер), то команда конца прерывания выглядела бы так: mov AL,20h ; Команда конца прерывания out AOh,AL ; Пошлем ее в порт ведомого контроллера Указанную последовательность команд иногда называют приказом, или командой EOI (от end of interrupt, конец прерывания). Разобравшись в этих общих вопросах, рассмотрим пример реальной программы, включающей обработчик прерываний от таймера. Для того, чтобы приведенную выше фрагментарную программу преобразовать в действующую, надо написать содержательную часть самого обработчика, а также придумать, что будет делать основная программа после инициализации прерываний. Все это сделать очень просто. Пусть наш обработчик в ответ на каждое прерывание от таймера выводит на экран какой-нибудь символ. Для этого можно воспользоваться функцией OEh преры-
вания BIOS 10h. Это прерывание обслуживает большое количество различных функций, обеспечивающих управление экраном. Сюда входят функции вывода символов и строк, настройки режимов видеосистемы, загрузки нестандартных таблиц символов и многие другие. Функция ОЕп предназначена для вывода на экран отдельных символов . Она требует указания в регистре AL кода выводимого символа. Процедура new 08 будет выглядеть в этом случае следующим образом: ; Обработчик new_08 proc push АХ mov АН,OEh mov AL,'@' int lOh mov AL,20h out 20h,AL pop AX iret new 08 endp прерываний для примера 3-3 Сохраним исходное значение АХ Функция вывода символа Выводимый символ Переход в BIOS Разблокировка прерываний в контроллере прерываний Восстановим АХ Возврат в прерванную программу Что же касается основной программы, то самое простое включить в нее (после завершения действий по инициализации обработчика прерываний) функцию DOS Olh ожидания ввода с клавиатуры: mov АН,Olh int 21h В результате программа, дойдя до этих строк, остановится (фактически будет выполняться цикл опроса клавиатуры в ожидании нажатия клавиши, включенный в состав программы реализации функции Olh DOS), а на экран непрерывной чередой будут выводиться символы коммерческого at (рис. 3.4). После нажатия на любую клавишу программа завершится. F:\CUHBENT>p 000000000000000000000000000 Рис. 3.4. Вывод программы 3-3 Приведенный пример позволяет обсудить чрезвычайно важный вопрос о взаимодействии обработчиков аппаратных прерываний с прерываемой программой и операционной системой. Особенностью аппаратных прерываний является то, что они могут возникнуть в любой момент времени и, соответственно, прервать выполняемую программу в любой точке. Текущая программа, разумеется, использует регистры, как общего назначения, так и сегментные. Если в обработчике прерывания мы разрушим содержимое хотя бы одного из регистров процессора, прерванная программа, по меньшей мере, продолжит свое выполнение неправильным образом, а скорее всего произойдет зависание системы. Поэтому в любом обработчике аппаратных прерываний необходимо в самом его начале сохранить все регистры, которые будут использоваться в программе обработчика, а перед завершением обработчика (перед командой iret) восстановить их. Регистры, которые обработчиком не используются, сохранять не обязательно. В нашем простом обработчике используется только один регистр АХ. Его мы и
сохраняем в стеке первой же командой push АХ, восстанавливая в самом конце обработчика командой pop АХ. Вторая неприятность может возникнуть из-за того, что в обработчике аппаратного прерывания мы воспользовались для вывода на экран функцией BIOS. Вообще говоря, считается, что в обработчиках аппаратных прерываний нельзя использовать никакие системные средства. Причина такого запрета заключается в том, что аппаратное прерывание может придти в любой момент, в частности тогда, когда прерываемая программы сама выполняет какую-либо функцию DOS или BIOS. Однако, если мы прервем выполнение системной функции на полпути, и начнем выполнять ту же самую или даже другую функцию с начала, произойдет разрушение системы, которая не предусматривает такое "вложенное" выполнение своих программ. В настоящее время разработаны программные приемы, позволяющие эффективно обойти указанный запрет, однако использование их в программе драматически увеличивает ее сложность и объем, и рассматривать эти приемы мы здесь не будем. В нашем случае дело усугубляется тем, что прерывания от таймера не только могут придти в тот момент, когда выполняется функция DOS, но и неминуемо приходят только в такие моменты, так как мы остановили программу с помощью вызова функции Olh прерывания 21h и, следовательно, все время, пока наша программа ждет нажатия клавиши, в действительности выполняются внутренние программы DOS. Именно поэтому мы отказались от использования в обработчике прерывания функции DOS и выводим на экран символы с помощью прерывания BIOS. Выполнение функции BIOS "на фоне" DOS не так опасно. Надо только следить за тем, чтобы наше прерывание BIOS в обработчике не оказалось вложенным в такое же прерывание BIOS в прерываемой программе. Рассмотренный пример имеет существенный недостаток. Записав в вектор прерываний 8 адрес нашего обработчика, мы затерли исходное содержимое вектора и тем самым ликвидировали (в логическом плане) исходный, системный обработчик. Практически это приведет к тому, что на время работы нашей программы остановятся системные часы, и если в системе есть какие-то другие программы, использующие прерывания от таймера, они перестанут работать должным образом. Ликвидировать указанный недостаток очень просто: надо "сцепить" наш обработчик с системным так, чтобы в ответ на каждый сигнал прерывания активизировались последовательно оба обработчика. Рассмотрим методику сцепления обработчиков . При инициализации прикладного обработчика, сцепляемого с системным, следует точно так же, как и раньше, сохранить в программе адрес системного обработчика и поместить в вектор прерывания адрес прикладного обработчика. Изменениям подвергнется только программа самого обработчика, начало которой должно выглядеть следующим образом: /Сцепление прикладного обработчика с системным ; для программы 3-3 new_08 proc pushf ; Отправляем в стек слово флагов call CS:old 08 ; В системный обработчик ... ; Продолжение программы обработчика iret new 08 endp
Как будет работать такая программа? После того, как процессор выполнит процедуру прерывания, в стеке прерванного процесса оказываются три слова: слово флагов, а также двухсловный адрес возврата в прерванную программу (рис.3.5, нижние три слова стека). ^ От команды call CS: old_08 <— От команды push f Заполнено процессором при выполнении процедуры прерывания и перехода на new 08 Рис. 3.5. Стек прерванной программы в процессе выполнения прикладного обработчика прерываний. CS1 - сегментный адрес прерванного процесса; IP1 - смещение точки возврата в прерванную программу; CS2 - сегментный адрес прикладного обработчика; IP2 - смещение точки возврата в прикладной обработчик. Именно такая структура данных должна быть на верху стека, чтобы команда iret, которой завершается любой обработчик прерываний, могла вернуть управление в прерванную программу. Первая команда нашего обработчика pushf засылает в стек еще раз слово флагов, а команда дальнего вызова процедуры call cs:old_08 (где ячейка old_08 объявлена с помощью оператора dd двойным словом) в процессе передачи упражнения системному обработчику помещает в стек двухсловный адрес возврата на следующую команду прикладного обработчика. В результате в стеке формируется трехсловная структура, которая нужна команде iret. Системный обработчик, закончив обработку данного прерывания, завершается командой iret. Эта команда забирает из стека три верхние слова и осуществляет переход по адресу CS2:IP2, т.е. на продолжение прикладного обработчика. Завершающая команда нашего обработчика iret снимает со стека три верхних слова и передает упражнение по адресу CS1:IP1. Описанная методика сцепления прикладного обработчика с системным используется чрезвычайно широко и носит специальное название перехвата прерывания. Обработчики программных прерываний Программные прерывания вызываются командой int, операндом которой служит номер вектора с адресом обработчика данного прерывания. Команда int используется, прежде всего, как стандартный механизм вызова системных средств. Так, команда int 2lh позволяет обратиться к многочисленным функциям DOS, а команды int 10h, int 13h или int 16h - к группам функций BIOS, отвечающим за управле- CS2 Флаги IP1 CS1 Флаги
ние теми или иными аппаратными средствами компьютера. В этих случаях обработчики прерываний представляют собой готовые системные программы, и в задачу программиста входит только вызов требуемого программного средства с помощью команды int с подходящим номером. В некоторых специальных случаях, однако, программисту приходится писать собственный обработчик прерывания, которое уже обслуживается системой. Таким образом, например, осуществляется управление резидентными программами, которые для связи с внешним миром обычно используют прерывание 2Fh. В каждой резидентной программе имеется собственный обработчик этого прерывания, который, выполнив свою долю действий, передает управление "предыдущему", адрес которого находился ранее в векторе 2Fh, и был сохранен обработчиком в своих полях данных. Другой пример - перехват прерываний BIOS в обработчиках аппаратных прерываний с целью обнаружения моментов времени, когда ни одна из наличных программ не использует данное прерывание и, следовательно, сам обработчик может им воспользоваться. Наконец, прикладной программист может воспользоваться одним из свободных векторов, написать собственный обработчик соответствующего прерывания и оставить его резидентным в памяти. После этого любые программы могут с помощью команды int вызывать этот обработчик, который, таким образом, становится резидентной программой общего пользования. Резидентные программы Большой класс программ, обеспечивающих функционирование вычислительной системы (драйверы устройств, оболочки DOS, русификаторы, интерактивные справочники и др.), должны постоянно находиться в памяти и мгновенно реагировать на запросы пользователя, или на какие-то события, происходящие в вычислительной системе. Такие программы носят названия программ, резидентных в памяти (Terminate and Stay Resident, TSR), или просто резидентных программ. Сделать резидентной можно как программу типа СОМ, так и программу типа ЕХЕ, однако поскольку резидентная программа должна быть максимально компактной, чаще всего в качестве резидентных используют программы типа СОМ. Программы, предназначенные для загрузки и оставления в памяти, обычно состоят из двух частей (секций) - инициализирующей и рабочей (резидентной). В тексте программы резидентная секция размещается в начале, инициализирующая - за ней. При первом вызове программа загружается в память целиком и управление передается секции инициализации, которая заполняет или модифицирует векторы прерываний, настраивает программу на конкретные условия работы (возможно, исходя из параметров, переданных программе при ее вызове) и с помощью прерывания DOS int 21h с функцией 31h завершает программу, оставляя в памяти ее резидентную часть. Размер резидентной части программы (в параграфах) передается DOS в регистре DX. Указывать при этом сегментный адрес программы нет необходимости, так как он известен DOS. Для определения размера резидентной секции ее можно завершить предложением вида ressize=$-main где main - смещение начала программы, а при вызове функции 31h в регистр DX заслать результат вычисления выражения (ressize+lOFh)/16.
Разность $ - main представляет собой размер главной процедуры. Однако перед главной процедурой размещается префикс программы, имеющий размер 10Oh байт, который тоже надо оставить в памяти. Далее, при целочисленном делении отбрасывается остаток, т.е. происходит округление результата в сторону уменьшения. Для компенсации этого дефекта можно прибавить к делимому число 15 = Fh. Деление всего этого выражения на 16 даст требуемый размер резидентной части программы в параграфах (возможно, с небольшим кусочком секции инициализации величиной до 15 байт). Функция 31h, закрепив за резидентной программой необходимую для ее функционирования память, передает управление командному процессору COMMAND.COM, и вычислительная система переходит, таким образом, в исходное состояние. Наличие программы, резидентной в памяти, никак не отражается на ходе вычислительного процесса за исключением того, что уменьшается объем свободной памяти. Одновременно может быть загружено несколько резидентных программ. Для того, чтобы активизировать резидентную программу, ей надо как-то передать управление и, возможно, параметры. Как правило, активизация резидентной программы осуществляется с помощью механизма прерываний. Кроме того, специально для взаимодействия с резидентными программами в DOS предусмотрено мультиплексное прерывание 2Fh. Рассмотрим типичную структуру резидентной программы и системные средства оставления ее в памяти. Как уже отмечалось, резидентные программы чаще всего пишутся в формате СОМ: code segment assume CS:text,DS:text org lOOh main proc jmp init entry: iret main endp ressize=$-myproc init proc mov DX,(ressize+lOFh)/16 mov AX,3100h int 21h init endp code ends end main При первом запуске программы с клавиатуры управление передается на начало процедуры main (первый байт после префикса программы). Командой jmp осуществляется переход на секцию инициализации, в которой, в частности, подготавливаются условия для дальнейшей активизации программы уже в резидентном состоянии. Последними строками секции инициализации вызывается функция 31h, которая выполняет завершение программы с оставлением в памяти указанной ее части. С /Переход на секцию инициализации ; Данные резидентной секции программы ; Точка входа при активизации ; Текст резидентной секции программы ; Размер (в байтах) резидентной секции ; Секция инициализации /Размер в параграфах /Функция "завершить и ; оставить в памяти"
целью экономии памяти секция инициализации располагается в конце программы и отбрасывается при ее завершении. Содержательная часть резидентной программы, начинающаяся с метки entry, активизируется, как уже отмечаюсь выше, с помощью аппаратного или программного прерывания и заканчивается командой iret. На рис. 3.6 приведена типичная структура резидентной программы. Точка входа при загрузке Точка входа при активизации PSP main рпос ■jmp init Резидентные данные entry Резидентные команды main endp in it pmc Секция инициализации mov AH.31h int 21 h mit endp Резидентная У часть программы Часть программы, \ отбрасываемая после установки в памяти end mam Рис. 3.6. Структура резидентной программы. Как видно из рис. 3.6, резидентная программа имеет, по крайней мере, две точки входа. После загрузки программы в память командой оператора, вводимой на командной строке, управление передается в точку, указанную в поле завершающего текст программы оператора end (на рисунке - начало процедуры main). Для программ типа СОМ эта точка входа должна соответствовать самой первой строке программы, идущей вслед за префиксом программы. Поскольку при загрузке программы должна выполниться ее установка в памяти, первой командой программы всегда является команда перехода на секцию инициализации и установки (jmp init на рисунке). После установки в памяти резидентная программа остается пассивной и никак не проявляет своего существования, пока не будет активизирована предусмотренным в ней для этого способом. Эта, вторая точка вызова обозначена на рисунке меткой entry. К сожалению, резидентные программы, выполняющие полезную работу, оказываются довольно сложными. Мы же в качестве примера можем рассмотреть только совсем простую резидентную программу, в принципе правильную и работоспособную,
но не претендующую на практическую ценность. Программа активизируется прерыванием от клавиши Print Screen и выводит на экран содержимое сегментного регистра CS, что позволяет определить ее положение в памяти. Как известно, клавиша Print Screen в DOS выполняет печать содержимого экрана на принтере. Каков механизм этой операции? При нажатии на любую клавишу клавиатуры возникает сигнал прерывания, инициирующий активизацию обработчика прерываний от клавиатуры, находящегося в ПЗУ BIOS. При нажатии на алфавитно- цифровые и некоторые другие клавиши (например, функциональные клавиши <F1>...F<12>) обработчик сохраняет в определенном месте памяти код нажатой клавиши и завершается. Текущая программа может с помощью соответствующих функций DOS или BIOS извлечь этот код и использовать его в своих целях. Если же пользователь нажимает на клавишу Print Screen, то обработчик прерываний, в числе прочих действий, выполняет команду int 5, передавая управление через вектор 5 на обработчик этого программного прерывания, который тоже располагается в ПЗУ BIOS. Задача обработчика прерывания 5 заключается в чтении содержимого видеобуфера и выводе его на устройство печати. Таким образом, если мы напишем собственный обработчик прерывания и поместим его адрес в вектор с номером 5, он будет активизироваться нажатием клавиши Print Screen. Обратите внимание на то обстоятельство, что прерывание 5 является прерыванием программным; оно возбуждается командой int 5 и не имеет отношения к контроллеру прерываний. Однако активизируется это прерывание не командой int в прикладной программе, а нажатием клавиши, т.е., фактически, аппаратным прерыванием. Перехват прерывания 5 осуществляется значительно проще, через перехват "истинного" аппаратного прерывания от клавиш клавиатуры, из-за чего мы и воспользовались им в нашем примере. code segment assume CS:text org lOOh main proc jmp init new_05: push AX push BX mov BX,CS mov AH,OEh mov AL,BH int lOh pop BX pop AX iret main endp init proc mov AX,2505h mov DX,offset new_05 int 21h mov DX,(init-main+lOFh)/16 mov AX,3100h int 21h init endp ; Переход на секцию инициализации ; Сохраним регистры АХ и ВХ, ; используемые далее ; ВХ= сегментный адрес программы ; Функция вывода на экран символа ; Выведем старшую половину ; сегментного адреса ; Вызов BIOS ; Восстановим ; регистры ; Завершение обработчика ; Секция инициализации ; Функция установки вектора ; Смещение обработчика ; Вызов DOS ; Размер в параграфах /Функция " завершить и ; оставить в памяти"
code ends end main Структура программы соответствует описанной ранее. В секции инициализации выполняется установка обработчика прерывания 05п, при этом исходное содержимое вектора 5 не сохраняется. Это, разумеется, очень плохо, так как лишает нас возможности этот вектор восстановить. С другой стороны, восстанавливать перехваченные векторы надлежит при завершении программы, а применительно к резидентной программе - при ее выгрузке из памяти. Однако в нашей простой программе не предусмотрено средств выгрузки (процедура выгрузки довольно сложна), и программе придется находиться в памяти до перезагрузки машины. Установив вектор, программа завершается с оставлением в памяти ее резидентной части с помощью функции 31h. Резидентная часть программы является классическим обработчиком программного прерывания. В первых же предложениях сохраняются регистры АХ и ВХ, используемые далее в программе, а затем содержимое сегментного регистра CS переносится в регистр ВХ. С таким же успехом можно было скопировать содержимое любого из регистров DS, ES или SS, так как в программе типа СОМ все регистры настроены на один и тот же сегментный адрес (см. рис. 3.1). Копирование из сегментного регистра в регистр общего назначения понадобился потому, что в дальнейшем нам придется работать с отдельными половинками сегментного адреса, а у сегментных регистров половинок нет. Далее старшая половина сегментного адреса заносится в регистр AL, и вызовом уже знакомой нам функции BIOS OEh этот код выводится на экран. Затем таким же образом выводится младшая половина сегментного адреса. Наконец, после восстановления регистров ВХ и АХ (в обратном порядке по отношению к их сохранению) командой iret управление возвращается в прерванную программу, которой в данном случае является C0MMAND.COM. Вывод программы (ей для наглядности было дано имя TSR.COM) для конкретного прогона показан на рис. 3.7. F:\CURRENT>tsr.con F:\CUnRENT>+ Рис. 3.7. Вывод программы 3-4. Полученный результат далек от наглядности. Действительно, разделив сегментный адрес на две половины длиной в байт каждая, мы просто записали в видеобуфер эти числа. Каждое число размером в байт можно трактовать, как код ASCII какого-то символа. При выводе числа на экран эти символы и отображаются. Изображение пикового туза соответствует коду 06, а знак равенства имеет код 3Dh (см. таблицу кодов ACSII). Таким образом, сегментный адрес находящейся в памяти резидентной программы оказался равен 063Dh, что соответствует приблизительно 25 Кбайт. Так и должно быть, так как конфигурация компьютера, использованного для подготовки примеров, предусматривала хранение большей части DOS в расширенной памяти, в области НМА. В основной памяти в этом случае располагается кусочек DOS вместе с драйверами обслуживания расширенной памяти и частью программы C0MMAND.COM общим объемом около 25 Кбайт.
Для того, чтобы получить на экране сегментный адрес в привычной нам форме, его двоичное машинное представление необходимо преобразовать в коды ASCII, отображающие шестнадцатеричное (или, если угодно, десятичное) представление этого числа. В нашем примере, чтобы получить на экране изображение числа 063Dh, надо было сформировать такую цепочку кодов ASCII (в шестнадцатеричном представлении): 30 36 33 44 68 Рассмотренный метод вывода на экран чисел в виде изображений символов, конечно, далек от совершенства, однако подкупает свой исключительной простотой и вполне может быть использован в процессе отладки резидентных программ и обработчиков прерываний, включение в которые довольно громоздких программ перекодировки может оказаться нежелательным или даже невозможным. Читатель может, подготовив рассмотренный пример, загрузить несколько экземпляров программы и посмотреть, как изменяются в этом случае их начальные адреса . Циклы Циклы, позволяющие выполнить некоторый участок программы многократно, в любом языке являются одной из наиболее употребительных конструкций. В системе команд МП 86 циклы реализуются, главным образом, с помощью команды loop (петля) , хотя имеются и другие способы организации циклов. Во всех случаях число шагов в цикле определяется содержимым регистра СХ, поэтому максимальное число шагов составляет 64 К. Рассмотрим простой пример организации цикла. Пусть в программе зарезервировано место для массива размером 10000 слов, и этот массив надо заполнить натуральным рядом чисел от 0 до 9999. Эти числа, заполняющие последовательные элементы массива, иногда называют числами-заполнителями. Соответствующий фрагмент программы будет выглядеть следующим образом: ;В сегменте данных array dw 10000 dup(0) ;В программном сегменте mov ВХ,offset array mov SI,0 mov AX,0 mov CX,10000 fill: mov [BX] [SI],AX inc AX add SI,2 loop fill Адрес массива Индекс Начальное значение заполнителя Счетчик цикла Заполнитель пошлем в массив Инкремент заполнителя модификация индекса Команда цикла На этапе подготовки мы заносим в регистр ВХ относительный адрес начала массива, отождествляемый с его именем array, устанавливаем начальное значение индекса элемента массива в регистре SI (с таким же успехом можно было взять DI) и начальное значение числа-заполнителя. Сам цикл состоит из трех команд - единственной содержательной команды засылки числа-заполнителя в очередной элемент массива (по адресу, который вычисляется, как сумма содержимого регистров ВХ и SI) , а также модификации числа-заполнителя и индекса очередного элемента массива. Завершающей командой loop управление передается на метку
fill, и цикл повторяется столько раз, каково содержимое СХ, в данном случае 10000 шагов. Следует обратить внимание на команду модификации индекса - в каждом шаге к содержимому SI добавляется 2, так как массив состоит из двухбайтовых слов. Если бы нужно было заполнить байтовый массив, то в каждом шаге содержимое регистра цикла SI следовало увеличивать на 1. Стоит отметить некоторые детали, связанные с механизмом выполнения команды loop. При реализации этой команды процессор сначала уменьшает содержимое регистра СХ на 1, а затем сравнивает полученное число с нулем. Если СХ > 0, переход на указанную метку выполняется. Если СХ = 0, цикл разрывается и процессор переходит на команду, следующую за командой loop. Поэтому после нормального выхода из цикла содержимое СХ всегда равно 0. Другое обстоятельство связано с кодированием команды loop. В ее коде под смещение к точке перехода отводится всего 1 байт. Поскольку смещение должно являться величиной со знаком, максимальное расстояние, на которое можно передать управление командой loop, составляет от -128 до +127 байт (хотя довольно трудно представить себе цикл, в котором переход осуществляется вперед). Другими словами, тело цикла ограничивается всего 128 байтами. Если циклически повторяемый фрагмент программы имеет большую длину, цикл придется организовать другим, более сложным способом: ;Организация mov СХ,10000 fill: dec СХ cmp СХ,0 je finish jmp fill finish: длинного цикла ; Счетчик цикла • метка начала цикла ; Тело длинного цикла ; Декремент счетчика цикла ; Отработано заданное число шагов? ; Да, на метку продолжения программы ; Нет, на начало цикла ; Продолжение программы В этом, весьма типичном фрагменте мы "вручную" уменьшаем содержимое счетчика цикла и сравниваем полученное значение с 0. Если СХ = О, это значит, что в цикле выполнено заданное число шагов, и командой условного перехода je осуществляется переход на продолжение программы (метка finish). Если СХ еще не равно нулю, командой безусловного перехода jmp осуществляется возврат в начало цикла. Как было показано в гл. 2, команда jmp позволяет перейти в любую точку сегмента, и ограничение на размер тела цикла снимается. При необходимости организовать вложенные циклы, для сохранения счетчика внешнего цикла на время выполнения внутреннего удобно воспользоваться стеком. В следующем фрагменте организуется временная задержка длительностью несколько секунд (конкретная величина задержки зависит от скорости работы процессора). mov СХ,2000 outer: push СХ mov СХ,0 inner: loop inner pop СХ loop outer Счетчик внешнего цикла Сохраним его в стеке Счетчик внутреннего цикла loop внутреннего цикла Восстановим внешний счетчик loop внешнего цикла
Программные задержки удобно использовать при отладке программ, чтобы замедлить их работу и успеть рассмотреть их частичные результаты; иногда программные задержки позволяют синхронизовать работу аппаратуры, подключенной к компьютеру, если скорость отработки аппаратурой посылаемых в нее из компьютера команд меньше скорости процессора. В приведенном выше фрагменте внешний цикл выполняется 2000 раз; внутренний - 65536 раз. При счете числа шагов внутреннего цикла используется явление оборачивания, которое уже упоминалось ранее. Начальное значение в регистре СХ равно нулю; после выполнения тела цикла 1 раз команда loop уменьшает содержимое СХ на 1, что дает число FFFFh (которое можно рассматривать, как -1) . В результате цикл повторяется еще 65535 раз, а в сумме - точно 64К шагов. Команда loop внутреннего цикла передает управление на саму себя, т.е. тело внутреннего цикла состоит из единственной команды loop. В этом нет ничего незаконного. Любая команда, в том числе и loop, требует какого-то времени для своего выполнения, и повторение 64К раз команды loop дает некоторую временную задержку (на современных процессорах порядка тысячной доли секунды). Перейдем теперь к рассмотрению команд условных переходов. В приведенном выше фрагменте для реализации длинного цикла использовалась команда условного перехода по равенству je. В системе команд МП 86 имеется свыше трех десятков команд условных переходов, позволяющих осуществлять переходы при наличии разнообразных условий: равенства, неравенства, положительности или отрицательности результата и проч. При выполнении всех этих команд процессор анализирует содержимое регистра флагов и осуществляет (или не осуществляет) переход на указанную метку в зависимости от состояния отдельных флагов или их комбинаций. Поскольку на состояние регистра флагов влияют многие команды процессора, командами условных переходов можно пользоваться не только после команд сравнения или анализа, но и после многих других команд, если внимательно изучить влияние этих команд на флаги процессора. Приведем несколько абстрактных примеров. стар АХ,ВХ ;Сравнение двух регистров j е equal ;Переход, если АХ=ВХ cmp SI,mem ;Сравнение регистра и ячейки памяти jne notequ ; Переход, если S IOmem int 21h ;Вызов DOS jc syserr ;Переход, если была ошибка ;и флаг CF=1 or BX,BX ; Анализ ВХ jz zero ;Переход, если ВХ=0 inpt: in AL,DX ;Ввод данного из устройства test AL,80h ; Анализ бита 7 в данном je inpt ;Ввод до тех пор, пока ;бит 7=0 (ожидание установки бита 7) test AX,7 ;Анализ битов 0,1,2 в АХ jne found ;Переход, если хотя бы 1 бит ;из них установлен test DI,OFh ;Анализ битов 0...3 в DI jz reset ;Переход, если все они сброшены В гл. 2 отмечалось, что двоичные числа, записываемые в регистры процессора
или ячейки памяти, можно рассматривать, либо как числа существенно положительные , т.е. числа без знака, либо как числа со знаком. Например, адреса ячеек, разумеется, не могут быть отрицательными. Поэтому число FFFFh, если по смыслу программы оно является адресом, обозначает 65535. Если, однако, то же число FFFFh получилось в арифметической операции вычитания 2 из 1, то его надо рассматривать, как - 1. Точно так же понятие знака бессмысленно по отношению к кодам символов, которые с равным успехом могут принимать любое значение из диапазона 0...255. С другой стороны, мы можем условно считать, что коды символов первой половины таблицы ASCII положительны, а коды второй половины таблицы (у них установлен старший бит) отрицательны, и использовать для обработки символов команды, чувствительные к знаку. В составе команд условных переходов имеются две группы команд для сравнения чисел без знака (это команды ja, jae, jb, jbc, jna, jnae, jnb и jnbe) и чисел со знаком (jg, jge, jl, jle, jng, jnge, jnl и jnle). В аббревиатурах этих команд для сравнения чисел без знака используются слова above (выше) и below (ниже), а для чисел со знаком - слова greater (больше) и less (меньше). Разница между теми и другими командами условных переходов заключается в том, что команды для чисел со знаком рассматривают понятия "больше-меньше" применительно к числовой оси -32К...О...+32К, а команды для чисел без знака - применительно к числовой оси 0...64К. Поэтому для первых команд число 7FFFh (+32767) больше числа 8000h (-32768), а для вторых число 7FFFh (32767) меньше числа 8000h (32768). Аналогично, команды для чисел со знаком считают, что О больше, чем FFFFh (-1), а команды для чисел без знака - меньше. Рассмотрим пример использования команд условных переходов для обработки символов. Пусть мы вводим с клавиатуры некоторую строку символов (например, имя файла), и хотим, чтобы в программе эта строка была записана прописными буквами, независимо от того, какие буквы использовались при ее вводе. Между прочим, при вводе с клавиатуры команд DOS система всегда выполняет эту операцию, поэтому и команды, и ключи, и имена файлов можно вводить как прописными, так и строчными буквами - DOS во всех случаях преобразует все буквы в прописные . code segment assume cs:code,ds:data main proc mov AX,data /Инициализация move DS,AX /Регистр DS /Выведем служебное сообщение mov AH,09h /Функция вывода mov DX,offset msg /Адрес сообщения int 21h /Поставим запрос к DOS на ввод строки mov AH,3Fh /Функция ввода mov ВХ,0 /Дескриптор клавиатуры mov СХ,80 /Ввод максимум 80 байт mov DX, offset buf /Адрес буфера ввода int 21h mov actlen,AX /Фактически введено /Превратим строчные русские буквы в прописные mov CX,actlen /Длина введенной строки mov SI,0 /Указатель в буфере
filter: mov AL,buf[SI] cmp AL, ' a' jb noletter cmp AL, ' я' ja noletter cmp AL, ' n' ja more sub AL,20h jmp store more: cmp AL,'p' jb noletter sub AL,50h store: mov buf[SI],AL noletter: inc SI loop filter /Возьмем символ /Меньше 'a'? ;Да, не преобразовывать ;Больше 'я'? ;Да, не преобразовывать ;Больше 'п'? ;Да, на дальнейшую проверку ;'а'..'п'. Преобразуем в прописную ;На сохранение в буфере /Меньше 'р' (псевдографика)? ;>'п',<'р'. Не изменять ;'р'...'я'. Преобразуем в прописную /Отправим назад в buf /Сместим указатель ;Цикл по всем символам Выведем результат преобразования на экран для контроля mov АХ,4Oh mov ВХ,1 mov CX,actlen mov DX,offset buf int 21h mov AH,01 int 21h /Завершим программу mov AX,4C00h int 21h main endp code ends data segment msg db "Вводите!?" buf db 80 dup (' ') actlen dw 0 data ends stk segment stack dw 128 dup(0) stk ends end main /Функция вывода /Дескриптор экрана /Длина сообщения /Адрес сообщения /Остановим программу /в ожидании нажатия клавиши /Буфер ввода В начале программы на экран выводится служебное сообщение "Вводите!", которое служит запросом программы, адресованным пользователю. Далее с помощью функции DOS 3Fh выполняется ввод строки текста с клавиатуры. Функция 3Fh может вводить данные из разных устройств - файлов, последовательного порта, клавиатуры. Различные устройства идентифицируются их дескрипторами. При работе с файлами дескриптор каждого файла создается системой в процессе операции открытия или создания этого файла, а для стандартных устройств - клавиатуры, экрана, принтера и последовательного порта действуют дескрипторы, закрепляемые за этими устройствами при загрузке системы. Для ввода с клавиатуры используется дескриптор 0, для вывода на экран дескриптор 1. При вызове функции 3Fh в регистр ВХ следует занести требуемый дескриптор, в регистр DX - адрес области в программе, выделенной для приема вводимых с клавиатуры символов, а в регистр СХ - максимальное число вводимых символов. Мы считаем, что пользователь не будет вводить более 80 символов. Можно ввести и меньше/ в любом случае ввод строки следует завершить нажатием клавиши
<Enter>. Функция 3Fh, отработав, вернет в регистре АХ реальное число введенных символов (включая коды 13 и 10, образуемые при нажатии клавиши <Enter>). В примере 3.5 число введенных символов сохраняется в ячейке actlen с целью использования далее по ходу программы. Далее в цикле из actlen шагов выполняется анализ каждого введенного символа путем сравнения с границами диапазонов строчных русских букв. Русские строчные буквы размещаются в двух диапазонах кодов ASCII (а...п и р...с), причем для преобразования в прописные букв первого диапазона их код следует уменьшать на 20h, а для преобразования букв второго диапазона - на 50h. Поэтому анализ проводится с помощью четырех команд сравнения стр и соответствующих команд условных переходов. Модифицированный символ записывается на то же место в буфере buf. После завершения анализа и преобразования введенных символов, выполняется контрольный вывод содержимого buf на экран. Поскольку мы заранее не знаем, сколько символов будет введено, вывод на экран осуществляется функцией 4Oh, среди параметров которой указывается число выводимых символов. Так же, как и в случае функции ввода 3Fh, для функции вывода 4Oh в регистре ВХ необходимо указать дескриптор устройства ввода, в данном случае экрана, а в регистре DX - адрес выводимой строки. Коды символов являются числами без знака, и использование в данном случае команд условных переходов для чисел без знака представляется логичным и даже единственно возможным. Если, однако, внимательно рассмотреть понятия больше- меньше для чисел со знаком и без знака, то легко увидеть, что пока мы сравниваем друг с другом только "положительные" или только "отрицательные" числа, команда ja эквивалентна команде jg, а команда jb эквивалентна команде jl. Однако при сравнении, например, кодов цифр с кодами русских букв, правильный результат можно получить лишь при использовании команд переходов для чисел без знака. Впрочем, всегда нагляднее и надежнее использовать те команды, которые соответствуют существу рассматриваемых данных, даже если такой же правильный результат получится и при использовании "неправильных" команд. Более отчетливо разница между числами со знаком и без знака проявляется при использовании арифметических операций, например, операций умножения или деления. Здесь для чисел со знаком и чисел без знака предусмотрены отдельные команды: mul - команда умножения чисел без знака; imul - команда умножения чисел со знаком; div - команда деления чисел без знака; idiv - команда деления чисел со знаком. Поясним различия этих команд на формальных примерах. ;Умножение mov AL,5 mov BL,7 mul BL mov AL,5 mov BL,7 imul BL положительных чисел со знаком ;Первый сомножитель равен 5 ;Второй сомножитель равен 7 ;AX=0023h=35 ;Первый сомножитель равен 5 ;Второй сомножитель равен 7 ;AX=0023h=35
Обе команды, mul и imul, дают в данном случае одинаковый результат, так как положительные числа со знаком совпадают с числами без знака. Не так обстоит дело при умножении отрицательных чисел. /Умножение отрицательных чисел со знаком mov AL,OFCh /Первый сомножитель = 252 mov BL,4 /Второй сомножитель = 4 mul BL /АХ= 03F0h = 1008 mov AL,OFCh /Первый сомножитель = -4 mov BL,4 /Второй сомножитель = 4 imul BL /АХ = FFFO = -16 Здесь действие команд mul и imul над одними и теми же операндами дает разные результаты. В первом примере число без знака FCh, которое интерпретируется, как 252, умножается на 4, давая в результате число без знака 3F0, т.е. 1008. Во втором примере то же число FCh рассматривается, как число со знаком. В этом случае оно составляет -4. Умножение на 4 дает FFFOh, т.е. -16. Обработка строк Для работы со строками, или цепочками символов или чисел (т.е. попросту говоря, с массивами произвольных данных) в МП предусмотрен ряд специальных команд: movs - пересылка строки/ cmps - сравнение двух строк/ seas - поиск в строке заданного элемента/ lods - Загрузка аккумулятора (регистров AL или АХ) из строки/ stos - запись элемента строки из аккумулятора (регистров АХ или AL). Эти команды очень удобны, однако их использование сопряжено с некоторыми трудностями, так как процессор, выполняя эти команды, неявным образом использует ряд своих регистров. Только если все эти регистры настроены должным образом, команды будут выполняться правильно. В результате включение в программу предложения с командой, например, movs, требует иной раз 6-7 дополнительных предложений, в которых осуществляется подготовка условий для правильного выполнения этой команды. Хотя команды обработки строк, как правило, включаются в программу без явного указания операндов, однако каждая команда, в действительности, использует два операнда. Для команд seas и stos операндом-источником служит аккумулятор, а операнд-приемник находится в памяти. Для команды lods, наоборот, операнд- источник находится в памяти, а приемником служит аккумулятор. Наконец, для команд movs и cmps оба операнда, и источник, и приемник, находятся в памяти. Все рассматриваемые команды, выполняя различные действия, подчиняются одинаковым правилам, перечисленным ниже. Операнды, находящиеся в памяти, всегда адресуются единообразно: операнд-источник через регистры DS:SI, а операнд- приемник через регистры ES:DI. При однократном выполнении команды обрабатывают только один элемент, а для обработки строки команды должны предваряться одним из префиксов повторения. В процессе обработки строки регистры SI и DI автоматически смещаются по строке вперед (если флаг DF = 0) или назад (если флаг DF = 1), обеспечивая адресацию последующих элементов. Каждая команда имеет модификации для работы с байтами или словами (например, movsb и movsw).
Таким образом, для правильного выполнения команд обработки строк необходимо (в общем случае) предварительно настроить регистры DS:SI и ES:DI, установить или сбросить флаг DF, занести в СХ длину обрабатываемой строки, а для команд seas и stos еще поместить операнд-источник в регистр АХ (или AL при работе с байтами). Однако сама операция, после всей этой настройки, осуществляется одной командой , которая обычно даже не содержит операндов, хотя может иметь префикс повторения. Стоит подчеркнуть, что строки, обрабатываемые рассматриваемыми командами, могут находиться в любом месте памяти: в полях данных программы, в системных областях данных, в ПЗУ, в видеобуфере. Например, с помощью команды movs можно скопировать массив данных из одной массивной переменной в другую, а можно переслать страницу текста на экран терминала. Рассмотрим несколько примеров использования команд обработки строк, ограничившись лишь теми фрагментами программ, которые имеют отношение к рассматриваемому вопросу. Пример 3-6. Чтение из ПЗУ BIOS даты его выпуска ;В программном сегменте Известно, что в ПЗУ BIOS, сегментный адрес которого составляет FOOOh (см. рис. 1.5), наряду с программами управления аппаратурой компьютера, хранятся еще и некоторые идентификаторы. Так, в восьми байтах ПЗУ, начиная с адреса F000h:FFF8h, записана в кодах ASCII дата разработки ПЗУ. В примере 3.6 выполняется чтение этой даты, сохранение ее в памяти и вывод на экран для контроля. Поскольку интересующая нас дата хранится в ПЗУ BIOS в кодах ASCII, никаких преобразований содержимого этого участка ПЗУ перед выводом на экран не требуется. В программе осуществляется настройка всех необходимых для выполнения команды movs регистров (DS:SI, ES:DI, СХ и флага DF) и одной командой movsb с префиксом rep содержимое требуемого участка ПЗУ переносится в поле bios. Перенос main proc mov AX,0F000h mov DS,AX mov SI,0FFF5h mov AX,data mov RS,AX mov DI,offset bios mov CX,8 eld rep movsb /Выведем полученную mov AX,data mov DS,AX mov AH,4Oh mov BX,1 mov CX,8 mov DX,offset bios int 21h ;B сегменте данных bios db 8 dup (0) информацию на экран /Теперь настроим DS ;на сегмент данных программы /Функция вывода /Дескриптор экрана /Вывести 8 байт /Смещение в строке /Вызов DOS /Занесем в DS /Сегментный адрес ПЗУ BIOS /Смещение к интересующему нас полю /Настроим RS /на сегмент данных программы /Смещение к полю для хранения даты / Перенести 8 байт /Движение по строке вперед / Перенос байтов /Поле для хранения даты
строки байтами подчеркивает ее формат (в строке записаны байтовые коды ASCII), однако в нашем примере, при четном числе переносимых байтов, более эффективно осуществить перенос по словам. В этом варианте команда movs будет фактически повторяться не 8 раз, а только 4. Для этого достаточно занести в СХ число 4 (вместо 8) и использовать вариант команды movsw. Для выполнения команды movs нам пришлось настроить сегментный регистр DS на сегмент BIOS. Если в дальнейшем предполагается обращение к полям данных программы, как это имеет место в примере 3-6, в регистр DS следует занести сегментный адрес сегмента данных. После этого, настроив остальные регистры для вызова функции 4Oh, прочитанную из BIOS строку можно вывести на экран. В рассмотренном примере неявно предполагалось, что программа будет в дальнейшем как-то использовать полученную из BIOS информацию. Если задача программы заключается просто в выводе на экран даты выпуска BIOS, то нет необходимости сначала копировать эту дату из BIOS в поля данных программы, а потом выводить ее на экран. Можно было поступить гораздо проще: настроив регистр DS на сегмент BIOS, а регистр DX на адрес строки с датой, вызвать функцию 4Oh и вывести на экран текст непосредственно из сегмента BIOS. Тогда содержательная часть программы сократится в два раза и примет такой вид: mov AX,0F00h mov DS,AX mov AH,4Oh mov BX,1 mov CX,8 mov DX,0FFF8h int 21h /Настроим DS ;на сегмент BIOS /Функция вывода /Дескриптор экрана /Вывести 8 байт /Смещение к дате /Вызов DOS Приведенный фрагмент не имеет отношения к данному разделу, так как в нем уже нет команд обработки строк. В то же время он подчеркивает важность сегментных регистров и гибкость сегментной адресации. Функция 4Oh ожидает найти адрес выводимой на экран строки в регистрах DS:DX, и никакие другие регистры в этом случае использовать нельзя. С другой стороны, эти регистры можно настроить на любой участок памяти и вывести на экран (а также и на принтер, в файл или в последовательный порт) данные откуда угодно. Рассмотрим теперь пример работы с командами lods и stos, которые можно использовать как по отдельности, так и в паре друг с другом. Эти команды очень удобны, в частности, для прямого обращения к видеопамяти. К экрану, как и к любому другому устройству, входящему в состав компьютера, можно обращаться тремя способами: с помощью функций DOS (прерывание 21h) , с использованием прерывания BIOS (для управления экраном используется прерывание 10h) и, наконец, путем прямого программирования аппаратуры, в данном случае видеобуфера (видеопамяти). Функции DOS позволяют выводить только черно- белый текст и имеют ряд других ограничений (нельзя очистить экран, нет средств позиционирования курсора)/ при использовании прерывания BIOS все эти ограничения снимаются, однако программирование с помощью средств BIOS весьма трудоемко/ наконец, прямая запись в видеопамять, предоставляя возможность вывода цветного текста в любую точку экрана, является процедурой очень простой и, к тому же, повышает скорость вывода (по сравнением с использованием системных средств) в десятки и сотни раз. Прямое обращение к видеобуферу удобно использовать, например, в обработчиках прерываний, где запрещен вызов функций DOS и имеются ограничения на обращение к средствам BIOS.
Пусть по ходу программы необходимо вывести в нижнюю строку экрана предупреждающее сообщение. Для этого в программу надо включить следующие предложения: Пример 3-7. Вывод на экран прямой записью в видеопамять ;В полях данных, адресуемых через DS msg db 'Измерения закончены' msg_len=$-msg ;В программном сегменте mov SI,offset msg mov AX,0B800h mov ES,AX mov DI,25*80*2 mov CX,msg_len eld mov AH,31h outher: lodsb stosw loop outher ;Длина строки ;DS:31->выводимая строка /Сегментный адрес видеобуфера /Будем адресовать через ES /Смещение к последней строке экрана /Счетчик цикла вывода символов :DF=0 движение по строке ;и по экрану вперед /Атрибут символов - синий по ; голубому /Взять символ из строки в AL /Вывод на экран символа /из AL и его атрибута из АН /Цикл Регистры DS:SI настраиваются на адрес начала выводимой строки/ регистры ES:DI - на адрес требуемой позиции в видеобуфере. В регистр СХ надо поместить длину строки в байтах, а флаг DF сбросить, чтобы двигаться по строке вперед. На экран будет выводиться содержимое регистра АХ, в младшем байте которого должен находиться код ASCII выводимого символа, а в старшем байте - атрибут символа, т.е. код цвета символа (в младшем полубайте) и код цвета фона (в старшем полубайте). В примере число 31h образует синие символы по бирюзовому фону. При желании можно выбрать другую комбинацию цветов, выбрав ее с помощью табл. 3.1. Таблица 3.1. Коды цветов стандартной цветовой палитры Код Цвет Код Цвет Oh Черный 8h Серый lh Синий 9h Голубой 2h Зеленый 10h Салатовый 3h Бирюзовый llh Светло-бирюзовый 4h Красный 12h Розовый 5h Фиолетовый 13h Светло-фиолетовый 6h Коричневый 14h Желтый 7h Белый 15h Ярко-белый Выбирая цвета, следует иметь в виду, что при стандартной настройке видеосистемы для цвета фона можно использовать лишь значения из левого столбца таблицы/ выбор любого яркого цвета из правого столбца приведет к выводу мерцающего символа. Содержательную часть цикла вывода образуют две команды lodsb и stosw. Первая команда загружает в регистр AL код очередного символа, вторая выводит его
вместе с атрибутом, хранящемся в АН, на экран. При этом после каждого выполнения команды lodsb содержимое SI увеличивается процессором на 1, смещая адресацию к следующему символу строки; в то же время каждое выполнение команды stosw увеличивает DI на 2 (потому что команда stosw работает со словами), смещая адресацию на экране на 2 байт, т.е. как раз к позиции следующего символа . Примеры использования команд cmps и seas можно найти в Приложении. Использование подпрограмм Общая идея использования подпрограмм очевидна: если в программе требуется многократно выполнять один и тот же фрагмент, его можно оформить в виде подпрограммы и вызвать по мере необходимости. Если подпрограмма не требует для своего выполнения никаких параметров и не должна возвращать в основную программу результат своей работы, то дело ограничивается оформлением текста подпрограммы в виде процедуры, завершающейся командой ret, и вызовом этой процедуры с помощью команды call. Как уже отмечалось ранее, подпрограмма может и не образовывать процедуру, а быть просто частью основной программы. Важно только, чтобы у нее была входная метка, и чтобы она завершалась командой ret. В следующем примере подпрограмма delay используется для включения в основной текст программы программных задержек фиксированной величины. Пример 3-8. Вызов подпрограммы без параметров code segment assume cs:code,ds:data delay proc push CX mov CX,2000 dell: push CX mov CX,0 del2: loop del2 pop CX loop dell pop CX ret delay endp ;Процедура-подпрограмма /Сохраним CX основной программы /Счетчик внешнего цикла /Сохраним его /Счетчик внутреннего цикла /Внутренний цикл (64К шагов) /Восстановим внешний счетчик /Внешний цикл (2000 шагов) /Восстановим СХ программы /Возврат в подпрограмму main proc mov АХ,data mov DX,AX mov AH,09h mov DX,offset msgl mov CX,3 cntrll: int 21h call delay add DX,msg_len loop cntrl mov AX,4C00h int 21h main endp code ends : Настроим DS : на сегмент данных : Функция вывода на экран :Адрес первой строки ; Будем выводить строки в цикле ; Вызов DOS ; Вызов подпрограммы задержки : Прибавим к смещению длину строки :Цикл вызовов DOS : Завершение программы
data segment msgl db "Процесс стартовал ",13,10,'$' msg_len=$-msgl msg2 db "Процесс идет ",13,10,'$' msg3 db "Процесс завершается",13,10,'$' data ends stk segment stack dw 128 dup(0) stk ends end main В тексте программы сначала описана процедура-подпрограмма, затем основная программа. Как уже отмечалось, порядок их описания роли не играет; важно только, чтобы в завершающей директиве окончания трансляции end был указан в качестве точки входа адрес основной программы (main в нашем примере). Подпрограмма реализует задержку с помощью вложенных циклов с командой loop, использующей в качестве счетчика шагов регистр СХ. В основной программе этот регистр используется для организации цикла вывода трех строк. Поэтому первое, что должна сделать подпрограмма - это сохранить содержимое регистра СХ, для чего естественно использовать стек. Перед завершающей командой ret регистр СХ должен быть восстановлен. Фрагмент, реализующий задержку, был описан ранее, в разделе 3.2. Основная программа выводит на экран с помощью функции 09h три строки текста. Для упрощения программы, а также чтобы продемонстрировать некоторые приемы программирования, вывод строк реализован в цикле. Строки сделаны одной длины, и модификация смещения к очередной строке выполняется прибавлением к содержимому регистра DX длины строки. Полезно обратить внимание на организацию цикла в основной программе. В цикл, помимо команды вызова подпрограммы задержки и предложения, модифицирующего регистр DX, включена лишь команда int 2lh. Регистр АН с номером функции заново не настраивается. Это и не нужно, так как DOS, выполняя затребованную операцию, первым делом сохраняет все регистры программы, а перед возвратом в программу их восстанавливает. Поэтому, вызывая функции DOS (или BIOS) можно не заботиться о сохранении регистров - их содержимое система не разрушает. Надо только иметь в виду, что многие функции DOS и BIOS после своего завершения возвращают в программу некоторую информацию (число реально введенных символов, доступный объем памяти, номер видеорежима и т.п.) Обычно эта информация возвращается в регистре АХ, однако могут использоваться и другие регистры или их сочетания. Поэтому, обращаясь в программе к системным функциям, необходимо ознакомиться с их описанием и, в частности, посмотреть, какие регистры они могут использовать для возвращаемых значений. Запустив программу, можно убедиться в том, что строки текста появляются на экране через заметные промежутки времени. В примере 3-8 подпрограмма не требовала параметров. Чаще, однако, подпрограмма должна принимать один или несколько параметров и возвращать результат. В этом случае необходимо организовать взаимодействие основной программы и подпрограммы. Никаких специальных средств языка для этого не существует; передачу параметров в подпрограмму и из нее программист организует по своему усмотрению. Для передачи параметров как в одну, так и в другую сторону можно использовать регистры общего назначения, ячейки памяти или стек. Например,
нетрудно преобразовать подпрограмму delay из примера 3-8 так, чтобы ей можно было передавать величину требуемой задержки. Пусть эта величина (в числе шагов внешнего цикла) передается в регистре SI. Пример 3-8а. Подпрограмма задержки с одним параметром, передаваемом в регистре SI delay proc push СХ mov CX,SI dell: push CX mov CX,0 del2: loop del2 pop CX loop dell pop CX ret /Процедура- подпрограмма /Сохраним CX основной программы /Счетчик внешнего цикла /Сохраним его /Счетчик внутреннего цикла /Внутренний цикл (64К шагов) /Восстановим внешний счетчик /Внешний цикл (2000 шагов) /Восстановим СХ программы /Возврат в программу Можно пойти еще дальше и составить подпрограмму таким образом, чтобы передаваемый в нее параметр характеризовал время задержки в секундах. Если не связываться с использованием системного таймера в качестве инструмента для определения интервала времени, а по-прежнему реализовывать задержку с помощью процессорного цикла, ее величина будет зависеть от скорости работы конкретного компьютера и должна быть подобрана экспериментально. Приведенный ниже вариант подпрограммы правильно работал на процессоре Pentium с тактовой частотой 200 МГц. Пример 3-86. Подпрограмма задержки с преобразованием параметра, передаваемого в регистре SI delay proc /Процедура-подпрограмма push АХ /Сохраним все push ВХ /используемые push СХ /в программе push DX /регистры mov AX,SI /первый сомножитель в АХ mov BX,600 /второй экспериментально /подобранный сомножитель mul BX /Произведение в DX:AX mov CX,AX /Нам оно нужно в СХ dell: push CX /Сохраним его mov CX,0 /Счетчик внутреннего цикла del2: loop del2 /внутренний цикл (64К шагов) pop CX /Восстановим внешний счетчик loop dell /Внешний цикл ( 2000 шагов) pop DX /Восстановим pop CX /все сохраненные pop BX / в начале подпрограммы pop AX /регистры ret /Возврат в программу Эксперименты показали, что для получения правильной задержки значение параметра, обозначающее число секунд, следует умножать на 600. Поскольку при умножении в системе команд МП 86 первый сомножитель должен находиться в регист-
ре АХ, а второй не может быть непосредственным значением и тоже, следовательно, должен быть помещен в один из регистров, и, к тому же, произведение занимает два регистра DX:AX, приходится сохранять при входе в подпрограмму не один регистр, как в предыдущем примере, а 4. Передаваемый в SI параметр переносится в АХ, в ВХ загружается второй сомножитель, а из полученного с помощью команды mul произведения используется младшая часть, находящаяся в АХ. Таким образом, для данного варианта подпрограммы значение задержки не должно превышать 109 с (109 х 600 = 65500, что почти совпадает с максимально возможным Значением 65535). Следует обратить внимание на опасность, подстерегающую нас при выполнении операции умножения. Пусть значение передаваемого параметра составляет всего 5. При умножении на 600 получится число 3000, которое безусловно помещается в регистре АХ. Однако операция умножения 16-разрядных операндов mul ВХ всегда, независимо от конкретной величины произведения, помещает его в пару регистров DX:AX, и, следовательно, при небольшой величине произведения регистр DX будет обнуляться. Поэтому, хотя мы и не используем старшую часть произведения и фактически ее может и не быть, сохранение и последующее восстановление регистра DX является обязательным. Передача параметров в подпрограмму через регистры общего назначения или даже через сегментные регистры вполне возможна, однако на практике для передачи параметров чаще всего используют стек, хотя бы потому, что регистров немного, а в стек можно поместить любое число параметров. При этом применяется своеобразная методика работы со стеком не с помощью команд push и pop, а с помощью команд mov с косвенной адресацией через регистр BP, который архитектурно предназначен именно для адресации к стеку. Преобразуем пример 3-8а так, чтобы единственный в этом примере параметр (условная величина задержки) передавался в подпрограмму не через регистр SI, а через стек. Вызов подпрограммы delay в этом случае должен выполняться следующим образом: push 2000 /Проталкиваем в стек значение параметра call delay /Вызываем подпрограмму delay Текст подпрограммы подвергнется значительным изменениям: Пример 3-8в. Передача параметра через стек delay proc /Процедура-подпрограмма push СХ /Сохраним СХ основной программы push BP /Сохраним BP mov BP,SP /Настроим BP на текущую вершину стека mov СХ, [ВР+6] /Скопируем из стека параметр dell: push СХ /Сохраним его mov СХ,0 /Счетчик внутреннего цикла del2 loop del2 /Внутренний цикл(64К шагов) pop СХ /Восстановим внешний счетчик loop dell /Внешний цикл pop BP /Восстановим BP pop СХ /и СХ программы ret 2 /Возврат и снятие со стека /ненужного уже параметра
Команда call, передавая управление подпрограмме, сохраняет в стеке адрес возврата в основную программу. Подпрограмма сохраняет в стеке еще два 16- разрядных регистра. В результате стек оказывается в состоянии, изображенном на рис. 3.8. BP ВР+2 ВР+4 ВР+6 BP СХ Адрес возврата Параметр -SP Рис. 3.8. Состояние стека в подпрограмме после сохранения регистров. После сохранения в стеке исходного содержимого регистра BP (в основной программе нашего примера этот регистр не используется, однако в общем случае это может быть и не так), в регистр BP копируется содержимое указателя стека, после чего в BP оказывается смещение вершины стека. Далее командой mov в регистр СХ заносится содержимое ячейки стека, на 6 байтов ниже текущей вершины. В этом месте стека как раз находится передаваемый в подпрограмму параметр, как это показано в левом столбце рис. 3.8. Конкретную величину смещения относительно вершины стека надо для каждой подпрограммы определять индивидуально, исходя из того, сколько слов сохранено ею в стеке к этому моменту. Напомним, что при использовании косвенной адресации с регистром BP в качестве базового, по умолчанию адресуется стек, что в данном случае и требуется. Параметр, полученный таким образом, используется далее в подпрограмме точно так же, как и в примере 3-8а. Выполнив возложенную на нее задачу, подпрограмма восстанавливает сохраненные ранее регистры и осуществляет возврат в основную программу с помощью команды ret, в качестве аргумента которой указывается число байтов, занимаемых в стеке отправленными туда перед вызовом подпрограммы параметрами. В нашем случае единственный параметр занимает 2 байт. Если здесь использовать обычную команду ret без аргумента, то после возврата в основную программу параметр останется в стеке, и его надо будет оттуда извлекать (между прочим, не очень понятно, куда именно, ведь все регистры у нас могут быть заняты). Команда же с аргументом, осуществив возврат в вызывающую программу, увеличивает содержимое указателя стека на значение ее аргумента, тем самым осуществляя логическое снятие параметра. Физически этот параметр, как, впрочем, и все остальные данные, помещенные в стек, остается в стеке и будет затерт при дальнейших обращениях к стеку. Разумеется, в стек можно было поместить не один, а сколько угодно параметров . Тогда для их чтения надо было использовать несколько команд mov со значениями смещения ВР+6, ВР+8, BP+OAh и т.д. Рассмотренная методика может быть использована и при дальних вызовах подпрограмм, но в этом случае необходимо учитывать, что дальняя команда call сохраняет в стеке не одно, а два слова, что повлияет на величину рассчитываемого смещения относительно вершины стека.
Двоично-десятичные числа В гл. 2 уже говорилось о двоично-десятичных числах - специальном формате хранения данных, используемом в ряде технических приложений. Часто эти числа называют BCD-числами (от binary-coded decimal, двоично-кодированные десятичные числа). Для обработки BCD-чисел (сложения, вычитания, умножения и деления) в МП 86 предусмотрены специальные команды. Рассмотрим этот вопрос на комплексном примере обработки показаний КМОП-часов реального времени. Как известно, в современных компьютеров имеются два независимых таймера. Один из них ("часы реального времени") включен в состав микросхемы с очень низким потреблением тока, питается от батарейки или аккумулятора, находящегося на системной плате, и работает даже на выключенной из сети машине. В этом таймере хранится и автоматически наращивается текущее календарное время (год, месяц, день, час, минута и секунда). После включения компьютера вступает в работу другой таймер, который обычно называют системным. Датчиком сигналов времени для него служит кварцевый генератор, работающий на частоте 1,19318 МГц, сигналы от которого, после пересчета в отношении 65536:1, поступают в контроллер прерываний и инициируют прерывания через вектор 8 с частотой 18,2065 Гц. Эти прерывания активизируют программу BIOS, периодически выполняющую инкремент содержимого четырехбайтовой ячейки памяти с текущим временем, находящейся по адресу 4 6Ch. После включения машины программы BIOS считывают из часов реального времени текущее время суток, преобразуют его в число тактов системного таймера (т.е. в число интервалов по 1/18,2065 с) и записывают в ячейку текущего времени. Далее содержимое этой ячейки наращивается уже системным таймером, работающим в режиме прерываний . Для определения текущего времени прикладная программа может вызвать соответствующие функции прерывания 21h DOS (конкретно, с номером 2Ап для получения даты и 2Ch для получения времени суток), а может прочитать время непосредственно из часов реального времени с помощью прерывания lAh BIOS. При этом прерывание lAh позволяет, помимо чтения текущего времени (функция 02h) и текущей даты (функция 04h), выполнять и целый ряд других функций, среди которых мы отметим только возможность установить "будильник", т.е. записать в микросхему часов значение календарного времени, когда часы должны выдать сигнал аппаратного прерывания. Этот сигнал через вектор 7Oh инициирует обработчик прерываний, входящий в состав BIOS, который проверяет, возникло ли данное прерывание в результате достижения времени установки будильника (часы реального времени могут инициировать прерывания и по других причинам), тестирует заодно батарейное питание микросхемы, а затем посылает в оба контроллера прерываний команды конца прерываний и завершается командой iret. Однако по ходу своего выполнения обработчик прерывания 70h выполняет команду int 4Ah, которая передает управление на обработчик этого прерывания, тоже входящий в состав BIOS. Системный обработчик прерывания 4Ah ничего особенно полезного не делает, в сущности, представляя собой просто программу-заглушку. Однако программист имеет возможность записать в вектор 4Ah адрес прикладного обработчика прерываний, который будет активизироваться прерыванием будильника. Функции прикладного обработчика определяет программист. В примере 3-9 устанавливается прикладной обработчик прерывания 4Ah, который сам по себе вызваться никогда не будет, так как по умолчанию будильник часов
реально не работает. Если, однако, прочитать системное время с помощью функции 02п прерывания lAh, прибавить к нему некоторую величину, например, 1 секунду, и установить будильник на это время (с помощью функции 06h прерывания lAh), то через одну секунду будет активизирован наш обработчик. В примере 3-9 этот процесс сделан бесконечным: в обработчике прерываний будильника снова выполняется чтение времени, прибавление к нему 1 секунды и установка будильника на новое время. В результате наш обработчик будет вызываться каждую секунду до завершения всей программы. Помимо служебной функции установки будильника на следующую секунду, обработчик прерываний выполняет и полезную работу: он выводит текущее время в определенное место экрана. Поскольку обработчик активизируется каждую секунду, выводимое значение времени будет обновляться каждую секунду. Как уже говорилось, в часах реального времени значение времени хранится в виде упакованных двоично-десятичных чисел. При выполнении арифметических операций с числами BCD (а нашем случае операции заключаются в прибавлении 1) необходимо использовать предназначенные для этого команды процессора. В примере проиллюстрировано использование одной из этих команд, конкретно, команды daa. Для того, чтобы вывести на экран значение времени, его надо преобразовать в последовательность кодов ASCII. Процедура преобразования упакованных двоично- десятичных чисел в строку символов также включена в рассматриваемый пример. Пример 3-9. Чтение и обработка показаний часов реального времени .586 /Будут использоваться дополнительные команды assume CS:code,ds:data code segment use 16 main proc mov AX,data /Настроим DS наш mov DS,AX /сегмент данных /Сохраним исходный вектор 4Ah mov АХ, 354Ah int 21h mov word ptr old_4a,BX mov word ptr old_4a+2,ES /Установим наш обработчик прерываний 4Ah mov AX,254Ah push DS /Сохраним DS push CS /Настроим DS на сегмент pop DS /команд mov DX,offset new_4a /DS:DX->new_4a int 21h pop DS /Восстановим DS /Установим будильник mov AH,02h /Чтение текущего времени int lAh call add_time /Прибавим 1 секунду mov AH,06h /Установим будильник на это время int lAh /Остановим программу, чтобы наблюдать прерывания mov AH,01h /Функция ввода с клавиатуры int 21h
/Завершим программу, прибр; mov AH,07h int lAh Ids DX,old_4a mov AX,254Ah int 21h mov AX,4C00h int 21h main endp ;Наш обработчик прерывания pus ha push DS push ES mov AX ,seg hour mov DX,AX mov AH,02h int lAh push CX push DX в за собой ;Сброс будильника ;DS:ОХ=исходный вектор /Установим исходный вектор /Завершим программу от будильника new_4a proc /Сохраним все регистры /Сохраним еще и /сегментные регистры /Настроим DS на наш /сегмент данных /Прочитаем текущее время /из часов реального времени /Сохраним полученное /текущее время В примере 3-9 используются несколько команд, отсутствующих в МП 86: команды сохранения в стеке и восстановления всех регистров общего назначения pusha и рора, а также команда сдвига6 shl с числовым операндом. Для того, чтобы эти команды распознавались ассемблером, в программу включена директива .586 (можно было бы обойтись и директивой .386). В этом случае необходимо оба сегмента объявить с описателем usel6. Программа состоит из главной процедуры main, процедуры new_4a обработчика прерываний от будильника, а также трех вспомогательных процедур-подпрограмм add_time, add_unit и conv. Главная процедура сохраняет исходный вектор прерывания 4Ah, устанавливает новый обработчик этого прерывания, читает текущее время и устанавливает будильник на время, отстоящее от текущего на 1 секунду, а затем останавливается в ожидании нажатия любой клавиши. Пока программа стоит , обрабатываются прерывания от будильника и в правый верхний угол экрана каждую секунду выводится текущее время. После нажатия любой клавиши программа завершается, предварительно сбросив будильник и восстановив исходное содержимое вектора 4Ah. Легко видеть, что в предложенном варианте программа имеет мало практического смысла, так как она не выполняет, кроме вывода времени, никакой полезной работы. В то же время, пока эта программа не завершилась, запустить другую программу нельзя, так как DOS является однозадачной системой. Если, однако, написать нашу программу в формате СОМ и сделать ее резидентной, мы получим возможность запускать любые программы и одновременно наблюдать на экране текущее время. Такого средства в DOS нет, и в какой-то ситуации оно может оказаться полезным. Методика разработки резидентных программ описана выше/ читатель может выполнить необходимые преобразования самостоятельно. Рассмотрим теперь программу обработчика прерываний будильника. Прежде всего, в нем командой pusha (push all, сохранить все) сохраняются все регистры общего назначения и, кроме того, два сегментных регистра DS и ES, которые бу- 6 Неизвестно где они должны быть (кроме pusha). Мы пытались исправить как можно больше ошибок распознавания, но возможно остальные исправит вдумчивый читатель. «На ошибках учатся».
дут использоваться в обработчике. Далее регистр DS настраивается на сегментный адрес того сегмента, в который входит ячейка hour, т.е. фактически на наш сегмент команд. На первый взгляд это действие может показаться бессмысленным. Ведь в начале процедуры main в регистр DS уже был помещен адрес нашего сегмента данных data. Зачем же эту операцию повторять? Дело в том, что процедура new_4a, будучи формально обработчиком программного прерывания 4Ah, фактически представляет собой обработчик аппаратного прерывания от часов реального времени, которое, как и любое аппаратное прерывание, может придти в любой момент времени. В принципе прерываемая программа в этот момент может выполнять любые действия, и содержимое регистра DS может быть любым. Если же говорить о нашей программе, то она находится в цикле ожидания нажатия клавиши. Этот цикл организует функция Olh DOS, которая, между прочим, время от времени обращается к своему драйверу клавиатуры, а тот - к программам BIOS ввода символа с клавиатуры. Вполне вероятно (а на самом деле так оно и есть) , что при выполнении упомянутых операций используется регистр DS, который в этом случае указывает уже не на наш сегмент данных, а на различные системные области. Другими словами, при входе в обработчик прерывания содержимое регистра DS неизвестно, и его следует инициализировать заново, обязательно сохранив исходное значение. Если перед выходом из обработчика это исходное значение не восстановить, будет неминуемо разрушена DOS. Сохранив регистры и настроив DS, мы вызываем функцию 02h прерывания lAh чтения текущего времени. Время возвращается, как уже говорилось, в упакованном двоично-десятичном формате (по две цифры в байте) в регистрах СН (часы), CL (минуты) и DH (секунды) . Нам это время понадобится еще раз в конце обработчика для установки будильника заново, и чтобы второй раз не вызывать функцию 02h, полученное время (т.е. содержимое регистров СХ и DX) сохраняется в стеке. Далее выполняется последовательное преобразование BCD-цифр, составляющих время, в коды ASCII соответствующих символов. Число часов (две упакованные BCD-цифры) переносится в регистр AL, и вызывается подпрограмма conv, которая преобразует старшую цифру часов в код ASCII и возвращает его в регистре АН. Этот код помещается в объявленную в сегменте данных строку-шаблон hour, в которой заготовлены пустые пока места для символов цифр, составляющих время, а также имеются разделительные двоеточия. Для удобства обращения к элементам этой строки, она разделена на части и каждая часть снабжена собственным именем - min для поля минут и sec для поля секунд. Подпрограмма conv преобразования BCD-цифры в код ASCII состоит всего из трех предложений, не считая заключительной команды ret. Двух разрядное BCD- число передается в подпрограмму в регистре AL. После обнуления регистра АН, который будет служить приемником для образования конечного результата, содержимое AL сдвигается командой shl влево на 4 бит, в результате чего старший полубайт регистра AL, т.е. старшая цифра числа, перемещается в регистр АН (рис. 3.9). Двоично-десятичная цифра представляет собой просто двоичное представление цифры; прибавление к ее коду кода символа "О" (числа 30h) дает код ASCII этой цифры. Мы преобразовали пока только старший полубайт регистра СН. Для выделения младшего полубайта на регистр СН накладывается маска OFh, которая обнуляет старший полубайт, не затрагивая младшего. Прибавление кода ASCII нуля к коду десятичной цифры образует код ASCII этой цифры, который и переносится затем в строку-шаблон. Описанная процедура повторяется затем для регистров CL (мину-
ты) и DH (секунды). АН AL 01011 01111 Регистр АН до сдвига=57 (BCD) 0101 0111 5 7 АН AL 0101 0111 Регистр АН после сдвига +0011 0000 Прибавление'0'=30h АН 00111 01011 Регистр АН после прибавления '0' 3 5 35h-код ASCII цифры 5 Рис. 3.9. Алгоритм работы подпрограммы conv. Для вывода строки с временем на экран используется прямое обращение в видеопамяти. В регистр ES заносится сегментный адрес видеобуфера B800h, а в регистр DI - требуемое смещение видеопамяти к тому месту, начиная с которого мы хотим вывести строку. В регистр SI заносится адрес строки-источника, в регистр СХ - число шагов, а в регистр АН - выбранный нами атрибут символов (красные символы по синему полю). Поскольку перемещение и по строке-шаблону, и по экрану должно осуществляться вперед, командой eld сбрасывается флаг DF. Наконец, циклическое выполнение пары команд lodsb stosw приводит к выводу в заданное место экрана всей строки hour. Выполнив вывод на экран текущего времени, надо снова установить будильник. Для этого сначала запрещается работа ранее установленного будильника, восстанавливается текущее время в регистрах DX и СХ, и вызовом процедуры add_time к текущему времени прибавляется 1 секунда. Далее вызовом функции 06h заново устанавливается будильник, восстанавливаются сохраненные в начале программы обработчика регистры, и, наконец, командой iret обработчик завершает свою работу. Рассмотрим теперь процедуру прибавления 1 к текущему времени. Она состоит из двух компонентов - подпрограммы add_time, которая организует правильное сложение чисел, обозначающих время, чтобы прибавление 1 секунды к 59 секундам дало 0 секунд и увеличило на 1 число минут (и то же самое для минут) и подпрограммы add_unit, выполняющей прибавление 1 к упакованному коду BCD. Подпрограмма add_time переносит число секунд из DH в AL, с помощью подпрограммы add_unit увеличивает его на 1 и возвращает в DH. Подпрограмма add_unit сигнализирует установкой флага CF о необходимости переноса 1 в следующий разряд времени (число секунд составляло 59). Поэтому после возврата из add_iuit проверяется флаг CF и, если он сброшен, т.е. следующий разряд времени модифицировать не надо, подпрограмма add_time завершается. Если же флаг CF установлен, выполняется аналогичная процедура прибавления 1 к числу минут, которое
находится в регистре CL. Далее опять анализируется флаг CF, и если он установлен (текущее время было 59 мин 59 с), прибавляется 1 к числу часов. Наконец, подпрограмма завершается командой ret. Подпрограмма add__unit получает упакованное двоично-десятичное число, к которому надо прибавить 1, в регистре AL. Командой add к нему прибавляется 1, после чего в некоторых случаях образуется правильная сумма, а в некоторых - неправильная. Так, 14h + 1 = 15h, что правильно, однако 19h + 1 = lAh, что неверно. Такого двоично-десятичного числа не существует, а после прибавления 1 к 19 должно получиться 20 (и записано в виде 2Oh). Коррекцию после сложения BCD-чисел осуществляет команда daa, которая в приведенном примере преобразует lAh в 2Oh, и которая должна всегда следовать за командой сложения. Наши двоично-десятичные числа специфичны в том отношении, что они не могут превышать 59. Поэтому после коррекции результат сравнивается с 60h. Если сумма меньше 60h, флаг CF сбрасывается и выполняется команда ret. Если сумма равна 60h, регистр AL обнуляется, флаг CF устанавливается, сигнализируя о переносе 1 в следующий разряд времени (минут или часов) и выполняется та же команда ret. Таким образом, флаг CF процессора в точке возврата из подпрограммы add__unit говорит не о наличии или отсутствии арифметического переноса, а выполняет роль флага "исключительной ситуации" - перехода времени на следующую минуту или на следующий час. Такое нестандартное использование флага CF является общеупотребительным приемом. Программирование аппаратных средств Программирование аппаратуры - как штатных периферийных устройств компьютера, таких, как видеосистема, клавиатура, последовательный или параллельный интерфейс и др., так и нестандартных измерительных или управляющих устройств, подключаемых к компьютеру, если он используется для автоматизации научных исследований или управления технологическим процессом - является одним из важнейших и наиболее оправданных применения языка ассемблера. Во-первых, от программ управления аппаратурой часто требуется максимальное быстродействие. Во- вторых, эти программы, призванные управлять аппаратурой на низком уровне, путем обращения к регистрам и их отдельными битам, часто ничего не выигрывают от использования языков высокого уровня, в которых те же операции реализуются с помощью процедур языка, менее наглядных и эффективных, чем "чистые" команды процессора. В-третьих, при программировании аппаратуры, особенно, экспериментальной, важно жестко соблюдать временную и событийную последовательность команд и сигналов, воспринимаемых программируемым устройством, что естественным образом достигается при использовании языка ассемблера, в котором каждое предложение языка реализуется вполне определенной командой процессора. В зависимости от назначения и способа функционирования аппаратуры, она может требовать различных режимов программного управления. В основном существуют три режима, или способа взаимодействия программы и аппаратуры: режим свободного доступа, режим ожидания готовности и режим прерываний. Режим свободного доступа используется в тех случаях, когда момент обращения к устройству целиком определяется программой. Например, регистры, управляющие работой аппаратуры, обычно доступны в любой момент времени. Программа может в любой момент прочитать содержимое этих регистров и определить по нему текущий режим работы устройства, или, наоборот, послать в управляющие регистры тре-
буемую последовательность команд с целью изменения рабочего режима. Режим ожидания готовности необходимо использовать в тех случаях, когда после приема некоторой команды устройству требуется определенное время для ее выполнения. Например, в последовательный порт, через который компьютер связывается с другими компьютерами или телефон ной сетью, нельзя посылать следующую порцию информации (байт), пока устройствами последовательного интерфейса не будет отправлена в канат связи предыдущая порция. Режимом ожидания готовности часто пользуются для приема информации из измерительной аппаратуры, если требуется обеспечить максимальную скорость ее получения. Режим прерываний является важнейшим способом связи с относительно медленным периферийным оборудованием. В этом случае устройство подключается не только к линиям адресов, данных и управления системной магистрали компьютера, но и к одной из специально выделенных линий прерываний. В режиме прерывания устройство само решает, когда ему требуется обслуживание, и посылкой в компьютер сигнала прерывания оповещает об этом процессор. Типичным примером является клавиатура, посылающая сигнал прерывания каждый раз, когда пользователь нажимает на ту или иную клавишу. Большая часть штатных устройств компьютера - мышь, диски, таймер и др. - используют режим прерываний. Типичен этот режим также и для связи с измерительной аппаратурой в тех случаях, когда аппаратура регистрирует относительно редкие события, или измерительные данные накапливаются в аппаратуре в течение заметного времени и затем пересылаются в компьютер сразу целой пачкой. Как уже отмечалось в гл. 1, связь с аппаратными средствами самого компьютера, а также с подключаемыми к нему устройствами осуществляется главным образом через адресное пространство ввода-вывода. Это значит, что за каждым устройством закрепляется один или, чаще, несколько портов, и программирование устройства осуществляется исключительно с помощью команд in и out (а также ins и outs, если программируемое устройство может посылать данные потоком). В простейшем случае программирование устройства сводится к выполнению единственной команды in в случае чтения из устройства, или out в случае записи в него. Рассмотрим, например, процедуры маскирования и размаскирования аппаратных прерываний. В каждом из двух контроллеров прерываний, включаемых в состав компьютера, имеется регистр маски (рис. 3.10). Значение 0 в бите маски разрешает прохождение сигнала прерывания, значение 1 запрещает. Пройдя через маску и через последующие узлы контроллера прерываний (не показанные на рис. 3.10), сигнал прерываний поступает на вход INT микропроцессора. Программирование регистров маски осуществляется через порт 2 lh для ведущего контроллера и Alh для ведомого. Исходное значение маски устанавливается программами начальной загрузки компьютера в зависимости от конфигурации вычислительной системы. Типичным является значение A8h, показанное на рис. 3.10. При этом значении маски размаскированными оказываются системный таймер, клавиатура, мышь, подключенная к первому последовательному порту СОМ1, гибкий диск, а также выход от ведомого контроллера, подключаемый ко входу IRQ2 ведущего. Замаскированы оба параллельного порта (принтер, подключаемый к порту LPT1, обычно не использует прерываний, а второй параллельный порт часто просто отсутствует) и второй последовательный порт, к которому ничего не подключено. Другими словами, размаскировано все нужное, и замаскировано все ненужное.
Таймер, IRQO Клавиатурами1 Вькод ведомого,IPQ2 Последовательный порт COM2.IPG3 Последовательный порт СОМ1JPG4 Пэраплепьный порт LPT2. IRQ5 Гибкий диск, IR06 Параллельный порт LPT1.IPQ7 Рис. 3.10. Регистр маски ведущего контроллера прерываний. В раде случаев возникает необходимость замаскировать прерывания от системного таймера, который является единственным постоянно активным источником прерываний. Такая ситуация типична, в частности, для автоматизированных измерительных систем, в которых недопустимо прерывать поток данных, поступающих от измерительной установки в компьютер. Любое прерывание процесса приема данных может привести к потере части принимаемой информации и нарушению работы установки. Для запрета прерываний от таймера надо выполнить такую последовательность команд: in AL,21h /Чтение регистра маски or AL,1 /Установка 1 в бите 0 out 21h,AL /Запись нового значения маски Восстановление исходного состояния вычислительной системы с разрешенными прерываниями от таймера осуществляется следующим образом: in AL,21h /Чтение регистра маски and AL, OFEh /Установка 0 в бите 0 out 21h,AL /Запись нового значения маски Другим примером использования режима свободного доступа к устройству является программирование энергонезависимой КМОП-микросхемы, включающей в себя часы реального времени, о которых уже говорилось ранее, а также информацию о конфигурации компьютера и в некоторых случаях пароль. Общий объем КМОП-памяти составляет 64 байт (от 00h до 3Fh)/ доступ к байтам КМОП-памяти осуществляется через порты 7Oh и 71h. В КМОП-микросхеме реализован способ обращения к ее отдельным ячейкам, широко используемый в микропроцессорной технике. Если программировать КМОП-память прямым образом, для обращения к ее 64 ячейкам в адресном пространстве ввода- вывода пришлось бы выделить 64 адреса. Для сокращения числа используемых адресов в состав микросхемы введены два служебных регистра - адресный и данных. В адресный регистр (порт 70h) заносится номер той ячейки КМОП-памяти, к которой требуется обращение. После этого чтение регистра данных (порт 71h) позволяет прочитать содержимое выбранной ячейки, а запись в регистр данных выпол- 0 О о Н 1 о л \\ 'II 1 На вход INT процессора
няет передачу данного в эту ячейку. Приведем полный текст программы, которая читает содержимое ячейки с номером ODh. В ней хранится состояние батареи, питающей КМОП-микросхему. Если бит 7 этой ячейки установлен, батарея исправна; если этот бит сброшен, напряжение батареи упало ниже допустимого предела, и ее надо менять. Пример 3-10. Чтение ячейки КМОП-микросхемы code segment assume cs:code main proc mov AL,ODh out 70h,AL in AL,71h test AL,80h jnz ok mov AH,02h mov DL,'-' int 21h jmp exit ok: mov AH,02h mov DL,'+' int 21h /Завершим программу exit: mov AX,4C00h int 21h main endp code ends end main /Будем читать ячейку ODh ; Задание номера ячейки ; чтение из ячейки ; Проверка бита 7 ; Бит 7 = 1, перейти на ОК ;Бит 7=0, питания нет ; Выведем в знак этого ; Символ минус /Переход на завершение /Батарея в порядке, /выведем в знак этого ; символ плюс Рассмотрим теперь программирование периферийного оборудования в режиме ожидания готовности на примере параллельного интерфейса. В стандартной конфигурации компьютера к параллельному интерфейсу обычно подключается принтер, однако его можно использовать и для связи с нестандартным (измерительным или управляющим) оборудованием. В компьютерах используется разновидность параллельного интерфейса под названием Centronics, отличающаяся относительно высокой скоростью передачи данных (до 150 Кбайт/с) и простотой программирования. Правда, Centronics позволяет передавать данные только в одном направлении - из компьютера в устройство, однако эту проблему можно частично решить, если воспользоваться для приема данных линиями состояния интерфейса. Разумеется, в установке, подключаемой к компьютеру через параллельный интерфейс, должно быть предусмотрено устройство сопряжения, воспринимающее и вырабатывающее сигналы обмена с интерфейсом. Интерфейс Centronics подключается к периферийному устройству (принтеру) с помощью кабеля, содержащего 17 сигнальных линий и несколько линий нуля. Управление интерфейсом осуществляется через три закрепленных за ним порта: порта данных с адресом 378h, порта состояния принтера с адресом 379h и порта управления принтером с адресом 37Ah. Порты фактически представляют собой 8- разрядные регистры, биты которых соответствуют сигналам интерфейса. Некоторые из этих сигналов, конкретно, сигналы портов данных и управления, являются для
интерфейса выходными; их должна устанавливать программа, управляющая передачей информации. Другие сигналы, наоборот, поступают из периферийного устройства и отображаются в состоянии закрепленных за ними битов порта состояния; программа должна читать и анализировать эти биты. На рис. 3.11 показаны порты интерфейса Centronics с указанием сигналов, соответствующим конкретным битам. 378h порт данных 7 6 5 4 3 2 1 0 D7...D0 Байт данных 379h порт состояния 7 СП 5 4 3 2 1 0 1 1 1 ERROR' "SLCT РЕ "АСК "BUSY 37Ah порт управления 7 СП 5 4 3 2 1 0 1 1 LSTROBE 1= при посылке банта 1—AUTO 1= LF после CR ' 1N IT 0= отключение принтера ' SLCTIN 1= выбор принтера ' IRQ 1= разрешение прерывания Направление передачи для двунаправленного интерфейса Рис. 3.11. Порты интерфейса Centronics Программирование параллельного интерфейса требует некоторых сведений о его протоколе, т.е. последовательности и взаимодействии сигналов, которыми интерфейс обменивается с подключенным к нему устройством. Некоторые из этих сигналов имеют узко специализированное назначение и возникают лишь в особых случаях (например, сигнал РЕ - конец бумаги), другие же принимают обязательное участие в процедуре передачи данных. К последним относятся 8 бит данных и три управляющих сигнала STROBE', BUSY и АСК' (рис. 3.12). Сигнал BUSY считается активным, когда он имеет высокое значение. В противоположность этому активное состояние сигналов STROBE' и АСК' низкое, отчего они и обозначаются с тем или иным дополнительным значком (с чертой наверху, со знаком минус или с апострофом, как у нас). Прослеживая соответствие сигналов интерфейса состоянию битов его портов, необходимо иметь в виду, что для некоторых сигналов (SLCT, РЕ, STROBE) в порты записываются их прямые значения, а для других (ERROR, АСК, BUSY) - инверсные. 0 = ошибка 1 = принтер выбран 1 = нет бумаги 1 = готов к приему следующего символа, если BUSY сброшен 0 = принтер занят, 1= свободен
Принтер [BUSY •интерфейс l. ASK Интерфейс " DO .07 -принтер [STROBE \ Принтер занят обработкой байта Принтер готов принять следующий байт Рис. 3.12. Протокол передачи данных для интерфейса Centronics. Вывод на принтер каждого байта данных состоит из трех этапов. Прежде всего, программа должна дождаться неактивного состояния сигналов BUSY и АСК (это и есть ожидание готовности устройства). Убедившись, что биты 6 и 7 порта состояния 379h установлены в 1 (см. рис. 3.11), программа посылает в порт данных 378h байт данных, что приводит к установке кода данных на линиях интерфейса D7...D0. Наконец, программа должна установить на короткое время сигнал STROBE, что реализуется путем установки и затем сброса бита 0 порта управления 37А11. Следующие байты посылаются точно таким же образом. Выполняя все эти операции, необходимо учитывать временные характеристики интерфейса. Сигнал STROBE можно посылать в порт управления не ранее, чем через 0,5 мкс после установки данных, что может потребовать введению в программу небольшой программной задержки (одной или нескольких команд jmp, см. приведенный ниже текст программы). То же относится и к длительности сигнала STROBE, которая не должна быть меньше той же величины 0,5 мкс. Практически, программные задержки часто оказываются не нужны. Обратимся еще раз к рис. 3.12. Принтер, сняв с линий данных байт данных, и начав его обработку (вывод на печать или сохранение во внутренней памяти), устанавливает ответный сигнал BUSY, действующий все время, пока принтер занят обработкой байта данных. Закончив обработку байта, принтер на некоторое время устанавливает сигнал АСК и сбрасывает сигнал BUSY. Окончание сигнала АСК (при сброшенном состоянии сигнала BUSY) говорит интерфейсу об окончании данной операции обмена и о возможности посылки следующего байта данных. Ввиду краткости сигнала АСК часто оказывается, что ожидать его снятия нет необходимости; достаточно дождаться неактивного состояния сигнала BUSY (т.е. 1 в бите 7 порта состояния). Вообще следует заметить, что различные принтеры могут несколько по-разному выполнять свою часть протокола обмена. Рассмотренный ниже пример отлаживался на принтере Epson LQ100. Приведем текст программы, в которой принтер программируется, как говорят, на физическом уровне, т.е. путем обращения к его портам. Разумеется, в большинстве случаев для вывода на принтер текста из выполняемой программы проще воспользоваться функциями DOS. Однако в некоторых специальных случаях приходится прибегать и к программированию через порты, например, если принтер используется в нестандартном режиме, или параллельный интерфейс служит для связи с нестандартным устройством. В приведенном примере предполагается, что принтер выбран и установлен в исходное рабочее состояние, что обычно выполняется автоматически при его включении. Свидетельством этого будут установленные биты 2 и 3 (SLCT IN и INIT) в
порте управления, а также бит 4 (SLCT) в порте состояния. В программе не выполняется анализ байта состояния на наличие ошибки или конца бумаги, что при работе с принтером, вообще говоря, следует предусматривать. Третий метод программирования периферийного устройства - режим прерываний - рассмотрим на примере обработки прерывания от мыши. Как известно, мышь обычно подключается к первому последовательному порту С0М1 и работает в режиме прерываний. Нажатие или отпускание любой клавиши, так же, как даже минимальное перемещение по столу, вырабатывает сигналы прерываний, сопровождаемые определенными кодами, которые поступают в порт данных интерфейса. Написав собственный обработчик прерываний для последовательного порта, мы получим возможность выполнять заданные действия, например, при нажатии левой и правой клавиш мыши . Следует подчеркнуть, что эти действия начнут выполняться практически в тот же момент, когда мы нажали на клавишу. В приведенной ниже программе при нажатии левой клавиши в центр экрана выводится цветная надпись "Левая!", а при нажатии правой клавиши - надпись "Правая" другого цвета. Для того чтобы приведенная программа работала, следует загрузить драйвер мыши, который инициализирует последовательный интерфейс и саму мышь. В состав этого драйвера входит свой обработчик прерываний. Мы замещаем его адрес в векторе ОСЬ адресом нашего обработчика, и поскольку в программе не предусмотрено сцепление обработчиков, на время действия программы стандартная обработка прерываний от мыши отключается. Перед завершением программы содержимое вектора ОСЬ восстанавливается, и мышь опять начинает работать, как обычно. Каждое нажатие (или отпускание) клавиши мыши, так же, как и ее перемещение, в действительности вырабатывают не по одному, а по три последовательных прерывания с различными кодами в порте данных интерфейса. Так, нажатие левой клавиши мыши дает последовательность кодов 60Ь, 0, 0, нажатие правой клавиши - последовательность 50Ь, 0, 0, отпускание любой клавиши - 40Ь, 0, 0, перемещение вверх - 4СЬ, 0, 3Fh, перемещение вниз - 4Oh, 0, 1 и т.д. Таким образом, по-настоящему надо было сохранять в обработчике прерываний все три кода и затем анализировать всю последовательность. Мы для простоты ограничились анализом только первого кода. Как видно из приведенного выше перечня, анализ одного кода не дает возможность отличить, например, отпускание клавиши от перемещения вниз. Коды, генерируемые мышью, могут зависеть от ее типа, что надо учитывать при подготовке этого примера. Для получения значений генерируемых кодов можно предусмотреть в обработчике прерываний вывод их на экран с помощью функции прерывания 10h BIOS, как это было сделано, например, в примере 3-5, или прямым выводом в видеобуфер. Следует только иметь в виду, что перехват любого прерывания от последовательного интерфейса должен обязательно сопровождаться чтением из его порта данных, так как интерфейс может принять очередной байт данных только после чтения предыдущего и освобождения своего регистра данных. Пример 3-12. Программирование мыши в режиме прерываний .586 /Будут команды новых процессоров code segment usel6 ;16-разрядное приложение assume CS:code,DS:code /Данные в сегменте команд main proc push CS pop DS /Настроим DS ; на сегмент команд
/Сохраним обработчик прерываний последовательного порта mov AX,350Ch /Функция 35h, вектор ОСЬ int 21h mov word ptr old_Oc,BX /Сохраним смещение mov word ptr old_0c+2,ES /Сохраним сегмент /Установим наш обработчик прерываний последовательного порта mov AX,250Ch /Функция 25h, вектор ОСЬ mov DX,offset new_Oc /Адрес нашего обработчика int 21h /Остановим программу функцией ввода с клавиатуры mov AH,01h int 21h /Восстановим исходный обработчик драйвера мыши mov AX,250Ch Ids DX,old_Oc int 21h mov AX,4C00h int 21h main endp /Функция 25h, вектор /Сохраненный адрес /Завершим программу ОСЬ new_0c proc pus ha push DS push ES mov DX,3F8h in AL,DX cmp AL, 60h je lbtn cmp AL,50h je rbtn /Сохраним все регистры /Сегментные регистры не /сохраняются командой pusha /Порт данных /Прочитаем /Левая клавиша — код 60h /Переход на отработку /Правая клавиша — код 5Oh /Переход на отработку /Завершение обработчика прерываний outret:pop ES pop DS mov AL,20h out 20h,AL popa iret lbtn: mov AH, lEh mov SI,offset msgdn jmp commn rbtn: mov AH,2Eh mov SI,offset msgdn /Общая часть вывода на экран диагностической строки commn: mov BX,0B800h /Настроим ES mov ES,BX /на видеобуфер push CS /Настроим DS pop DS /на наш сегмент mov CX,6 /Число выводимых символов mov D1,2 0 0 0 /Смещение на экране eld /Движение вперед /Восстановим сегментные /регистры /Команда EOI /в контроллер прерываний /Восстановим все регистры /Выход из прерывания /Если нажата левая клавиша мыши /Атрибут символов желтый по / синему /Адрес выводимой строки /На общую часть вывода /Если нажата правая клавиша мыши /Атрибут символов желтый по /зеленому /Адрес выводимой строки
scr: lodsb stosw loop scr jmp outret /АЬ=очередной символ /Из AX на экран ;Цикл ; После вывода завершить /обработку прерывания new_Oc endp old Ос dd О /Ячейка для исходного /вектора /Выводимые сообщения msgdn db "Левая! msgup db "Правая" code ends stk segment stack dw 128 dup(O) stk ends end main Приведенный пример с точки зрения его структуры построен обычным образом. Исходное содержимое вектора ОСЬ сохраняется в ячейке old_Oc и используется перед завершением программы для восстановления вектора. Для упрощения установки обработчика прерываний программа написана без сегмента данных/ ее немногие данные размещены в сегменте команд. Поскольку в начале программы регистр DS настраивается на сегмент команд, адресация к данным (в основной программе) возможна через DS. Для того, чтобы можно было наблюдать обработку прерываний от мыши, основная программа после выполнения инициализирующих действий останавливается с помощью функции Olh DOS ожидания ввода символа с клавиатуры. После нажатия любой клавиши программа завершается, восстановив предварительно исходное состояние вектора последовательного порта. Действия, которые должны инициироваться нажатием левой или правой клавиш мыши (например, включение или выключение некоторого оборудования), в программе заменены выводом на экран коротких диагностических сообщений. Вывод осуществляется прямой записью в видеобуфер, поскольку, как уже говорилось ранее, в обработчике аппаратных прерываний нельзя использовать функции DOS и рискованно - функции BIOS. Вывод на экран с помощью команд обработки строк lodsb и stosw требует настройки большого количества регистров - в DS:SI должен находиться адрес строки-источника, в ES:DI адрес позиции в видеобуфере, в СХ число выводимых символов. Кроме этого, в обработчике прерываний используются регистры АХ, ВХ и DX. Для сохранения всех регистров общего назначения используется команда pusha, а для их восстановления команда рора. Однако эти команды не принимают в расчет сегментные регистры, и их приходится сохранять и восстанавливать отдельными командами. С восстановлением регистров может возникнуть некоторая сложность. Обработчик прерывания должен завершаться посылкой в контроллер прерываний команды EOI, а для этого необходим регистр AL. Поэтому восстановление регистров, во всяком случае, регистра АХ, необходимо выполнять после команды EOI. С другой стороны, команда EOI разблокирует нижележащие уровни прерываний в контроллере прерываний (см. гл. 3), что может привести к прохождению через контроллер очередного (вложенного в наше) прерывания, которое прервет наш обработчик в точке, где еще не восстановлены регистры. Это неминуемо приведет к краху системы. Однако в процессоре предусмотрены меры устранения этого неприятного явления . Остановимся на них более подробно. Процессор, приняв любой сигнал прерывания, сбрасывает флаг IF в своем реги-
стре флагов, запрещая тем самым все аппаратные прерывания. Поэтому вход в обработчик прерываний всегда осуществляется при запрещенных прерываниях. Блокировка нижележащих уровней в контроллере прерываний просто накладывается на этот общий запрет и новых ограничений не вносит. Если в тексте обработчике прерываний нет команды разрешения прерываний sti, то прерывания будут запрещены до самого его конца, до завершающей команды iret. Эта команда извлекает из стека и восстанавливает исходное содержимое регистров CS:IP, а также регистра флагов. В момент прерывания в регистре флагов был, безусловно, установлен флаг IF, иначе прерывание не могло бы возникнуть. Восстановление регистра флагов приводит к установке этого флага и разрешению всех аппаратных прерываний, но уже после завершения обработчика прерываний. Таким образом, снятие аппаратной блокировки прерываний командой EOI в действительности не приводит к разрешению прерываний, и любые строки, стоящие после этой команды, выполняются при запрещенных прерываниях. В результате никаких проблем с восстановлением регистров после команды EOI не возникает. Обычно, однако, используется другой вариант построения обработчика прерываний. В этом варианте в начале программы обработчика выполняется команда sti, устанавливающая флаг IF и разрешающая все аппаратные прерывания, кроме тех, которые заблокированы в контроллере прерываний. В результате программа обработчика может быть прервана любым прерыванием более высокого уровня IRQ (т.е. уровня с меньшим номером), но не прерывается сигналами прерываний этого же и более низких уровней. Такое построение обработчиков прерываний удобно тем, что "более важные" прерывания, например, от таймера или клавиатуры, могут быть обработаны без задержки. Для того, чтобы исключить возможные неприятности с восстановлением регистра АХ после команды EOI, перед ней прерывания запрещаются командой cli и структура обработчика прерываний приобретает приблизительно такой вид: Команды рора и iret выполняются в этому случае при запрещенных прерываниях, но после отработки команды iret в регистре флагов восстанавливается его исходное содержимое (в котором IF = 1), и прерывания, таким образом, снова разрешаются . ГЛАВА 4. РАСШИРЕННЫЕ ВОЗМОЖНОСТИ СОВРЕМЕННЫХ МИКРОПРОЦЕССОРОВ Архитектурные особенности Операционная система MS-DOS, язык ассемблера МП 86 и методы программирования микропроцессоров корпорации Intel разрабатывались применительно к 16- разрядному процессору 8086 и тому режиму, который впоследствии получил название реального. Появление процессора 80386 знаменовало собой начало нового этапа в развитии операционных систем и прикладного программирования - этапа sti pus ha /Сохранение регистров ; Тело обработчика /Запрещение всех прерываний /Команда EOI / контроллеру прерываний /Восстановление регистров /Возврат из обработчика cli mov AL,20h out 20h,AL рора iret
многозадачных графических операционных систем защищенного режима типа Windows и 32-разрядных прикладных программ. При этом, как уже отмечалось во введении, все архитектурные средства 86-го процессора входят в состав любого современного процессора, который, таким образом, можно условно разделить на две части - МП 86 и дополнительные средства, обеспечивающие защищенный режим, 32- разрядную адресацию и прочее. Из этих дополнительных средств можно выделить те, которые обеспечивают защищенный режим, и в реальном режиме не используются (во всяком случае, явным образом; в действительности, процессор, даже работая в реальном режиме, использует, по крайней мере, некоторые из этих средств). Сюда, например, относятся регистры таблиц дескрипторов, регистры тестирования и отладки, привилегированные команды защищенного режима, система страничного отображения адресов и др. С другой стороны, часть новых свойств современных процессоров можно использовать и в реальном режиме, выполняя программы под управлением MS-DOS. Сюда, прежде всего, относится использование 32-битовых операндов, некоторых новых команд процессора и расширенных возможностей старых команд. Настоящая глава будет в основном посвящена именно этим средствам процессоров 80386, i486 и Pentium, которые в дальнейшем мы будем обобщенно называть 32-разрядными процессорами. Вопрос о программировании защищенного режима слишком сложен, чтобы его можно было осветить в рамках этой книги, хотя основные принципы защищенного режима будут описаны. Регистры данных Биты 31 ЕАХ ЕВХ ЕСХ EDX 16 15 АН АХ AL ВН ВХ BL СН СХ CL DH DX DL Аккумулятор Базовый регистр Счетчик Регистр данных Регистры - указатели Биты 31 ЕАХ ЕВХ ЕСХ EDX 16 15 SI DI BP SP Индекс источника Индекс приемника Указатель базы Указатель стека Сегментные регистры Биты 15 CS DS ES FS GS SS О Регистр сегмента команд Регистр сегмента данных Регистр дополнительного сегмента данных Регистр дополнительного сегмента данных Регистр дополнительного сегмента данных Регистр сегмента стека Прочие регистры Биты 31 ЕАХ ЕВХ 16 15 IP EFLAGS Указатель команд Регистр флагов Рис. 4.1. Основные регистры 32-разрядных процессоров.
32-разрядные процессоры содержат несколько десятков программно адресуемых регистров (не считая регистров сопроцессора), из которых шесть являются 16- разрядными, а остальные - 32-разрядными. Регистры принято объединять в семь групп: регистры общего назначения (или регистры данных), регистры-указатели, сегментные регистры, управляющие регистры, регистры системных адресов, отладочные регистры и регистры тестирования. Кроме того, в отдельную группу выделяют счетчик команд и регистр флагов. Регистры, используемые в реальном режиме , показаны на рис. 4.1. Как видно из рис. 4.1, регистры общего назначения и регистры-указатели отличаются от аналогичных регистров МП 86 тем, что они являются 32-разрядными. Соответственно, к их мнемоническим обозначениям добавлена буква Е (от extended, расширенный). Для сохранения совместимости с ранними моделями процессоров допускается обращение к младшим половинам всех регистров, которые имеют те же мнемонические обозначения, что и в МП 86 (АХ, ВХ,СХ, DX, SI, DI, BP и SP). Естественно, сохранена возможность работы с младшими (AL, BL, CL и DL) и старшими (АН, ВН, СН и DH) половинками регистров МП 86. Однако старшие половины 32-разрядных регистров не имеют мнемонических обозначений и непосредственно недоступны. Для того, чтобы прочитать, например, содержимое старшей половины регистра ЕАХ (биты 31... 16) придется сдвинуть все содержимое ЕАХ на 16 бит вправо (в регистр АХ) и прочитать затем содержимое АХ. Все регистры общего назначения и указатели программист может использовать по своему усмотрению для временного хранения адресов и данных размером от байта до двойного слова. Так, например, возможно использование следующих команд: mov ЕАХ,OFFFFFFFFh /Работа с двойным словом (32 бит) mov AX,OFFFFh /Работа со словом (16 бит) mov AL, OFFh /Работа с байтом (8 бит) Все сегментные регистры, как и в МП 86, являются 16-разрядными. В их состав включено еще два регистра - FS и GS, которые могут использоваться для хранения сегментных адресов двух дополнительных сегментов данных. Таким образом, при использовании расширенных возможностей современных процессоров программе одновременно доступны четыре сегмента данных, а не два, как в МП 86. Регистр указателя команд также является 32-разрядным и обычно при описании процессора его называют EIP. Младшие шестнадцать разрядов этого регистра соответствуют регистру IP процессора МП 86. Весь регистр EIP используется только в 32-разрядных приложениях/ в 16-разрядных программах адреса могут быть только 16-разрядными и, соответственно, для адресации в программном сегменте используется младшая половина регистра EIP. Регистр флагов принято называть EFLAGS (от extended flags, расширенные флаги) . Хотя он имеет длину 32 бит, только младшие 18 бит (да и то не все) содержат значащую информацию. Дополнительно к шести флагам состояния (CF, PF, AF, ZF, SF и OF) и трем флагам управления состоянием процессора (TF, IF и DF), назначение которых было описано в гл. 1, он включает новые флаги задачи, рестарта и виртуального режима, а также двухбайтовое поле привилегий ввода- вывода. Все эти биты используются только в защищенном режиме и здесь рассматриваться не будут.
Дополнительные режимы адресации Режимы адресации 32-разрядных процессоров разработаны, исходя из требований образования 32-битового смещения. Другими словами, они предназначены для 32- разрядных приложений, в которых сегменты данных или стека (как, впрочем, и сегменты команд) могут иметь размеры до 232 = 4 Гбайт. Однако в реальном режиме размер любого сегмента ограничивается величиной 216 = 64 Кбайт, и 32- битовые смещения не имеют смысла. С другой стороны, ничто не мешает нам использовать для образования 16-битового смещения 32-разрядные регистры (ЕВХ, ESI и проч.), если, конечно, их реальное содержимое не будет превышать величины FFFFh. Указание в качестве операндов команд 32-разрядных регистров позволяет использовать дополнительные возможности 32-разрядных процессоров по части адресации памяти, что в некоторых случаях может оказаться полезным. Следует подчеркнуть, что речь идет здесь только о тех операндах, или, правильнее сказать, аргументах команды, которые описывают косвенную (через регистры) адресацию памяти. В отличие от МП 86, где базовыми регистрами могут быть только ВХ и BP, а индексными только SI и DI, 32-разрядные процессоры допускают использование в качестве и базовых, и индексных практически всех регистров общего назначения. Таким образом, вполне законна команда вида mov ЕАХ,[ЕСХ][EDX] Второе отличие заключается в возможности масштабирования содержимого индексного регистра, т.е. умножения его на заданный в команде коэффициент, который может принимать значения 1, 2, 4 или 8. Пример такой адресации: inc word ptr [ЕАХ] [ЕСХ*2] Еще раз подчеркнем, что дополнительные режимы косвенной адресации требуют использования 32-разрядных регистров. Команды inc word ptr [АХ] [ЕСХ*2] или inc word ptr [ЕАХ] [СХ*2] рассматриваются ассемблером, как неправильные. Режимы косвенной адресации памяти, предоставляемые 32-разрядными процессорами при использовании 32-разрядных регистров, изображены на рис. 4.2. Из рисунка видно, что в качестве базового можно использовать все регистры общего назначения, включая даже указатель стека ESP. При этом, если в качестве базового выступает один из регистров ESP или ЕВР, то по умолчанию адресация осуществляется через сегментный регистр SS, хотя возможна замена сегмента . Во всех остальных случаях адресация по умолчанию осуществляется через сегментный регистр DS. Использование регистра ЕВР в качестве индексного не адресует нас к стеку: адресация по-прежнему осуществляется с помощью регистра DS.
(База) (индекс) (масштаб) (смещение) "Нет " Нет" ЕАХ ЕАХ ЕВХ ЕВХ 1 ЕСХ ЕСХ 2 EDX + EDX 4 ESI ESI 3 EDI EDI ЕВР ЕВР ^ESP_, _ — + нет 0-битовое 32-битовое Рис. 4.2. Режимы косвенной адресации с использованием 32- разрядных регистров. Прочерк во второй колонке подчеркивает, что регистр ESP нельзя использовать в качестве индексного. Это не означает, что ESP нельзя указывать в качестве второго операнда: mov ЕАХ,[ЕСХ][ESP] Недопустима только конструкция, в которой содержимое ESP умножается на масштабирующий множитель: mov ЕАХ,[ЕСХ][ESP*8] Полезно также отметить, что смещение в команде вида mov ЕАХ,[ЕВХ][ЕСХ]+20 может быть только или 8-битовым, или 32-битовым. 16-битовые смещения не образуются. Если указанная в команде величина смещения помещается в байт, как это имеет место в приведенном выше примере команды, то смещение в коде команды занимает 1 байт. Если же величина смещения больше 255, то под него в коде команды отводится сразу 32 бит. Таким образом, понятия базовой и индексной адресации в 32-разрядных процессорах несколько размываются. Если регистр указывается с масштабирующим множителем, то это, конечно, индексная адресация. Если же множитель отсутствует, то адресацию и через ЕВХ, и через ESI с равным успехом можно отнести как к базовой, так и к индексной. (База) + (индекс) + ( "Нет " Нет ВХ + SI + BP DI (смещение) нет 8-битовое 32-битовое Рис. 4.3. Режимы косвенной адресации с использованием 16- разрядных регистров. Использование для адресации памяти 16-разрядных регистров резко сужает воз-
можности адресации 32-разрядных процессоров (рис. 4.3). В этом случае мы фактически имеем дело с МП 8 6. Напомним, что в 16-разрядном режиме допустимы не все сочетания базовых и индексных регистров. В качестве базового регистра можно использовать только ВХ или BP, а в качестве индексного только SI или DI. Использование средств 32-разрядных процессоров в программировании Как уже отмечалось, при разработке 16-разрядных программ реального режима, предназначенных для выполнения под управлением операционной системы MS-DOS, вполне допустимо использование ряда дополнительных возможностей 32-разрядных процессоров. В реальном режиме можно использовать: • 32-разрядные операнды; • дополнительные команды и расширенные возможности команд МП 86; • дополнительные режимы адресации; • четыре сегментных регистра для адресации данных вместо двух. Для того чтобы транслятор распознавал все эти средства, необходимо начать программу с директивы .586 (или, при желании, .486 или .386) и указать при этом для сегментов команд и данных описатель usel6, чтобы программа осталась 16-разрядной. Следует заметить, что возможности использования в программах реального режима дополнительных средств 32-разрядных процессоров, хотя и кажутся привлекательными, в действительности весьма ограничены. Новых команд не так уж много, и они не имеют принципиального характера; 32-разрядные данные используются в прикладных программах относительно редко (если не касаться вычислительных программ, содержащих действительные числа, но такие программы редко пишут на языке ассемблера); расширенные возможности адресации в полной мере проявляются лишь в 32 -разрядных программах, не работающих в DOS. Тем не менее, в каких-то случаях привлечение средств 32-разрядных процессоров может оказаться полезным и в 16-разрядных программах, и мы приведем несколько примеров их использования . Среди системных данных DOS и BIOS есть данные, требующие для своего размещения 2 слов. К таким данным, в частности, относится системное время, накапливаемое в 4х-байтовой ячейке с абсолютным адресом 4 6Ch. Выше, в разделе 3.5, уже описывалась системная процедура отсчета текущего времени. В процессе начальной загрузки компьютера в ячейку с адресом 4 6Ch переносится из часов реального времени время, истекшее от начала суток, а затем содержимое этой ячейки увеличивается на 1 каждым прерыванием от системного таймера, подключенного к вектору 8. Чтение ячейки 4 6Ch позволяет определить текущее время с погрешностью приблизительно в 1/18 секунды, что позволяет достаточно точно измерять интервалы времени. Арифметические действия с системным временем удобно выполнять в расширенных 32-разрядных регистрах. Рассмотрим программу, которая позволяет установить требуемый временной интервал и отработать некоторым образом его окончание. Поскольку MS-DOS является однозадачной системой, единственным способом организации параллельных процессов - выполнения программы и ожидания окончания временного интервала - яв-
ляется использование механизма прерываний. В нашем случае программа содержит обработчик прерываний от системного таймера, который 18 раз в секунду читает системное время и сравнивает его значение с заданной заранее величиной. При достижении равенства обработчик прерываний либо сам отрабатывает это событие, либо устанавливает флаг окончания временного интервала, который периодически тестируется в основной программе. Первый вариант позволяет измерить временной интервал с большей точностью, но второй предоставляет больше возможностей, так как в обработчике прерываний нельзя обращаться к функциям DOS, а основная программа может делать все, что ей заблагорассудится. Приведенный ниже пример выполнен в виде программы типа СОМ. Такая организация программы упрощает обработчик прерываний и облегчает его написание. Дело заключается в том, что процессор, переходя по аппаратному прерыванию на обработчик прерывания, модифицирует только регистры CS:IP (значениями, полученными из вектора прерываний). Все остальные регистры, в том числе и сегментные, сохраняют те значения, которые они имели на момент прерывания. Эти значения могут быть какими угодно, особенно, если основная программа вызывает функции DOS. Поэтому, если в обработчике прерываний необходимо обратиться к данным, хранящимся в основной программе, нам необходимо настроить какой-либо из сегментных регистров (например, DS или ES) на сегментный адрес сегмента данных основной программы. Если же программа написана в формате СОМ, то ее поля данных входят в тот же (единственный) сегмент, где расположены команды, и для обращения к данным можно воспользоваться регистром CS, который при вызове обработчика настраивается процессором. Пример 4-1. Чтение и сравнение системного времени по прерываниям от таймера .586 /Будут 32-разрядные операнды assume CS: code, DS:code code segment usel6 ;16-разрядное приложение org 10Oh /Формат COM main proc /Сохраним исходный вектор mov AX,3508h int 21h mov word ptr old_08,BX mov word ptr old_08+2,ES /Установим наш обработчик mov AX,2508h mov DX,offset new_08 int 21h /Прочитаем системное время, прибавим требуемый интервал /и сохраним в двухсловной ячейке памяти mov АХ,4Oh /Настройка ES на mov ES,AX /область данных BIOS mov ЕАХ, ES:6Ch /Получаем системное время add EAX,time_int /Прибавить интервал mov time_end,EAX /Сохраним в памяти /Имитация рабочего цикла программы с опросом флага again: test flag,0FFh /Проверка флага готовности jnz ok /Если установлен, на ОК mov AH,02h /В ожидании окончания mov DL,'.' /временного интервала int 21h /выводим на экран точки
jmp again /И снова на проверку флага ok: mov AH,09h /Интервал Завершен, mov DX,offset msg /Выполним, что хотели int 21h /Завершим программу, восстановив сначала исходный вектор Ids DX,old_08 mov AX,2508h int 21h mov AX,4C00h int 21h main endp ;Наш обработчик прерываний от системного таймера new_08 proc pushf call CS:old_08 push EAX push ES mov AX,4Oh mov ES,AX mov EAX,ES:6Ch стар EAX,CS:time_end jb ex inc CS:flag ex: mov AL,20h out 20h,AL pop ES pop EAX iret new_0 8 endp ;Поля данных программы old_08 dd 0 time_int dd 18*2 time_end dd 0 flag db 0 msg db "Время истекло !$' code ends end main /Запишем флаги в стек ;и вызовем системный обработчик /Сохраним используемые /регистры /Настроим ES /на область данных BIOS /Прочитаем текущее время /Сравним с вычисленным /Если меньше, на выход /Интервал истек, установим флаг /Команда конца прерывания /в контроллер прерываний /Восстановим /сохраненные регистры /Выход из обработчика /Для хранения исходного вектора /Требуемый интервал (~2с) /Момент истечения интервала /Флаг истечения интервала /Информационное сообщение Организация программного комплекса с обработчиком прерываний от системного таймера уже рассматривалась в примере 3-3 в гл. 3. Установка обработчика в рассматриваемом примере выполняется немного проще, так как нет необходимости настраивать регистр DS на сегмент данных - он и так уже настроен на единственный сегмент программы. Установив обработчик, программа настраивает регистр ES на область данных BIOS и считывает из ячейки с адресом 46Ch текущее системное время командой add к нему прибавляется заданный в ячейке time_int интервал (в примере - приблизительно 2 с) , и результат сохраняется в ячейке timc_cnd. Действия по установке обработчика закончены, и программа может приступить к выполнению запланированных для нее действий. В данном примере программа в цикле вызывает функцию DOS 02h вывода на экран символа точки/ в действительности она может, например, выполнять обработку и вывод на экран некоторых данных. В каждом шаге цикла происходит тестирование флага окончания временного интервала flag, который должен быть установлен обработчиком прерываний по
истечении заданного временного интервала. Пока флаг сброшен, цикл продолжается. Как только флаг окажется установлен, программа приступает к выполнению действий по отработке этого события. В рассматриваемом примере выполняется вывод на экран информационного сообщения и завершение программы с обязательным восстановлением исходного содержимого вектора 8. Обработчик прерываний new_08 прежде всего выполняет вызов исходного обработчика, адрес которого мы сохранили в ячейке old_08. Методика сцепления обработчиков прерываний рассматривалась в гл.З (см. пример 3-4) . В данном случае сцепление обработчиков необходимо, так как подключение к вектору 8 нашего обработчика не должно нарушить ход системных часов. После возврата из системного обработчика выполняется сохранение используемых регистров, настройка регистра ES на область данных BIOS, чтение текущего времени и сравнение его с записанным в ячейке time_end. Пока текущее время меньше заданного, обработчик просто завершается командой iret, послав предварительно в контроллер прерываний команду конца прерывания EOI и восстановив сохраненные ранее регистры. Если же заданный временной интервал истек, и текущее время оказывается равным (или большим) значению в ячейке time_end, обработчик перед своим завершением устанавливает флаг flag, инициируя в основной программе запланированные для этого события действия. Если такими действиями должно быть, например, включение или выключение аппаратуры, подключенной к компьютеру, это можно сделать в самом обработчике прерываний. В этом случае флаг flag не нужен, и действия основной программы и обработчика прерывании протекают параллельно и независимо. Рассмотренную программу нетрудно модифицировать так, чтобы флаг flag устанавливался не после истечения заданного интервала, а в заданный момент календарного времени. Эта задача позволит нам проиллюстрировать приемы выполнения арифметических операций с 32-разрядными операндами. Пример 4-2 отличается от предыдущего только изменением алгоритма вычисления времени и служебными полями данных. Процедуры установки обработчика прерываний, цикла ожидания установки флага и самого обработчика прерываний полностью совпадают с примером 4-1. Для получения требуемого значения времени в тех же единицах, которые используются системой при работе с ячейкой 4 6Ch, надо сначала вычислить время в секундах от начала суток, а затем для получения времени в тактах таймера умножить эту величину на 18,2065 (см. раздел 3.5). Для того, чтобы не привлекать арифметический сопроцессор и оставаться в рамках целых 32-битовых чисел, умножение числа секунд на 18.2065 выполняется по следующей формуле: Такты = t*18 + t/5 + t/154 Отлаживая на машине пример 4-2, надо следить за тем, чтобы заданное время было больше текущего по машинным часам, иначе программа будет вечно ожидать установки флага. Попытка завершить ее нажатием комбинации Ctrl-С приведет к зависанию системы, так как в этом случае не будут выполнены строки восстановления исходного содержимого перехваченного программой вектора. По-настоящему в программах, содержащих обработчики каких-либо прерываний, используемых системой, необходимо предусматривать собственные средства обработки нажатия Ctrl-С, чтобы аварийное завершение программы выполнялось так же корректно, как и штатное, с предварительным с восстановлением векторов.
Пример 4-2. Ожидание заданного момента времени по прерываниям от таймера .586 assume CS:code,DS:code code segment usel6 org lOOh main proc Сохраним исходный вектор Установим наш обработчик Преобразуем требуемое календарное время в количество /интервалов по 55 мс mov EAX,hour /Возьмем часы mov EBX,3600 /Коэффициент преобразования в секунды mul EBX /Преобразуем часы в секунды в EDX:ЕАХ mov temp,EAX /Сохраним часы в temp mov EAX,min /Возьмем минуты mov EBX,60 /Коэффициент преобразования в секунды mul EBX /Преобразуем минуты в секунды в EDX:ЕАХ add temp,EAX /Прибавим минуты в temp mov EAX,sec /Возьмем секунды add temp,EAX /Прибавим секунды в temp mov EAX,temp /Число секунд mov EBX,18 /Будем умножать на 18 mul EBX /Умножим на 18 mov time,EAX /Сохраним в time xor EDX,EDX /Подготовимся к делению mov EAX,temp /Будем делить число секунд mov EBX, 5 /Будем делить на 5 div EBX /Поделим add time,EAX /Прибавим к time xor EDX,EDX /Подготовимся к делению mov EAX,temp /Будем делить число секунд mov EBX,154 /Будем делить на 154 div EBX /Поделим add time,EAX /Прибавим к time /Имитация рабочего цикла программы с опросом флага /Завершим программу, восстановив сначала исходный вектор main endp new_08 proc new_0 8 endp old_08 dd 0 hour dd 13 min dd 45 sec dd 0 time dd 0 temp dd 0 flag db 0 msg db "Время наступило!$' /Часы /Минуты /Секунды /Вычисленное время в тактах таймера /Ячейка для промежуточного результат /Флаг наступления заданного времени
code ends end main Рассмотрим некоторые детали приведенного примера. Три ячейки для хранения заданного времени (часов, минут и секунд) объявлены оператором dd, как двойные слова для упрощения программы и ускорения загрузки этих значений в расширенный регистр ЕАХ. Если бы мы, экономя память, отводимую по данные, объявили бы эти ячейки как байты, то загрузка, например, числа часов в регистр ЕАХ выглядела бы следующим образом: хог ЕАХ,ЕАХ mov AL,hour Для преобразования часов в секунды мы должны число часов умножить на 3600. Оба сомножителя (3600 и максимум 23) представляют собой небольшие числа, которые поместились бы в 16-разрядный регистр. Однако результат может достигнуть величины 82800, которая в регистр АХ уже не поместится. Если бы мы выполнили умножение двух 16-разрядных регистров, например, АХ на ВХ, то результат (по правилам выполнения команды mul) оказался бы в паре регистров DX:AX, и нам пришлось бы эти два числа объединять в одно несколькими операциями переноса и сдвига: push АХ ; Сохраняем на время АХ mov AX,DX /Старшая половина произведения sal ЕАХ,16 /Сдвигаем в старшую половину ЕАХ pop АХ /Младшая половина произведения Выполняя умножение с использованием 32-разрядных регистров, мы получаем результат опять же в паре регистров EDX:EAX, но поскольку в нашем случае произведение никогда не превысит 4 Г, все оно целиком будет находиться в одном регистре ЕАХ, и мы избавляемся от приведенной выше процедуры. Результат умножения сохраняется во вспомогательной ячейке temp. Аналогичным образом выполняется перевод числа минут в секунды/ полученный результат прибавляется к содержимому ячейки temp. Число секунд преобразовывать не надо, оно просто прибавляется к содержимому temp. Полученное число секунд умножается на 18, и результат помещается в ячейку time, которая затем будет опрашиваться в обработчике прерываний. К полученному числу тактов таймера надо прибавить еще две корректирующих величины - результаты деления числа секунд на 5 и на 154. При использовании в операции деления 32-разрядных регистров делимое помещается в пару регистров EDX:EAX. В нашем случае делимое целиком помещается в ЕАХ, и регистр ЕАХ необходимо обнулить. Для этого можно было выполнить команду mov ЕАХ, 0 но более эффективна операция хог ЕАХ,ЕАХ
которая при любом содержимом ЕАХ оставляет в нем 0. При делении EDX:EAX на ЕВХ частное помещается в ЕАХ, остаток в EDX. Остаток нас не интересует, а частное (первая корректирующая величина) прибавляется к содержимому ячейки temp. Аналогичным образом то же число секунд из ячейки tmp делится на 154, и результат прибавляется к содержимому time. Преобразование закончено. В заключение рассмотрим пример упорядочивания массива 32-разрядных чисел в убывающем порядке методом пузырьковой сортировки. В приведенном алгоритме используются расширенные возможности адресации 32-разрядных процессоров. Пример 4-3. Пузырьковая сортировка .586 assume CS:code,DS:data code segment usel6 main proc mov AX, data mov DS,AX mov ESI,offset list mov ECX,1000 start: mov EDX, 0 sort: стар EDX,ЕСХ jge stop mov EAX,[ESI+EDX*4+4] crap [ESI+EDX*4],EAX jge noswap xchg [ESI+EDX*4], EAX mov [ESI+EDX*4 + 4],EAX noswap: inc EDX jmp sort stop: loop start mov AX,4C00h int 21h main endp code ends : Настроим DS : на сегмент данных :ESI-> начало массива : Число элементов в массиве : Индекс сравниваемой пары : Индекс пары дошел до :индекса массива? К следующей паре : Второй элемент пары : Сравним с предыдущим :Если первый больше, то хорошо : Первый меньше. Обменять : первый на второй : Увеличим индекс пары :И на сравнение :Цикл по всем элементам data segment list label nmb=0 rept 1000 dd nmb nmb=nmb+10 endm ;Имя тестового массива /Заполним массив на этапе /трансляции числами от 0 ;до 990 ;через 10 data ends stk segment stack dw 128 dup (0) stk ends end main
Алгоритм пузырьковой сортировки предусматривает выполнение двух вложенных циклов. Во внутреннем цикле сравниваются пары элементов. Первый элемент берется по адресу [ESI + EDX * 4] , второй - по следующему адресу [ESI + EDX * 4 + 4]. Если второй элемент больше первого, происходит обмен значений этих элементов, и элемент с меньшим значением "всплывает" на одно место выше (т.е. перемещается по большему адресу). После этого увеличивается индекс пары и выполняется сравнение второго элемента со следующим. Если оказывается, что следующий элемент больше предыдущего, они меняются местами. В результате элемент с самым маленьким значением всплывает на самый верх списка. Внутренний цикл, пройдясь по всем парам, повторяется сначала, обеспечивая всплывание следующего по величине элемента. Каждый следующий проход внутреннего цикла требует на 1 меньше шагов, чем предыдущий. После завершения упорядочивания элементы выстраиваются по возрастающим адресам в порядке уменьшения их значений. В примере 4-3 тестовый массив данных образован из возрастающих (на 10) чисел от 0 до 990. В результате упорядочивания они должны расположиться в обратном порядке, от больших к меньшим. В примере не предусмотрены средства вывода на экран элементов массива, поэтому его изучение следует проводить в отладчике , наблюдая всплывание каждого элемента. Как уже отмечалось, в 32-разрядных процессорах увеличено до 4 число сегментных регистров данных. Это дает возможность совместной работы с четырьмя сегментами данных (общим объемом до 256 Кбайт) без перенастройки сегментных регистров. Структура такого рода программы может выглядеть следующим образом: .586 datal segment usel6 first dw 7000h dup(0) datal ends data2 segment use6 second dw 7000h dup (0) data2 ends data3 segment usel6 third dw 7000h dup (0) data3 ends data4 segment usel6 forth dw 7000h dup (0) data4 ends code segment usel6 assume DS:datal,ES:data2,FS:data3,GS:data4 main proc /Настроим все 4 сегментных регистра на базовые адреса /соответствующих сегментов mov АХ,datal /DS->datal mov word ptr[BX],llllh /Обращение через DS по умолчанию /Обращение к разным сегментам с явным указанием /требуемого сегментного регистра (замена сегмента) mov word ptr ES:[BX],2222h mov word ptr FS:[BX],3333h mov word ptr GS:[BX],4444h /Обращение по именам полей данных разных сегментов /с учетом действия директивы assume
mov first,1 mov second,2 mov third,3 mov fourth,4 /Запись в сегмент datal /Запись в сегмент data2 /Запись в сегмент data3 /Запись в сегмент data4 / Перенос данных из сегмента в сегмент push first pop second+2 push third pop fourth+2 main endp code ends В программе объявлены 4 сегмента данных с именами datal, data2, data3 и data4, содержащие массивы 16-разрядных данных с именами first, second, third и fourth. Длина каждого массива составляет 56 Кбайт, и, таким образом, общий объем данных, доступных программе в любой момент, составляет более 200 Кбайт. Сегменты данных описаны до сегмента команд, что в данном случае имеет значение. В сегменте команд с помощью директивы assume указано соответствие каждому из сегментов своего сегментного регистра (DS, ES, FS и GS) . Это даст нам возможность обращаться по именам полей сегментов без явного указания соответствующих этим сегментам сегментных регистров. Программа начинается с обычной практически для всех программ процедуры настройки всех сегментных регистров. Стоит еще раз повторить, что директива assume лишь обеспечивает правильную трансляцию программы, но не инициализирует сегментные регистры. "Правильная трансляция" в данном случае заключается в том, что при обработке команд, в которых упоминаются имена данных того или иного сегмента, ассемблер автоматически предваряет эти команды, префиксом замены сегмента, выбирая для замены сегментный регистр, указанный в директиве assume для данного сегмента. Так, команда mov first, 1 преобразуется в последовательность кодов (по листингу' трансляции) С7 06 ООООг 0001 где С7 06 - это код команды mov в случае прямой адресации памяти и использования непосредственного операнда, ООООг - смещение адресуемой ячейки, а 0001 - непосредственный операнд (все числа, разумеется, шестнадцатеричные). Здесь нет префикса замены сегмента, потому что адресуется сегмент, которому соответствует регистр DS, используемый процессором по умолчанию. Однако команды с обращением к другим сегментам транслируются с включением в их коды соответствующих пре фиксов, несмотря на то, что в исходных предложениях не указаны сегментные регистры, а содержатся только ссылки на (уникальные) имена ячеек тех или иных сегментов: mov second, 2 / Код команды 26: С7 06 ООООг 0002 mov third, 3 / Код команды 64: С7 06 ООООг 0003 mov fourth, 4 / Код команды 65: С7 06 ООООг 0004 Настроив сегментные регистры, мы можем обращаться к полям данных всех четырех сегментов с использованием любых способов адресации. В приведенном фраг-
менте в регистр ВХ помещается смещение последней ячейки любого из массивов, после чего с помощью косвенной базовой адресации в последние слова всех четырех массивов записываются произвольные числа llllh, 2222h, ЗЗЗЗп и 4444h. Во всех случаях требуется описатель word ptr, так как по виду команды ассемблер не может определить, хотим ли мы занести в память байт, слово или двойное слово. При обращении к сегментам, адресуемых не через DS, необходимо явное указание сегментного регистра (которое будет преобразовано в код префикса замены сегмента), потому что по виду команды с адресацией через регистры транслятор не может определить, к какому сегменту происходит обращение. Проще обстоит дело, если в команде указаны имена ячеек сегментов. В этом случае, как уже говорилось выше, транслятор автоматически включает в код команды требуемый префикс замены сегмента. Наконец, в конце программы приведены строки пересылки данных из сегмента в сегмент через стек. Они убедительны в том отношении, что в четырех последовательных командах производится обращение к четырем различным сегментам программы без перенастройки сегментных регистров, которую пришлось бы выполнить, если бы мы ограничились возможностями МП 86. Основы защищенного режима Микропроцессоры Pentium, так же, как и его предшественники (начиная с 80268), могут работать в двух режимах: реального адреса и виртуального защищенного адреса. Обычно эти режимы называют просто реальным и защищенным. В реальном режиме 32-разрядные микропроцессоры функционируют фактически так же, как МП 86 с повышенным быстродействием и расширенным набором команд. Многие весьма привлекательные возможности микропроцессоров принципиально не реализуются в реальном режиме, который введен лишь для обеспечения совместимости с предыдущими моделями процессоров. Характерной особенностью реального режима является ограничение объема адресуемой оперативной памяти величиной 1 Мбайт. Только перевод микропроцессора в защищенный режим позволяет полностью реализовать все возможности, заложенные в его архитектуру и недоступные в реальном режиме. Сюда можно отнести: • увеличение адресуемого пространства до 4 Гбайт; • возможность работать в виртуальном адресном пространстве, превышающем максимально возможный объем физической памяти и составляющем огромную величину 64 Тбайт; • организация многозадачного режима с параллельным выполнением нескольких программ (процессов). Собственно говоря, многозадачный режим организует многозадачная операционная система, однако микропроцессор предоставляет необходимый для этого режима мощный и надежный механизм защиты задач друг от друга с помощью четырехуровневой системы привилегий; • страничная организация памяти, повышающая уровень защиты задач друг от друга и эффективность их выполнения. При включении микропроцессора в нем автоматически устанавливается режим реального адреса. Переход в защищенный режим осуществляется программно путем выполнения соответствующей последовательности команд. Поскольку многие детали функционирования микропроцессора в реальном и защищенном режимах существенно различаются, программы, предназначенные для защищенного режима, должны быть написаны особым образом. При этом различия реального и защищенного режимов
настолько велики, что программы реального режима не могут выполняться в защищенном режиме и наоборот. Другими словами, реальный и защищенный режимы не совместимы. Архитектура современного микропроцессора необычайно сложна. Столь же сложными оказываются и средства защищенного режима, а также программы, использующие эти средства. С другой стороны, при решении многих прикладных задач (например, при отладке приложений Windows, работающих, естественно, в защищенном режиме), нет необходимости в понимании всех деталей функционирования защищенного режима; достаточно иметь знакомство с его основными понятиями. В настоящем разделе дается краткое описание основ защищенного режима и его наиболее важных структур и алгоритмов функционирования. Пожалуй, наиболее важным отличием защищенного режима от реального является иной принцип формирования физического адреса. Вспомним, что в реальном режиме физический адрес адресуемой ячейки памяти состоит из двух компонентов - сегментного адреса и смещения. Оба компонента имеют размер 16 бит, и процессор, обращаясь к памяти, пользуется следующим правилом вычисления физического адреса : Физический адрес = сегментный адрес * 16 + смещение И сегментный адрес, и смещение не могут быть больше FFFFh, откуда следуют два важнейших ограничения реального режима: объем адресного пространства составляет всего 1 Мбайт, а сегменты не могут иметь размер, превышающий 64 Кбайт. В защищенном режиме программа по-прежнему состоит из сегментов, адресуемых с помощью 16-разрядных сегментных регистров, однако местоположение сегментов в физической памяти определяется другим способом. Сегментные регистры в защищенном режиме записываются не сегментные адреса, а так называемые селекторы, биты 3...15 которых рассматриваются, как номера (индексы) ячеек специальной таблицы, содержащей дескрипторы сегментов программы. Таблица дескрипторов обычно создастся операционной системой защищенного режима (например, системой Windows) и, как правило, недоступна программе. Каждый дескриптор таблицы дескрипторов имеет размер 8 байт, и в нем хранятся все характеристики, необходимые процессору для обслуживания этого сегмента . Среди этих характеристик необходимо выделить в первую очередь две: адрес сегмента и его длину (рис. 4.4). Таблица дескрипторов сегментов Первый пустой дескриптор Адрес = О Длинна = 1 Мбайт Адрес = 1 Мбайт Длинна = 100 Кбайт Адрес = 8,5 Мбайт Длинна = 256 Кбайт Рис. 4.4. Дескрипторы сегментов и их селекторы. ш О о. о о. U ш ъ
Под адрес сегмента в дескрипторе выделяется 32 бит, и, таким образом, сегмент может начинаться в любой точке адресного пространства объемом 232 = 4 Гбайт. Это адресное пространство носит название линейного. В простейшем случае, когда выключено страничное преобразование, о котором речь будет идти позже, линейные адреса отвечают физическим. Таким образом, процессор может работать с оперативной памятью объемом до 4 Гбайт. Как и в реальном режиме, адрес адресуемой ячейки вычисляется процессором, как сумма базового адреса сегмента и смещения: Линейный адрес = базовый адрес сегмента + смещение В 32-разрядных процессорах смещение имеет размер 32 бит, поэтому максимальная длина сегмента составляет 232 = 4 Гбайт. На рис. 4.4 приведен гипотетический пример программы, состоящей из трех сегментов, первый из которых имеет длину 1 Мбайт и расположен в начале адресного пространства, второй, размером 100 Кбайт, вплотную примыкает к первому, а третий, имеющий размер всего 256 байт, расположен в середине девятого по счету мегабайта. Адреса, используемые программой для обращения к ячейкам памяти, и состоящие всегда из двух компонентов - селектора и смещения - иногда называются виртуальными. Система сегментной адресации преобразует виртуальные адреса в линейные . Поскольку таблица дескрипторов, с помощью которой осуществляется это преобразование, обычно недоступна программе, программа может не знать, в каких именно участках логического адресного пространства находятся ее компоненты . Фактически это сводится к тому, что, загружая программу в память, вы не знаете, в каких местах памяти будут находиться ее сегменты, и каков будет порядок их размещения. Программисту доступны только виртуальные адреса, преобразование же их в линейные и затем в физические берет на себя операционная система. Каков объем виртуального адресного пространства? Программа указывает номер нужного ей дескриптора с помощью селектора, в котором для индекса дескриптора отведено 13 бит. Отсюда следует, что в дескрипторной таблице может быть до 213 = 8К дескрипторов. Однако в действительности их в два раза больше, так как программа может работать не с одной, а с двумя дескрипторными таблицами - одной глобальной, разделяемой всеми выполняемыми задачами, и одной локальной, принадлежащей конкретной задаче. В селекторе предусмотрен специальный бит (бит 2), состояние которого говорит о типе требуемой программе дескрипторной таблицы. Таким образом, всего программе могут быть доступны 214 = 16К дескрипторов , т.е. 16К сегментов. Поскольку размер каждого сегмента, определяемый максимальной величиной смещения, может достигать 232 = 4 Гбайт, объем виртуального адресного пространства оказывается равным 16К * 4 Кбайт = 64 Тбайт. Реально, однако, оперативная память компьютера с 32-разрядной адресной шиной не может быть больше 4 Гбайт, т.е. при сделанных выше предположениях (16К сегментов размером 4 Гбайт каждый) в памяти может поместиться максимум один сегмент из более чем 16 тысяч. Где же будут находиться все остальные? Полный объем виртуального пространства может быть реализован только с помощью многозадачной операционной системы, которая хранит все неиспользуемые в
настоящий момент сегменты на диске, загружая их в память по мере необходимости. Разумеется, если мы хотим полностью реализовать возможности, заложенные в современные процессоры, нам потребуется диск довольно большого объема - 64 Тбайт. Однако и при нынешних более скромных технических средствах (память до 100 Мбайт, жесткий диск до 10 Гбайт7) принцип виртуальной памяти используется всеми многозадачными операционными системами с большой эффективностью. С другой стороны, для прикладного программиста этот вопрос не представляет особого интереса, так как сброс сегментов на диск и подкачка их с диска осуществляются операционной системой, а не программой, и вмешательство эту процедуру вряд ли целесообразно. Как уже отмечалось, адрес, вычисляемый процессором на основе селектора и смещения, относится к линейному адресному пространству, не обязательно совпадающему с физическим. Преобразование линейных адресов в физические осуществляется с помощью, так называемой страничной трансляции, частично реализуемой процессором, а частично - операционной системой. Если страничная трансляция выключена, все линейные адреса в точности совпадают с физическими; если страничная трансляция включена, то линейные адреса преобразуются в физические в соответствии с содержимым страничных таблиц (рис. 4.5). г I :; 1 1 селе-~ор селем up С 11 г е лектор Пинеинг.ш адрг": а X гг. |~ I1"' Г t- 1_ ^2 ■_ 1. •I1 j_ i - |_ С 1 0_- X -С к X * а; г селентор Рис. 4.5. Цепочка преобразований виртуального адреса в физический. Страницей называется связный участок линейного или физического адресного пространства объемом 4 Кбайт. Программа работает в линейном адресном пространстве, не подозревая о существовании страничного преобразования или даже самих страниц. Механизм страничной трансляции отображает логические страницы на физические в соответствии с информацией, содержащейся в страничных таблицах. В результате отдельные 4х-килобайтовые участки программы могут реально находиться в любых несвязных друг с другом 4х-килобайтовых областях физической памяти (рис. 4.6). Порядок размещения физических страниц в памяти может не соответствовать (и обычно не соответствует) порядку следования логических страниц. Более того, некоторые логические страницы могут перекрываться, фактически сосуществуя в одной и той же области физической памяти. Страничная трансляция представляет собой довольно сложный механизм, в котором принимают участие аппаратные средства процессора и находящиеся в памяти таблицы преобразования. Назначение и взаимодействие элементов системы страничной трансляции схематически изображено на рис. 4.7. Система страничных таблиц состоит из двух уровней. На первом уровне нахо- Это было написано явно не сегодня.
дится каталог таблиц страниц (или просто каталог страниц) - резидентная в памяти таблица, содержащая 1024 4х-байтовых поля с адресами таблиц страниц. На втором уровне находятся таблицы страниц, каждая из которых содержит так же 1024 4х-байтовых поля с адресами физических страниц памяти. Максимально возможное число таблиц страниц определяется числом полей в каталоге и может доходить до 1024. Поскольку размер страницы составляет 4 Кбайт, 1024 таблицы по 1024 страницы перекрывают все адресное пространство (4 Гбайт). Линейное адресное пространство 4 Кбайт 4 Кбайт W 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт 4 Кбайт Физическое адресное пространство Рис. 4.6. Отображение логических адресов на физические. Линейный адрес Физический адрес 31 22 21 12 11 0 3 1 12 ■ 0 Индекс каталога Индекс страницы Смещение С траничныи кадр Смещение -дрес тэолицы страниц -дрес тэТ'ПИцы страниц т Адрес тэолицы страниц ; зтапог таблиц страниц 1024 4-а байтовых полей Базовый адрес каталога Адрес страницы Адрес страницы Адрес страницы Таблицастраниц Адрес страницы Адрес страницы Адпрг страницы Таблица страниц Каждая *ahmn.p гпдрржит 1Ю4 4- • к.дйтпры < попей Рис. 4.7. Страничная трансляция адресов. Не все 1024 таблицы страниц должны обязательно иметься в наличии (кстати, они заняли бы в памяти довольно много места - 4 Мбайт). Если программа реально использует лишь часть возможного линейного адресного пространства, а так всегда и бывает, то неиспользуемые поля в каталоге страниц помечаются, как отсутствующие. Для таких полей система, экономя память, не выделяет странич-
ные таблицы. При включенной страничной трансляции линейный адрес рассматривается, как совокупность трех полей: 10-битового индекса в каталоге страниц, 10-битовбго индекса в выбранной таблице страниц и 12-битового смещения в выбранной странице. Напомним, что линейный адрес образуется путем сложения базового адреса сегмента, взятого из дескриптора сегмента, и смещения в этом сегменте, предоставленного программой. Старшие 10 бит линейного адреса образуют номер поля в каталоге страниц. Базовый адрес каталога хранится в одном из управляющих регистров процессора, конкретно, в регистре CR3. Из-за того, что каталог сам представляет собой страницу и выровнен в памяти на границу 4 Кбайт, в регистре CR3 для адресации к каталогу используются лишь старшие 20 бит, а младшие 12 бит зарезервированы для будущих применений. Поля каталога имеют размер 4 байт, поэтому индекс, извлеченный из линейного адреса, сдвигается влево на 2 бит (т.е. умножается на 4) и полученная величина складывается с базовым адресом каталога, образуя адрес конкретного поля каталога. Каждое поле каталога содержит физический базовый адрес одной из таблиц страниц, причем, поскольку таблицы страниц сами представляют собой страницы и выровнены в памяти на границу 4 Кбайт, в этом адресе значащими являются только старшие 20 бит. Далее из линейного адреса извлекается средняя часть (биты 12...21), сдвигается влево на 2 бит и складывается с базовым адресом, хранящимся в выбранном поле каталога. В результате образуется физический адрес страницы в памяти, в котором опять же используются только старшие 20 бит. Этот адрес, рассматриваемый, как старшие 20 бит физического адреса адресуемой ячейки, носит название страничного кадра. Страничный кадр дополняется с правой стороны младшими 12 битами линейного адреса, которые проходят через страничный механизм без изменения и играют роль смещения внутри выбранной физической страницы. Рассмотрим абстрактный пример, позволяющий проследить цепочку преобразования виртуального адреса в физический. Пусть программа выполняет команду mov EAX,DS:[ЕВХ] при этом содержимое DS (селектор) составляет 11670, а содержимое ЕВХ (смещение) 31678h. Старшие 13 бит селектора (число 116h) образуют индекс дескриптора в системной дескрипторной таблице. Каждый дескриптор включает в себя довольно большой объем информации о конкретном сегменте и, в частности, его линейный адрес. Пусть в ячейке дескрипторной таблицы с номером 116h записан линейный адрес (базовый адрес сегмента) 01051000h. Тогда полный линейный адрес адресуемой ячейки определится, как сумма базового адреса и смещения: Базовый адрес сегмента 0105100Oh Смещение 00031678h Полный линейный адрес 01082678h При выключенной табличной трансляции величина 01082678h будет представлять
собой абсолютный физический адрес ячейки, содержимое которой должно быть прочитано приведенной выше командой mov. Легко сообразить, что эта ячейка находится в самом начале 17-го мегабайта оперативной памяти. Посмотрим, как будет образовываться физический адрес при использовании страничной трансляции адресов. Полученный линейный адрес надо разделить на три составляющие для выделения индексов и смещения (рис. 4.8) 31 22 21 12 11 0000 0001 00 00 1000 0010 0 0110 0111 1000 Индекс каталога Индекс таблицы страниц Смещение Рис. 4.8. Пример линейного адреса. Индекс каталога составляет 4h. Умножение его на 4 даст смещение от начала каталога. Это смещение равно 10п. Индекс таблицы страниц оказался равным 82h. После умножения на 4 получаем смещение в таблице страниц, равное в данном случае 21Oh. Предположим, что регистр CR3 содержит число 8000h. Тогда физический адрес ячейки в каталоге, откуда надо получить адрес закрепленной за данным участком программы таблицы страниц, составит 800Oh + 10h = 801Oh. Пусть по этому адресу записано число 4 6021h. Его 12 младших битов составляют служебную информацию (в частности, бит 1 свидетельствует о присутствии этой таблицы страниц в памяти, а бит 5 говорит о том, что к этой таблице уже были обращения) , а старшие биты, т.е. число 4 6000h образуют физический базовый адрес таблицы страниц. Для получения адреса требуемой ячейки этой таблицы к базовому адресу надо прибавить смещение 21Oh. Результирующий адрес составит 4621Oh. Будем считать, что по адресу 46210h записано число 01FF5021h. Отбросив служебные биты, получим адрес физической страницы в памяти 01FF5000h. Этот адрес всегда оканчивается тремя нулями, так как страницы выровнены в памяти на границу 4 Кбайт. Для получения физического адреса адресуемой ячейки следует заполнить 12 младших бит полученного адреса битами смещения из линейного адреса нашей ячейки, в которых в нашем примере записано число 678h. В итоге получаем физический адрес памяти 01FF5678h, расположенный в конце 32-го Мбайта. Как видно из этого примера, и со страничной трансляцией, и без нее вычисление физических адресов адресуемых ячеек выполняется в защищенном режиме совсем не так, как в реальном. Неприятным практическим следствием правил адресации защищенного режима является уже упоминавшаяся "оторванность" прикладной программы от физической памяти. Программист, отлаживающий программу защищенного режима (например, приложение Windows), может легко заглянуть в сегментные регистры и определить селекторы, выделенные программе. Однако селекторы абсолютно ничего не говорят о физических адресах, используемых программой. Физические адреса находятся в таблицах дескрипторов, а эти таблицы недоступны прикладной программе. Таким образом, программист не знает, где в памяти находится его программа или используемые ею области данных. С другой стороны, использование в процессе преобразования адресов защищенных системой таблиц имеет свои преимущества. Обычно многозадачная операцион-
ная система создает для каждой выполняемой задачи свой набор таблиц преобразования адресов. Это позволяет каждой из задач использовать весь диапазон виртуальных адресов, при этом, хотя для разных задач виртуальные адреса могут совпадать (и, как правило, по крайней мере частично совпадают), однако сегментное и страничное преобразования обеспечивают выделение для каждой задачи несовпадающих областей физической памяти, надежно изолируя виртуальные, адресные пространства задач друг от друга. Вернемся теперь к таблицам дескрипторов и рассмотрим их более детально. Существует два типа дескрипторных таблиц: таблица глобальных дескрипторов (GDT от Global Descriptor Table) и таблицы локальных дескрипторов (LDT от Local Descriptor Table).Обычно для каждой из этих таблиц в памяти создаются отдельные сегменты, хотя в принципе это не обязательно. Таблица глобальных дескрипторов существует в единственном экземпляре и обычно принадлежит операционной системе, а локальных таблиц может быть много (это типично для многозадачного режима, в котором каждой задаче назначается своя локальная таблица). Виртуальное адресное пространство делится на две равные половины. К одной половине обращение происходит через GDT, к другой половине через LDT. Как уже отмечалось, все виртуальное пространство состоит из 214 сегментов, из которых 213 сегментов адресуются через GDT, и еще 213 - чрез LDT. Когда многозадачная система переключает задачи, глобальная таблица остается неизменной, а текущая локальная таблица заменяется на локальную таблицу новой задачи. Таким образом, половина виртуального пространства в принципе доступна всем задачам в системе, а половина переключается от одной задачи к другой по мере переключения самих задач. Для программирования защищенного режима и даже для отладки прикладных программ, работающих в защищенном режиме, полезно представлять себе структуру дескриптора и смысл его отдельных полей. Следует заметить, что существует несколько типов дескрипторов, которым присущи разные форматы. Так, дескриптор сегмента памяти (наиболее распространенный тип дескриптора) отличается от дескриптора шлюза, используемого, в частности, для обслуживания прерываний. Рассмотрим формат дескриптора памяти (рис. 4.9). Блйгы 7 С 5 1 0 Б аз а :-: i :■'-! Атриб-гы Атрибуты !___ Блзз сегмента 2J J ^•иц.! сегмента 15 [1 Е v-ты ' U Ьиты 4 : 1 и с и 13 1? 'PL 1 Тип Рис. 4.9. Формат дескриптора памяти. Как видно из рисунка, дескриптор занимает 8 байт. В байтах 2... 4 и 7 записывается линейный базовый адрес сегмента. Полная длина базового адреса - 32
бит. В байтах 0-1 записываются младшие 16 бит границы сегмента, а в младшие четыре бита байта атрибутов 2 - оставшиеся биты 16...19. Границей сегмента называется номер его последнего байта. Мы видим, что граница описывается 20-ю битами, и ее численное значение не может превышать 1М. Однако, единицы, в которых задается граница, можно изменять, что осуществляется с помощью бита дробности G (бит 7 байта атрибутов 2) . Если G=0, граница указывается в байтах; если 1 - в блоках по 4 Кбайт. Таким образом, размер сегмента можно задавать с точностью до байта, но тогда он не может быть больше 1 Мбайт; если же установить G=l, то сегмент может достигать 4 Гбайт, однако его размер будет кратен 4 Кбайт. База сегмента и в том, и в другом случае задастся с точностью до байта. Рассмотрим теперь атрибуты сегмента, которые занимают два байта дескриптора . Бит A (Accessed, было обращение) устанавливается процессором в тот момент, когда в какой-либо сегментный регистр загружается селектор данного сегмента. Далее процессор этот бит не сбрасывает, однако его может сбросить программа (разумеется, если она имеет доступ к содержимому дескриптора, что обычно является прерогативой операционной системы). Анализируя биты обращения различных сегментов, программа может судить о том, было ли обращение к данному сегменту после того, как она сбросила бит А. Тип сегмента занимает 3 бит (иногда бит А включают в поле типа, и тогда тип занимает 4 бит) и может иметь 8 значений. Тип определяет правила доступа к сегменту. Так, если сегмент имеет тип 1, для него разрешены чтение и запись, что характерно для сегментов данных. Назначив сегменту тип 0, мы разрешим только чтение этого сегмента, защитив его тем самым от любых модификаций. Тип 4 обозначает разрешение исполнения, что характерно для сегментов команд. Используются и другие типы сегментов. Подчеркнем, что защита сегментов памяти от несанкционированных его типом действий выполняется не программой, и даже не операционной системой, а процессором на аппаратном уровне. Так, при попытке записи в сегмент типа 0 возникнет так называемое исключение общей защиты. Исключением называется внутреннее прерывание, возбуждаемое процессором при возникновении каких-либо неправильных с его точки зрения ситуаций. Попытка записи в сегмент, для которого запись запрещена, и относится к такого рода ситуациям. Исключению общей защиты соответствует вектор 13, в котором должен находиться адрес обработчика этого исключения. Стоит еще обратить внимание на тип 4. Для сегмента команд разрешается только исполнение, но не запись и даже не чтение. Это значит, что в защищенном режиме программа не может случайно залезть в свой сегмент команд и затереть его; не может она также и сознательно модифицировать команды в процессе своего выполнения - методика, иногда используемая в программах реального режима для защиты от их расшифровки любознательными программистами Бит 4 байта атрибутов 1 является идентификатором сегмента. Если он равен 1, как это показано на рис. 4.9, дескриптор описывает сегмент памяти. Значение этого бита 0 характеризует дескриптор системного сегмента. Поле DPL (Descriptor Privilege Level, уровень привилегий дескриптора) служит для защиты программ друг от друга. Уровень привилегий может принимать
значения от 0 (максимальные привилегии) до 3 (минимальные). Программам операционной системы обычно назначается уровень 0, прикладным программам - уровень 3, в результате чего исключается возможность некорректным программам разрушить операционную систему. С другой стороны, если прикладная программа сама выполняет функции операционной системы, переводя процессор в защищенный режим и работая далее в этом режиме, ее сегментам следует назначить наивысший (нулевой) уровень привилегий, что откроет ей доступ ко всем средствам защищенного режима. Бит Р говорит о присутствии сегмента в памяти. В основном он используется для организации виртуальной памяти. С помощью этого бита система может определить, находится ли требуемый сегмент в памяти, и при необходимости загрузить его с диска. В процессе выгрузки ненужного пока сегмента на диск бит Р в его дескрипторе сбрасывается. Младшая половина байта атрибутов 2 занята старшими битами границы сегмента. Бит AVL (от Available, доступный) не используется и не анализируется процессором и предназначен для использования прикладными программами. Бит D (Default, умолчание) определяет действующий по умолчанию размер для операндов и адресов. Он изменяет характеристики сегментов двух типов: исполняемых и стека. Если бит D сегмента команд равен 0, в сегменте по умолчанию используются 16-битовые адреса и операнды, если 1 - 32-битовые. Атрибут сегмента, действующий по умолчанию, можно изменить на противоположный с помощью префиксов замены размера операнда (66h) и замены размера адреса (67h). Таким образом, для сегмента с D=0 префикс 66h перед некоторой командой заставляет ее рассматривать свои операнды, как 32-битовые, а для сегмента с D=l тот же префикс 66h, наоборот, сделает операнды 16-битовыми. В некоторых случаях транслятор сам включает в объектный модуль необходимые префиксы, в других случаях их приходится вводить в программу "вручную". Рассмотрим теперь для примера простую программу, которая, будучи запущена обычным образом под управлением MS-DOS, переключает процессор в защищенный режим, выводит на экран для контроля символ, переходит назад в реальный режим (чтобы не вывести компьютер из равновесия) и завершается стандартным для DOS образом. Для того, чтобы наша программа могла бы хоть что-то сделать в защищенном режиме, для нее необходимо создать среду защищенного режима, в первую очередь , таблицу глобальных дескрипторов с описанием всех сегментов, с которыми программа будет работать. Кроме нас никто эту таблицу (при работе в DOS) не создаст. Таким образом, наша программа будет в какой-то мере выполнять функции операционной системы защищенного режима. Для практического исследования защищенного режима придется выполнить некоторую работу по переконфигурированию компьютера. В наше время компьютеры обычно конфигурируются так, что при их включении сразу загружается система Windows. Работы, для которых требуется DOS, выполняются либо в режиме эмуляции DOS, либо в сеансе DOS, организуемом системой Windows. Для запуска прикладной программы защищенного режима такой способ не годится. Нам понадобится DOS в "чистом виде", без следов Windows. Более того, перед запуском программы необходимо выгрузить все драйверы обслуживания расширенной памяти (HIMEM.SYS и EMM386.EXE) и программы, использующие расширенную память, например,
SMARTDRV.EXE. Лучше всего загружать DOS с системной дискеты, подготовив файлы CONFIG.SYS и AUTOEXEC.BAT в минимальном варианте. Обсуждая в начале этого раздела основы защищенного режима, мы не затронули многие, в том числе принципиальные вопросы, с которыми придется столкнуться при написании работоспособной программы. Необходимые пояснения будут даны в конце этого раздела. Пример 4-4. Программирование защищенного режима .586Р ;Разрешение трансляции всех команд МП 586 /Структура для описания дескрипторов сегментов dcr struc ;Имя структуры limit dw 0 /Граница (биты 0...15) base_l dw 0 /База, биты 0...15 base_m db 0 /База, биты 16...23 attr_l db 0 /Байт атрибутов 1 attr_2 db /Граница (биты 16.. base_h db 0 /База, биты 24...31 dcr ends/ data segment usel6 /Таблица глобальных дескрипторов GDT gdt_null dcr <0,0,0,0,0,0> 19) и атрибуты 2 gdt_data dcr <data_size-l,0,0,92h,0,0> gdt_code dcr <code_size-l,0,0,98h,0,0> gdt_stack dcr <511,0,0,92h,0,0> gdt screen dcr <4095,B000h,OBh,92h,0,0> /Селектор 0-обязательный /нулевой дескриптор /Селектор 8, /сегмент данных /Селектор 16, /сегмент команд /Селектор 24 /сегмент стека /Селектор 32, /видеобуфер /Псевдодескриптор для команды lgdt / Размер сегмента данных /Конец сегмента данных /Сегмент команд, 16-разрядный режим pdescr df О da ta_s i z e=$-gdt_nu11 data ends text segment usel6 assume CS:text,DS:data/ main proc/ хог ЕАХ,EAX mov AX,data mov DS,AX /Вычислим 32-битовый линейный адрес сегмента данных /и загрузим его в дескриптор сегмента данных в GDT. /В регистре АХ уже находится сегментный адрес. /Умножим его на 16 сдвигом влево на 4 бита /Очистим ЕАХ /Загрузим в DS сегментный /адрес сегмента данных shl ЕАХ,4 mov ЕВР, ЕАХ mov ВХ,offset gdt_data mov [ВХ].base_l,АХ rol ЕАХ,16 mov [ВХ].base_m,AL /Вычислим 32-битовый линейный адрес сегмента команд /и загрузим его в дескриптор сегмента команд в GDT хог ЕАХ, ЕАХ /Очистим ЕАХ /В ЕАХ линейный базовый адрес /Сохраним его в ЕВР для будущего /В ВХ адрес дескриптора /Загрузим младшую часть базы /Обмен старшей и младшей половин ЕАХ /Загрузим среднюю часть базы
mov AX,CS shl EAX,4 mov BX,offset gdt_code mov [BX] .base_l,AX rol EAX,16 mov [BX].base m,AL /Сегментный адрес сегмента команд ;В ЕАХ линейный базовый адрес ;В ВХ адрес дескриптора /Загрузим младшую часть базы /Обмен старшей и младшей половин ЕАХ /Загрузим среднюю часть базы /Вычислим 32-битовый линейный адрес сегмента стека xor ЕАХ, ЕАХ /Все, как и для других mov AX,SS /дескрипторов shl ЕАХ,4 mov ВХ,offset gdt_stack mov [BX].base_l,AX rol EAX,16 mov [BX].base_m,AL /Подготовим псевдодескриптор pdescr для загрузки регистра GDTR mov dword ptr pdescr+2,EBP mov word ptr pdescr, 39 lgdt pdescr cli /Переходим в защищенный режим mov EAX,CRO or EAX,1 mov CRO,EAX /База GDT /Граница GDT /Загрузим регистр GDTR /Запрет прерываний /Получим содержимое CRO /Установим бит защищенного режима /Запишем назад в CRO /Теперь процессор работает в защищенном режиме /Загружаем в CS:IP селектор:смещение точки continue db OEAh dw offset continue dw 16 continue: /Делаем адресуемыми данные mov AX, 8 mov DS,AX /Делаем адресуемым стек mov AX,24 mov SS,AX /Инициализируем ES и выводим символ mov AX,32 mov ES,AX mov BX,2000 mov AX,09F0Fh mov ES : [BX], AX /Вернемся в реальный режим mov gdt_data.limit,OFFFFh mov gdt_code.limit,OFFFFh mov gdt_s tack.1imi t,0 FFFFh mov gdt_screen.limit,0FFFFh mov AX,8 mov DS,AX mov AX,24 mov SS,AX mov AX,32 mov ES,AX /Код команды far jmp / Смещение / Селектор сегмента команд / Селектор сегмента данных /Загрузим в DS / Селектор сегмента стека /Загрузим в SS /Селектор сегмента видеобуфера /Загрузим в ES /Начальное смещение на экране / Символ с атрибутом /Вывод в видеобуфер /Установим / значение границы /для реального / режима /Загрузим теневой регистр / сегмента данных /То же для / стека / То же /для регистра ES
/Выполним дальний переход, чтобы заново загрузить /селектор в CS и модифицировать его теневой регистр db OEAh /Код команды jmp far dw offset go /Смещение точки перехода dw 16 /Селектор сегмента команд /Переключим режим процессора go: mov ЕАХ,CRO /Получим содержимое CRO and ЕАХ,OFFFFFFFEh /Сбросим бит РЕ mov CRO,ЕАХ /Запишем назад в CRO db OEAh / Код команды far jmp dw offset return /Смещение точки перехода dw text /Сегментный адрес /Теперь процессор снова работает в реальном режиме / /Восстановим операционную среду реального режима return: mov АХ,data /Загрузим сегментный mov DS,AX /регистр DS mov АХ,stk /Загрузим сегментный mov SS,AX /регистр SS mov SP,512 /Восстановим SP sti /Разрешим прерывания mov AX,4COOh /Завершим программу int 21h /обычным образом main endp code_size=$-main /Размер сегмента команд text ends /Конец сегмента команд stk segment stack /Сегмент db 512 dup (0) /стека stk ends end main /Конец программы и точка входа Для того чтобы разрешить использование всех, в том числе привилегированных команд 32-разрядных процессоров, в программу включена директива .586Р. Программа начинается с объявления структуры dcr, с помощью которой будут описываться дескрипторы сегментов. Сравнивая описание структуры dcr в программе с рис. 4.9, нетрудно проследить их соответствие друг другу. Для удобства программного обращения в структуре dcr база описывается тремя полями: младшим словом (base_l) и двумя байтами: средним (base_m) и старшим (base_h). В байте атрибутов 1 задается ряд характеристик сегмента. В примере 4.4 используются сегменты двух типов: сегмент команд, для которого байт attr_l должен иметь значение 98h (присутствующий, только исполнение, DPL=0), и сегмент данных (или стека) с кодом 92h (присутствующий, чтение и запись, DPL=0). Некоторые дополнительные характеристики сегмента указываются в старшем полубайте байта attr_2. Для всех наших сегментов значение этого полубайта равно 0 (бит G=0, так как граница указывается в байтах, a D=0, так как программа 16-разрядная). Сегмент данных data начинается с описания важнейшей системной структуры - таблицы глобальных дескрипторов. Как уже отмечалось выше, обращение к сегментам в защищенном режиме возможно исключительно через дескрипторы этих сегментов. Таким образом, в таблице дескрипторов должно быть описано столько деск-
рипторов, сколько сегментов использует программа. В нашем случае в таблицу включены, помимо обязательного нулевого дескриптора, всегда занимающего первое место в таблице, четыре дескриптора для сегментов данных, команд, стека и дополнительного сегмента данных, который мы наложим на видеобуфер, чтобы обеспечить возможность вывода в него символов. Порядок дескрипторов в таблице (кроме нулевого) не имеет значения. Поля дескрипторов для наглядности заполнены конкретными данными явным образом, хотя объявление структуры dcr с нулями во всех полях позволяет описать дескрипторы несколько короче, например: gdt_null dcr О /Селектор 0 - обязательный /нулевой дескриптор gdt_data dcr <data_size - 1, , , 92h> /Селектор 8 - сегмент данных В дескрипторе gdt_data, описывающем сегмент данных программы, заполняется поле границы сегмента (фактическое значение размера сегмента data_size будет вычислено транслятором, см. последнее предложение сегмента данных), а также байт атрибутов 1. База сегмента, т.е. линейный адрес его начала, в явной форме в программе отсутствует, поэтому ее придется программно вычислить и занести в дескриптор уже на этапе выполнения. Дескриптор gdt_codc сегмента команд заполняется схожим образом. Дескриптор gdt_stack сегмента стека имеет, как и любой сегмент данных, код атрибута 92h, что разрешает его чтение и запись, и явным образом заданную границу - 255 байт, что соответствует размеру стека. Базовый адрес сегмента стека так же придется вычислить на этапе выполнения программы. Последний дескриптор gdt_screen описывает страницу 0 видеобуфера. Размер видеостраницы, как известно, составляет 4096 байт, поэтому в поле границы указано число 4095. Базовый физический адрес страницы известен, он равен B8000h. Младшие 16 бит базы (число 8000h) заполняют слово base_l дескриптора, биты 16...19 (число ОВп) - байт base_m. Биты 20...31 базового адреса равны 0, поскольку видеобуфер размещается в первом мегабайте адресного пространства. Первая половина программы посвящена подготовке перехода в защищенный режим. Прежде всего, надо завершить формирование дескрипторов сегментов программы, в которых остались незаполненными базовые адреса сегментов. Базовые (32-битовые) адреса определяются путем умножения значений сегментных адресов на 16. После обнуления регистра ЕАХ и инициализации сегментного регистра DS, которая позволит нам обращаться к полям данных программы в реальном режиме, содержимое ЕАХ командой shl сдвигается влево на 4 бита, образуя линейный 32-битовый адрес. Поскольку этот адрес будет использоваться и в последующих фрагментах программы, он запоминается в регистре ЕВР (или любом другом свободном регистре общего назначения). В ВХ загружается адрес дескриптора данных, после чего в дескриптор заносится младшая половина линейного адреса из регистра АХ. Поскольку к старшей половине регистра ЕАХ (где нас интересуют биты 17...24) обратиться невозможно, над всем содержимым ЕАХ с помощью команды rol выполняется циклический сдвиг на 16 бит, в результате которого младшая и старшая половины ЕАХ меняются местами. После сдвига содержимое AL (где теперь находятся биты 17...24 линейного ад-
реса) заносится в поле base_m дескриптора. Аналогично вычисляются линейные адреса сегмента команд и сегмента стека. Следующий этап подготовки к переходу в защищенный режим - загрузка в регистр процессора GDTR (Global Descriptor Table Register, регистр таблицы глобальных дескрипторов) информации о таблице глобальных дескрипторов. Эта информация включает в себя линейный базовый адрес таблицы и ее границу и размещается в 6 байтах поля данных, называемого иногда псевдодескриптором. Для загрузки GDTR предусмотрена специальная привилегированная команда lgdt (load global descriptor table, загрузка таблицы глобальных дескрипторов), которая требует указания в качестве операнда имени псевдодескриптора. Формат псевдодескриптора приведен на рис. 4.10. Байты 5 4 3 2 1 0 1 1 1 Линейным базовый адрес 1 Граница Рис. 4.10. Формат псевдодескриптора. В нашем примере заполнение псевдодескриптора упрощается вследствие того, что таблица глобальных дескрипторов расположена в начале сегмента данных, и ее базовый адрес совпадает с базовым адресом всего сегмента, который мы благоразумно сохранили в регистре ЕВР. Границу GDT в нашем случае легко вычислить в уме: 5 дескрипторов по 8 байт занимают объем 40 байт, и, следовательно, граница равна 39. Команда lgdt загружает регистр GDTR и сообщает процессору о местонахождении и размере GDT. Еще одна важная операция, которую необходимо выполнить перед переходом в защищенный режим, заключается в запрете всех аппаратных прерываний. Дело в том, что в защищенном режиме процессор выполняет процедуру прерывания не так, как в реальном. При поступлении сигнала прерывания процессор не обращается к таблице векторов прерываний в первом килобайте памяти, как в реальном режиме, а извлекает адрес программы обработки прерывания из таблицы дескрипторов прерываний, построенной схоже с таблицей глобальных дескрипторов и располагаемой в программе пользователя (или в операционной системе) . В примере 4.4 такой таблицы нет, и на время работы нашей программы прерывания придется запретить. Запрет всех аппаратных прерываний осуществляется командой cli. Теперь, наконец, можно перейти в защищенный режим, что делается на удивление просто. Для перевода процессора в защищенный режим достаточно установить бит 0 в управляющем регистре CRO. Всего в процессоре имеется 4 программно адресуемых управляющих регистра с мнемоническими именами CRO, CR1, CR2 и CR3. Регистр CR1 зарезервирован, регистры CR2 и CR3 управляют страничным преобразованием, которое у нас выключено, а регистр CR0 содержит целый ряд управляющих битов, из которых нас сейчас будут интересовать только биты 31 (разрешение страничного преобразования) и 0 (включение защиты). При включении процессора оба эти бита сбрасываются, и в процессоре устанавливается реальный режим с выключенным страничным преобразованием. Установка в 1 младшего бита CR0 переводит процессор в защищенный режим, сброс этого бита возвращает его в режим реальных адресов.
Для того чтобы в процессе установки бита 0 не изменить состояние других битов регистра CRO, сначала его содержимое считывается командой mov в регистр ЕАХ, там с помощью команды or устанавливается младший бит, после чего второй командой mov измененное значение загружается в CRO. Процессор начинает работать по правилам защищенного режима. Хотя защищенный режим установлен, однако действия по настройке системы еще не закончены. Действительно, во всех используемых в программе сегментных регистрах хранятся не селекторы дескрипторов сегментов, а базовые сегментные адреса, не имеющие смысла в защищенном режиме. Между прочим, отсюда можно сделать вывод, что после перехода в защищенный режим программа не должна работать, так как в регистре CS пока еще нет селектора сегмента команд, и процессор не может обращаться к этому сегменту. В действительности это не совсем так. В процессоре для каждого из сегментных регистров имеется так называемый теневой регистр дескриптора, который имеет формат дескриптора (рис. 4.11) . Теневые регистры недоступны программисту; они автоматически загружаются процессором из таблицы дескрипторов каждый раз, когда процессор загружает соответствующий сегментный регистр. Таким образом, в защищенном режиме программист имеет дело с селекторами, т.е. номерами дескрипторов, а процессор - с самими дескрипторами, хранящимися в теневых регистрах. Именно содержимое теневого регистра (в первую очередь, линейный адрес сегмента) определяет область памяти, к которой обращается процессор при выполнении конкретной команды. Сегментные регистры, доступные программе Селектор Селектор Селектор Селектор Селектор Селектор Теневые регистры дескрипторов, недоступные и невидимые База Граница Атрибуты База Граница Атрибуты База Граница Атрибуты База Граница Атрибуты База Граница Атрибуты База Граница Атрибуты Рис. 4.11. Сегментные регистры и теневые регистры дескрипторов. В реальном режиме теневые регистры заполняются не из таблицы дескрипторов, а непосредственно самим процессором. В частности, процессор заполняет поле базы каждого теневого регистра линейным базовым адресом сегмента, полученным путем умножения на 16 содержимого сегментного регистра, как это и положено в реальном режиме. Поэтому после перехода в защищенный режим в теневых регистрах находятся правильные линейные базовые адреса, и программа будет выполняться правильно, хотя с точки зрения правил адресации защищенного режима содержимое сегментных регистров лишено смысла. Тем не менее, после перехода в защищенный режим, прежде всего, следует загрузить в используемые сегментные регистры селекторы соответствующих сегментов . Это позволит процессору правильно заполнить все поля теневых регистров
из таблицы дескрипторов. Пока эта операция не выполнена, некоторые поля теневых регистров (в частности, границы сегментов) содержат неверную информацию. Загрузить селекторы в сегментные регистры DS, SS и ES не представляет труда. Но как загрузить селектор в регистр CS, в который запрещена прямая запись? Для этого можно воспользоваться искусственно сконструированной командой дальнего перехода, которая, как известно, приводит к смене содержимого и IP, и CS. Фрагмент db OEAh /Код команды far jmp dw offset continue /Смещение dw 16 /Селектор сегмента команд выглядящий совершенно нелепо в сегменте команд, как раз и демонстрирует эту методику. В реальном режиме мы поместили бы во второе слово адреса сегментный адрес сегмента команд, в защищенном же мы записываем в него селектор этого сегмента (число 16). Команда дальнего перехода, помимо загрузки в CS селектора, выполняет еще одну функцию - она очищает очередь команд в блоке предвыборки команд процессора. Как известно, в современных процессорах с целью повышения скорости выполнения программы используется конвейерная обработка команд программы, позволяющая совместить во времени фазы их обработки. Одновременно с выполнением текущей (первой) команды осуществляется выборка операндов следующей (второй), дешифрация третьей и выборка из памяти четвертой команды. Таким образом, в момент перехода в защищенный режим уже могут быть расшифрованы несколько следующих команд и выбраны из памяти их операнды. Однако эти действия выполнялись, очевидно, по правилам реального, а не защищенного режима, что может привести к нарушениям в работе программы. Команда перехода очищает очередь предвыборки, заставляя процессор заполнить ее заново уже в защищенном режиме. Далее выполняется загрузка в сегментные регистры DS и SS значений соответствующих селекторов, и на этом, наконец, заканчивается процедура перехода в защищенный режим. Следующий фрагмент программы является, можно сказать, диагностическим. В нем инициализируется (по правилам защищенного режима!) сегментный регистр ES и в видеобуфер из регистра АХ выводится один символ. Код OFh соответствует изображению большой звездочки, а атрибут 9Fh - ярко-белому мерцающему символу на синем поле. Появление этого символа на экране служит подтверждением правильного функционирования программы в защищенном режиме. Почему мы не предусмотрели вывод на экран хотя бы одной содержательной строки? Дело в том, что в защищенном режиме запрещены любые обращения к функциям DOS или BIOS. Причина этого совершенно очевидна - и DOS, и BIOS являются программами реального режима, в которых широко используется сегментная адресация реального режима, т.е. загрузка в сегментные регистры сегментных адресов . В защищенном же режиме в сегментные регистры загружаются не сегментные адреса, а селекторы. Кроме того, обращение к функциям DOS и BIOS осуществляется с помощью команд программного прерывания int с определенными номерами, а в защищенном режиме эти команды приведут к совершенно иным результатам. Поэтому в программе, работающей в защищенном режиме и не имеющей специальных и довольно сложных средств перехода в так называемый режим виртуального 86-го процессора, вывод на экран можно осуществить только прямым программированием
видеобуфера. Нельзя также выполнить запись или чтение файла; более того, нельзя даже завершить программу средствами DOS. Сначала се надо вернуть в реальный режим. Возврат в реальный режим можно осуществить разными способами. Мы воспользуемся для этого тем же регистром CRO, с помощью которого мы перевели процессор на защищенный режим. Казалось бы, для возврата в реальный режим достаточно сбросить бит 0 этого регистра. Однако дело обстоит не так просто. Для корректного возврата в реальный режим надо выполнить некоторые подготовительные операции, рассмотрение которых позволит нам глубже вникнуть в различия реального и защищенного режимов. При работе в защищенном режиме в дескрипторах сегментов записаны, среди прочего, их линейные адреса и границы. Процессор при выполнении команды с адресацией к тому или иному сегменту сравнивает полученный им относительный адрес с границей сегмента и, если команда пытается адресоваться за пределами сегмента, формирует прерывание (исключение) нарушения общей защиты. Если в программе предусмотрена обработка исключений, такую ситуацию можно обнаружить и как-то исправить. Таким образом, в защищенном режиме программа не может выйти за пределы объявленных ею сегментов, а также не может выполнить действия , запрещенные атрибутами сегмента. Так, если сегмент объявлен исполняемым (код атрибута 1 98h), то данные из этого сегмента нельзя читать или модифицировать ; если атрибут сегмента равен 92h, то в таком сегменте не может быть исполняемых команд, на зато данные можно как читать, так и модифицировать. Указав для какого-то сегмента код атрибута 90п, мы получим сегмент с запрещением записи. При попытке записи в этот сегмент процессор сформирует исключение общей защиты. Как уже отмечалось, дескрипторы сегментов хранятся в процессе выполнения программы в теневых регистрах (см. рис. 4.11), которые загружаются автоматически при записи в сегментный регистр селектора. При работе в реальном режиме некоторые поля теневых регистров должны быть заполнены вполне определенным образом. В частности, поле границы любого сегмента должно содержать число FFFFh, а бит дробности сброшен. Следует подчеркнуть, что границы всех сегментов должны быть точно равны FFFFh; любое другое число, например, FFFEh, "не устроит" реальный режим. Если мы просто перейдем в реальный режим сбросом бита 0 в регистре CRO, то в теневых регистрах останутся дескрипторы защищенного режима и при первом же обращении к любому сегменту программы возникнет исключение общей защиты, так как ни один из наших сегментов не имеет границы, равной FFFFh. Поскольку мы не обрабатываем исключения, произойдет либо сброс процессора и перезагрузка компьютера, либо зависание. Таким образом, перед переходом в реальный режим необходимо исправить дескрипторы всех наших сегментов: команд, данных, стека и видеобуфера. К сегментным регистрам FS и GS мы не обращались, и о них можно не заботиться. Теневые регистры, куда, собственно, надо записать значение границы, нам недоступны. Для их модификации придется прибегнуть к окольному маневру: записать в поля границ всех четырех дескрипторов значение FFFFh, а затем повторно загрузить селекторы в сегментные регистры, что приведет к перезаписи содержимого теневых регистров. С сегментным регистром CS так поступить нельзя, поэтому его загрузку придется выполнить, как и ранее, с помощью искусственно
сформированной команды дальнего перехода. Настроив все использовавшиеся в программе сегментные регистры, можно сбросить бит 0 в CRO. После перехода в реальный режим нам придется еще раз выполнить команду дальнего перехода, чтобы очистить очередь команд в блоке предвыборки и загрузить в регистр CS вместо хранящегося там селектора обычный сегментный адрес регистра команд. Теперь процессор снова работает в реальном режиме, причем, хотя в сегментных регистрах DS, ES и SS остались незаконные для реального режима селекторы, программа будет какое-то время выполняться правильно, так как в теневых регистрах находятся правильные линейные адреса (оставшиеся от защищенного режима) и законные для реального режима границы (загруженные туда нами). Если, однако, в программе встретятся команды сохранения и восстановления содержимого сегментных регистров, например push DS pop DS выполнение программы будет нарушено, так как команда pop DS загрузит в DS не сегментный адрес реального режима, а селектор, т.е. число 8 в нашем случае. Это число будет рассматриваться процессором, как сегментный адрес, и дальнейшие обращения к полям данных приведут к адресации физической памяти, начиная с абсолютного адреса 80h, что, конечно, лишено смысла. Даже если в нашей программе нет строк сохранения и восстановления сегментных регистров, они неминуемо встретятся, как только произойдет переход в DOS по команде int 21h, так как диспетчер DOS сохраняет, а затем восстанавливает все регистры задачи, в том числе и сегментные. Поэтому после перехода в реальный режим необходимо загрузить в используемые далее сегментные регистры соответствующие сегментные адреса, что и выполняется в программе для регистров DS и SS. Надо также не забыть разрешить запрещенные нами ранее аппаратные прерывания (команда sti) . Можно еще заметить, что в той части программы, которая выполняется в защищенном режиме, не используется стек. Учитывая это, можно было несколько сократить текст программы, удалив из нее строки настройки регистра SS как при подготовке перехода в защищенный режим, так и при возврате в реальный. Не было также необходимости заново инициализировать указатель стека, так как его исходное содержимое - смещение дна стека, равное 512, никуда из SP не делось бы. Программа завершается обычным образом функцией DOS 4Ch. Нормальное завершение программы и переход в DOS в какой-то мере свидетельствует о ее правильности . У рассмотренной программы имеется серьезный недостаток - полное отсутствие средств отладки. Для отладки программ защищенного режима используется механизм прерываний и исключений, в нашей же программе этот механизм не активизирован. Поэтому всякие неполадки при работе в защищенном режиме, которые с помощью указанного механизма можно было бы обнаружить и проанализировать, в данном случае будут приводить к сбросу процессора. В приведенном примере проиллюстрированы лишь базовые средства программиро-
вания защищенного режима: понятие селекторов и дескрипторов, создание глобальной таблицы дескрипторов, переход в защищенный режим и обратно, адресация в защищенном режиме. За кадром остались такие важные вопросы, как обработка исключений и аппаратных прерываний, уровни привилегий и защита по привилегиям, раздельные операционные среды и таблицы локальных дескрипторов, создание и взаимодействие задач, режим виртуального процессора 8086 и другие.
СИСТЕМА КОМАНД ПРОЦЕССОРОВ INTEL Приложение Ниже приводится алфавитный перечень команд процессоров Intel с кратким описанием действия каждой команды и примерами ее использования. В разделах статей, начинающихся с обозначения 386+, описываются отличия действия рассматриваемой команды в современных 32-разрядных процессорах (80386, i486, Pentium). Как правило, эти отличия заключаются в возможности использования не только 8- и 16-разрядных, но и 32-разрядных операндов, а также расширенных режимов адресации памяти. Обычные 16-разрядные программы реального режима вполне могут использовать расширенные регистры процессора (ЕАХ, ЕВХ и проч.), 32-битовые ячейки памяти и варианты команд для их обработки. Для того, чтобы ассемблер правильно транслировал команды с 32- разрядными операндами, в программу необходимо включить директиву ассемблера .386 (можно также использовать директивы .486 или .586), а сегменту команд (и во многих случаях сегменту данных) придать описатель usel6: .386 codes segment usel6 assume CS:codes codes ends data segment usel6 data ends Кроме этого, необходимо разрешить компоновщику обрабатывать 32-разрядные операнды, что для компоновщика TLINK осуществляется указанием ключа /3. Отдельные статьи, начинающиеся с обозначений 386+ , 486+ и Pentium+, посвящены командам, отсутствующим в МП 86. Многие из этих команд (например, команды проверки бита или условной установки байта set) носят прикладной характер и могут использоваться в обычных программах реального режима. Новые команды, реализованные впервые в МП 80386, сохраняют свое значение и в более современных процессорах. Для того чтобы ассемблер, распознавая команды МП 80386, в программе должна присутствовать директива .386. Новые команды, реализованные впервые в МП 80486, сохраняют свое значение и в процессорах Pentium. Для того, чтобы ассемблер, распознавая команды МП 80486, в программе должна присутствовать директива .486. Для того, чтобы ассемблер распознавал команды, реализованные впервые в процессоре Pentium, в программе должна присутствовать директива .586. Ряд команд требует для своего выполнения специальных условий, обычно отсутствующих в приложениях MS-DOS. Так, например, команда bound (проверки индекса массива на выход за границы) при обнаружении выхода за границы генерирует прерывание с вектором 5. Это прерывание в защищенном режиме как раз и является исключением нарушения границ массива, но в приложениях MS-DOS используется для вывода на печать содержимого экрана. Поэтому использование таких команд в реальном режиме затруднено. Отдельные статьи, начинающиеся с обозначения 386Р+, посвящены привилегированным командам современных процессоров, работающих в расширенном режиме, и
отсутствующим в МП 86. Для использования этих команд в программу необходимо включить директиву ассемблера .386Р (можно также использовать директивы .486Р или .586Р). Если при этом программа реализуется, как 16-разрядное приложение MS-DOS, сегмент команд должен иметь описатель uscl6 (при наличии директивы .386 транслятор по умолчанию создает 32-разрядное приложение). Следует, однако, иметь в виду, что привилегированные команды защищенного режима предназначены для использования не в прикладных программах, а в операционных системах защищенного режима. В прикладных программах привилегированные команды приходится использовать лишь в весьма специальных случаях, когда, например, прикладная программа запускается в реальном режиме под управлением MS-DOS, но затем переводит процессор в защищенный режим и далее использует преимущества этого режима. Типичный пример программы такого рода - приложение DOS, которому требуется использовать всю оперативную память компьютера. В настоящей книге, посвященной, в основном, реальному режиму, дается лишь перечисление привилегированных команд защищенного режима. AAA ASCII-коррекция регистра АХ после сложения Команда ааа используется вслед за операцией сложения add в регистре AL двух неупакованных двоично-десятичных (BCD) чисел, если в АХ находится двухразрядное неупакованное двоично-десятичное число. Команда не имеет параметров. Она преобразует результат сложения в неупакованное двоично-десятичное число, младший десятичный разряд которого находится в AL. Если результат превышает 9, выполняется инкремент содержимого регистра АН. Команда воздействует на флаги AF и CF. Пример mov AX,0605h /Неупакованное BCD 65 add AL,09h /Неупакованное BCD 9, AX=060Eh ааа ;AX=0704h, неупакованное BCD 74 AAD ASCII-коррекция регистра AX перед делением Команда aad используется перед операцией деления неупакованного двоично- десятичного (BCD) числа в регистре АХ на другое неупакованное двоично- десятичное число. Команда не имеет параметров. Она преобразует делимое в регистре АХ в двоичное число без знака, чтобы в результате деления получились правильные неупакованные двоично-десятичные числа (частное в AL, остаток в АН). Команда воздействует на флаги SF, ZF и PF. Пример mov AX,0207h /Неупакованное BCD 27 mov DL,06h /Неупакованное BCD 6 aad ;AX=001Bh=27 div DL ;AX=0304h, т.е. 4 и 3 в остатке AAM ASCII-коррекция регистра AX после умножения Команда aam используется вслед за операцией умножения двух неупакованных двоично-десятичных чисел. Команда не имеет параметров. Она преобразует результат умножения, являющийся двоичным числом, в правильное неупакованное двоично-десятичное (BCD) число, младший разряд которого помещается в AL, а старший - в АН. Команда воздействует на флаги SF, ZF и PF. Пример mov AL,08h /Неупакованное BCD 8
mov CL,07h mul CL ; Неупакованное BCD 7 ;AX=0038h=56 ;AX=0506h, BCD 56 aam AAS ASCI I-коррекция регистра AL после вычитания Команда aas используется вслед за операцией вычитания одного неупакованного двоично-десятичного числа (BCD) из другого в AL. Команда не имеет параметров. Она преобразует результат вычитания в неупакованное двоично-десятичное число. Если результат вычитания оказывается меньше 0, выполняется декремент содержимого регистра АН. Команда воздействует на флаги AF и CF; после ее выполнения AF=1, CF=1. ADC Целочисленное сложение с переносом Команда adc осуществляет сложение первого и второго операндов, прибавляя к результату значение флага переноса CF. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды adc можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного) , ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда adc (совместно с командой add) обычно используется для сложения 32-разрядных чисел. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Пример 1 mov AX,1125h adc AX,2C25h ;AX=3D4Bh, если CF был = 1 ;AX=3D4Ah, если CF был = 0 Пример 2 ; В полях данных: numlow dw OFFFFh /Младшая часть 2-го слагаемого numhigh dw 0008h /Старшая часть 2-го слагаемого Пример mov AX,0708h mov CL,09h sub AL,CL /Неупакованное BCD 78 ; Неупакованное BCD 9 ;AX=07FFh ;AX=0609h, неупакованное BCD 69 aas /Число 0005FFFFh=393215 ;B программном сегменте: mov AX,0008h mov BX,0002h /Младшая часть 1-го слагаемого /Старшая часть 1-го слагаемого /Число 00020005п=131077 /Сложение младших частей. АХ=4, CF=1 /Сложение старших частей с /переносом.ВХ:АХ=0008:0004h. /Число 00080004п=524292 add АХ,numlow adc ВХ,numhigh Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Команда adc с 32-разрядными операндами может использоваться для сложения 64-разрядных целых чисел.
Пример ; В полях данных mem321 dd OFFFFFFFFh mem32h dd 98765432b / В программном сегменте mov ЕАХ, 1 mov ЕВХ,О add EAX,mem321 /Младшая часть 1-го слагаемого /Старшая часть 1-го слагаемого /Младшая часть 2-го слагаемого /Старшая часть 2-го слагаемого /Складываем младшие половины /Сумма=100000000п > 32 бит /ЕАХ=000000п, перенос /Складываем старшие половины /и перенос. ЕВХ=90000001п /Сумма: 9876543300000000b adc EBX,mem32h ADD Целочисленное сложение Команда add осуществляет сложение первого и второго операндов. Исходное значение первого операнда (приемника) теряется, замещаясь результатом сложения. Второй операнд не изменяется. В качестве первого операнда команды add можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команду add можно использовать для сложения как обычных целых чисел, так и двоично-десятичных (с использованием регистра АХ для хранения результата). Если складываются неупакованные двоично-десятичные (BCD) числа, после команды add следует использовать команду ааа/ если складываются упакованные числа, то команду daa. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Пример 1 mov BX,IFFEh mov CX,3 Пример 2 mov AX,25h add AX,12h /AX=0037h Пример 3 / В полях данных: mem dw 128 /В программном сегменте: add mem,100 /mem=228 Пример 4 add BX,CX /BX=2001h, CX=0003h mov AX,0507h add AL,05h aaa /BCD распакованное 57 /BCD 5, AX=050Ch /AX=0602h, BCD 62
Пример 5 mov AL,57h add AL,05h daa ;BCD упакованное 57 ;BCD 5, AL=5Ch ;AL=62h, BCD 62 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример mov ЕАХ,98765432b AND Логическое И Команда and осуществляет логическое (побитовое) умножение первого операнда на второй. Исходное значение первого операнда (приемника) теряется, замещаясь результатом умножения. В качестве первого операнда команды and можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами. Команда воздействует на флаги SF, ZF и PF. Правила побитового умножения: Первый операнд-бит 0101 Второй операнд-бит ООН Бит результата 0001 Пример 1 mov АХ,OFFEh Пример 2 ; В полях данных: mem dw ОСООЗп ;В программном сегменте: mov AX,700Eh and АХ,mem ;AX=4002h Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример mov EDX,0FA880041h and EDX,0FF00000Fh ; EDX = FAOOOOOlh 386P+ ARPL Коррекция запрашиваемого уровня привилегий селектора Команда aprl сравнивает селектор с образцом, содержащим максимально допустимый уровень привилегий (обычно используется селектор CS) и устанавливает проверяемое значение в соответствии с меньшим из двух уровней привилегий. Если изменение уровня не потребовалось, флаг ZF сбрасывается, если потребова- add EAX,llllllllh ЕАХ=А9876543h and AX,5555h ;AX=0554h
лось - устанавливается. В качестве первого операнда команды aprl может использоваться 16-разрядный регистр или слово памяти с проверяемым селектором; в качестве второго операнда - 16-разрядный регистр с селектором-образцом. 386+ BOUND Проверка индекса массива на выход за границы массива Команда bound проверяет, лежит ли указанный индекс, рассматриваемый, как число со знаком, внутри заданных вторым операндом границ. Если индекс выходит за границы массива снизу или сверху, генерируется прерывание с вектором 5. Первый операнд должен быть регистром, содержащим проверяемый индекс, второй - адресом поля памяти с двумя границами проверяемого массива. В команде bound допустимо использование как 16-битовых, так и 32- битовых операндов (но и первый, и второй операнды должны быть одного типа). 386+ BSF Прямое сканирование битов Команда bsf сканирует слово или двойное слово в поисках бита, равного 1. Сканирование выполняется от младшего бита (0) к старшему. Если в слове не найдено установленных битов, то устанавливается флаг ZF. Если установленные биты есть, то номер первого установленного бита заносится в указанный в команде регистр. Номером бита считается его позиция в слове, отсчитываемая от бита 0. В качестве первого операнда команды bsf следует указывать регистр, куда будет помещен результат сканирования, в качестве второго - регистр или ячейку памяти со сканируемым словом. В команде bsf допустимо использование как 16-битовых, так и 32-битовых операндов (но и первый, и второй операнды должны быть одного типа). Пример 1 mov ВХ, 70h /Анализируемое данное bsf АХ, ВХ ;АХ=4, ZF=0 Пример 2 mov SI, 0 /Анализируемое данное bsf ВХ, SI ;ZF=1, в ВХ прежнее значение Пример 3 mov SI, 8 /Анализируемое данное bsf ВХ, SI ;ВХ=3, ZF=1 Пример 4 ;В полях данных mem dw 900Oh /Анализируемое данное ;В программном сегменте: bsf АХ, mem ;AX=000Ch=12, ZF=0 386+ BSR Обратное сканирование битов Команда bsf сканирует слою или двойное слово в поисках бита, равного 1. Сканирование выполняется от старшего бита (15 или 31) к младшему. Если в слове не найдено установленных битов, то устанавливается флаг ZF. Если установленные биты есть, то номер первого установленного бита заносится в указанный в команде регистр. Номером бита считается его позиция в слове, отсчитываемая от бита 0. В качестве первого операнда команды bsf следует указывать регистр,
куда будет помещен результат сканирования, в качестве второго - регистр или ячейку памяти со сканируемым словом. В команде bsf допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд - константа) . Пример 1 mov BX,70h /Анализируемое данное bsr АХ,ВХ ;АХ=6, ZF=0 Пример 2 mov SI,0 /Анализируемое данное bsr BX,SI ;ZF=1, в ВХ прежнее значение Пример 3 mov SI,8 /Анализируемое данное bsf BX,SI ;ВХ=3, ZF=1 Пример 4 ; В полях данных mem dw 900Oh /Анализируемое данное ;В программном сегменте: bsr АХ, mem ;AX=000Fh=15, ZF=0 486+ BSWAP Обмен байтов Команда bswap изменяет порядок байтов в своем единственном операнде, в качестве которого может выступать только 32-разрядный регистр общего назначения. Биты 7. . .0 обмениваются с битами 31. . .24, а биты 15. . . 18 с битами 23...16. Другими словами, нумерация байтов регистра изменяется на противо- полжную (вместо 3, 2, 1, 0 - 0, 1, 2, 3). Команда не воздействует на флаги процессора. Пример mov ЕАХ, 01234567h bswap ЕАХ ;EAX=67452301h 386+ ВТ Проверка бита Команда bt позволяет определить, установлен ли в заданном слове определенный бит. Анализируемое слово выступает в качестве первого операнда, номер бита - в качестве второго. Первым операндом команды bt может служить регистр или ячейка памяти, вторым - регистр или непосредственное значение. В команде допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд - константа). Значение проверяемого бита копируется в флаг CF. Пример 1 mov AX,00FFh /Анализируемое данное bt АХ,5 ;бит 5=1, ZF=1
Пример 2 mov AX,OOFFh /Анализируемое данное bt АХ,8 ;бит 8=0, ZF=0 Пример 3 mov AX,8001h /Анализируемое данное mov ВХ,15 /Номер проверяемого бита bt АХ,ВХ ;бит 15 = 1, ZF=1 Пример 4 ;В полях данных mem dw lFh /Анализируемое данное ;В программном сегменте: bt mem, 4 ;бит 4=1, ZF=1 386+ ВТС Проверка и инверсия бита Команда btc проверяет определенный бит в слове, заданном первым операндом, копирует его значение в флаг CF и инвертирует. Номер бита выступает в качестве второго операнда. Первым операндом команды btc может служить регистр или ячейка памяти, вторым - регистр или непосредственное значение. В команде допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд - константа). Пример 1 mov AX,00FFh btc АХ, 5 /Анализируемое данное ;AX=00DFh Бит 5 был = 1 /Сброс бита 5, ZF=1 Пример 2 mov AX,00FFh btc АХ, 8 /Анализируемое данное ;AX=lFFh Бит 8 был = 0 /Установка бита 8, ZF=0 Пример 3 mov AX,8001h mov ВХ,15 btc АХ,ВХ /Анализируемое данное /Номер проверяемого бита /АХ=0001п, ZF=1 Пример 4 / В полях данных mem dw lFh /В программном сегменте btc mem, 1 / Ана, / Анализируемое данное /mem=lEh, ZF=1 386+ BTR Проверка и сброс бита Команда btr проверяет определенный бит в слове, заданном первым операндом,
копирует его значение в флаг CF и сбрасывает. Номер бита выступает в качестве второго операнда. Первым операндом команды btr может служить регистр или ячейка памяти, вторым - регистр или непосредственное значение. В команде допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд - константа). Пример 1 mov AX,OOFh /Анализируемое данное btr АХ, 5 ;AX=OODFh. Бит 5 был = 1 /Сброс бита 5, ZF=1 Пример 2 mov AX,OOFFh /Анализируемое данное btr АХ, 8 ;AX=OFFh Бит 8 был =0 /Остался 0, ZF=0 Пример 3 mov АХ,800lh /Анализируемое данное mov ВХ,15 /Номер проверяемого бита btr АХ,ВХ /АХ=0001п Бит 15 был = 1 /Сброс бита 15, ZF=1 Пример 4 /В полях данных mem dw lFh /В программном сегменте: btr mem,10 /Анализируемое данное /mem=lFh Бит 10 был = 0 /Остался 0, ZF=0 386+ BTS Проверка и установка бита Команда bts проверяет определенный бит в слове, заданном первым операндом, копирует его значение в флаг CF и устанавливает. Номер бита выступает в качестве второго операнда. Первым операндом команды bts может служить регистр или ячейка памяти, вторым - регистр или непосредственное значение. В команде допустимо использование как 16-битовых, так и 32-битовых операндов, но и первый, и второй операнды должны быть одного типа (за исключением случая, когда второй операнд - константа). Пример 1 mov AX,00FFh /Анализируемое данное bts АХ, 5 /AX=00FFh Бит 5 был = 1 /Остался 1, ZF=1 Пример 2 mov AX,00FFh bts АХ, 8 /Анализируемое данное /AX=lFFh Бит 8 был = 0 /Установка бита 8, ZF=0
Пример 3 mov AX,8001h mov BX,15 bts AX,BX /Анализируемое данное /Номер проверяемого бита /АХ=8001п Бит 15 был = 1 /Остался 1, ZF=1 Пример 4 / В полях данных mem dw lFh /Анали /В программном сегменте: bts mem,10 /mem=4 /Анализируемое данное /mem=41Fh Бит 10 был = 0 /Установка бита 10, ZF=0 CALL Вызов подпрограммы Команда call передает управление подпрограмме, сохранив перед этим в стеке смещение к точке возврата. Команда ret, которой обычно заканчивается подпрограмма, забирает из стека адрес возврата и возвращает управление на команду, следующую за командой call. Команда не воздействует на флаги процессора. Команда call имеет четыре модификации: • вызов прямой ближний (в пределах текущего программного сегмента)/ • вызов прямой дальний (вызов подпрограммы, расположенной в другом программном сегменте)/ • вызов косвенный ближний/ • вызов косвенный дальний. Все разновидности вызовов имеют одну и ту же мнемонику call, хотя и различающиеся коды операций. Во многих случаях транслятор может определить вид вызова по контексту, в тех же случаях, когда это невозможно, следует использовать атрибутные операторы: near ptr - прямой ближний вызов/ far ptr - прямой дальний вызов/ word ptr - косвенный ближний вызов/ dword ptr - косвенный дальний вызов. Команда call прямого ближнего вызова заносит в стек относительный адрес точки возврата в текущем программном сегменте и модифицирует IP так, чтобы в нем содержатся относительный адрес точки перехода в том же программном сегменте . Необходимая для вычисления этого адреса величина смещения от точки возврата до точки перехода содержится в коде команды, который занимает 3 байт (код операции E8h и смещение к точке перехода). Команда call прямого дальнего вызова заносит в стек два слова - сначала сегментный адрес текущего программного сегмента, а затем (выше, в слово с меньшим адресом) относительный адрес точки возврата в текущем программном сегменте. Далее модифицируются регистры IP и CS: в IP помещается относительный адрес точки перехода в том сегменте, куда осуществляется переход, а в CS - сегментный адрес этого сегмента. Обе эти величины берутся из кода команды, который занимает 5 байтов (код операции 9А1г, относительный адрес вызываемой подпрограммы и ее сегментный адрес). Косвенные вызовы отличаются тем, что адрес перехода извлекается не из кода команды, а из ячеек памяти/ в коде команды содержится информация о том, где находится адрес вызова. Длина кода команды зависит от используемого способа
адресации. Примеры прямого ближнего вызова call near ptr subl call subl /Вызов подпрограммы subl ;из того же сегмента ;То же самое Косвенные ближние вызовы Пример 1 mov ВХ,offset subl call ВХ Пример 2 ; В полях данных: addr dw subl ;ВХ=адрес подпрограммы ;Вызов подпрограммы /Ячейка с адресом подпрограммы ;В программном сегменте: call DS:addr /Вызов подпрограммы call word ptr addr ;To же самое Пример 3 ;В полях данных: addr dw subl /Ячейка с адресом подпрограммы ;В программном сегменте: ;SI=aflpec ячейки с адресом ;подпрограммы ;Вызов подпрограммы mov SI,offset addr call [SI] Пример 4 ;B полях данных: tbl dw subl /Ячейка с адресом ;подпрограммы 1 dw sub2 /Ячейка с адресом /подпрограммы 2 dw sub3 /Ячейка с адресом /подпрограммы 3 /В программном сегменте: mov ВХ,offset tbl /ВХ=адрес таблицы адресов /подпрограмм mov SI, 2 /31=смещение к адресу sub2 call [ВХ] [SI] /Вызов подпрограммы 2 Пример прямого дальнего вызова call far ptr subl /Вызов подпрограммы sub2, /расположенной в другом /программном сегменте Косвенные дальние вызовы Пример 1
;В полях данных: addr dd subl ;Поле с двухсловным /адресом подпрограммы ;В программном сегменте: call DS:addr /Вызов подпрограммы call dword ptr addr ;To же самое Пример 2 ;В полях данных: addr dd subl ;Поле с двухсловным /адресом подпрограммы ;В программном сегменте: mov DI,off set addr /DI=a,npec поля с адресом ;подпрограммы call [DI] /Вызов подпрограммы Пример 3 ; В полях данных: tbl dd subl /Адрес подпрограммы 1 dd sub2 /Адрес подпрограммы 2 dd sub3 /Адрес подпрограммы 3 ;В программном сегменте: mov SI,off set tbl ;SI=a,npec таблицы адресов mov DI,8 /Смещение к адресу sub3 call [SI] [DI] /Вызов подпрограммы sub3 Допустимо использование дополнительных режимов адресации 32-разрядных процессоров. В 32-разрядных приложениях допустимо использование 32-битовых операндов . В защищенном режиме роль сегментного адреса выполняет селектор. Примеры call [ЕАХ] /Косвенный вызов call 8[ЕСХ] /Косвенный вызов CBW Преобразование байта в слово Команда cbw заполняет регистр АН знаковым битом числа, находящегося в регистре AL, что дает возможность выполнять арифметические операции над исходным операндом-байтом, как над словом в регистре АХ. Команда не имеет параметров и не воздействует на флаги процессора. Пример 1 mov AL, 5 cbw ;AX=0005h Пример 2 mov AL, -2 /AL=FEh=-2 (байт) cbw /AX=FFFEh=-2 (слово)
386+ CDQ Преобразование двойного слова в четверное Команда cdq расширяет знак двойного слова в регистре ЕАХ на регистр EDX. Эту команду можно использовать для образования четырехсловного делимого из двухсловного перед операцией двухсловного деления. Команда не имеет параметров и не воздействует на флаги процессора. Пример 1 ;В полях данных mem dd -2 ; Отрицательное число ;В программном сегменте mov ЕАХ,mem ;EAX=FFFFFFFEh cdq ;EDX=FFFFFFFFh, EAX=FFFFFFFEh Пример 2 ;B полях данных mem dd 7FFFFFFEh /Положительное число ;В программном сегменте mov ЕАХ,mem ;EAX=7FFFFFFEh cdq ;EDX=00000000h, EAX=7FFFFFFEh CLC Сброс флага переноса Команда clc сбрасывает флаг переноса CF в регистре флагов. Команда не имеет параметров и не воздействует на остальные флаги процессора. Пример clc ;CF=0, независимо от /исходного состояния CLD Сброс флага направления Команда eld сбрасывает флаг направления DF в регистре флагов, устанавливая прямое (в порядке возрастания адресов) направление выполнения операций со строками (цепочками). Команда не имеет параметров и не воздействует на остальные флаги процессора. Пример eld ;DF=0, независимо от /исходного состояния CLI Сброс флага прерываний Команда cli сбрасывает флаг разрешения прерываний IF в регистре флагов, запрещая (до установки этого флага командой sti) все аппаратные прерывания (от таймера, клавиатуры, дисков и т.д.) Команда не запрещает процессору выполнение команды int (реализация программных прерываний); также не запрещаются немаскируемые прерывания, поступающие на вход NMI микропроцессора. Команда не имеет параметров и не воздействует на остальные флаги процессора. Пример cli ;IF=0, независимо от /исходного состояния 386Р+ CLTS Сброс флага переключения задачи в управляющем регистре О Команда cits сбрасывает флаг TS в регистре CRO.
CMC Инвертирование флага переноса Команда стс изменяет значение флага переноса CF в регистре флагов на обратное . Команда не имеет операндов и не воздействует на остальные флаги процес- СМР Сравнение Сами операнды не изменяются. Таким образом, если команду сравнения записать в общем виде стар операнд_1, операнд_2 то ее действие можно условно изобразить следующим образом: операнд_1 - операнд_2 -> флаги процессора В качестве первого операнда команды стар можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного) , ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно, как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Обычно вслед за командой стр стоит одна из команд условных переходов, анализирующих состояние флагов процессора. При сравнении чисел без знака необходимо использовать команды условных переходов, предназначенные для анализа чисел без знака (ja, jb и проч.). При сравнении чисел со знаком необходимо использовать команды условных переходов, предназначенные для анализа чисел со знаком (j1, j g и проч.) . сора. Пример стае ; Состояние флага CF /изменяется на обратное Пример 1 стар АХ, 10000 je eqlOOOO ;АХ=10000 /Переход на метку eqlOOOO, ;если АХ=10000 Пример 2 ;В полях данных: base dw 8002h ;В программном сегменте: cmp DX,base ; jb below ; ;DX-base /Переход на метку below, ;если DX, рассматриваемое ;как число без знака, меньше /числа без знака 8002h=32770 Пример 3 ;В полях данных: base dw 8002h ;В программном сегменте: cmp DX,base ; ;DX-base
jl less /Переход на метку less, если ;DX, рассматриваемое как /число со знаком, меньше /числа со знаком 8002п=-32766 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример стар ЕАХ,80000001b ja above /Переход, если /ЕАХ=80000001п...FFFFFFFFh CMPS Сравнение строк CMPSB Сравнение строк по байтам CMPSW Сравнение строк по словам Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым) . Они сравнивают по одному элементу каждой строки, фактически осуществляя вычитание второго операнда из первого и устанавливая в соответствии с результатом вычитания флаги CF, PF, AF, ZF, SF и OF. Команда cmpsb выполняет сравнение по байтам, команда cmpsw - по словам, а команда cmps может быть использована для сравнения, как байтов, так и слов. В последнем случае размер сравниваемых элементов определяется их описанием (с помощью директив db или dw). Первый операнд адресуется через DS:SI, второй - через ES:DI. Таким образом, операцию сравнения можно условно изобразить следующим образом: (DS:SI) - (ES:DI) -> флаги процессора После каждой операции сравнения регистры SI и DI получают положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера сравниваемых элементов (байт или слово). Вариант команды cmps имеет формат cmps строка_1, строка_2 (что не избавляет от необходимости инициализировать регистры DS:SI и ES:DI адресами строк строка_1 и строка_2 соответственно). В этом формате возможна замена сегмента первой строки: cmps ЕЗ:строка_ 1, строка_2 Рассматриваемые команды могут предваряться префиксами повторения repe/repz (повторять, пока элементы равны, т.е. до первого неравенства) и repne/repiiz (повторять, пока элементы не равны, т.е. до первого равенства). В любом случае выполняется не более СХ операций над последовательными элементами. После выполнения рассматриваемых команд регистры SI и DI указывают на ячейки памяти, находящиеся за теми (если DF=0) или перед теми (если DF=1) элементами строк, на которых закончились операции сравнения. Пример 1 /В полях данных сегмента данных, адресуемого через DS: strl db 'FILE.001' /1-я строка
данных, адресуемого через ES ;2-я строка ;В полях данных сегмента str2 db 'FILE.012' ;В программном сегменте: eld mov SI,offset strl mov DI, offset str2 mov CX,8 repe cmpsb j e equal notequ: /Сравнение вперед ;DS:SI 4- strl ;ES:DI 4- str2 /Длина сравниваемых строк /Поиск различия в строках ; Переход, если строки ; совпадают ; Продолжение, если строки ; не совпадают В примере 1 строки не совпадают, и команда je выполнена не будет. После завершения сравнения строк управление будет передано на метку notequ. Содержимое регистров в этой точке: СХ=1 (так как не выполнено сравнение одной последней пары символов) , SI = <смещение strl> + 7, DI = <смещение str2> + 7 (выполнено сравнение 7 пар символов). Пример 2 ;В полях данных сегмента данных, strl db '12345678*90' ;В полях данных сегмента данных, str2 db 'abcdefgh*ij' ; В программном сегменте: eld mov SI,offset strl mov DI,offset str2 mov CX,11 repne cmpsb /одинаковых элементов jne notequ found: адресуемого через DS: ;1-я строка адресуемого через ES: ;2-я строка /Сравнение вперед ;DS:SI -> strl ;ES:DI -> str2 /Длина сравниваемых строк /Поиск первой пары /Переход, если таковой нет /Продолжение, если пара /одинаковых элементов найдена В примере 2 имеется пара одинаковых элементов (*) в позиции 8 от начала строк. Поэтому команда jne выполнена не будет. После завершения сравнения строк управление будет передано на метку found. Содержимое регистров в этой точке: СХ=2 (так как не выполнено сравнение двух последних пар символов), SI = <смещение strl> + 9, DI = < смещение str2> + 9 (выполнено сравнение 9 пар символов). Пример 3 /В полях данных сегмента, strl db '09.12.1998' str2 db '09.12.1998' /В программном сегменте: eld mov SI,offset strl mov DI,offset str2 mov CX,10 repe cmps ES:strl,ES:str2 j e equal адресуемого через ES: /1-я строка /2-я строка /Сравнение вперед /DS:SI -> strl /ES:DI -> str2 /Длина сравниваемых строк /Поиск различия в строках / Переход, если строки
;одинаковы notequal: /Продолжение, строки /различаются В примере 3 строки одинаковы и после завершения сравнения управление будет передано на метку equal. Поскольку строки описаны с помощью директив db, фактически выполняется команда cmpsb, т.е. побайтовое сравнение. Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. 386+ CMPSD Сравнение строк по двойным словам Команда аналогична командам МП 86 cmpsb и cmpsw, но позволяет сравнивать 32-битовые участки строк, адресуемых через регистры DS:ESI и ES:EDI (или, в 16-разрядных приложениях, через DS:SI и ES:DI). Использование мнемоники cmpsd с префиксом rep не означает, что в качестве счетчика будет автоматически использоваться расширенный регистр ЕСХ. Пример ;В полях данных сегмента, адресуемого через DS areal dd 152345,168666,954333 area2 dd 152345,168666,954331 ;B программном сегменте push DS pop ES mov SI,offset areal mov DI,offset area2 mov CX,3 repe cmpsd j e equal ;ES=DS ;DS:SI ;ES:DI -> areal -> area2 /Будем сравнивать 3 числа В приведенном примере в строках (фактически это целочисленные массивы) различаются последние элементы, и команды jc выполнена не будет. 486+ CMPXCHG Сравнение и обмен Команда cmpxchg выполняет в одной операции сравнение и обмен операндов. Команда требует два параметра и неявным образом использует третий операнд - регистр ЕАХ. Первый операнд (приемник) должен находиться в 16- или 32-битовой ячейке памяти, второй операнд (источник) - в регистре общего назначения такого же размера. Команда выполняет сравнение операнда-приемника с содержимым неявного операнда - регистра ЕАХ. Если сравниваемые значения совпадают, операнд-приемник замещается операндом-источником (т.е. содержимое регистра записывается в память). Если сравниваемые значения не совпадают, содержимое памяти (приемник) поступает в регистр ЕАХ (рис. П1). Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Если равны CMPXCHG память, регистр Сравнение Если не равны ЕАХ Рис.П1. Действие команды cmpxchg
Пример 1 ; В полях данных mem dw 135 ; В программном сегменте mov АХ,135 mov ВХ,60 cmpxchg mem,ВХ ;mem=AX. Регистр -> память ;mem=60, ВХ=60, АХ=135 Пример 2 ; В полях данных mem dw 135 ;В программном сегменте mov АХ,148 mov ВХ,60 cmpxchg mem, ВХ ;memOAX. Память -> АХ ;mem=135, ВХ=60, АХ=148 Pentium+ CMPXCHG8B Сравнение и обмен 8 байтов Команда cmpxchg8b выполняет в одной операции сравнение и обмен 8-байтовых операндов. Команда требует один параметр и неявным образом использует еще два операнда - пары регистров EDX:EAX и ЕСХ:ЕВХ. В качестве явного операнда команды (приемника) может выступать только 64-битная (8-байтовая) ячейка памяти. Команда выполняет сравнение операнда-приемника в памяти с содержимым EDX:EAX. Если сравниваемые значения совпадают, то операнд-приемник в памяти замещается 64-битным значением ЕСХ:ЕВХ. Если сравниваемые значения не совпадают, содержимое памяти поступает в пару регистров EDX,EAX, замещая один из сравниваемых операндов (рис. П2). Команда воздействует на флаг ZF. ЕСХ:ЕВХ Если равны CMPXCHG8B память Сравнение Если не равны 1 t EDX:ЕАХ Рис. Действие команды cmpxchg8b Пример 1 ; В полях данных mem dq 1122334455667788b ;В программном сегменте mov ЕСХ,9 mov ЕВХ,5 mov EDX,11223344b mov EAX,55667788h
cmpxchg8b mem ;mem=EDX:EAX. ECX:EBX -> mem ; ;mem=0000000900000005h Пример 2 ; В полях данных mem dq 1122334455667788h ;B программном сегменте mov ЕСХ,9 mov EBX,5 mov EDX,11223344b mov EAX,55667789b cmpxchg8b mem ;mem=EDX:EAX. mem -> EDX:EAX ;mem=1122334455667788h ;EDX=11223344h, EAX=55667788h При работе с многобайтовыми данными не следует забывать о том, что в памяти байты любых данных всегда выстраиваются в порядке их номеров, т.е. от младших к все более старшим, в то время как при изображении чисел мы применяем обратный порядок - сначала пишем старшие разряды числа, затем младшие. В то же время символьные строки мы изображаем так же, как они располагаются в памяти - для нас естественно считать, что по мере движения по строке вправо номер символа возрастает. Пример 3 ; В полях данных meml db '12345678' mem2 db '12345678' ;B программном сегменте mov ЕСХ,68676665b mov ЕВХ,6463626lh mov EDX,dword ptr mem2+4 /часть строки mov EAX,dword ptr mem2 /часть строки cmpxchg8b gword ptr meml ; Строка-операнд ; Сравниваемая строка ; ' ef gh ' ;'abed' /Забираем старшую /Забираем младшую /Операнды совпадают ;ZF=1, meml='abcdefgh' ;ЕСХ:ЕВХ без изменений ;EDX:EAX без изменений Пример 4 ;В полях данных meml db '12345678' mem2 db 'abedefgh' ; В программном сегменте mov ЕСХ,68676665b mov EBX,6463626lh mov EDX,dword ptr mem2+4 /часть строки mov EAX,dword ptr mem2 /часть строки cmpxchg8b qword ptr meml ; Строка-операнд ; Сравниваемая строка ; ' ef gh ' ;'abed' /Забираем старшую /Забираем младшую /Операнды не совпадают ;ZF=0, EDX=38373635='5678'
;ЕАХ=34333231='1234' ;meml без изменения ;При неравенстве ЕСХ:ЕВХ не принимают /участие в операции Pentium+ CPUID Идентификация процессора Команда cpuid позволяет получить код идентификации процессора, установленного на данном компьютере. Команда в качестве неявного операнда использует регистр ЕАХ. Для процессоров Pentium регистр ЕАХ перед вызовом команды cpuid может принимать два значения: 0 и 1. Если ЕАХ=0, то команда возвращает в регистре ЕАХ код 1, а в регистрах ЕВХ, EDX и ЕСХ (именно в таком порядке) - три части символьной строки, идентифицирующей изготовителя процессора. Для процессоров Intel возвращаемая строка в целом имеет вид " Genuineintel". Если перед вызовом команды cpuid значение ЕАХ равно 1, то команда возвращает в регистре ЕАХ коды разработки конкретной версии процессора, а в регистре EDX код lBFh, содержащий информацию о возможностях процессора. Коды разработки в регистре ЕАХ хранятся в следующем формате: биты 0 ... 3 - номер поколения (например, 3); биты 4 ... 7 - модель (например, 4); биты 8 ... 11 - семейство (5 для Pentium). Содержимое регистра EDX включает конфиденциальную информацию изготовителя, а также говорит о наличии на кристалле микропроцессора арифметического сопроцессора (бит 0) и поддержке команды cmpxchg8b (бит 8). Пример ;В полях данных mem dd 0,0,0 ;В программном сегменте CWD Преобразование слова в двойное слово Команда cwd заполняет регистр DX знаковым битом содержимого регистра АХ, преобразуя тем самым 16-разрядное число со знаком в 32-разрядное, размещаемое в регистрах DX:AX. Команду удобно использовать для преобразования двухбайтового делимого в четырехбайтовое (двойное слово) при делении на 16-разрядный операнд. Команда не имеет параметров и не воздействует на флаги процессора. mov ЕАХ,0 cpuid mov mem, ЕВХ mov mem+4, EDX mov mem+8, ECX cpuid ;EAX=0001h ;mem='Genuineintel' ;EAX=543h (например), EDX = lBFh Пример 1 mov AX,32767 cwd ;AX=7FFFh ;AX=7FFFh, DX=000Oh. ;DX:AX=32767 Пример 2 mov AX,-32768 cwd ;AX=8000h ;AX=8000h, DX=FFFFh. ;DX:AX=-32768
386+ CWDE Преобразование слова в двойное слово с расширением Команда cwde заполняет старшую половину регистра ЕАХ знаковым битом содержимого регистра АХ, преобразуя тем самым 16-разрядное число со знаком в 32- разрядное, размещаемое в расширенном регистре ЕАХ. Команда не имеет операндов и не воздействует на флаги процессора. Пример ; В полях данных mem dw -3 ;В программном сегменте mov АХ,mem ;AX=FFFD cwde ;ЕAX=FFFFFFFDh DAA Десятичная коррекция в регистре AL после сложения Команда daa корректирует результат сложения в регистре AL двух упакованных двоично-десятичных (BCD) чисел (по одной цифре в каждом полубайте), чтобы получить пару правильных упакованных двоично-десятичных цифр. Команда используется вслед за операцией сложения упакованных двоично-десятичных чисел. Если результат сложения превышает 99, возникает перенос и устанавливается флаг CF. Команда воздействует на флаги SF, ZF, AF, PF и CF. Пример 1 mov AL,87h add AL,04h daa /Упакованное BCD 87 /После сложения AL=8Bh ;AL=91h, т.е. упакованное BCD 91 Пример 2 mov AL,87h add AL,llh daa /Упакованное BCD 87 /После сложения AL=97h ;AL=97h, т.е. упакованное ;BCD 97 (в данном случае /команда daa ничего не делает) DAS Десятичная коррекция в регистре AL после вычитания Команда das корректирует результат вычитания в регистре AL двух упакованных двоично-десятичных (BCD) чисел (по одной цифре в каждом полубайте), чтобы получить пару правильных упакованных десятичных цифр. Команда используется вслед за операцией вычитания упакованных двоично-десятичных чисел. Если для вычитания требовался заем, устанавливается флаг CF. Команда воздействует на флаги SF, ZF, AF, PF и CF. Пример 1 mov AL,55h sub AL,19h das /Упакованное BCD 55 /После вычитания AL=3Ch /AL=36h, т.е. упакованное BCD 36 Пример 2 mov AL,55h sub AL,15h das /Упакованное BCD 55 /После вычитания AL=40h /AL=4 Oh, т.е. упакованное /BCD 40 (в данном случае /команда das ничего не делает)
DEC Декремент (уменьшение на 1) Команда dec вычитает 1 из операнда, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение . Операнд интерпретируется как число без знака. Команда воздействует на флаги OF, SF, ZF, AF и PF. Пример 1 mov АХ,OFFFFh dec AX ;AX=FFFEh Пример 2 mov CX,0 dec CX ;CX=FFFFh Пример 3 mov CX,3500h dec CL ;CX=35FFh Пример 4 ; В полях данных mem dw 68 ;B программном сегменте dec mem ;mem=67 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример mov ЕАХ, О dec ЕАХ ;EAX=FFFFFFFFh DIV Деление целых чисел без знака Команда div выполняет деление целого числа без знака, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (целое число без знака). Размер делимого в два раза больше размеров делителя и остатка. Для однобайтовых операций делимое помещается в регистр АХ; после выполнения операции частное записывается в регистр AL, остаток - в регистр АН. Для двухбайтовых операций делимое помещается в регистры DX:AX (в DX - старшая часть, в АХ - младшая); после выполнения операции частное записывается в регистр АХ, остаток - в регистр DX. В качестве операнда-делителя команды div можно указывать регистр (кроме сегментного) или ячейку памяти; не допускается деление на непосредственное значение. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание с вектором 0. Команда не воздействует на флаги процессора. Команду div можно использовать для целочисленного деления неупакованного двоично-десятичного числа в регистре АХ не неупакованный двоично-десятичный делитель, если перед ней выполнить команду aad (см. пример 3).
Пример 1 mov АХ,506 ;Делимое mov BL,50 /Делитель div BL ;AL=0Ah (частное), AH=06h (остаток) Пример 2 ; В полях данных long dd 65537 /Делимое ;В программном сегменте mov DX,word ptr long+2 ;DX=0001h, старшая /часть делимого mov АХ,word ptr long ;AX=0001h, младшая /часть делимого mov CX,256 /Делитель div CX ;AX=0100h (частное), ;DX=0001h (остаток) Пример 3 mov AX,0807h mov DL,09h aad div DL /Неупакованное BCD 87 ;Неупакованное BCD 9 ;AX=0057h=87 ;AX=0609h, т.е. 9 и 6 в остатке Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. При этом, если делитель представляет 32- битовую величину, то возможен только один вариант команды деления, когда делимое находится в паре регистров EDX:EAX. В этом случае частное будет помещено в регистр ЕАХ, остаток - в EDX. Пример mov ЕАХ, OFFFFFFFh /Младшая часть делимого mov EDX,0 /Старшая часть делимого mov ЕВХ,256 /Делитель div ЕВХ /Частное в EAX=000FFFFFh, /Остаток в EDX=000000FFh 386+ ENTER Создание стекового кадра для параметров процедуры Команда enter, обычно являющаяся первой командой процедуры, выделяет заданный объем стекового пространства для локальных (автоматических) параметров процедуры, предоставляя процедуре указатель на выделенную область (в качестве такого указателя используется регистр ЕВР), и смещая указатель стека ESP так, чтобы он указывал на начало свободного стекового пространства. В результате процедура имеет возможность обращаться по ходу своего выполнения к своим локальным параметрам и, в то же время, пользоваться оставшимся пространством стека для временного сохранения в нем любых данных с помощью команд push и pop. Команда leave в конце процедуры выполняет обратные действия, возвращая стек в исходное состояние и уничтожая область локальных переменных. Локальными, как известно, называются как раз те переменные, которые существуют только в течение времени выполнения некоторой процедуры, и автоматически исчезают после се завершения. Команды enter и leave используются многими языками высокого уровня для
управления доступом к локальным переменным вложенных процедур. Команда enter имеет два операнда. Первый (16-битовое непосредственное значение) определяет число байтов, выделяемых в стеке для локальных переменных. Для 32-разрядных приложений место в стеке выделяется двойными словами (по 4 байт), для 16-разрядных - словами (по 2 байт). Второй операнд (8-битовое непосредственное значение) задаст так называемый лексический уровень процедуры, характеризующий степень ее вложенности. В зависимости от значения лексического уровня, команда enter выполняется по-разному. При лексическом уровне, равном 0, реализуется невложенная форма команды enter. В этом случае после входа в процедуру (командой call) с сохранением в стеке адреса возврата, в стек заносится текущее содержимое регистра ЕВР, в ЕВР копируется текущее значение указателя стека, а указатель стека смещается на число байтов, заданное первым операндом команды enter . Создаваемая на стеке структура носит название стекового кадра, а регистр ЕВР выполняет в данном случае функцию указателя стекового кадра. Адрес возврата ЕВР Место для локальных переменных Место для временного сохранения и извлечения .данных командами push-pop Рис.ПЗ. Состояние стека после входа в подпрограмму и выполнения команды enter 8,0(на рисунке адреса ячеек уменьшаются в низ) Подпрограмма имеет возможность обращаться к своим локальным переменным по адресам ESP-4 и ESP-8 (для случая резервирования места под две переменные). Занеся в стек по этим адресам некоторые данные (полученные в качестве параметров вызова через регистры общего назначения или созданные самостоятельно) подпрограмма может затем многократно к ним обращаться, не боясь их затирания в процессе использования стека. Поскольку команда enter настроила указатель стека на область, находящуюся за пределами локальных переменных, программа может использовать команды push для сохранения в стеке временных данных. Команда leave, размещаемая в самом конце процедуры, перед завершающей командой ret, копирует содержимое ЕВР в ESP, освобождая (в логическом плане) область локальных переменных, и снимает со стека сохраненное там исходное содержимое ЕВР. После этого командой ret можно вернуться в вызывающую процедуру. Поскольку первый параметр команды enter имеет размерность слова, процедура в принципе имеет возможность зарезервировать в стеке для своих локальных переменных до 64 Кбайт стекового пространства. Лексические уровни, отличные от 0, используются в тех случаях, когда по правилам языка высокого уровня каждая вложенная процедура имеет право обращаться к локальным переменным всех вышележащих процедур, но не к процедурам, находящимся на параллельных с ней ветвях вложенности. Другими словами, область видимости переменных распространяется на все вложенные процедуры, но две подпрограммы, вызываемые из одной и той же (вышележащей) процедуры, "не enter 8,0 ЕВР ESP
видят" друг друга. В таких случаях главной процедуре назначается лексический уровень 1, все вызываемые из нее подпрограммы получают значение лексического уровня 2, подпрограммы, вызываемые из этих процедур, имеют уровень 3 и т.д. Команды enter при ненулевом значения второго параметра создают в стеке стековые кадры с более сложной структурой. Отличие такого стекового кадра от рассмотренного выше заключается в том, что в него, помимо области локальных переменных, входят также указатели стековых кадров всех вышележащих процедур. В результате любая подпрограмма может с помощью своего указателя (т.е. содержимого ESP) обратиться к собственных! переменным, а используя хранящиеся в стеке указатели кадров вышележащих процедур, "дотянуться" и до их локальных переменных. По- прежнему команды leave освобождают стек от стековых кадров вместе со всеми находящимися в них данными. Пример /Вызывающая процедура call subrl /Подпрограмма subrl subrl proc enter 2048,0 /Место под локальные данные leave ret HLT Останов Команда hit прекращает выполнение программы и переводит процессор в состояние останова. Работа процессора возобновляется после операции запуска, а также в случае прихода немаскируемого или разрешенного маскируемого прерываний. IDIV Деление целых чисел со знаком Команда IDIV выполняет деление целого числа со знаком, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (целое число со знаком). Размер делимого в два раза больше размеров делителя и остатка. Оба результата рассматриваются как числа со знаком, причем знак остатка равен знаку делимого. Для однобайтовых операций делимое помещается в регистр АХ; после выполнения операции деления частное записывается в регистр AL, остаток - в регистр АН. Для двухбайтовых операций делимое помещается в регистры DX:AX (в DX - старшая часть, в АХ - младшая); после выполнения операции деления частное записывается в регистр АХ, остаток - в регистр DX. В качестве операнда-делителя команды idiv можно указывать регистр данных или ячейку памяти; не допускается деление на непосредственное значение. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание через вектор 0. Команда не воздействует на флаги процессора . ; Работа с локальными данными Пример 1 mov АХ,506 mov BL,5 0 idiv BL ; Делимое ; Делитель ;AL=0Ah (частное), AH=06h (остаток)
Пример 2 ;В полях данных long dd 0F0007h ; В программном сегменте mov DX,word ptr long+2 /часть делимого mov АХ,word ptr long /часть делимого mov CX,256 idiv CX Пример 3 mov AX,-506 mov BL,5 0 idiv BL ; Делимое ;DX=000Fh, старшая ;AX=0007h, младшая /Делитель ;AX=0F00h (частное), ;DX=0007h (остаток) ; AX=FE 0 6h, делимое /Делитель ;AL=F6h (-10), AH=FAh (-6) Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. При этом, если делитель представляет 32- битовую величину, то возможен только один вариант команды деления, когда делимое находится в паре регистров EDX:EAX. В этом случае частное будет помещено в регистр ЕАХ, остаток - в EDX. Пример ; В полях данных dvd dq -100001 ;В программном сегменте mov EAX,dword ptr dvd mov EDX,dword ptr dvd+4 mov EBX,50 idiv EBX ;Делимое ;EAX=FFFE 7 95Fh ;(младшая часть делимого) ;EDX=FFFFFFFFh (старшая /часть делимого) /Делитель ;Частное в EAX=FFFFF830h= ;-2000, остаток в EDX=FFFFFFFFh=-1 IMUL Умножение целых чисел со знаком Команда IMUL выполняет умножение целого числа со знаком, находящегося в регистре AL (в случае умножения на байт) или АХ (в случае умножения на слово) , на операнд-источник (целое число со знаком). Размер произведения в два раза больше размера сомножителей. Для однобайтовых операций один из сомножителей помещается в регистр AL; после выполнения операции произведение записывается в регистр АХ. Для двухбайтовых операций один из сомножителей помещается в регистр АХ; после выполнения операции произведение записывается в регистры DX:AX (в DX - старшая часть, в АХ - младшая). В качестве операнда-сомножителя команды imul можно указывать регистр (кроме сегментного) или ячейку памяти; не допускается умножение на непосредственное Значение. Команда воздействует на флаги OF и CF. Если АН или DX представляют собой просто знаковое расширение AL или АХ, соответственно (т.е. результат умножения со знаком верен), OF и CF сбрасываются в 0; в противном случае (результат со знаком не помещается в АХ или DX:AX) OF и CF устанавливаются в 1. Пример 1 mov AL, 5 ; Первый сомножитель
mov BL,3 imul BL /Второй сомножитель ;AX=OOOFh (произведение) Пример 2 mov AX,256 mov BX,256 imul BX ; Первый сомножитель /Второй сомножитель ;DX=0001h, AX=0000h ; (число 65536) Пример 3 mov AL,-5 mov BL,3 imul BL ;AL=FBh ;BL=03h ;AX-'FFFlh (-15) Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Имеются также варианты команды с двумя и тремя операндами. Для команды imul с одним операндом второй сомножитель должен располагаться в AL, АХ или ЕАХ. Процессор выбирает размерность второго сомножителя, исходя из размерности первого, указанного в качестве операнда. 16-, 32- или 64- битовый знаковый результат помещается в регистры АХ, DX:AX или EDX:EAX, соответственно. Если после операции умножения содержимое АН, DX или EDX является лишь знаковым расширением AL, АХ или ЕАХ, соответственно, то флаги CF и OF сбрасываются в 0. В противном случае они устанавливаются в 1. Для команды imul с двумя операндами их произведение записывается в первый операнд; второй операнд не изменяется. В качестве первого операнда могут выступать 16- или 32-разрядные регистры общего назначения; в качестве второго операнда - 16- или 32-разрядные регистры общего назначения, 16- или 32- битовые ячейки памяти или непосредственное значение. Оба операнда должны иметь один размер. Если результат умножения помещается в первый операнд, флаги CF и OF сбрасываются в 0. В противном случае они устанавливаются в 1. Для команды imul с тремя операндами произведение второго и третьего операндов записывается в первый операнд. В качестве первого операнда могут выступать 16- или 32-разрядные регистры общего назначения; в качестве второго операнда - 16- или 32-разрядные регистры общего назначения или 16- или 32- битовые ячейки памяти; в качестве третьего операнда - только непосредственное значение. Два первых операнда должны иметь один размер. Если результат умножения помещается в первый операнд, флаги CF и OF сбрасываются в 0. В противном случае они устанавливаются в 1. Пример 1 mov ЕАХ,-1 mov ESI,100000000 imul ESI Первый сомножитель Второй сомножитель EDX=FFFFFFFFh, EAX=FA0A1 F0 Oh РеЗультат=-100000000 Пример 2 ;В полях данных ор2 dd 100h ; В программном сегменте ; Первый сомножитель
mov EAX,400000h imul EAX,op2 /Второй сомножитель ;EAX=40000000h Пример 3 mov BX,300h imul AX,BX,4 ;AX=300h*4=0C00h IN Ввод из порта Команда in вводит в регистр AL или АХ соответственно байт или слово из порта, указываемого вторым операндом. Адрес порта помещается в регистр DX. Если адрес порта не превышает 255, он может быть указан непосредственным значением. Указание регистра-приемника (AL или АХ) обязательно, хотя с другими регистрами команда in не работает, и их указывать нельзя. Команда не воздействует на флаги процессора. Пример 1 in AL, 6Oh ;Ввод байта из порта 6Oh Пример 2 mov DX,3D5h /Адрес порта in AL,DX ;Ввод байта из порта 3D5h Допустимо использование в качестве операнда-приемника расширенного регистра ЕАХ (если адресуемое устройство позволяет прочитать из его порта двойное слово) . Пример mov DX,345h /Адрес порта in EAX,DX INC Инкремент (увеличение на 1) Команда inc прибавляет 1 к операнду, в качестве которого можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение . Операнд интерпретируется как число без знака. Команда воздействует на флаги OF, SF, ZF, AF и PF. Команда не воздействует на флаг CF; если требуется воздействие на этот флаг, необходимо использовать команду add op,1. Пример 1 mov AX,0563h inc AX ;AX=0564h Пример 2 mov BH,15h inc BH ;BH=16h Пример 3 mov AX,A5FFh inc AL ;AX=A500h
inc АН ;AX=A600h Пример 4 mov AX,OFFFFh inc AX ;Для сравнения: mov CX,OFFFFh add CX,1 ;AX=0000h, ZF=1, CF=0 ;CX=0000h, ZF=1, CF=1 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример ;В полях данных mem dd 12345678h ; В программном сегменте inc mem ;mem=12345679h INS Ввод строки из порта INSB Ввод байта из порта INSW Ввод слова из порта INSD Ввод двойного слова из порта Команды предназначены для ввода данных из порта непосредственно в память. Адрес порта указывается, как и для команды in, в регистре DX, при этом задание адреса порта непосредственным значением не допускается. Данные пересылаются по адресу, находящемуся в паре регистров ES:EDI. Замена сегмента не допускается. Команда insb переносит из порта 1 байт, команда insw - 1 слово, команда insd - 1 двойное слово, а команда ins может быть использована для передачи байтов, слов и двойных слов. В последнем случае размер загружаемого данного определяется описанием строки (с помощью директив db, dw или dd). После передачи данных регистр EDI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1, 2 или 4, в зависимости от размера передаваемых данных. Вариант команды ins имеет формат ins строка, DX (что не избавляет от необходимости инициализировать регистры ES:EDI адресом строки). Если устройство, адресуемое через порт, может передавать последовательность данных, то команды ins можно предварить префиксом повторения rep. В этом случае из порта принимается СХ элементов данных заданного размера. Команды ins не воздействуют на флаги процессора. Пример ;В сегменте данных, адресуемых через DS mem dw О ;В программном сегменте push DS pop ES ;ES=DS mov DI,offset mem ;ES:DI -> mem mov DX,303h /Адрес порта insw ;Ввод из порта 16-битового данного
INT Программное прерывание Команда int инициирует в процессоре процедуру прерывания, в результате которой управление передается на обработчик прерывания с номером п, который указан в качестве операнда команды int. В стек текущей программы заносится содержимое регистра флагов, сегментного регистра CS и указателя команд IP, после чего в регистры IP и CS передается содержимое двух слов из вектора прерывания с номером п (расположенных по адресам 0:п*4 и 0:п*4+2). Команда сбрасывает флаги IF и TF в 0. Команда iret, которой всегда завершается обработчик прерывания, восстанавливает исходное состояние этих флагов. Пример 1 int 60h Пример 2 mov АН,1 int 21h Пример 3 mov АН, 0 int 16h /Переход на прикладной /обработчик прерывания 60п /Функция MS-DOS - ввод с /клавиатуры кода ASCII символа /Вызов MS-DOS /Функция BIOS (прерывание ;16h) - ввод с клавиатуры /кода ASCII и скан-кода символа /Вызов BIOS INTO Прерывание по переполнению Команда into, будучи установлена вслед за какой-либо арифметической, логической или строковой командой, вызывает обработчик прерываний через вектор 4, если предшествующая команда установила флаг переполнения OF. Перед использованием команды INTO прикладной программист должен поместить в вектор прерывания 4 двухсловный адрес своей программы обработки прерывания по переполнению. Команда сбрасывает флаги IF и TF в 0. Команда iret, которой всегда завершается обработчик прерывания, восстанавливает исходное состояние этих флагов. Пример add АХ,ВХ /Произвольная команда into /Вызов прикладного /обработчика через вектор 4, /если OF=l ... /Продолжение программы, если OF=0 IRET Возврат из прерывания Команда iret возвращает управление прерванному в результате аппаратного или программного прерывания процессу. Команда извлекает из стека три верхние слова и помещает их в регистры IP, CS и флагов (см. команду int). Командой iret должен завершаться любой обработчик прерываний, как аппаратных, так и программных (от команды int). Команда не воздействует на флаги, однако она загружает в регистр флагов из стека его исходное содержимое, которое было там сохранено процессором в процессе обслуживания прерывания. Если требуется, чтобы после возврата из обработчика программного прерывания командой iret какие-либо флаги процессора были установлены требуемым образом (весьма распро-
страненный прием), их установку надо выполнить в копии флагов в стеке. 386+ IRETD Возврат из прерывания в 32-разрядном режиме Команда iretd используется в защищенном режиме для возврата из обработчика прерывания или исключения, а также для переключения на исходную задачу. В отличие от 16-разрядной команды iret, данная команда, завершая обработку прерывания или исключения, снимает со стека 3 двойных слова, содержащие расширенный регистр флагов EFALGS, CS и расширенный указатель команд EIP. В случае переключения задач команда iretd выполняет переключение контекстов задач - сохранение состояния завершающейся задачи в ее сегменте состояния задачи и загрузку регистров процессора из сегмента состояния исходной задачи. jcc Команды условных переходов Команды, обозначаемые (в книгах, не в программах!) jcc, осуществляют переход по указанному адресу при выполнении условия, заданного мнемоникой команды. Если заданное условие не выполняется, переход не осуществляется, а выполняется команда, следующая за командой jcc. Переход может осуществляться как вперед, так и назад в диапазоне + 127...-128 байтов. В составе команд процессора предусмотрены следующие команды условных переходов : Команда Перейти, если Условие перехода ja выше CF=0 и ZF=0 jae выше или равно CF=0 jb ниже CF=1 jbe ниже или равно CF=1 или ZF=1 jc перенос CF=1 jcxz CX=0 CX=0 je равно ZF=1 jg больше ZF=0 или SF=OF jge больше или равно SF=OF jl меньше SF не равно OF jle меньше или равно ZF=1 или SF не равно OF jna не выше CF=1 или ZF=1 jnae не выше и не равно CF=1 jnb не ниже CF=0 jnbe не ниже и не равно CF=0 и ZF=0 jne нет переноса CF=0 jne не равно ZF=0 jng не больше ZF=1 или SF не равно OF jnge не больше и не равно SF не равно OF jnl не меньше SF=OF jnle не меньше и не равно ZF=0 и SF=OF jno нет переполнения OF=0 jnp нет четности PF=0 jns Знаковый бит равен О SF=0 jnz не нуль ZF=0 jo переполнение 0F=1 jp есть четность PF=1 jpe сумма битов четная PF=1 jpo сумма битов нечетная PF=0 js Знаковый бит равен SF=1 jz нуль ZF= I
Команды условных переходов, осуществляющие переход по условию "выше - ниже", предназначены для анализа чисел без знака; команды, осуществляющие переход по условию "больше - меньше", предназначены для анализа чисел со знаком. Пример 1 стар СХ,0 ;СХ=0? je equal ;Если да, перейти па метку equal Пример 2 cmp АХ,1000 j a above Пример 3 стар АХ,1000h jg greater Пример 4 int 21h jc error /Пусть AX=8000h=32768 ;(=-32768) ;32768 > 1000. Переход будет /Пусть AX=8000h=-32768 ; (=32768) ,--32768 < lOOOh. Перехода не будет ;Вызов системной функции ;Если CF=1 (ошибка), перейти ; на метку error Команды условных переходов имеют варианты 16- и 32-разрядной адресации (при тех же мнемонических обозначениях) и могут передавать управление в диапазоне -32768...+32767 байт для сегментов с атрибутом размера 16 и в диапазоне - 231. . .+231-1 байт для сегментов с атрибутом размера 32. JMP Безусловный переход Команда jmp передает управление в указанную точку того же или другого программного сегмента. Адрес возврата не сохраняется. Команда не воздействует на флаги процессора. Команда jmp имеет пять разновидностей: • переход прямой короткий (в пределах -128... + 127 байтов); • переход прямой ближний (в пределах текущего программного сегмента); • переход прямой дальний (в другой программный сегмент); • переход косвенный ближний; • переход косвенный дальний. Все разновидности переходов имеют одну и ту же мнемонику jmp, хотя и различающиеся коды операций. Во многих случаях транслятор может определить вид перехода по контексту, в тех же случаях, когда это невозможно, следует использовать атрибутные операторы: short - прямой короткий переход; near ptr - прямой ближний переход; far ptr - прямой дальний переход; word ptr - косвенный ближний переход; dword ptr - косвенный дальний переход.
Примеры прямого короткого перехода jmp short shpt /Переход на метку shpt /в пределах +127...-128 байтов jmp shpt ;То же самое, если shpt /находится выше по тексту программы Примеры прямого ближнего перехода jmp pt /Переход на метку pt ;в пределах текущего сегмента jmp near ptr pt ;To же самое Примеры косвенных ближних переходов Пример 1 mov ВХ,offset pt ;ВХ=адрес точки перехода jmp ВХ /Переход в точку pt Пример 2 ;В полях данных: addr dw pt /Ячейка с адресом точки перехода ;В программном сегменте: jmp DS:addr /Переход в точку pt jmp word ptr addr ;To же самое Пример 3 ; В полях данных: addr dw pt /Ячейка с адресом точки перехода ;В программном сегменте: mov DI,offset addr ;DI=aflpec ячейки с адресом /точки перехода jmp [DI] /Переход в точку pt Пример 4 ;В полях данных: tbl dw ptl /Ячейка с адресом 1 dw pt2 /Ячейка с адресом 2 dw pt3 /Ячейка с адресом 3 /В программном сегменте: mov ВХ,offset tbl /BX=aflpec таблицы адресов переходов mov SI, 4 /31=смещение к адресу pt3 call [ВХ][SI] /Переход в точку pt3 Примеры прямых дальних переходов jmp far ptr farpt /Переход на метку farpt в /другом программном сегменте jmp farpt /Переход на метку farpt в другом /программном сегменте, если farpt
/объявлена дальней меткой /директивой farpt label far Примеры косвенных дальних переходов Пример 1 / В полях данных: addr dd pt / Поле с двухсловным /адресом точки перехода /В программном сегменте: jmp DS:addr / jmp dword ptr addr / /Переход в точку pt /То же самое Пример 2 / В полях данных: addr dd pt / Поле с двухсловным /адресом точки перехода /В программном сегменте: mov DI,offset addr / /DI =адрес поля с адресом /точки перехода jmp [DI] /Переход в точку pt Допустимо использование дополнительных режимов адресации 32-разрядных процессоров. Для 32-разрядных приложений допустимо использование 32-битовых операндов . В защищенном режиме вместо сегментного адреса сегмента (при дальних переходах) выступает его селектор. LAHF Загрузка флагов в регистр АН Команда lahf копирует флаги SF, ZF, AF, PF и CF соответственно в разряды 7, 6, 4, 2 и 0 регистра АН. Значение битов 5, 3 и 1 регистра АН не определено. Команда не имеет параметров и не изменяет флаги процессора. Команда lahf (совместно с командой sahf) дает возможность читать и изменять Значения флагов процессора, в том числе флагов SF, ZF, AF и PF, которые нельзя изменить непосредственно. Однако следует иметь в виду, что команда lahf переносит в АН только младший байт регистра флагов. Поэтому нельзя изменить с ее помощью, например, состояние флага OF. Пример 1 lahf /Регистр АН отображает /состояние регистра флагов or AH,80h sahf /Установка бита 7 = SF /Загрузка АН в регистр /флагов, где теперь SF = 1 Пример 2 and АН,OBFh sahf lahf /Регистр АН отображает /состояние регистра флагов /Сброс бита 6 = ZF /Загрузка АН в регистр /флагов, где теперь ZF = О
386Р+ LAR Загрузка прав доступа Команда 1аг загружает в первый операнд (16- или 32-разрядный регистр) поле атрибутов сегмента из дескриптора сегмента, заданного селектором во втором операнде. В качестве операнда с селектором может использоваться 16- или 32- разрядный регистр или ячейка памяти. В операнд-приемник поступают два байта атрибутов селектора с замаскированным полем старших битов границы сегмента. LDS Загрузка указателя с использованием регистра DS Команда Ids считывает из памяти по указанному адресу двойное слово (32 бит), содержащее указатель (полный адрес некоторой ячейки), и загружает младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр, а старшую половину указателя (т.е. сегментный адрес) в регистр DS. Таким образом, команда Ids гeg, mem эквивалентна следующей группе команд: mov reg,word ptr mem mov DS,word ptr mem+2 В качестве первого операнда команды Ids указывается регистр общего назначения; в качестве второго - ячейка памяти с двухсловным содержимым. Указатель, содержащийся в этой ячейке, может быть адресом как процедуры, так и поля данных. Команда не воздействует на флаги процессора. Пример 1 ; В полях данных: addr dd myproc /Двухсловный адрес процедуры ;myproc ;В программном сегменте: Ids SI,addr ;DS:SI -> myproc Пример 2 ; В полях данных: mem dw 25 Ячейка памяти с произвольным содержимым Двухсловный адрес этой addr dd myproc ячейки ;В программном сегменте mov ВХ,offset addr Ids DX, [BX] ВХ=адрес ячейки addr ОХ=смещение ячейки mem, Б3=сегментный адрес ячейки mem Пример 3 ; В полях данных: dptr dd procl ; Полный ; procl ; Полный ;proc2 ; Полный адрес процедуры dd ргос2 адрес процедуры dd ргосЗ адрес процедуры
;proc3 ;B программном сегменте: mov SI, 8 ; Смещение к адресу ргосЗ Ids DI,dptr[SI] ;DS:DI ргосЗ Допустимо использование 32-разрядного регистра-приемника и 32-битового смещения в памяти, а также дополнительных режимов адресации 32-разрядных процессоров . В защищенном режиме вместо сегментного адреса сегмента выступает его селектор. LEA Загрузка исполнительного адреса Команда lea загружает в регистр, указанный в команде в качестве первого операнда, относительный адрес второго операнда (не значение операнда!). В качестве первого операнда следует указывать регистр общего назначения (не сегментный) , в качестве второго - ячейку памяти. Команда lea гeg,mem эквивалентна команде mov reg,offset mem но у первой команды больше возможностей описания адреса интересующей нас ячейки. Команда не воздействует на флаги процессора. Пример 1 ; В полях данных: message db 'Идут измерения' ;В программном сегменте: lea SI,message ;DS:SI -> message Пример 2 ; В полях данных: nmb db '0123456789' ;В программном сегменте: mov SI,7 lea DX,nmb[SI] Пример 3 ; В полях данных: nmb db '0123456789' ;В программном сегменте: mov ВХ, offset msg mov SI, 9 /Смещение символа '9' lea SI, [BX] [SI] ;31=адрес символа '9' Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. ; Смещение символа '7' ;ВХ=адрес символа '7' 386+ LEAVE Выход из процедуры высокого уровня Команда leave выполняет действия, противоположные действиям последней команды enter. Она логически уничтожает созданный командой enter стековый кадр
со всеми содержащимися в нем локальными переменными и подготавливает стек к выполнению команды iret, завершающей переход в вызывающую процедуру. Команда leave не имеет параметров. Более подробное описание и пример см. в описании команды enter. LES Загрузка указателя с использованием регистра ES Команда les считывает из памяти по указанному адресу двойное слово (32 бит), содержащее указатель (полный адрес некоторой ячейки), и загружает младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр, а старшую половину указателя (т.е. сегментный адрес) в регистр ES. Таким образом, команда les reg,mem эквивалентна следующей группе команд: mov reg,word ptr mem mov ES,word ptr mem+2 В качестве первого операнда команды les указывается регистр общего назначения; в качестве второго - ячейка памяти с двухсловным содержимым. Указатель, содержащийся в этой ячейке, может быть адресом как процедуры, так и поля данных. Команда не воздействует на флаги процессора. Пример 1 ;В полях данных: addr dd myproc /Двухсловный адрес процедуры ; myproc ;В программном сегменте: les SI,addr ; ;ES:SI myproc Пример 2 ;B полях данных: mem dw 25 /Ячейка памяти с /произвольным содержимым /Двухсловный адрес этой ячейки addr dd myproc ; ;В программном сегменте: mov ВХ,offset addr ; ;ВХ=адрес ячейки addr les DX, [ВХ] ;ОХ=смещение ячейки mem, ; Е3=сегментный адрес ячейки mem Пример 3 ;В полях данных: dptr dd procl ; dd proc2 ; dd ргосЗ ; ;B программном сегменте: mov SI, 8 ; les DI,dptr[SI] /Полный адрес процедуры prod /Полный адрес процедуры ргос2 /Полный адрес процедуры ргосЗ /Смещение к адресу ргосЗ /ES:DI -> ргосЗ Допустимо использование 32-разрядного регистра-приемника и 32-битового сме-
щения в памяти, а также дополнительных режимов адресации 32-разрядных процессоров . В защищенном режиме вместо сегментного адреса сегмента выступает его селектор. LFS Загрузка указателя с использованием регистра FS LGS Загрузка указателя с использованием регистра FS LSS Загрузка указателя с использованием регистра FS Команды считывают из памяти полный указатель, состоящий из селектора и 16- битового или 32-битового смещения, и загружают младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр общего назначения, а старшую половину указателя (т.е. селектор) в сегментный регистр, указанный в мнемонике команды. В качестве первого операнда всех перечисленных команд указывается 16- или 32-разрядный регистр общего назначения; в качестве второго - ячейка памяти с 32- или 48-битовым содержимым. Команда не воздействует на флаги процессора. Примеры см. в описании команд Ids и les. 386Р+ LGDT Загрузка регистра таблицы глобальных дескрипторов Команда lgdt загружает регистр таблицы глобальных дескрипторов (GDTR) из 48-битового псевдодескриптора, содержащего 32-битовый базовый адрес и 16- битовую границу таблицы глобальных дескрипторов, находящейся в памяти. В качестве операнда команды lgdt выступает относительный адрес псевдодескриптора. 386Р+ LIDT Загрузка регистра таблицы дескрипторов прерываний Команда lidt загружает регистр таблицы дескрипторов прерываний (IDTR) из 48-битового псевдодескриптора, содержащего 32-битовый базовый адрес и 16- битовую границу таблицы дескрипторов прерываний, находящейся в памяти. В качестве операнда команды lidt выступает относительный адрес псевдодескриптора. 386Р+ LLDT Загрузка регистра таблицы локальных дескрипторов Команда lidt загружает регистр таблицы локальных дескрипторов (LDTR) селектором, определяющим таблицу локальных дескрипторов (LDT). Селектор LDT должен входить в таблицу глобальных дескрипторов. В качестве операнда команды lidt, содержащего селектор LDT, можно использовать 16- или 32-разрядный регистр общего назначения или 16-или 32-битовое поле памяти. 386Р+ LMSW Загрузка слова состояния машины Команда lmsw загружает в регистр слова состояния машины (так называется младшая половина управляющего регистра процессора CRO) слово состояния машины, взятое из указанного в команде операнда. В качестве операнда можно использовать 16- или 32-разрядный регистр общего назначения или 16- или 32- битовое поле памяти. Команду lmsw можно использовать для перевода процессора из реального в защищенный режим или наоборот. В первом случае после чтения слова состояния командой smsw надо установить в нем бит 0 (бит РЕ) и загрузить назад в CRO командой lmsw. Во втором случае после после чтения слова состояния командой smsw надо сбросить в нем бит 0 и загрузить назад в CRO командой lmsw. LOCK Запирание шины Префикс lock, помещенный перед командой, устанавливает сигнал на линии LOCK системной шины и запрещает доступ к шине другим процессорам на время выполнения данной команды. Этот префикс предназначен для использования в многопроцессорных многозадачных системах для обеспечения исключительного доступа к памяти данного процесса (и данного процессора) на время проверки или модифи-
кации некоторой ячейки памяти. Типичный пример операций такого рода - работа с семафорами. Если два (или более) процесса, идущие на разных процессорах, используют какой-либо общий ресурс, например, файл или лазерный диск, то необходимо обеспечить механизм, запрещающий одновременное обращение процессов к общему ресурсу. Эта задача решается с помощью семафора - ячейки памяти (байта или даже бита), состояние которого отражает доступность или, наоборот, занятость ресурса . Если процессору понадобился общий ресурс, он читает состояние семафора и, если ресурс занят, продолжает опрашивать семафор до тех пор, пока другой процессор, использующий в настоящий момент общий ресурс, не освободит его. Обнаружив, что ресурс свободен, первый процессор устанавливает семафор в состояние "занят" и использует ресурс. Закончив работу с ресурсом, процессор сбрасывает его семафор и дает возможность другому процессу обратиться к тому же ресурсу. Описанный алгоритм будет работать только в том случае, если операция чтения- модификации- записи семафора будет выполняться в непрерываемом режиме. В противном случае оба процесса могут, одновременно обратившись к семафору, увидеть, что ресурс свободен, и начать его совместное использование. Избежать такой ситуации и позволяет префикс lock в сочетании с командами типа btr или bts, выполняющими комплексные операции проверки и сброса или проверки и установки бита. Будем считать, что семафор расположен в бите 0 байта по адресу sem, причем сброшенное состояние бита свидетельствует о занятости ресурса, а установленное состояние о том, что ресурс свободен. Тогда типичная процедура ожидания освобождения ресурса выглядит следующим образом: mov SI,offset sem /Адрес байта с семафором jne getsem Проверка состояния семафора и его модификация (запись в бит семафора О, т.е. признака "занят") осуществляется в одной команде btr. На время выполнения этой команды шина многопроцессорной системы блокируется префиксом lock, и другой процессор обратиться к тому же семафору не может. Блокировка шины снимается уже после того, как семафор будет переведен в состояние занятости. Если при обращении к байту sem оказывается, что в бите семафора записан О, т.е. ресурс занят другим процессом, команда btr сбрасывает флаг CF (путем переноса в него содержимого анализируемого бита), что приводит к многократному повторению процедуры getsem, т.е. к циклу ожидания освобождения ресурса. Типичная процедура освобождения занятого данным процессом ресурса выглядит следующим образом: Собственно говоря, никакая проверка здесь не выполняется, однако процесс будет освобождать ресурс лишь, если он этот ресурс использует, и проверять состояние флага в этой операции нет необходимости. Однако и здесь необходимо запирание шины на время записи в бит семафора 1, чтобы исключить одновременное обращение двух процессов к одной ячейке памяти. 386+ Префикс lock может быть использован только со следующими командами (и лишь при условии, что при их выполнении происходит обращение к памяти): adc, getsem: lock btr byte ptr [SI],1 /Проверка и сброс бита О freesem: lock bts byte ptr [SI],1 /Проверка и установка бита О
add, and, bt, bts, btr, btc, or, sbb, sub, xor, xchg, dec, inc, neg, not. LODS Загрузка операнда из строки LODSB Загрузка байта из строки LODSW Загрузка слова из строки Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они загружают в регистр AL (в случае операций над байтами) или АХ (в случае операций над словами) содержимое ячейки памяти по адресу, находящемуся в паре регистров DS:SI. Команда lodsb загружает 1 байт, команда lodsw - 1 слово, а команда lods может быть использована для загрузки как байтов, так и слов. В последнем случае размер загружаемого данного определяется описанием строки (с помощью директив db или dw) . После операции загрузки регистр SI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2, в зависимости от размера загружаемого элемента. Команда не имеет параметров и не воздействует на флаги процессора. Вариант команды lods имеет формат lods строка (что не избавляет от необходимости инициализировать регистры DS:SI адресом строки). В этом формате возможна замена сегмента строки строка: lods ES:строка Пример 1 ;В полях данных сегмента данных, адресуемого через DS: str db 'qwertyuiop' ; В программном сегменте: eld /Двигаемся по строке вперед mov SI, offset str /Адрес строки add SI,BX /Добавим смещение (пусть ВХ=4) lodsb ;AL='t', SI -> 'у' Пример 2 ;В полях данных сегмента str db 'qwertyuiop' ;В программном сегменте: eld mov SI,offset str lodsb ES:str данных, адресуемого через ES: /Двигаемся по строке вперед /Адрес строки ;AL='q', ES:SI -> 'w' 386+ LODSD Загрузка двойного слова из строки Команда аналогична командам МП 86 lodb и lodsw, но позволяет загрузить из строки, адресуемой через регистры DS:ESI (DS:SI для 16-разрядных приложений), двойное слово в регистр ЕАХ. Пример ; В полях данных dat dd 12789,200000,550000,8000000 ;В программном сегменте
mov SI,offset dat add SI, 4*3 lodsd ;DS:SI -> 4-й элемент массива чисел ;ЕАХ=8000000 LOOP Циклическое выполнение, пока содержимое СХ не равно нулю Команда loop выполняет декремент содержимого регистра СХ, и если оно не равно 0, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне -128... + 127 байт. Обычно метка помещается перед первым предложением тела цикла, а команда loop является последней командой цикла. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы включенных в цикл команд составляет 65536 (если перед входом в цикл СХ=0) . Команда не воздействует на флаги процессора. Пример 1 ;В полях данных: array dw 4096 dup (0) ;В программном сегменте: lea ВХ,array xor SI,SI mov CX,4096 mov AX, 1 array: mov [BX] [SI],AX inc SI inc SI loop array /Массив из 4096 слов ;BX -> array ;SI=0 /Счетчик повторений ; Число-заполнитель /Очистка элемента массива /Сдвиг к следующему /слову массива /Повторить СХ раз Пример 2 mov СХ,20 delay: loop delay /Небольшая задержка При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того чтобы в 16-разрядном приложении процессор при выполнении команды loop использовал не 16-разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командой loop необходимо указать префикс замены размера адреса 67h. Пример mov ЕСХ,0 zzzz: db 67h /Префикс замены размера адреса loop zzzz /Цикл из 232: шагов, реализующий /программную задержку порядка минут LOOPE/LOOPZ Циклическое выполнение, пока равно/циклическое выполнение, пока нуль Оба обозначения представляют собой синонимы и относятся к одной команде. Команда выполняет декремент содержимого регистра СХ, и если оно не равно 0, и флаг ZF установлен, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне -128...+127 байтов. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы включенных в цикл команд составляет 65536. Команда не воздействует на флаги процессора. Пример
;В полях данных, адресуемых через DS: command db 80 dup (' ') ;В программном сегменте: lea SI, command eld mov CX,80 pass: lodsb cmp AL, ' loope pass dec SI /Копирование в поле command строки, /содержимое которой следует анализировать ; Настроим DS:SI /Обработка вперед /Обрабатывать не более 80 ; байтов /Загрузим в AL очередной ;символ /Пропустим все пробелы в ; начале строки /Сдвиг на 1 символ назад ;DS:SI -> первый символ, отличный от пробела При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того, чтобы в 16-разрядном приложении процессор при выполнении команд loope/loopz использовал не 16- разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командами loope/loopz необходимо указать префикс замены размера адреса 67h. db 67h loope xxxx LOOPNE/LOOPNZ Циклическое выполнение, пока не равно/циклическое выполнение, пока не нуль Оба обозначения представляют собой синонимы и относятся к одной команде. Команда выполняет декремент содержимого регистра СХ, и если оно не равно 0, и флаг ZF сброшен, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне -128... + 127 байтов. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы включенных в цикл команд составляет 65536. Команда не воздействует на флаги процессора. Пример ;В полях данных: command db 80 dup (0) ;В программном сегменте: Пример mov ЕСХ, 1000000 /Предельное число шагов ;Тело цикла хххх: lea SI,command eld mov CX,80 slash: lodsb cmp AL, '/' loopne slash /Копирование в поле command строки, ; содержимое которой следует анализировать ; Настроим DS:SI /Обработка вперед /Обрабатывать не более 80 ; байтов /Загрузим в AL очередной символ ; Ищем знак '/' ;во всей строке ;DS:SI -> первый символ За знаком '/'
При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того чтобы в 16-разрядном приложении процессор при выполнении команд loopne/loopnz использовал не 16- разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командами loopne/loopnz необходимо указать префикс замены размера адреса 67h. Пример mov ЕСХ,1000000 /Предельное число шагов хххх: . . . ;Тело цикла db 67h loopne хххх 386Р+ LSL Загрузка границы сегмента Команда lsl загружает в первый операнд границу сегмента из дескриптора сегмента , заданного селектором во втором операнде. В качестве первого операнда команды lsl можно использовать 16- или 32- разрядный регистр общего назначения; в качестве второго - 16- или 32- разрядный регистр общего назначения или 16- или 32-битовое поле памяти. 386Р+ LTR Загрузка регистра Задачи TR Команда ltr загружает регистр задачи TR селектором сегмента состояния задачи TSS из второго операнда, в качестве которого можно использовать 16- или 32-разрядный регистр общего назначения или 16- или 32-битовое поле памяти. Команда используется в защищенном режиме, если программный комплекс выполнен в виде нескольких самостоятельных задач, и переключения между ними осуществляются с использованием включенных в процессор аппаратных средств поддержки многозадачности. MOV Пересылка данных Команда mov замещает первый операнд (приемник) вторым (источником). При этом исходное значение первого операнда теряется. Второй операнд не изменяется. В зависимости от описания операндов, пересылается слово или байт. Если операнды описаны по-разному или режим адресации не позволяет однозначно определить размер операнда, для уточнения размера передаваемых данных в команду следует включить один из атрибутных операторов byte ptr или word ptr. Команда не воздействует на флаги процессора. В зависимости от используемых режимов адресации, команда mov может осуществлять пересылки следующих видов: • из регистра общего назначения в регистр общего назначения; • из регистра общего назначения в ячейку памяти; • из регистра общего назначения в сегментные регистры DS, ES и SS; • из ячейки памяти в регистр общего назначения; • из ячейки памяти в сегментный регистр; • из сегментного регистра в регистр общего назначения; • из сегментного регистра в ячейку памяти; • непосредственный операнд в регистр общего назначения; • непосредственный операнд в ячейку памяти. Запрещены пересылки из ячейки памяти в ячейку памяти (для этого предусмотрена команда movs), а также загрузка сегментного регистра непосредственным значением, которое, таким образом, приходится загружать через регистр общего назначения: mov AX,seg mem ;Сегментный адрес ячейки mem mov DS,AX ;3агрузка его в регистр DS
Нельзя также непосредственно переслать содержимое одного сегментного регистра в другой. Такого рода операции удобно выполнять с использованием стека: push DS pop ES DS копируется в ES Примеры ;B полях данных: memb db 5,6 memd dd 0 ; ;B программном сегменте: mov DX,AX ; mov AL,memb ; mov AX,0B800h /Двухсловная ячейка ;Из регистра в регистр ;Из памяти в регистр ; Непосредственное значение в /регистр ;Из регистра в сегментный mov ES,AX /регистр mov word ptr memd+2,ES ;Из сегментного /регистра в память mov word ptr memd,2000 /Непосредственное ;значение в память mov BX,word ptr memb /Слово из памяти в /регистр mov ES,word ptr memd+2 /Слово из памяти в /сегментный регистр Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример 1 mov ЕАХ,ESI Пример 2 / В полях данных mem dd 0 /В программном сегменте mov mem,ЕВР 386Р+ MOV Пересылка в/из специальных регистров Этот вариант команды mov (с той же мнемоникой, но другими кодами операций) используется в защищенном режиме и предназначен для обмена данными со специальными регистрами процессора: управляющими CR0...CR3, тестирования TR6 и TR7, а также регистрами отладки DR0...DR7. Один из операндов команды mov должен быть 32-разрядным регистром общего назначения, другим - один из специальных регистров процессора. MOVS Пересылка данных из строки в строку MOVSB Пересылка байта данных из строки в строку MOVSW Пересылка слова данных из строки в строку mov DI,word ptr memd /регистр (число 0605) /Слово из памяти в
Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым) . Они пересылают по одному элементу строки, который может быть байтом или словом. Первый операнд (приемник) адресуется через ES:DI, второй (источник) - через DS:SI. Операцию пересылки можно условно изобразить следующим образом: (DS:SI) -> (ES:DI) После каждой операции пересылки регистры SI и DI получают положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера пересылаемых элементов. Вариант команды movs имеет формат: movs строка_1, строка_2 В этом случае байты или слова из строки строка_2 пересылаются на место строки строка_1. Размер пересылаемых элементов определяется описанием строк (с помощью директив db или dw). Это не избавляет от необходимости инициализировать регистры ES:DI и DS:SI адресами строк строка _1 и строка_2. В этом формате возможна замена сегмента второй строки (источника): movs строка_1, Е S:строка_2 Рассматриваемые команды могут предваряться префиксом повторения rep (повторять СХ раз). После выполнения рассматриваемых команд регистры SI и DI указывают на ячейки памяти, находящиеся за теми (если DF=0) или перед теми (если DF=1) элементами строк, на которых закончились операции пересылки. Если флаг DF сброшен, то пары регистров DS:SI и ES:DI следует инициализировать начальными адресами строк-операндов; строка-источник будет пересылаться от се начала, в порядке возрастания номеров ее байтов. Если флаг DF установлен, то пары регистров DS:SI и ES:DI следует инициализировать конечными адресами строк- операндов; строка-источник будет пересылаться от ее конца, в порядке уменьшения номеров ее байтов. Команды не воздействует на флаги процессора. Пример 1 ;В полях данных основного сегмента данных, адресуемого через DS: txt db 'Урок 1' ;Пересылаемая строка txt len equ $-txt ;Ee длина в полях данных ; дополнительного сегмента данных, адресуемого через ES string db 80 dup (' ') ;В программном сегменте: lea SI,txt lea DI,string+10 eld mov CX,txt_len rep movsb DS:SI -> txt ES:DI -> string+10 Движение no строке вперед Столько байтов переслать Пересылка Пример 2 ;В полях данных сегмента данных, адресуемого через DS: txt db 'A',84h, 'B',84h, 'A',84h, 'P', db 84h,'И',84h,'Я',84h,'!',84h
txt_len=$-txt mov AX,0B800h mov ES,AX /Выведем на экран текст mov DI,1672 lea SI,txt eld mov CX,txt_len/2 rep movsw В программном сегменте: Сегментный адрес видеобуфера Инициализируем ES Смещение к середине экрана DS:SI -> txt Движение по строке вперед Столько слов переслать Пересылка в середину экрана красной мерцающей (атрибут ;84h) надписи 'АВАРИЯ!' Пример 3 ;В полях данных сегмента datal dw 10000 dup(0) data2 dw 5000 dup(0) ;B программном сегменте push DS pop ES mov SI,offset datal add SI,5000 mov DI,offset data2 mov CX,2500 eld rep movsw данных, адресуемого через DS: /Массив произвольных данных ;Maссив-приемник ;Настроим ;ES на тот же сегмент данных ;SI -> datal /Сместим SI к середине /массива ;DI -> data2 /Размер половины массива (в /словах) /Движение вперед /Перешлем вторую половину /массива datal на место data2 Пример 4 /В полях данных сегмента, file db 'MYFILE.01.DAT1', fname db 128 dup(0) /В программном сегменте push DS pop ES mov SI,offset file mov SI,128 eld null: lodsb cmp AL, 0 loopne null dec SI mov BX,128 sub BX,CX mov CX,BX dec BX адресуемого через DS 0 /Строка-источник /Строка-приемник Теперь ES=DS DS:SI -> strl Максимальная длина имени файла Движение по строке вперед Загрузим в AL очередной символ Ищем 0 в конце имени файла DS:SI -> Первый символ За концом имени файла (за завершающим нулем) Движение по строке назад SI -> байт с 0 std Из начального значения СХ вычтем то, что в СХ осталось СХ=число символов в имени (с 0) /Смещение к 0 от начала имени файла
lea DI,fname[BX] rep movsb ; Смещение завершающего О /Перешлем все имя (от конца к началу) 386+ MOVSD Пересылка двойного слова из строки в строку Команда аналогична командам МП 86 movsb и movsw, но позволяет скопировать двойное слово из строки, адресуемой через регистры DS:ESI, в строку, адресуемую через регистры ES:EDI. Пример 1 ;В полях данных сегмента, адресуемого через DS strl db '01234567890ABCDEF' /Строка-источник str2 db 16 dup(O) /Строка-приемник ;В программном сегменте 386+ MOVSX Пересылка с расширением знака Команда пересылает байт в слово или двойное слово, а также слово в двойное слово с расширением знака. В качестве первого операнда (приемника) может использоваться 16- или 32-разрядный регистр общего назначения, в качестве второго - 8- или 16-разрядный регистр общего назначения или ячейка памяти такого же размера. Недопустима пересылка из памяти в память, в или из сегментного регистра, а также непосредственного значения. Фактически команда movsx увеличивает размер как положительного, так и отрицательного числа, ни изменяя ни его значения, ни знака. push DS pop ES mov SI,offset strl mov DI,offset str2 eld mov CX,4 rep movsd Теперь ES=DS DS:SI -> strl ES:DI -> str2 Движение по строке вперед Коэффициент повторения Копирование по 4*4 байт Пример 1 mov CL,-5 movsx AX,CL ;CL= ;AX= :FBh :FFFBh Пример 2 mov CL,+5 movsx AX,CL ;CL= ;AX= 05h O005h Пример 3 mov BL,-128 movsx ECX,BL ;BL=80h ;ECX=FFFFFF80h Пример 4 ; В полях данных mem dw -3 ;mem= ;B программном сегменте movsx EBX,mem ;EBX= ;mem=FFFDh ; EBX=FFFFFFFDh 386+ MOVZX Пересылка с расширением нуля Команда пересылает байт в слово или двойное слово, а также слово в двойное
слово с заполнением старших разрядов нулями. В качестве первого операнда (приемника) может использоваться 16- или 32-разрядный регистр общего назначения, в качестве второго - 8- или 16-разрядный регистр общего назначения или ячейка памяти такого же размера. Недопустима пересылка из памяти в память, в или из сегментного регистра, а также непосредственного значения. Фактически команда movzx увеличивает размер числа, Пример 1 считая его числом без знака. mov CL,5 movsx АХ,CL ;CL=05h ;AX=0005h Пример 2 mov CL,-5 movsx AX,CL ;CL=FBh ;AX=OOFBh Пример 3 mov BL,80h movsx ECX,BL ;BL=80h ;ECX=00000080h Пример 4 ;B полях данных mem dw OFFFFh ;mem=FFFFh ;B программном сегменте movsx ЕВХ,mem ;EBX=OOOOFFFFh MUL Умножение целых чисел без знака Команда mul выполняет умножение целого числа без знака, находящегося в регистре AL (в случае умножения на байт) или АХ (в случае умножения на слово), на операнд-источник (целое число без знака). Размер произведения в два раза больше размера сомножителей. Для однобайтовых операций один из сомножителей помещается в регистр AL; после выполнения операции произведение записывается в регистр АХ. Для двухбайтовых операций один из сомножителей помещается в регистр АХ; после выполнения операции произведение записывается в регистры DX:AX (в DX - старшая часть, в АХ - младшая). Предыдущее содержимое регистра DX затирается. Если содержимое регистра АН после однобайтового умножения или содержимое регистра DX после двухбайтового умножения не равны 0, флаги CF и OF устанавливаются в 1. В противном случае оба флага сбрасываются в 0. В качестве операнда-сомножителя команды mul можно указывать регистр (кроме сегментного) или ячейку памяти; не допускается умножение на непосредственное Значение. Команда воздействует на флаги OF и CF. Пример 1 mov AL,5 ;Первый сомножитель mov BL,3 ;Второй сомножитель mul BL ;AX=OOOFh, произведение Пример 2 mov АХ,256 mov ВХ,256 ;Первый сомножитель ;Второй сомножитель
mul BX ;DX=0001h, AX=0000h ; (DX:AX=65536, произведение) Пример 3 ;B полях данных coef db 100 datal db 126 mov AL,datal mul coef ;Первый сомножитель /Второй сомножитель ;AL=7Eh=126 ;AX=3138h=12600,произведение Пример 4 ;В полях данных coef dw 5000 datal dw 1200 mov AX,datal mul coef ;Первый сомножитель /Второй сомножитель ;AX=4B0h=1200 ;DX=005Bh, AX=8D80h ;Произведение=ВХ:AX= ;5B8D80h=6000000 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. При этом, если указанный операнд представляет собой 32-байтовую величину, то результат размещается в регистрах EDX:EAX. Пример 1 mov ЕАХ,20Oh /Первый сомножитель mov ESI,10000001h /Второй сомножитель mul ESI /Произведение в EDX:ЕАХ ;EDX=00000020h,EAX=00000200h Пример 2 ; В полях данных nmbs db 15,22,36,78,84,98,100 ;В программном сегменте mov EDX,offset nmbs movzx EDX,DX mov ECX,5 mov AL,10 mul byte ptr [EDX] [ECX] /Относительный адрес /массива /Смещение в массиве /Множитель /Умножаем элемент /массива с индексом 5 (98) /на AL (10) Результат в /АХ=980 NEG Изменение Знака, дополнение до 2 Команда neg выполняет вычитание целочисленного операнда со знаком из нуля, превращая положительное число в отрицательное и наоборот. Исходный операнд затирается. В качестве операнда можно указывать регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Пример 1
mov AX,0001 neg AX ;AX=FFFFh=-l Пример 2 mov BX,-2 neg BX ;BX=FFFEh=-2 ;BX=0002h Пример 3 ;B полях данных nmb dw 8001h ;Если число со знаком, ;то -32767 ;В программном сегменте neg nmb ;nmb= ; nmb=7FFFh=+32767 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример mov ЕСХ, 5 NOP Холостая команда По команде пор процессор не выполняет никаких действий, кроме увеличения на 1 содержимого указателя команд IP (поскольку команда пор занимает 1 байт). Команда иногда используется в отладочных целях, чтобы "забить" какие-то ненужные команды, не изменяя длину загрузочного модуля или, наоборот, оставить место в загрузочном модуле для последующей вставки команд. В ряде случаев команды пор включаются в текст объектного модуля транслятором. Команда не имеет ни параметров, ни операндов и не воздействует на флаги процессора. NOT Инверсия, дополнение до 1, логическое отрицание Команда not выполняет инверсию битов указанного операнда, заменяя 0 на 1 и наоборот. В качестве операнда можно указывать регистр (кроме сегментного) или ячейку памяти размером, как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда не воздействует на флаги процессора. Правила побитовой инверсии: Операнд-бит 0 1 Бит результата 1 0 Пример 1 mov АХ,OFFFFh neg ЕСХ ; Е CX=FFFFFFFBh=-5 not АХ ;AX=0000h Пример 2 mov SI,5551h not SI ; SI=AAAEh Допустимо использование 32-битовых операндов и дополнительных режимов адре-
сации 32-разрядных процессоров. Пример mov EAX,0C008FF00h not ЕАХ ;EAX=3FFC00FFh OR Логическое ВКЛЮЧАЮЩЕЕ ИЛИ Команда or выполняет операцию логического (побитового) сложения двух операндов . Результат замещает первый операнд (приемник); второй операнд (источник) не изменяется. В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного) , ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды команды or могут быть байтами или словами. Команда воздействует на флаги OF, SF, ZF, PF и CF, при этом флаги CF и OF всегда сбрасываются в 0. Правила побитового сложения: Первый операнд-бит 0 10 1 Второй операнд-бит 0 0 11 Бит результата 0 111 Пример 1 mov AX,000Fh mov BX,00F0h or AX,BX ;AX=00FFh, BX=00F0h Пример 2 mov AX,000Fh mov BX,00F7h or AX,BX ;AX=00FFh, BX=00F7h Пример 3 mov AX,000Fh or AX,8001h ;AX=800Fh Пример 4 ; В полях данных mask db 80h ;B программном сегменте mov CH,17h or CH,mask ;CH=97h Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример ;В полях данных mem dd 80000000b ; В программном сегменте or mem,0C0h ;mem=800000C0h
OUT Вывод в порт Команда out выводит в порт, указываемый первым операндом, байт или слово соответственно из регистра AL или АХ. Адрес порта помещается в регистр DX. Если адрес порта не превышает 255, он может быть указан непосредственным значением. Указание регистра-источника (AL или АХ) обязательно, хотя с другими регистрами команда out не работает, и их указывать нельзя. Команда не воздействует на флаги процессора. Пример 1 mov AL,20h out 20h,AL /Команда конца прерывания (EOI) /Вывод команды EOI в порт ;20h контроллера прерываний Пример 2 mov DX,3CEh mov AL,5 out DX,AL /Адрес порта ;Данное /Вывод байта из AL в порт ЗСЕп Допустимо использование в качестве операнда-источника расширенного регистра ЕАХ (если адресуемое устройство позволяет записать в его порт двойное слово). Пример mov ЕАХ,lA008DD3h /Пересылаемое данное mov DX,345h /Адрес порта out DX,EAX /Вывод в порт двойного слова OUTS Вывод строки в порт OUTSB Вывод байта в порт OUTSW Вывод слова в порт OUTSD Вывод двойного слова в порт Команды предназначены для вывода данных в порт непосредственно из памяти. Адрес порта указывается, как и для команды out, в регистре DX, при этом задание адреса порта непосредственным значением не допускается. Данные извлекаются из памяти по адресу, находящемуся в паре регистров DS:ESI/SI. Замена сегмента не допускается. Команда outsb передает в порт 1 байт, команда outsw - 1 слово, команда outsd - 1 двойное слово, а команда outs может быть использована для передачи байтов, слов и двойных слов. В последнем случае размер загружаемого данного определяется описанием строки (с помощью директив db, dw или dd) . После передачи данных регистр ESI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1, 2 или 4 в зависимости от размера передаваемых данных. Вариант команды outs имеет формат outs DX, строка (что не избавляет от необходимости инициализировать регистры DS:ESI адресом строки). Если устройство, адресуемое через порт, может принимать последовательность данных, то команды outs можно предварить префиксом повторения rep. В этом случае в порт пересылается СХ элементов данных заданного размера. Команды outs не воздействуют на флаги процессора. Пример 1
; В полях данных mem dw OFFh ;В программном сегменте mov SI, offset mem mov DX,303h outsb ;ES:SI mem /Адрес порта /Вывод в порт 8-битового ; данного Пример 2 ; В полях данных string dw OFFh,1,5,OBh, О ; В программном сегменте mov SI, offset mem ;E mov DX,340h ;A mov CX, 5 ;4 eld ;Д rep outsb ;П ;ES:DI -> mem /Адрес порта ; Число данных /Движение по данным вперед /Последовательный вывод в ;порт пяти 8-битовых данных POP Извлечение слова из стека Команда pop выталкивает 16-битовое данное из стека, т.е. пересылает слово из вершины стека (на которую указывает регистр SP) по адресу операнда- приемника . После этого содержимое SP увеличивается на 2, и SP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Выталкивать из стека можно только целые слова (не байты). Программа должна строго следить за тем, чтобы каждой команде проталкивания в стек push отвечала обратная команда выталкивания из стека pop. Если стек используется для временного хранения некоторых данных, то извлекать эти данные из стека следует в порядке, обратном их сохранению. В качестве операнда-приемника можно использовать любой 16-разрядный регистр (кроме CS) или ячейку памяти. Команда не воздействует на флаги процессора. Пара команд push - pop часто используется для пересылки данного из регистра в регистр (особенно, в сегментный) через стек. Пример 1 push АХ push ВХ push DS pop DS pop BX pop AX ; Временное сохранение ;в стеке ;трех операндов /Восстановление из стека ;трех операндов ; в обратном порядке Пример 2 push CS pop DS /Пересылка CS через стек /Теперь DS=CS Пример 3 ;В полях данных mem dw О ; В программном сегменте
pop mem /Восстановление из стека в память Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример pop ЕАХ /Извлечение из стека двойного слова 386+ РОРА Восстановление из стека всех регистров Команда рора восстанавливает из стека содержимое всех регистров, предварительно сохраненных в стеке командой pusha. Заполнение из стека регистров осуществляется в следующем порядке: DI, SI, BP, SP, ВХ, DX, СХ, АХ. Исходное содержимое указателя стека SP, сохраненное в стеке командой pusha, командой рора из стека извлекается, но отбрасывается. Команда не имеет параметров. Пример рора 386+ POPAD Восстановление из стека всех регистров в 32-разрядном режиме Команда popad восстанавливает из стека содержимое всех расширенных регистров, предварительно сохраненных в стеке командой pushad. Заполнение из стека регистров осуществляется в следующем порядке: EDI, ESI, ЕВР, ESP, ЕВХ, EDX, ЕСХ, ЕАХ. Исходное содержимое указателя стека ESP, сохраненное в стеке командой pusha, командой рора из стека извлекается, но отбрасывается. Команда не имеет параметров. Пример popad POPF Восстановление из стека регистра флагов Команда popf пересылает верхнее слово стека (на которое указывает регистр SP) в регистр флагов FLAGS. После этого содержимое SP увеличивается на 2, и SP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Команда popf не имеет параметров/ она воздействует на все флаги процессора, кроме флагов VM и RF. Пример 1 popf /Регистр флагов загружается из стека Пример 2 pushf /Отправим флаги в стек mov BP,SP /Настроим BP на флаги в стеке or [BP],100h /Установим бит lOOh (флаг TF) popf /Вытолкнем в регистр флагов. /Теперь в регистре флагов TF=1 386+ POPFD Восстановление из стека расширенного регистра флагов Команда popfd пересылает верхнее слово стека (на которое указывает регистр ESP) в расширенный регистр флагов EFLAGS. После этого содержимое ESP увеличивается на 4, и ESP указывает на предыдущее слово стека, которое теперь является его новой вершиной. Команда popfd не имеет параметров/ она воздействует на все флаги процессора. Пример
popfd /Регистр EFLGS загружается из стека PUSH Занесение операнда в стек Команда push уменьшает на 2 содержимое указателя стека SP и заносит на эту новую вершину двухбайтовый операнд-источник (проталкивает в стек новое данное) . Проталкивать в стек можно только целые слова (не байты). Программа должна строго следить за тем, чтобы каждой команде проталкивания в стек push отвечала обратная команда выталкивания из стека pop. Если стек используется для временного хранения некоторых данных, то извлекать эти данные из стека следует в порядке, обратном их сохранению. В качестве операнда-источника может использоваться любой 16-разрядный регистр (включая сегментный) или ячейка памяти. Не допускается занесение в стек непосредственного значения, хотя некоторые трансляторы преобразуют команду вида push 1234h в неэффективную последовательность операций со стеком, результатом которой будет проталкивание указанного операнда в стек. Команда push не воздействует на флаги процессора. Пара команд push - pop часто используется для пересылки данного из регистра в регистр (особенно, в сегментный) через стек. Пример 1 push ES:mem push DS push BP ;Сохранение содержимого /слова памяти mem из ;дополнительного сегмента ;а также регистров DS и BP pop BP pop DS pop E S:mem /Восстановление из стека ;трех операндов ;в обратном порядке Пример 2 push DS pop ES /Пересылка DS через стек /Теперь ES=DS Допустима засылка в стек 32-битовых операндов (регистров и ячеек памяти), а также занесение в стек 8-, 16- и 32-битовых непосредственных значений. Каждое 8-битовое значение занимает в стеке целое слово. Операнды любого допустимого размера могут заноситься в стек вперемежку, если это не вступает в противоречие с операциями по извлечению этих данных из стека. Пример 1 push АХ ; Сохранение в стеке регистра АХ push 32h /Сохранение в стеке /константы 32h (она займет в /стеке 1 слово) push ЕАХ /Сохранение в стеке регистра /ЕАХ (два слова стека) 386+ PUSHA Сохранение в стеке всех регистров
Команда pusha сохраняет в стеке содержимое всех регистров в следующем порядке: АХ, СХ, DX, ВХ, значение указателя стека SP перед выполнением данной команды, далее BP, SI и DI. Команда не имеет параметров и не воздействует на флаги процессора. Пример pusha 386+ PUSHAD Сохранение в стеке всех регистров в 32-разрядном режиме Команда pushad сохраняет в стеке содержимое всех регистров в следующем порядке: ЕАХ, ЕСХ, EDX, ЕВХ, значение указателя стека ESP перед выполнением данной команды, далее ЕВР, ESI и EDI. Команда не имеет параметров и не воздействует на флаги процессора. Пример pushad 386+ PUSHFD Занесение в стек содержимого расширенного регистра флагов Команда pushfd уменьшает на 4 содержимое указателя стека ESP и заносит на эту новую вершину содержимое расширенного регистра флагов EFALGS. При этом сохраняются все флаги процессора. Команда pushfd не имеет параметров и не воздействует на флаги процессора. Пример pushfd /Содержимое регистра флагов /сохраняется в стеке RCL Циклический сдвиг влево через бит переноса Команда rcl осуществляет сдвиг влево всех битов операнда. Если команда записана в формате rcl операнд,1 сдвиг осуществляется на 1 бит. В младший бит операнда заносится значение флага CF; старший бит операнда загружается в CF. Если команда записана в формате rcl операнд,CL сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда поступают сначала в CF, а оттуда - в младшие биты операнда (рис. П4). —■ CF —■ Операнд —■ Рис. Действие команды rcl. В качестве операнда команды rcl можно указывать любой регистр (кроме сегментного) или ячейку памяти размером, как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF и CF.
Пример 1 clc mov AX, 7 rcl AX,1 /Сбросим CF ;AX=000Eh=14, CF=0 Пример 2 stc mov DL,7 rcl DL,1 /Установим CF ;DL=0Fh=15, CF=0 Пример 3 clc mov BX,OFFFFh rcl BX,1 /Сбросим CF ;BX=FFFEh, CF=1 Пример 4 clc /Сбросим CF mov DH,3 mov CL,4 rcl DH,CL ; Счетчик сдвигов ;DH=30h=48, CF=0 Допустим сдвиг 32-битовых операндов. Допустимо указание числа битов сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит. Пример mov EAX,0C0000003h clc /Сбросим CF rcl ЕАХ,2 ;EAX=OOOOOOODh, CF=1 RCR Циклический сдвиг вправо через бит переноса Команда гсг осуществляет сдвиг вправо всех битов операнда. Если команда записана в формате гсг операнд,1 сдвиг осуществляется на 1 бит. В старший бит операнда заносится значение флага CF; младший бит операнда загружается в CF. Если команда записана в формате гсг операнд,CL сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда поступают сначала в CF, а оттуда - в старшие биты операнда (Рис. П5). В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF и CF.
Операнд CF Рис. П.5. Действие команды гсг. Пример 1 clc mov АХ, 2 гсг АХ,1 Пример 2 stc mov DL,8 rcr DL,1 Пример 3 clc mov BX,OFh rcr BX,1 Пример 4 clc mov DH,80h mov CL,5 rcr DH,CL /Сбросим флаг CF ;AX=1, CF=0 /Установим флаг CF ;DL=84h, CF=0 /Сбросим флаг CF ;BX=7, CF=1 /Сбросим флаг CF ;Счетчик сдвигов ;DH=4, CF=0 Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит. Пример mov ESI,0FFFF0001h clc /Сбросим флаг CF rcr ESI,8 ;ESI=02FFFF00h, CF=0 Pentium+P RDMSR Чтение особого регистра модели Команда читает содержимое внутреннего регистра, специфического для конкретной модели процессора. REP Повторение REPE Повторение пока равно REPZ Повторение пока нуль REPNE Повторение пока равно REPNZ Повторение пока не равно Префиксы повторения, позволяющие организовывать циклическое выполнение команд обработки строк cmps, movs и seas, и при этом проверять наличие указанного в префиксе условия.
Префикс rep, будучи установлен перед строковой командой movs или stos, заставляет ее выполняться СХ раз. Префикс repe (и полностью эквивалентный ему префикс repz), будучи установлен перед строковой командой cmps или seas, заставляет ее выполняться до тех пор, пока результат выполнения равен 0 и, соответственно, ZF=1, но не более СХ раз. Префикс герпе (и полностью эквивалентный ему префикс repnz), будучи установлен перед строковой командой cmps или seas, заставляет ее выполняться до тех пор, пока результат выполнения не равен 0 и, соответственно, ZF=0, но не более СХ раз. Примеры использования префиксов повторения см. в описаниях строковых команд cmps, movs и seas. RET Возврат из процедуры RETN Возврат из ближней процедуры RETF Возврат из дальней процедуры Команда ret извлекает из стека адрес возврата и передает управление назад в программу, первоначально вызвавшую процедуру. Если командой ret завершается ближняя процедура, объявленная с атрибутом near, или используется модификация команды retn, со стека снимается одно слово - относительный адрес точки возврата . Передача управления в этом случае осуществляется в пределах одного программного сегмента. Если командой ret завершается дальняя процедура, объявленная с атрибутом far, или используется модификация команды retf, со стека снимаются два слова: смещение и сегментный адрес точки возврата. В этом случае передача управления может быть межсегментной. В команду ret может быть включен необязательный операнд (кратный 2), который указывает, на сколько байтов дополнительно смещается указатель стека после возврата в вызывающую программу. Прибавляя эту константу к новому значению SP, команда ret обходит аргументы, помещенные в стек вызывающей программой (для передачи процедуре) перед выполнением команды call. Обе разновидности команды не воздействуют на флаги процессора. Пример 1 call subr subr proc near ; Вызов подпрограммы ; Тело процедуры-подпрограммы ret subr endp Пример 2 push SI push AX call subr ; Параметр 1, передаваемый в ; подпрограмму ; Параметр 2, передаваемый в ; подпрограмму ; Вызов подпрограммы subr proc near /Извлечение из стека параметров ;(без изменения содержимого SP) ret 4 /Возврат в вызывающую /программу и снятие со стека
subr endp ;двух слов с параметрами ROL Циклический сдвиг влево Команда rol осуществляет сдвиг влево всех битов операнда. Если команда записана в формате rol операнд,! сдвиг осуществляется на 1 бит. Старший бит операнда загружается в его младший разряд и одновременно заносится в флаг CF (рис. П6). Если команда записана в формате rol операнд,CL сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда перемещаются в его младшие разряды. Последний перенесенный бит одновременно заносится в флаг CF. —■ CF Операнд —■ Рис.Пб Действие команды rol. В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером, как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF и CF. Пример 1 mov АХ,1 rol АХ,1 ;AX=0002h, CF=0 Пример 2 mov DL,80h rol DL,1 ;DL=01h, CF=1 Пример 3 mov DX,3000h mov CL,4 rol DX,CL ;DX=0003h, CF=1 Пример 4 mov DX,2000h mov CL,4 rol DX,CL ;DX=0002h, CF=0 Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига
как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит. Пример mov ЕАХ,012345678b rol ЕАХ,16 ;ЕАХ=56781234b ROR Циклический сдвиг вправо Команда гог осуществляет циклический сдвиг вправо всех битов операнда. Если команда записана в формате гог операнд,1 сдвиг осуществляется на 1 бит. Младший бит операнда записывается в его старший разряд и одновременно поступает в флаг CF (рис.П7). Если команда записана в формате гог операнд,CL сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов младшие биты операнда перемещаются в его старшие разряды. Последний перенесенный бит одновременно заносится в флаг CF. Операнд CF Рис.П7 Действие команды гог. В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером, как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги OF и CF. Пример 1 mov АХ,2 гог АХ,1 ;AX=0001h, CF=0 Пример 2 mov DL,81h ror DL,1 ;DL=C0h, CF=1 Пример 3 mov BX,000Eh mov CL,4 ror BX,CL ;BX=E000h, CF=1 Пример 4 mov BX,0009h
mov CL,4 ror BX,CL ;BX=9000h, CF=1 Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит. Пример mov EDI,90000001b ror EDI,12 ;EDI=00190000h SAHF Запись содержимого регистра АН в регистр флагов Команда sahf копирует разряды 7, 6, 4, 2 и 0 регистра АН в регистр флагов процессора, устанавливая тем самым значения флагов SF, ZF, AF, PF и CF соответственно . Команда не имеет операндов. Команда sahf (совместно с командой lahf) дает возможность читать и изменять Значения флагов процессора, в том числе флагов SF, ZF, AF и PF, которые нельзя изменить непосредственно. Однако следует иметь в виду, что команда sahf заполняет только младший байт регистра флагов, помощью, например, состояние флага OF. Пример 1 Поэтому нельзя изменить с ее lahf /Регистр АН отображает /состояние регистра флагов or AH,80h /Установка бита 7 = SF sahf /Загрузка АН в регистр /флагов, где теперь будет SF = 1 Пример 2 lahf and АН,OBFh sahf /Регистр АН отображает /состояние регистра флагов /Сброс бита 6 = ZF /Загрузка АН в регистр /флагов, где теперь будет ZF = 0 Пример 3 mov АН, 5 sahf /Устанавливаются флаги PF и /CF и сбрасывается флаги SF, /ZF и AF SAL Арифметический сдвиг влево Команда sal осуществляет сдвиг влево всех битов операнда. Старший бит операнда поступает в флаг CF. Если команда записана в формате sal операнд,! сдвиг осуществляется на 1 бит. В младший бит операнда загружается 0. Если команда записана в формате sal операнд,CL
сдвиг осуществляется на число битов, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда, пройдя через флаг CF, теряются, а младшие заполняются нулями (рис. П8.). CF Операнд Рис.П8 Действие команды sal. В качестве операнда команды sal можно указывать любой регистр (кроме сегментного) или ячейку памяти размером, как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Каждый сдвиг влево эквивалентен умножению знакового числа на 2, поэтому команду sal удобно использовать для возведения операнда в степень 2. Команда воздействует на флаги OF, SF, ZF, PF и CF. Пример 1 mov AL,7 sal AL,1 ;AL= 0Eh=7*2, CF=0 Пример 2 mov AX,lFh mov CL,8 sal AX,CL ;AX=lF00h=lFFh*256, CF=0 Пример 3 mov SI,-1 mov CL,4 sal SI,CL ;SI=FFFFh ;SI=FFF0h=-l*16=-16, CF=1 Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит. Пример mov EBX,0000C835h sal ЕВХ,5 ;EBX=001906A0h SAR Арифметический сдвиг вправо Команда sar осуществляет сдвиг вправо всех битов операнда. Младший бит операнда поступает в флаг CF. Если команда записана в формате sar операнд,1 сдвиг осуществляется на 1 бит. Старший бит операнда сохраняет свое значение. Если команда записана в формате sar операнд,CL сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при
этом в процессе последовательных сдвигов младшие биты операнда, пройдя через флаг CF, теряются, а старший бит расширяется вправо (рис. П9). Операнд CF Рис.П9 Действие команды sar. В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Каждый сдвиг вправо эквивалентен делению знакового числа на 2, поэтому команду sar удобно использовать для деления операнда на целые степени 2. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Пример 1 mov AL,7 sar AL,1 Пример 2 mov AX,lFFOh mov CL,4 sar AX,CL Пример 3 mov BX,-8 mov CL,2 sar BX,CL ;AL=3=7/2, CF=1. Остаток /потерян ;AX=01FFh=lFF0h/16, CF=0 ;BX=FFF8h ;BX=FFFEh=-2=-8/4, CF=0 Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит. Пример mov EAX,0F0001234h sar ЕАХ,8 ;EAX=FFF00012h SBB Целочисленное вычитание с займом Команда sbb вычитает второй операнд (источник) из первого (приемника). Результат замещает первый операнд, предыдущее значение которого теряется. Если установлен флаг CF, из результата вычитается еще 1. Таким образом, если команду вычитания записать в общем виде sbb операнд 1, операнд_2 то ее действие можно условно изобразить следующим образом: операнд 1 - операнд 2 - CF -> операнд 1
В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда sbb обычно используется для вычитания 32-разрядных чисел. Команда воздействует на флаги OF, SF, ZF, PF и CF. Пример 1 mov AX, 7 6A5h sbb AX,76A3h ;AX=1, если CF был = 1 ;AX=2, если CF был = 0 Пример 2 ; В полях данных: numlow dw OOOAh numhigh dw OOOlh /Младшая часть вычитаемого /Старшая часть вычитаемого /Число 1000Ah=65546 ;В программном сегменте: mov АХ, О mov DX,0002 sub АХ, numlow sbb DX,numhigh /Младшая часть уменьшаемого /Старшая часть уменьшаемого /Число 20000h=131072 /Вычитание младших частей. /AX=FFF6h, CF=1 /Вычитание старших частей с /займом. /DX:AX=0000:FFF6h=65526 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример /В полях данных: nlow dd OCh /Младшая часть вычитаемого nhi dd 4000000Oh /Старшая часть вычитаемого /Число 400000000000000Ch /В программном сегменте: mov EAX,0Bh /Младшая часть уменьшаемого mov ЕВХ,60000000h /Старшая часть уменьшаемого /Число 600000000000000Bh sub ЕАХ,nlow /Вычитание младших частей. /EAX=FFFFFFFFh, CF=1 sbb ЕВХ,nhi /Вычитание старших частей с /Займом. EBX=lFFFFFFFh /Разность IFFFFFFFFFFFFFFFh SCAS Сканирование строки с целью сравнения SCASB Сканирование строки байтов с целью сравнения SCASW Сканирование строки слов с целью сравнения Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым) . Они сравнивают содержимое регистра AL (в случае операций над байтами) или АХ (в случае операций над словами) с содержимым ячейки памяти по адресу, находящемуся в паре
регистров ES:DI. Операция сравнения осуществляется путем вычитания содержимого ячейки памяти из содержимого AL или АХ. Результат операции воздействует на регистр флагов, но не изменяет ни один из операндов. Таким образом, операцию сравнения можно условно изобразить следующим образом: АХ или AL - (ES:DI) -> флаги процессора После каждой операции сравнения регистр DI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2, в зависимости от размера сравниваемых элементов. Вариант команды SCAS имеет формат seas строка (что не избавляет от необходимости инициализировать регистры ES:DI адресом строки строка). Замена сегмента строки невозможна. Рассматриваемые команды могут предваряться префиксами повторения repe/repz (повторять, пока элементы равны, т.е. до первого неравенства) и repne/repiiz (повторять, пока элементы не равны, т.е. до первого равенства). В любом случае выполняется не более СХ операций над последовательными элементами. После выполнения рассматриваемых команд регистр DI указывает на ячейку памяти, находящуюся за тем (если DF=0) или перед тем (если DF=1) элементом строки, на котором закончились операции сравнения. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Пример 1 ;B полях данных сегмента данных, адресуемого через ES: string db ' /Т:4' ;В программном сегменте: eld /Поиск вперед по строке lea DI,string ;ES:DI -> string mov AL, ' ' /Символ, который мы пропускаем mov СХ,8 /Длина строки repe scasb /Поиск первого символа, ;отличного от пробела je blank /Символ не найден - одни пробелы gotit: /Продолжение, если символ найден В примере 1 в строке имеются символы, отличные от искомого (кода пробела), и команда je выполнена не будет. После завершения сканирования управление будет передано на метку gotit. Содержимое регистров в этой точке: СХ=3 (так как не выполнено сканирование 3 символов), DI = <смещение string> + 5 (выполнено сканирование 5 символов). ES:DI указывают на символ строки, следующий за отличным от пробела (в данном случае символ "Т"). Пример 2 / В полях данных сегмента данных, адресуемого через ES: string db ' /Т:4' / В программном сегменте: eld /Поиск вперед по строке lea DI,string /ES:DI string mov AL, '/' /Искомый символ mov CX,8 /Длина строки repne scasb /Поиск символа / в строке
jne blank gotit: /Искомого символа нет /Искомый символ найден В примере 2 в строке имеется искомый символ ("/"), и команда jne выполнена не будет. После завершения сканирования управление будет передано на метку gotit. Содержимое регистров в этой точке: СХ=3 (так как не выполнено сканирование 3 символов), DI = <смещение string> + 5 (выполнено сканирование 5 символов) . ES:DI указывают на символ строки, следующий за найденным знаком "/" (в данном случае символ "Т"). 386+ SCASD Сканирование строки двойных слов с целью сравнения Команда аналогична командам МП 86 scab и scasw, но позволяет сравнивать содержимое расширенного регистра ЕАХ с двойным словом в памяти, адресуемым через регистры ES:EDI. Пример /В полях данных сегмента данных, адресуемого через ES: nums dd 156000,432666,100000,0,4567890, ... /В программном сегменте: eld /Поиск вперед mov DI,offset nums /ES:DI -> nums mov ЕАХ,0 /Искомое число mov CX,10000 /Максимальное число элементов repne scasd /Поиск 0 среди чисел массива jne по0 /Искомого числа нет isO: /Искомое число найдено В примере в массиве чисел имеется искомое число 0 (с таким же успехом можно было искать любое другое число, например, 4567890). Команда jne выполнена не будет. После завершения сканирования управление будет передано на метку isO. Содержимое регистров в этой точке: СХ уменьшится на 4 (просмотрено 4 элемента) , DI будет увеличено на 10h (4 числа по 4 байт в числе). 386+ SETcc Установка байта по условию Команды, обозначаемые (в книгах, не в программах!) SETcc, осуществляют запись в указанный байтовый операнд 1 или 0 в зависимости от одного из 16 условий, определяемых флагами состояния. Если условие ее выполняется, команда записывает в операнд 1 / если условие не выполняется - 0.В качестве операнда можно использовать байтовый регистр или 8-битовую ячейку памяти. В составе команд процессора предусмотрены следующие команды условной установки байта: Команда Установить 1, если Условие установки 1 seta выше CF=0 и ZF=0 setae выше или равно CF=0 setb ниже CF= I setbe ниже или равно CF=1 или ZF=1 setc перенос CF=1 sete равно ZF=1 setg больше ZF=0 или SF=OF setge больше или равно SF=OF setl меньше SF не равно OF setle меньше или равно ZF=1 или SF не равно OP setna не выше CF=1 или ZF=1
setnae не выше и не равно CF=1 setnb не ниже CF=0 setnbe не ниже и не равно CF=0 и ZF=0 setnc нет переноса CF=0 setne не равно ZF=0 setng не больше ZF=1 или SF не равно OF setnge не больше и не равно SF не равно OF setnl не меньше SF=OF setnle не меньше и не равно ZF=0 и SF=OF setno нет переполнения OF=0 setnp нет четности PF=0 setns знаковый бит равен О SF=0 setnz не нуль ZF=0 seto переполнение 0F=1 setp есть четность PF=1 setpe сумма битов четная PF=1 setpo сумма битов нечетная PF=0 sets знаковый бит равен SF=1 setz нуль ZF= I Команды, осуществляющие установку по условию "выше - ниже", предназначены для анализа чисел без знака; команды, осуществляющие установку по условию "больше - меньшее", предназначены для анализа чисел со знаком. Пример 1 стар AX,35h seta СН ;Если AX>35h, СН=1 ;Если AX<=35h, СН=0 Пример 2 ; В полях данных flag db О ;В программном сегменте test AX,8000h sete flag ;Если в АХ установлен бит 7, flag=l. Иначе flag=0 386Р+ SGDT Сохранение в памяти содержимого регистра таблицы глобальных дескрипторов Команда копирует содержимое регистра таблицы глобальных дескрипторов GDTR (линейный базовый адрес таблицы и ее границу) в поле из 6 байт, указанное в качестве операнда. SHL Логический сдвиг влево Команда полностью эквивалентна команде sal (арифметический сдвиг влево). См. описание команды sal. 386+ SHLD Логический сдвиг влево с двойной точностью Трехоперандная команда shld с операндами opl, ор2 и орЗ осуществляет сдвиг влево первого из своих операндов opl. Число битов сдвига определяется третьим операндом орЗ. По мере сдвига операнда opl влево, выдвигаемые из него старшие биты, пройдя через флаг CF, теряются, на освобождающиеся места со стороны его младших битов поступают старшие биты второго операнда ор2, как если бы он вдвигался своим левым (старшим) концом в opl. Однако после завершения сдвига
значение операнда ор2 не изменяется (рис. П10). Во флаге CF остается послед ний выдвинутый из операнда opl бит. Максимальное число битов сдвига составля ет 31. CF □р1 ор2 В процессе сдвига изменяемся Остается неизменным Рис.П10 Действие команды shld. В качестве первого операнда opl можно указывать 16- или 32-разрядный ре гистр общего назначения или 16- или 32-битовую ячейку памяти. Вторым операн дом ор2 может служить только 16- или 32-разрядный регистр общего назначения Третий операнд, характеризующий число битов сдвига, может находиться в реги стре CL или быть непосредственным значением. Команда воздействует на флаги OF, SF, ZF, PF и CF. Пример 1 mov AX,0C001h mov BX,900Fh shld AX,BX,1 ;AX=8003h, BX=900Fh, CF=1 Пример 2 mov AX,0C001h mov BX,900Fh shld AX,BX,2 ;AX=0006h, BX=900Fh, CF=1 Пример 3 mov AX,0C001h mov BX,900Fh shld AX,BX,3 ;AX=OOOCh, BX=900Fh, CF=0 Пример 4 mov EBX,0FFC8000h mov ESI,12340000h mov CL,16 shld EBX,ESI,CL ;EBX=80001234h, ;ESI=12340000h, CF=0 SHR Логический сдвиг вправо Команда shr осуществляет сдвиг вправо всех битов операнда. Младший бит one ранда поступает в флаг CF. Если команда записана в формате SHR операнд,! сдвиг осуществляется на 1 бит. В старший бит операнда загружается 0, младший теряется. Если команда записана в формате
SHR onepand,CL сдвиг осуществляется на число бит, указанное в регистре-счетчике CL, при этом в процессе последовательных сдвигов старшие биты операнда заполняются нулями, а младшие, пройдя через флаг CF, теряются (рис. П11). Операнд CF Рис.П11 Действие команды shr. В качестве операнда можно указывать любой регистр (кроме сегментного) или ячейку памяти размером, как в байт, так и в слово. Не допускается использовать в качестве операнда непосредственное значение. Команда воздействует на флаги CF, OF, PF, SF и ZF. Пример 1 mov AL, 7 shr AL,1 ;AL=3, CF=1 Пример 2 mov AX, IFFOh mov CL,4 shr AX,CL ;AX=01FFh, CF=0 Пример 3 mov DX,9513h mov CL,8 shr DX,CL ;DX=0095h, CF=0 Допустим сдвиг 32-битовых операндов. Допустимо указание числа бит сдвига как с помощью регистра CL, так и непосредственным значением. Максимальная величина сдвига составляет 31 бит. Пример 1 mov ESI,0FFFF0009h shr ESI,8 ;ESI=OOFFFFOOh, CF=0 Пример 2 ; В полях данных mem dd llllllllh ;B программном сегменте shr mem,12 ;mem=00011111h, CF=0 386+ SHRD Логический сдвиг вправо с двойной точностью Трехоперандная команда shrd с операндами opl, ор2 и орЗ осуществляет сдвиг вправо первого из своих операндов opl. Число битов сдвига определяется третьим операндом орЗ. По мере сдвига операнда opl вправо выдвигаемые из него младшие биты, пройдя через флаг CF, теряются, а на освобождающиеся места со стороны его старших битов поступают младшие биты второго операнда ор2, как если бы он вдвигался своим правым (младшим) концом в opl. Однако после завер-
шения сдвига значение операнда ор2 не изменяется (рис. П12). Во флаге CF остается последний выдвинутый из операнда opl бит. Максимальное число битов сдвига составляет 31. □р2 Остается неизменным -| ор1 — В процессе сдвига изменяемся CF Рис. П12 Действие команды shrd. В качестве первого операнда opl можно указывать 16- или 32-разрядный регистр общего назначения или 16- или 32-битовую ячейку памяти. Вторым операндом ор2 может служить только 16- или 32-разрядный регистр общего назначения. Третий операнд, характеризующий число битов сдвига, может находиться в регистре CL или быть непосредственным значением. Команда воздействует на флаги OF, SF, ZF, PF и CF. Пример 1 mov AX,0C001h mov BX,900Eh shrd AX,BX,1 ;AX=6000h, BX=900Eh, CF=1 Пример 2 mov AX,0C001h mov BX,900Eh shrd AX,BX,2 ;AX=B000h, BX=900Eh, CF=0 Пример 3 mov AX,0C001h mov BX,900Eh shrd AX,BX,3 ;AX=D800h, BX=900Eh, CF=0 Пример 4 mov EBX,OFFCSOOOh mov ESI,12345678h mov CL,16 shrd EBX,ESI,CL ;EBX=5678FFC8h, ;ESI=12345678h, CF=0 386P+ SIDT Сохранение в памяти содержимого регистра таблицы дескрипторов прерываний Команда копирует содержимое регистра таблицы дескрипторов прерываний IDTR (линейный базовый адрес таблицы и ее границу) в поле из 6 байт, указанное в качестве операнда. 386Р+ SLDT Сохранение содержимого регистра таблицы локальных дескрипторов Команда копирует содержимое регистра таблицы локальных дескрипторов LDTR (селектор таблицы) в 16- или 32-разрядный регистр или в 16- или 32-битовое поле памяти, указанные в качестве операнда.
386Р+ SMSW Сохранение слова состояния машины Команда smsw считывает слово состояния машины (так называется младшая половина управляющего регистра процессора CRO) и загружает его в указанный в команде 16-разрядный регистр общего назначения или 16-битовое поле памяти. Команду 1msw можно использовать для перевода процессора из реального в защищенный режим или наоборот. В первом случае после чтения слова состояния командой smsw надо установить в нем бит 0 (бит РЕ) и загрузить назад в CRO командой smsw. Во втором случае после чтения слова состояния командой smsw надо сбросить в нем бит 0 и загрузить назад в CRO командой lmsw. STC Установка флага переноса Команда stc устанавливает флаг переноса CF в регистре флагов. Команда не имеет параметров и не воздействует на остальные флаги процессора. Пример stc ;Флаг CF устанавливается STD Установка флага направления Команда STD устанавливает флаг направления DF в регистре флагов, определяя тем самым обратное направление выполнения строковых операций (в порядке убывания адресов элементов строки). Команда не имеет параметров и не воздействует на остальные флаги процессора. Пример std ;Флаг направления устанавливается STI Установка флага прерывания Команда STI устанавливает флаг разрешения прерываний IF в регистре флагов, разрешая все аппаратные прерывания (от таймера, клавиатуры, дисков и т.д.). Команда не имеет параметров и не воздействует на остальные флаги процессора. Пример sti /Разрешение аппаратных прерываний STOS Запись в строку данных STOSB Запись байта в строку данных STOSW Запись слова в строку данных Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они копируют содержимое регистра AL (в случае операций над байтами) или АХ (в случае операций над словами) в ячейку памяти соответствующего размера по адресу, определяемому содержимым пары регистров ES:DI. После операции копирования регистр DI получает положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера копируемого элемента. Вариант команды stos имеет формат stos строка (что не избавляет от необходимости инициализировать регистры ES:DI адресом строки строка). Заменить сегментный регистр ES нельзя. Рассматриваемые команды могут предваряться префиксом повторения rep. В этом случае они повторяются СХ раз, заполняя последовательные ячейки памяти одним и тем же содержимым регистра AL или АХ. Команда не воздействует на флаги про-
Пример 1 ;В полях данных сегмента данных, адресуемого через ES: id db 'ID:' ;В программном сегменте: eld mov DI,offset id+3 mov AL,'3' stosb mov AL,'9' stosb /Движение по строке вперед ;DI -> за знаком ':' ;Код ASCII цифры 3 /Отправим в строку ;Код ASCII цифры 9 /Отправим в строку /Теперь в строке id записано ID: 2 Пример 2 ;В полях данных сегмента данных, адресуемого через ES: array dw 10000 dup (0) ; В программном сегменте: mov АХ,-1 mov СХ,10000 eld lea DI,array rep stosw /Место под массив слов ;Число-заполнитель /Заполнить 10000 слов /Движение по строке вперед ;ES:DI array ;Все 10000 элементов массива /получают значение -1 (FFFFh) Пример 3 ;В полях данных сегмента line db 80 dup (' ') ;В программном сегменте: mov AL,'>' mov СХ,5 eld lea DI,line rep stos line данных, адресуемого через ES: /Пустая пока строка ;Код ASCII знака '>' ;Заполнить 5 слов /Движение по строке вперед ;ES:DI -" line /Первые 5 байт строки line /Заполняются кодом ASCII ;знака ' >' Пример 4 ;В полях данных сегмента line dw 80 dup (0) ;В программном сегменте: mov AL,'>' mov AH,31h mov CX,5 eld lea DI,line rep stos line данных, адресуемого через ES: /Строка, заполненная нулями ;Код ASCII знака '>' /Атрибут (синий по бирюзовому) ;Заполнить 5 слов /Движение по строке вперед ;ES:DI -" line /Первые 5 слов строки line /Заполняются кодом ASCII /знака '>'вместе с атрибутом ;для последующего вывода на экран
386+ STOSD Запись двойного слова в строку данных Команда аналогична командам МП 86 stosb и stosw, но позволяет записать в строку, адресуемую через регистры ES:EDI, двойное слово из регистра ЕАХ. Пример ; В полях данных dat dd 12789,2,550000,100000 ; В программном сегменте mov ЕАХ,444777 push DS pop ES ;ES=DS mov DI, offset dat add DI,4*2 ;DS:SI -" 3-й элемент массива 386P+ STR Сохранение содержимого регистра состояния задачи Команда str копирует содержимое регистра задачи TR (селектор сегмента состояния задачи) в двухбайтовый регистр общего назначения или 16-битовую ячейку памяти, указанные в качестве операнда. SUB Вычитание целых чисел Команда sub вычитает второй операнд (источник) из первого (приемника) и помещает результат на место первого операнда. Исходное значение первого операнда (уменьшаемое) теряется. Таким образом, если команду вычитания записать в общем виде sub операнд_1, операнд_2 то ее действие можно условно изобразить следующим образом: операнд_1 - операнд_2 -> операнд_1 В качестве первого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Пример 1 mov AX,100 mov BX,60 ; чисел stosd ;dat=12789,2,444777,100000 sub AX,BX ;AX=40 (AX-BX) BX=60 Пример 2 mov DL, '8' mov DH, '0' sub DL,DH ;DL=8 (преобразование кода ; ASCII в цифру))
Пример 3 ; В полях данных datl dw -168 dat2 dw 10 ; В программном сегменте mov AX,data2 sub mem,AX ;mem = -178 Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример mov ЕАХ,1000000 mov ЕВХ,60000 sub ЕАХ,ЕВХ ;ЕАХ=40000 TEST Логическое сравнение Команда test выполняет операцию логического умножения И над двумя операндами и, в зависимости от результата, устанавливает флаги SF, ZF и PF. Флаги OF и CF сбрасываются, a AF имеет неопределенное значение. Состояние флагов можно затем проанализировать командами условных переходов. Команда test не изменяет ни один из операндов. В качестве первого операнда команды test можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного) , ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Правила побитового умножения: Первый операнд-бит 0 10 1 Второй операнд-бит 0 0 11 Бит результата 0 0 0 1 Флаг SF устанавливается в 1, если в результате выполнения команды образовалось число с установленным знаковым битом. Флаг ZF устанавливается в 1, если в результате выполнения команды образовалось число, состоящее из одних двоичных нулей. Флаг PF устанавливается в 1, если в результате выполнения команды образовалось число с четным количеством двоичных единиц в его битах. Пример 1 test АХ,1 jne bityes je bitno ; Переход, ; Переход, если бит 0 если бит 0 в АХ установлен в АХ сброшен Пример 2 test SI,8 jne bityes je bitno ; Переход, ; Переход, если бит 3 если бит 0 в SI установлен в АХ сброшен
Пример 3 test DX,OFFFFh jz null jnz smth /Переход, если DX=0 /Переход, если DX не О Пример 4 test CX,0F000h jne bitsyes /Переход, если какие-либо из ;4 старших битов СХ установлены /Переход, если все 4 старших бита ;СХ сброшены je bitsno Пример 5 test АХ,АХ jz zero jnz notzero /Переход, если AX=0 /Переход, если АХ не О Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример test ЕАХ,80000000b 386Р+ VERR Проверка сегмента на чтение Команда verr позволяет определить, разрешено ли чтение из сегмента, за которым закреплен селектор, передаваемый команде в качестве ее операнда. Операндом может служить 16-разрядный регистр общего назначения или 16-битовая ячейка памяти. 386Р+ VERW Проверка сегмента на запись Команда verw позволяет определить, разрешена ли запись в сегмент, за которым закреплен селектор, передаваемый команде в качестве ее операнда. Операндом может служить 16-разрядный регистр общего назначения или 16-битовая ячейка памяти. 486+ XADD Обмен и сложение jz Ь31 jnz nob31 /Переход, если бит 31 ЕАХ равен 0 /Переход, если бит 31 ЕАХ равен 1 XADD , память, регистр * * I Рис. П13 Действие команды xadd. Команда xadd выполняет в одной операции сложение и обмен операндов. Команда требует двух операндов, причем первый операнд должен быть ячейкой памяти, а второй - регистром. После сложения операндов исходное содержимое памяти пере-
носится во второй операнд (регистр), а полученная сумма записывается в память (на место первого слагаемого) (рис. П13) . Команда воздействует на флаги OF, SF, ZF, AF, PF и CF. Пример ; В полях данных mem dw 99 ;В программном сегменте mov АХ, 48 xadd mem,АХ ;mem=147, АХ=99 XCHG Обмен данными между операндами Команда xchg пересылает значение первого операнда во второй, а второго - в первый. В качестве любого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и представлять числа со знаком или без знака. Команда не воздействует на флаги процессора . Пример 1 mov AX,0FF01h mov SI,1000h Пример 2 /В полях данных: mem dw OFOFOh ;В программном сегменте mov CX,1256h xchg СХ,mem ;CX=FOFOh, mem=1256h Пример 3 mov AX,6031h xchg AH,AL ;AX=3160h Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. XLAT Табличная трансляция Команда xlat осуществляет выборку байта из массива байтов, который в этом случае называют таблицей трансляции. В регистре ВХ должен находиться относительный адрес таблицы, а в регистре AL - смещение в таблице к выбираемому байту (его индекс). Выбранный байт загружается в регистр AL, замещая находившееся в нем смещение. Длина таблицы может достигать 256 байт. Таблица должна находиться в сегменте данных, адресуемом через сегментный регистр DS. Замена сегмента не допускается. Команда xlat не имеет параметров, но требует предварительной настройки регистров ВХ и AL. Команда не воздействует на флаги процессора . xchg АХ,SI ;AX=01000h, SI=FF01h Пример xchg ESI,EDI ;ESI и EDI обмениваются содержимым
Пример /Пример демонстрирует преобразование первых 14 скан-кодов ;(фактически это скан-коды клавиш верхнего ряда /клавиатуры) в коды ASCII соответствующих символов ; В полях данных: table db 0,27, ' 1234567890- = \' /Таблица кодов ASCII ;В программном сегменте lea ВХ,table mov AL,5 ;Скан-код 5 клавиши <4/$> xlat ;AL=34h, код ASCII символа 4 386+ XLAT 386+ XLATB Команда xlatb эквивалентна команде xlat МП 86 за исключением того, что для 32-разрядных приложений относительный адрес таблицы размещается в расширенном регистре ЕВХ. Команда xlat может иметь в качестве операнда относительный адрес таблицы трансляции; в этом случае помещение адреса таблицы в регистр ЕВХ не требуется. Действие команды от этого не изменяется, однако возможна замена сегмента. XOR Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ Команда xor выполняет операцию логического (побитового) ИСКЛЮЧАЮЩЕГО ИЛИ над своими двумя операндами. Результат операции замещает первый операнд; второй операнд не изменяется. Каждый бит результата устанавливается в 1, если соответствующие биты операндов различны, и сбрасывается в 0, если соответствующие биты операндов совпадают. В качестве первого операнда команды хог можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго - регистр (кроме сегментного) , ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами. Команда воздействует на флаги OF, SF, ZF, PF и CF, причем флаги OF и CF всегда сбрасываются, а остальные флаги устанавливаются в зависимости от результата. Правила побитового ИСКЛЮЧАЮЩЕГО ИЛИ: Первый операнд-бит 0 10 1 Второй операнд-бит 0 0 11 Бит результата 0 110 Пример ;В сегменте, адресуемом через сегментный регистр ES: table db 0,27,'1234567890-=\' ;Таблица ;В программном сегменте mov AL,13 ;Скан-ко,1] xlat ES:table ;AL=3Dh, ;Таблица кодов ASCII ;Скан-код клавиши <=/+> ;AL=3Dh, код ASCII символа = Пример 1 mov AX,0Fh xor AX,OFFFFh ;AX=FFF0h
Пример 2 хог ВХ,ВХ ;Обнуление ВХ Пример 3 mov SI,OAAAAh mov BX,5555h xor SI,BX ;SI=FFFFh, BX=5555h Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Пример mov ЕАХ,444 4ААААп xor EAX,4441AAACh ;EAX=00050006h
Английский МАШ ИНА ВРЕМЕНИ Герберт Уэллс The Time Traveller (for so it will be convenient to speak of him) was expounding a recondite matter to us. His grey eyes shone and twinkled, and his usually pale face was flushed and animated. The fire burned brightly, and the soft radiance of the incandescent lights in the lilies of silver caught the bubbles that flashed and passed in our glasses. Our chairs, being his patents, embraced and caressed us rather than submitted to be sat upon, and there was that luxurious after- dinner atmosphere when thought roams gracefully free of the trammels of precision. And he put it to us in this way- - marking the points with a lean forefinger- - as we sat and lazily admired his earnestness over this new paradox (as we thought it) and his fecundity. Путешественник по Времени (будем называть его так) рассказывал нам невероятные вещи. Его серые глаза искрились и сияли, лицо, обычно бледное, покраснело и оживилось. В камине ярко пылал огонь, и мягкий свет электрических лампочек, ввинченных в серебряные лилии, переливался в наших бокалах. Стулья собственного его изобретения были так удобны, словно ласкались к нам; в комнате царила та блаженная послеобеденная атмосфера, когда мысль, свободная от строгой определенности, легко скользит с предмета на предмет. Вот что он нам сказал, отмечая самое важное движениями тонкого указательного пальца, в то время как мы лениво сидели на стульях, удивляясь его изобретательности и тому, что он серьезно относится к своему новому парадоксу (как мы это называли).
'You must follow me carefully. I shall have to controvert one or two ideas that are almost universally accepted. The geometry, for instance, they taught you at school is founded on a misconception.' I Is not that rather a large thing to expect us to begin upon?' said Filby, an argumentative person with red hair. II do not mean to ask you to accept anything without reasonable ground for it. You will soon admit as much as I need from you. You know of course that a mathematical line, a line of thickness, has no real existence. They taught you that? Neither has a mathematical plane. These things are mere abstractions.' 'That is all right,' said the Psychologist. 'Nor, having only length, breadth, and thickness, can a cube have a real existence. ' 'There I object,' said Filby. 'Of course a solid body may exist. All real things...' 'So most people think. But wait a moment. Can an instantaneous cube exist?' 'Don't follow you,' said Filby. 'Can a cube that does not last for any time at all, have a real existence?' Прошу вас слушать меня внимательно. Мне придется опровергнуть несколько общепринятых представлений. Например, геометрия, которой вас обучали в школах, построена на недоразумении... Не думаете ли вы, что это слишком широкий вопрос, чтобы с него начинать? сказал рыжеволосый Филби, большой спорщик . Я и не предполагаю, что вы согласитесь со мной, не имея на это достаточно разумных оснований. Но вам придется согласиться со мной, я вас заставлю. Вы, без сомнения, знаете, что математическая линия, линия без толщины, воображаема и реально не существует. Учили вас этому? Вы знаете, что не существует также и математической плоскости. Все это чистые абстракции. Совершенно верно, - подтвердил Психолог . Но ведь точно так же не имеет реального существования и куб, обладающий только длиной, шириной и высотой... С этим я не могу согласиться, - заявил Филби. - Без сомнения, твердые тела существуют. А все существующие предметы. . . - Так думает большинство людей. Но подождите минуту. Может ли существовать вневременный куб? Не понимаю вас, - сказал Филби. Можно ли признать действительно существующим кубом то, что не существует ни единого мгновения? Filby became pensive. 'Clearly,' the Time Traveller proceeded, 'any real body must have extension in four directions: it must have Length, Breadth, Thickness, and- - Duration. But through a natural infirmity of the flesh, which I will explain to you in a moment, we incline to overlook this fact. There are really four dimensions, three which we call the three planes of Space, and a fourth, Time. There is, however, a tendency to draw an unreal distinction between the former three dimensions and the latter, because it happens that our consciousness moves intermittently in one direction along the latter from the beginning to the end of our lives.' Филби задумался. - А из этого следует, - продолжал Путешественник по Времени, - что каждое реальное тело должно обладать четырьмя измерениями: оно должно иметь длину, ширину, высоту и продолжительность существования. Но вследствие прирожденной ограниченности нашего ума мы не замечаем этого факта. И все же существуют четыре измерения, из которых три мы называем пространственными, а четвертое - временным. Правда, существует тенденция противопоставить три первых измерения последнему, но только потому, что наше сознание от начала нашей жизни и до ее конца движется рывками лишь в одном- единственном направлении этого последнего измерения.
'That, ' said a very young man, making spasmodic efforts to relight his cigar over the lamp; 'that . . . very clear indeed. ' 'Now, it is very remarkable that this is so extensively overlooked,' continued the Time Traveller, with a slight accession of cheerfulness. 'Really this is what is meant by the Fourth Dimension, though some people who talk about the Fourth Dimension do not know they mean it. It is only another way of looking at Time. There is no difference between Time and any of the three dimensions of Space except that our consciousness moves along it. But some foolish people have got hold of the wrong side of that idea. You have all heard what they have to say about this Fourth Dimension?' Это, - произнес Очень Молодой Человек, делая отчаянные усилия раскурить от лампы свою сигару, - это. . . право, яснее ясного. Замечательно. Однако это совершенно упускают из виду, - продолжал Путешественник по Времени, и голос его слегка повеселел. - Время и есть то, что подразумевается под Четвертым Измерением, хотя некоторые трактующие о Четвертом Измерении не знают, о чем говорят. Это просто иная точка зрения на Время. Единственное различие между Временем и любым из трех пространственных измерений заключается в том, что наше сознание движется по нему. Некоторые глупцы неправильно понимают эту мысль. Все вы, конечно, знаете, в чем заключаются их возражения против Четвертого Измерения? ' I have not, ' said the Provincial Mayor. 'It is simply this. That Space, as our mathematicians have it, is spoken of as having three dimensions, which one may call Length, Breadth, and Thickness, and is always definable by reference to three planes, each at right angles to the others. But some philosophical people have been asking why three dimensions particularly- - why not another direction at right angles to the other three?- - and have even tried to construct a Four- Dimension geometry. Professor Simon Newcomb was expounding this to the New York Mathematical Society only a month or so ago. You know how on a flat surface, which has only two dimensions , we can represent a figure of a three- dimensional solid, and similarly they think that by models of three dimensions they could represent one of four- - if they could master the perspective of the thing. See?' Я не знаю, - заявил Провинциальный Мэр. Все очень просто. Пространство, как понимают его наши математики, имеет три измерения, которые называются длиной, шириной и высотой, и оно определяется относительно трех плоскостей, расположенных под прямым углом друг к другу. Однако некоторые философские умы задавали себе вопрос: почему же могут существовать только три измерения? Почему не может существовать еще одно направление под прямым углом к трем остальным? Они пытались даже создать Геометрию Четырех Измерений. Всего около месяца тому назад профессор Саймон Ньюком излагал эту проблему перед Нью- Йоркским математическим обществом. Вы знаете, что на плоской поверхности, обладающей только двумя измерениями, можно представить чертеж трехмерного тела. Предполагается, что точно так же при помощи трехмерных моделей можно представить предмет в четырех измерениях, если овладеть перспективой этого предмета. Понимаете? ' I think so, ' murmured the Provincial Mayor; and, knitting his brows, he lapsed into an introspective state, his lips moving as one who repeats mystic words. 'Yes, I think I see it now, ' he said after some time, brightening in a quite transitory manner. Кажется, да, - пробормотал Провинциальный Мэр. Нахмурив брови, он углубился в себя и шевелил губами, как человек, повторяющий какие- то магические слова. Да, мне кажется, я теперь понял, произнес он спустя несколько минут, и его лицо просияло.
1 Well, I do not mind telling you I have been at work upon this geometry of Four Dimensions for some time. Some of my results are curious. For instance, here is a portrait of a man at eight years old, another at fifteen, another at seventeen, another at twenty- three, and so on. All these are evidently sections, as it were, Three- Dimensional representations of his Four- Dimensioned being, which is a fixed and unalterable thing. Ну, я мог бы рассказать вам, как мне пришлось заниматься одно время Геометрией Четырех Измерений. Некоторые из моих выводов довольно любопытны. Например, вот портрет человека, когда ему было восемь лет, другой - когда ему было пятнадцать, третий - семнадцать, четвертый двадцать три года и так далее. Все это, очевидно, трехмерные представления его четырехмерного существования, которое является вполне определенной и неизменной величиной. 'Scientific people,' proceeded the Time Traveller, after the pause required for the proper assimilation of this, 'know very well that Time is only a kind of Space. Here is a popular scientific diagram, a weather record. This line I trace with my finger shows the movement of the barometer. Yesterday it was so high, yesterday night it fell, then this morning it rose again, and so gently upward to here. Surely the mercury did not trace this line in any of the dimensions of Space generally recognized? But certainly it traced such a line, and that line, therefore, we must conclude was along the Time- Dimension.' Ученые, - продолжал Путешественник no Времени, помолчав для того, чтобы мы лучше усвоили сказанное, - отлично знают, что Время - только особый вид Пространства. Вот перед вами самая обычная диаграмма, кривая погоды. Линия, по которой я веду пальцем, показывает колебания барометра. Вчера он стоял вот на такой высоте, к вечеру упал, сегодня утром снова поднялся и полз понемногу вверх, пока не дошел вот до этого места. Без сомнения, ртуть не нанесла этой линии ни в одном из общепринятых пространственных измерений. Но так же несомненно, что ее колебания абсолютно точно определяются нашей линией, и отсюда мы должны заключить, что такая линия была проведена в Четвертом Измерении - во Времени. 'But,' said the Medical Man, staring hard at a coal in the fire, 'if Time is really only a fourth dimension of Space, why is it, and why has it always been, regarded as something different? And why cannot we move in Time as we move about in the other dimensions of Space?' The Time Traveller smiled. 'Are you sure we can move freely in Space? Right and left we can go, backward and forward freely enough, and men always have done so. I admit we move freely in two dimensions. But how about up and down? Gravitation limits us there. ' Ho, - сказал Доктор, пристально глядя на уголь в камине, - если Время действительно только Четвертое Измерение Пространства, то почему же всегда, вплоть до наших дней, на него смотрели как на нечто отличное? И почему мы не можем двигаться во Времени точно так же, как движемся во всех остальных измерениях Пространства? Путешественник по Времени улыбнулся. А вы так уверены в том, что мы можем свободно двигаться в Пространстве? Правда, мы можем довольно свободно пойти вправо и влево, назад и вперед, и люди всегда делали это. Я допускаю, что мы свободно движемся в двух измерениях. Ну, а как насчет движения вверх? Сила тяготения ограничивает нас в этом.
'Not exactly, ' said the Medical Man. 'There are balloons.' 'But before the balloons, save for spasmodic jumping and the inequalities of the surface, man had no freedom of vertical movement.' 'Still they could move a little up and down,' said the Medical Man. 'Easier, far easier down than up.' 'And you cannot move at all in Time, you cannot get away from the present moment. ' He совсем, - заметил Доктор. - Существуют же аэростаты. Но до аэростатов, кроме неуклюжих прыжков и лазанья по неровностям земной поверхности, у человека не было иной возможности вертикального движения. Все же мы можем двигаться немного вверх и вниз, - сказал Доктор. Легче, значительно легче вниз, чем вверх! Но двигаться во Времени совершенно немыслимо, вы никуда не уйдете от настоящего момента. 'My dear sir, that is just where you are wrong. That is just where the whole world has gone wrong. We are always getting away from the present moment. Our mental existences, which are immaterial and have no dimensions, are passing along the Time- Dimension with a uniform velocity from the cradle to the grave. Just as we should travel down if we began our existence fifty miles above the earth's surface.' 'But the great difficulty is this,' interrupted the Psychologist. 'You can move about in all directions of Space, but you cannot move about in Time.' - Мой дорогой друг, тут- то вы и ошибаетесь . В этом- то и ошибался весь мир. Мы постоянно уходим от настоящего момента. Наша духовная жизнь, нематериальная и не имеющая измерений, движется с равномерной быстротой от колыбели к могиле по Четвертому Измерению Пространства Времени. Совершенно так же, как если бы мы, начав свое существование в пятидесяти милях над земной поверхностью, равномерно падали бы вниз. Однако главное затруднение, - вмешался Психолог, - заключается в том, что можно свободно двигаться во всех направлениях Пространства, но нельзя так же свободно двигаться во Времени! ' That is the germ of my great discovery. But you are wrong to say that we cannot move about in Time. For instance, if I am recalling an incident very vividly I go back to the instant of its occurrence: I become absent- minded, as you say. I jump back for a moment. Of course we have no means of staying back for any length of Time, any more than a savage or an animal has of staying six feet above the ground. But a civilized man is better off than the savage in this respect. He can go up against gravitation in a balloon, and why should he not hope that ultimately he may be able to stop or accelerate his drift along the Time- Dimension, or even turn about and travel the other way?' - В этом- то и заключается зерно моего великого открытия. Вы совершаете ошибку, говоря, что нельзя двигаться во Времени. Если я, например, очень ярко вспоминаю какое- либо событие, то возвращаюсь ко времени его совершения и как бы мысленно отсутствую. Я на миг делаю прыжок в прошлое. Конечно, мы не имеем возможности остаться в прошлом на какую бы то ни было частицу Времени, подобно тому как дикарь или животное не могут повиснуть в воздухе на расстоянии хотя бы шести футов от земли. В этом отношении цивилизованный человек имеет преимущество перед дикарем. Он вопреки силе тяготения может подняться вверх на воздушном шаре. Почему же нельзя надеяться, что в конце концов он сумеет также остановить или ускорить свое движение по Времени или даже повернуть в противоположную сторону?
'Oh, this,' began Filby, 'is all... ' 'Why not?' said the Time Traveller. 'It's against reason,' said Filby. 'What reason?' said the Time Traveller . ' You can show black is white by argument, ' said Filby, 'but you will never convince me.' 'Possibly not, ' said the Time Traveller. 'But now you begin to see the object of my investigations into the geometry of Four Dimensions. Long ago I had a vague inkling of a machine- - ' 'To travel through Time!' exclaimed the Very Young Man. 'That shall travel indifferently in any direction of Space and Time, as the driver determines.' Filby contented himself with laughter. ' But I have experimental verification, ' said the Time Traveller. 'It would be remarkably convenient for the historian,' the Psychologist suggested. 'One might travel back and verify the accepted account of the Battle of Hastings, for instance!' 'Don't you think you would attract attention? ' said the Medical Man. 'Our ancestors had no great tolerance for anachronisms.' ' One might get one' s Greek from the very lips of Homer and Plato, ' the Very Young Man thought. ' In which case they would certainly plough you for the Little- go. The German scholars have improved Greek so much.' 'Then there is the future,' said the Very Young Man. 'Just think! One might invest all one's money, leave it to accumulate at interest, and hurry on ahead! ' 'To discover a society,' said I, 'erected on a strictly communistic basis . ' 'Of all the wild extravagant theories!' began the Psychologist. Это совершенно невозможно... - начал было Филби. Почему нет? - спросил Путешественник по Времени. Это противоречит разуму, - ответил Филби. Какому разуму? - сказал Путешественник по Времени. Конечно, вы можете доказывать, что черное - белое, - сказал Филби, - но вы никогда не убедите меня в этом. Возможно, - сказал Путешественник по Времени. - Но все же попытайтесь взглянуть на этот вопрос с точки зрения Геометрии Четырех Измерений. С давних пор у меня была смутная мечта создать машину... Чтобы путешествовать по Времени? - прервал его Очень Молодой Человек. Чтобы двигаться свободно в любом направлении Пространства и Времени по желанию того, кто управляет ею. Филби только рассмеялся и ничего не сказал. - И я подтвердил возможность этого на опыте, - сказал Путешественник по Времени . - Это было бы удивительно удобно для историка, - заметил Психолог. - Можно было бы, например, отправиться в прошлое и проверить известное описание битвы при Гастингсе! - А вы не побоялись бы, что на вас нападут обе стороны? - сказал Доктор. Наши предки не очень-то любили анахронизмы. - Можно было бы изучить греческий язык из уст самого Гомера или Платона, - сказал Очень Молодой Человек. - И вы, конечно, провалились бы на экзамене . Немецкие ученые так удивительно усовершенствовали древнегреческий язык! - В таком случае уж лучше отправиться в будущее! - воскликнул Очень Молодой Человек. - Подумайте только! Можно было бы поместить все свои деньги в банк под проценты - и вперед! - А там окажется, - перебил я, - что общество будущего основано на строго коммунистических началах. - Это самая экстравагантная теория!.. - воскликнул Психолог.
'The experiment!' cried Filby, who was getting brain- weary. 'Let's see your experiment anyhow,' said the Psychologist, 'though it's all humbug, you know.' The Time Traveller smiled round at us. Then, still smiling faintly, and with his hands deep in his trousers pockets, he walked slowly out of the room, and we heard his slippers shuffling down the long passage to his laboratory. The Psychologist looked at us. 'I wonder what he's got?' ' Some sleight- of- hand trick or other, ' said the Medical Man, and Filby tried to tell us about a conjurer he had seen at Burslem; but before he had finished his preface the Time Traveller came back, and Filby's anecdote collapsed. - Требую опыта! - закричал Филби, которому надоели рассуждения. - Покажите же нам свой опыт, - сказал Психолог, - хотя, конечно, все это чепуха . Путешественник по Времени, улыбаясь, обвел нас взглядом. Затем все с той же усмешкой засунул руки в карманы и медленно вышел из комнаты. Мы услышали шарканье его туфель по длинному коридору, который вел в лабораторию. Психолог посмотрел на нас. - Интересно, зачем он туда пошел? - Наверно, это какой-нибудь фокус, сказал Доктор. Филби принялся рассказывать о фокуснике, которого он видел в Барслеме, но тут Путешественник по Времени вернулся, и рассказ Филби остался неоконченным. The thing the Time Traveller held in his hand was a glittering metallic framework, scarcely larger than a small clock, and very delicately made. There was ivory in it, and some transparent crystalline substance. And now I must be explicit, for this that follows- - unless his explanation is to be accepted- - is an absolutely unaccountable thing. He took one of the small octagonal tables that were scattered about the room, and set it in front of the fire, with two legs on the hearthrug. On this table he placed the mechanism. Then he drew up a chair, and sat down. The only other object on the table was a small shaded lamp, the bright light of which fell upon the model. There were also perhaps a dozen candles about, two in brass candlesticks upon the mantel and several in sconces, so that the room was brilliantly illuminated. I sat in a low armchair nearest the fire, and I drew this forward so as to be almost between the Time Traveller and the fireplace. Filby sat behind him, looking over his shoulder. The Medical Man and the Provincial Mayor watched him in profile from the right, the Psychologist from the left. The Very Young Man stood behind the Psychologist. We were all on the alert. It appears incredible to me that any kind of trick, however subtly conceived and however adroitly done, could have been played upon us under these conditions. Путешественник по Времени держал в руке искусно сделанный блестящий металлический предмет немного больше маленьких настольных часов. Он был сделан из слоновой кости и какого- то прозрачного, как хрусталь, вещества. Теперь я постараюсь быть очень точным в своем рассказе, так как за этим последовали совершенно невероятные события. Хозяин придвинул один из маленьких восьмиугольных столиков, расставленных по комнате, к самому камину так, что две его ножки очутились на каминном коврике. На этот столик он поставил свой аппарат. Затем придвинул стул и сел на него. Кроме аппарата, на столе стояла еще небольшая лампа под абажуром, от которой падал яркий свет. В комнате теперь горело еще около дюжины свечей: две в бронзовых подсвечниках на камине, остальные в канделябрах, - так что вся она была освещена. Я сел в низкое кресло поближе к огню и выдвинул его вперед так, что оказался почти между камином и Путешественником по Времени. Филби уселся позади и смотрел через его плечо. Доктор и Провинциальный Мэр наблюдали с правой стороны, а Психолог - слева. Очень Молодой Человек стоял позади Психолога. Все мы насторожились. Мне кажется невероятным, чтобы при таких условиях нас можно было обмануть каким-нибудь фокусом, даже самым хитрым и искусно выполненным.
The Time Traveller looked at us, and then at the mechanism. 'Well?' said the Psychologist. 'This little affair,' said the Time Traveller, resting his elbows upon the table and pressing his hands together above the apparatus, 'is only a model. It is my plan for a machine to travel through time. You will notice that it looks singularly askew, and that there is an odd twinkling appearance about this bar, as though it was in some way unreal.' He pointed to the part with his finger. 'Also, here is one little white lever, and here is another.' Путешественник по Времени посмотрел на нас, затем на свой аппарат. - Ну? - сказал Психолог. Этот маленький механизм - только модель, - сказал Путешественник по Времени, облокотившись на стол и сплетя пальцы над аппаратом. По ней я делаю машину для путешествия по Времени. Вы замечаете, какой у нее необычный вид? Например, вот у этой пластинки очень смутная поверхность, как будто бы она в некотором роде не совсем реальна. Он указал пальцем на одну из частей модели. Вот здесь находится маленький белый рычажок, а здесь другой. The Medical Man got up out of his chair and peered into the thing. 'It's beautifully made,' he said. 'It took two years to make,' retorted the Time Traveller. Then, when we had all imitated the action of the Medical Man, he said: 'Now I want you clearly to understand that this lever, being pressed over, sends the machine gliding into the future, and this other reverses the motion. This saddle represents the seat of a time traveller. Presently I am going to press the lever, and off the machine will go. It will vanish, pass into future Time, and disappear. Have a good look at the thing. Look at the table too, and satisfy yourselves there is no trickery. I don't want to waste this model, and then be told I'm a quack.' Доктор встал со стула и принялся рассматривать модель. - Чудесно сделано, сказал он. На это ушло два года, - ответил Путешественник по Времени. Затем, после того как мы все по примеру Доктора осмотрели модель, он добавил: - А теперь обратите внимание на следующее: если нажать на этот рычажок, машина начинает скользить в будущее, а второй рычажок вызывает обратное движение. Вот седло, в которое должен сесть Путешественник по Времени. Сейчас я нажму рычаг - и машина двинется. Она исчезнет, умчится в будущее и скроется из наших глаз. Осмотрите ее хорошенько. Осмотрите также стол и убедитесь, что тут нет никакого фокуса. Я вовсе не желаю потерять свою модель и получить за это только репутацию шарлатана. There was a minute' s pause perhaps. The Psychologist seemed about to speak to me, but changed his mind. Then the Time Traveller put forth his finger towards the lever. 'No,' he said suddenly. ' Lend me your hand. ' And turning to the Psychologist, he took that individual's hand in his own and told him to put out his forefinger. So that it was the Psychologist himself who sent forth the model Time Machine on its interminable voyage. We all saw the lever turn. I am absolutely certain there was no trickery. There was a breath of wind, and the lamp flame jumped. One of the candles on the mantel was blown out. Наступило минутное молчание. Психолог как будто хотел что- то сказать мне, но передумал. Путешественник по Времени протянул палец по направлению к рычагу. Нет, - сказал он вдруг. - Дайте-ка мне вашу руку. - Обернувшись к Психологу, он взял его за локоть и попросил вытянуть указательный палец. Таким образом, Психолог сам отправил модель Машины Времени в ее бесконечное путешествие. Мы все видели, как рычаг повернулся. Я глубоко убежден, что здесь не было обмана. Произошло колебание воздуха, и пламя лампы задрожало. Одна из свечей, стоявших на камине, погасла.
The little machine suddenly swung round, became indistinct, was seen as a ghost for a second perhaps, as an eddy of faintly glittering brass and ivory; and it was gone- - vanished! Save for the lamp the table was bare. Everyone was silent for a minute. Then Filby said he was damned. The Psychologist recovered from his stupor, and suddenly looked under the table. At that the Time Traveller laughed cheerfully. 'Well?' he said, with a reminiscence of the Psychologist. Then, getting up, he went to the tobacco jar on the mantel, and with his back to us began to fill his pipe. Маленькая машина закачалась, сделалась неясной, на мгновение она представилась нам как тень, как призрак, как вихрь поблескивавшего хрусталя и слоновой кости и затем исчезла, пропала. На столе осталась только лампа. С минуту мы все молчали. Затем Филби пробормотал проклятие. Психолог, оправившись от изумления, заглянул под стол. Путешественник по Времени весело рассмеялся. - Ну! сказал он, намекая на сомнения Психолога. Затем, встав, он взял с камина жестянку с табаком и преспокойно принялся набивать трубку. We stared at each other. 'Look here,' said the Medical Man, 'are you in earnest about this? Do you seriously believe that that machine has travelled into time?' 'Certainly,' said the Time Traveller, stooping to light a spill at the fire. Then he turned, lighting his pipe, to look at the Psychologist's face. (The Psychologist, to show that he was not unhinged, helped himself to a cigar and tried to light it uncut.) 'What is more, I have a big machine nearly finished in there'- - he indicated the laboratory- - 'and when that is put together I mean to have a journey on my own account.' 'You mean to say that that machine has travelled into the future?' said Filby. 'Into the future or the past- - I don't, for certain, know which.' After an interval the Psychologist had an inspiration. 'It must have gone into the past if it has gone anywhere, ' he said. 'Why?' said the Time Traveller. ' Because I presume that it has not moved in space, and if it traveled into the future it would still be here all this time, since it must have traveled through this time.' 'But,' I said, 'If it travelled into the past it would have been visible when we came first into this room; and last Thursday when we were here; and the Thursday before that; and so forth!' Мы посмотрели друг на друга. - Слушайте, - сказал Доктор, - неужели вы это серьезно? Неужели вы действительно верите, что ваша машина отправилась путешествовать по Времени? Без сомнения, - ответил он, наклонился к камину и сунул в огонь клочок бумаги. Затем, закурив трубку, посмотрел на Психолога. (Психолог, стараясь скрыть свое смущение, достал сигару и, позабыв обрезать кончик, тщетно пытался закурить .) - Скажу более, - продолжал наш хозяин, - у меня почти окончена большая машина. . . Там. - Он указал в сторону своей лаборатории. - Когда она будет готова, я предполагаю сам совершить путешествие . Вы говорите, что эта машина отправилась в будущее? - спросил Филби. В будущее или в прошлое - наверняка не знаю. - Постойте, - сказал Психолог с воодушевлением. - Она должна была отправиться в прошлое, если вообще можно допустить, что она куда- нибудь отправилась . Почему? - спросил Путешественник по Времени. Потому что если бы она не двигалась в Пространстве и отправилась в будущее, то все время оставалась бы с нами: ведь и мы путешествуем туда же! А если бы она отправилась в прошлое, - добавил я, - то мы видели бы ее еще в прошлый четверг, когда были здесь, и в позапрошлый четверг и так далее !
'Serious objections,' remarked the Provincial Mayor, with an air of impartiality, turning towards the Time Traveller . 'Not a bit, ' said the Time Traveller, and, to the Psychologist: 'You think. You can explain that. It's presentation below the threshold, you know, diluted presentation.' 'Of course,' said the Psychologist, and reassured us. 'That's a simple point of psychology- I should have thought of it. It's plain enough, and helps the paradox delightfully. We cannot see it, nor can we appreciate this machine, any more than we can the spoke of a wheel spinning, or a bullet flying through the air. If it is travelling through time fifty times or a hundred times faster than we are, if it gets through a minute while we get through a second, the impression it creates will of course be only one- fiftieth or one- hundredth of what it would make if it were not travelling in time. That's plain enough.' He passed his hand through the space in which the machine had been. 'You see?' he said, laughing. We sat and stared at the vacant table for a minute or so. Then the Time Traveller asked us what we thought of it all. 'It sounds plausible enough tonight, ' said the Medical Man; 'but wait until to- morrow. Wait for the common sense of the morning.' 'Would you like to see the Time Machine itself?' asked the Time Traveller. And therewith, taking the lamp in his hand, he led the way down the long, draughty corridor to his laboratory. I remember vividly the flickering light, his queer, broad head in silhouette, the dance of the shadows, how we all followed him, puzzled but incredulous, and how there in the laboratory we beheld a larger edition of the little mechanism which we had seen vanish from before our eyes. Parts were of nickel, parts of ivory, parts had certainly been filed or sawn out of rock crystal. The thing was generally complete, but the twisted crystalline bars lay unfinished upon the bench beside some sheets of drawings, and I took one up for a better look at it. Quartz it seemed to be. Серьезные возражения! - заметил Провинциальный Мэр и с видом полного беспристрастия повернулся к Путешественнику по Времени. Вовсе нет, - сказал тот и, обращаясь к Психологу, сказал: - Вы сами легко можете им это объяснить. Это вне восприятия, неуловимо чувством. Конечно, - ответил Психолог, обращаясь к нам. - С психологической точки зрения это очень просто. Я должен был бы догадаться раньше. Психология разъясняет ваш парадокс. Мы действительно не можем видеть, не можем воспринять движение этой машины, как не можем видеть спицу быстро вертящегося колеса или пулю, летящую в воздухе. И если машина движется в будущее со скоростью в пятьдесят или сто раз большей, чем мы сами, если она проходит хотя бы минуту времени, пока мы проходим секунду, то восприятие ее равняется, безусловно, только одной пятидесятой или одной сотой обычного восприятия. Это совершенно ясно. Он провел рукой по тому месту, где стоял аппарат. - Понимаете? - сказал он, смеясь. Целую минуту мы не сводили взгляда с пустого стола. Затем Путешественник по Времени спросил, что мы обо всем этом думаем. Все это кажется сегодня вполне правдоподобным, - ответил Доктор, - но подождем до завтра. Утро вечера мудренее . Не хотите ли взглянуть на саму Машину Времени? - спросил Путешественник по Времени. И, взяв лампу, он повел нас по длинному холодному коридору в свою лабораторию. Ясно помню мерцающий свет лампы, его темную крупную голову впереди, наши пляшущие тени на стенах. Мы шли за ним, удивленные и недоверчивые, и увидели в лаборатории, так сказать, увеличенную копию маленького механизма, исчезнувшего на наших глазах. Некоторые части машины были сделаны из никеля, другие из слоновой кости; были и детали, несомненно, вырезанные или выпиленные из горного хрусталя. В общем, машина была готова. Только на скамье, рядом с чертежами, лежало несколько прозрачных, причудливо изогнутых стержней. Они, по-видимому, не были окончены. Я взял в руку один из них, чтобы получше рассмотреть. Мне показалось, что он был сделан из кварца.
'Look here,' said the Medical Man, 'are you perfectly serious? Or is this a trick- - like that ghost you showed us last Christmas?' 'Upon that machine,' said the Time Traveller, holding the lamp aloft, 'I intend to explore time. Is that plain? I was never more serious in my life.' None of us quite knew how to take it. I caught Filby's eye over the shoulder of the Medical Man, and he winked at me solemnly. Послушайте, - сказал Доктор, - неужели это действительно серьезно? Или это фокус вроде того привидения, которое вы показывали нам на прошлое рождество? На этой машине, - сказал Путешественник по Времени, держа лампу высоко над головой, - я собираюсь исследовать Время. Понимаете? Никогда еще я не говорил более серьезно, чем сейчас. Никто из нас хорошенько не знал, как отнестись к этим его словам. Выглянув из- за плеча Доктора, я встретился взглядом с Филби, и он многозначительно подмигнул мне. I think that at that time none of us quite believed in the Time Machine. The fact is, the Time Traveller was one of those men who are too clever to be believed: you never felt that you saw all round him; you always suspected some subtle reserve, some ingenuity in ambush, behind his lucid frankness. Had Filby shown the model and explained the matter in the Time Traveller's words, we should have shown him far less scepticism. For we should have perceived his motives; a pork butcher could understand Filby. But the Time Traveller had more than a touch of whim among his elements, and we distrusted him. Things that would have made the frame of a less clever man seemed tricks in his hands. It is a mistake to do things too easily. The serious people who took him seriously never felt quite sure of his deportment; they were somehow aware that trusting their reputations for judgment with him was like furnishing a nursery with eggshell china. So I don' t think any of us said very much about time travelling in the interval between that Thursday and the next, though its odd potentialities ran, no doubt, in most of our minds: its plausibility, that is, its practical in- credibleness, the curious possibilities of anachronism and of utter confusion it suggested. For my own part, I was particularly preoccupied with the trick of the model. Мне кажется, в то время никто из нас серьезно не верил в Машину Времени. Дело в том, что Путешественник по Времени принадлежал к числу людей, которые слишком умны, чтобы им можно было слепо верить . Всегда казалось, что он себе на уме, никогда не было уверенности в том, что его обычная откровенность не таит какой-нибудь задней мысли или хитроумной уловки. Если бы ту же самую модель показал нам Филби, объяснив сущность дела теми же словами, мы проявили бы значительно больше доверия. Мы понимали бы, что им движет: всякий колбасник мог бы понять Филби; Но характер Путешественника по Времени был слишком причудлив, и мы инстинктивно не доверяли ему. Открытия и выводы, которые доставили бы славу человеку менее умному, у него казались лишь хитрыми трюками. Вообще достигать своих целей слишком легко - недальновидно. Серьезные, умные люди, с уважением относившиеся к нему, никогда не были уверены в том, что он не одурачит их просто ради шутки, и всегда чувствовали, что их репутация в его руках подобна тончайшему фарфору в руках ребенка. Вот почему, как мне кажется, ни один из нас всю следующую неделю, от четверга до четверга, ни словом не обмолвился о путешествии по Времени, хотя, без сомнения, оно заинтересовало всех: кажущаяся правдоподобность и вместе с тем практическая невероятность такого путешествия, забавные анахронизмы и полный хаос, который оно вызвало бы, - все это очень занимало нас. Что касается меня лично, то я особенно заинтересовался опытом с моделью.
That I remember discussing with the Medical Man, whom I met on Friday at the Linnaean. He said he had seen a similar thing at Tubingen, and laid considerable stress on the blowing out of the candle. But how the trick was done he could not explain. The next Thursday I went again to Richmond- - I suppose I was one of the Time Traveller's most constant guests- - and, arriving late, found four or five men already assembled in his drawing- room. The Medical Man was standing before the fire with a sheet of paper in one hand and his watch in the other. I looked round for the Time Traveller, and- - 'It's half-past seven now,' said the Medical Man. 'I suppose we'd better have dinner?' 'Where's?' said I, naming our host. 'You've just come? It's rather odd. He's unavoidably detained. He asks me in this note to lead off with dinner at seven if he' s not back. Says he' 11 explain when he comes.' ' It seems a pity to let the dinner spoil, ' said the Editor of a well-known daily paper; and thereupon the Doctor rang the bell. The Psychologist was the only person besides the Doctor and myself who had attended the previous dinner. The other men were Blank, the Editor aforementioned, a certain journalist, and another- - a quiet, shy man with a beard- - whom I didn' t know, and who, as far as my observation went, never opened his mouth all the evening. There was some speculation at the dinner- table about the Time Traveller's absence, and I suggested time travelling, in a half- jocular spirit. The Editor wanted that explained to him, and the Psychologist volunteered a wooden account of the ' ingenious paradox and trick' we had witnessed that day week. He was in the midst of his exposition when the door from the corridor opened slowly and without noise. I was facing the door, and saw it first. 'Hallo!' I said. 'At last! ' And the door opened wider, and the Time Traveller stood before us. I gave a cry of surprise. Помню, я поспорил об этом с Доктором, встретившись с ним в пятницу в Линнеев- ском обществе. Он говорил, что видел нечто подобное в Тюбингене, и придавал большое значение тому, что одна из свечей во время опыта погасла. Но как все это было проделано, он не мог объяснить. В следующий четверг я снова поехал в Ричмонд, так как постоянно бывал у Путешественника по Времени, и, немного запоздав, застал уже в гостиной четверых или пятерых знакомых. Доктор стоял перед камином с листком бумаги в одной руке и часами в другой. Я огляделся: Путешественника по Времени не было. - Половина восьмого, - сказал Доктор. - Мне кажется, пора садиться за стол. Но где же хозяин? - спросил я. Ага, вы только что пришли? Знаете, это становится странным. Его, по- видимому, что- то задержало. В этой записке он просит нас сесть за стол в семь часов, если он не вернется, и обещает потом объяснить, в чем дело. Досадно, если обед будет испорчен, сказал Редактор одной известной газеты . Доктор позвонил. Из прежних гостей, кроме меня и Доктора , был только один Психолог. Зато появились новые: Бленк - уже упомянутый нами Редактор, один журналист и еще какой- то тихий, застенчивый бородатый человек, которого я не знал и который, насколько я мог заметить, за весь вечер не проронил ни слова. За обедом высказывались всевозможные догадки о том, где сейчас хозяин. Я шутливо намекнул, что он путешествует по Времени. Редактор захотел узнать, что это значит, и Психолог принялся длинно и неинтересно рассказывать об "остроумном фокусе", очевидцами которого мы были неделю назад. В самой середине его рассказа дверь в коридор медленно и бесшумно отворилась. Я сидел напротив нее и первый заметил это. А! - воскликнул я. - Наконец- то! Дверь распахнулась настежь, и мы увидели Путешественника по Времени. У меня вырвался крик изумления.
'Good heavens! man, what's the matter? ' cried the Medical Man, who saw him next. And the whole tableful turned towards the door. He was in an amazing plight. His coat was dusty and dirty, and smeared with green down the sleeves; his hair disordered, and as it seemed to me greyer- - either with dust and dirt or because its colour had actually faded. His face was ghastly pale; his chin had a brown cut on it- - a cut half healed; his expression was haggard and drawn, as by intense suffering. For a moment he hesitated in the doorway, as if he had been dazzled by the light. Then he came into the room. He walked with just such a limp as I have seen in footsore tramps. We stared at him in silence , expecting him to speak. He said not a word, but came painfully to the table, and made a motion towards the wine. The Editor filled a glass of champagne, and pushed it towards him. He drained it, and it seemed to do him good: for he looked round the table, and the ghost of his old smile flickered across his face. 'What on earth have you been up to, man?' said the Doctor. The Time Traveller did not seem to hear. 'Don't let me disturb you, ' he said, with a certain faltering articulation. 'I'm all right. ' He stopped, held out his glass for more, and took it off at a draught. 'That's good,' he said. His eyes grew brighter, and a faint colour came into his cheeks. His glance flickered over our faces with a certain dull approval, and then went round the warm and comfortable room. Then he spoke again, still as it were feeling his way among his words. 'I'm going to wash and dress, and then I' 11 come down and explain things. . . . Save me some of that mutton. I'm starving for a bit of meat.' He looked across at the Editor, who was a rare visitor, and hoped he was all right. The Editor began a question. 'Tell you presently, ' said the Time Traveller. 'I'm- - funny! Be all right in a minute.' He put down his glass, and walked towards the staircase door. Again I remarked his lameness and the soft padding sound of his footfall, and standing up in my place, I saw his feet as he went out. He had nothing on them but a pair of tattered, blood-stained socks. Господи, что с вами? - воскликнул и Доктор. Все сидевшие за столом повернулись к двери. Вид у него был действительно странный. Его сюртук был весь в грязи, на рукавах проступали какие- то зеленые пятна; волосы были всклокочены и показались мне посеревшими от пыли или оттого, что они за это время выцвели. Лицо его было мертвенно- бледно, на подбородке виднелся темный, едва затянувшийся рубец, глаза дико блуждали, как у человека, перенесшего тяжкие страдания. С минуту он постоял в дверях, как будто ослепленный светом. Затем, прихрамывая, вошел в комнату. Так хромают бродяги, когда натрут ноги. Мы все выжидающе смотрели на него. Не произнося ни слова, он заковылял к столу и протянул руку к бутылке. Редактор налил шампанского и пододвинул ему бокал. Он осушил бокал залпом, и ему, казалось, стало лучше, - он обвел взглядом стол, и на лице его мелькнуло подобие обычной улыбки. - Что с вами случилось? - спросил Доктор. Путешественник по Времени, казалось, не слышал вопроса. - Не беспокойтесь, - сказал он, запинаясь. - Все в порядке. Он замолчал и снова протянул бокал, затем выпил его, как и прежде, залпом. - Вот хорошо, - сказал он. Глаза его заблестели, на щеках показался слабый румянец. Он взглянул на нас с одобрением и два раза прошелся из угла в угол комнаты, теплой и уютной... Потом заговорил, запинаясь и как будто с трудом подыскивая слова. - Я пойду приму ванну и переоденусь, а затем вернусь и все вам расскажу... Оставьте мне только кусочек баранины. Я смертельно хочу мяса. Он взглянул на Редактора, который редко бывал в его доме, и поздоровался с ним. Редактор что- то спросил у него. Дайте мне только одну минутку, и я вам отвечу, - сказал Путешественник по Времени. - Видите, в каком я виде. Но через минуту все будет в порядке. Он поставил бокал на стол и направился к двери. Я снова обратил внимание на его хромоту и шаркающую походку. Привстав со стула как раз в то мгновение, когда он выходил из комнаты, я поглядел на его ноги. На них не было ничего, кроме изорванных и окровавленных носков.
Then the door closed upon him. I had half a mind to follow, till I remembered how he detested any fuss about himself. For a minute, perhaps, my mind was woolgathering. Then, 'Remarkable Behaviour of an Eminent Scientist, ' I heard the Editor say, thinking (after his wont) in headlines. And this brought my attention back to the bright dinner- table. 'What's the game?' said the Journalist. 'Has he been doing the Amateur Cadger? I don't follow. ' I met the eye of the Psychologist, and read my own interpretation in his face. I thought of the Time Traveller limping painfully upstairs. I don't think any one else had noticed his lameness. Дверь закрылась. Я хотел его догнать, но вспомнил, как он ненавидит лишнюю суету. Несколько минут я не мог собраться с мыслями. - Странное Поведение Знаменитого Ученого, - услышал я голос Редактора, который по привычке мыслил всегда в форме газетных заголовков. Эти слова вернули меня к ярко освещенному обеденному столу. В чем дело? - спросил Журналист. - Что он, разыгрывает из себя бродягу, что ли? Ничего не понимаю. Я встретился взглядом с Психологом, и на его лице прочел отражение собственных мыслей. Я подумал о путешествии по Времени и о самом Путешественнике, ковылявшем теперь наверх по лестнице. Кажется, никто, кроме меня, не заметил его хромоты. The first to recover completely from this surprise was the Medical Man, who rang the bell - the Time Traveller hated to have servants waiting at dinner- for a hot plate. At that the Editor turned to his knife and fork with a grunt, and the Silent Man followed suit. The dinner was resumed. Conversation was exclamatory for a little while, with gaps of wonderment; and then the Editor got fervent in his curiosity. 'Does our friend eke out his modest income with a crossing? or has he his Nebuchadnezzar phases?' he inquired. 'I feel assured it's this business of the Time Machine,' I said, and took up the Psychologist's account of our previous meeting. The new guests were frankly incredulous. The Editor raised objections. 'What was this time travelling? A man couldn't cover himself with dust by rolling in a paradox, could he?' And then, as the idea came home to him, he resorted to caricature. Hadn't they any clothes- brushes in the Future? The Journalist too, would not believe at any price, and joined the Editor in the easy work of heaping ridicule on the whole thing. They were both the new kind of journalist- - very joyous, irreverent young men. Первым опомнился Доктор. Он позвонил - Путешественник по Времени не любил, чтобы прислуга находилась в комнате во время обеда, - и велел подать следующее блюдо. Проворчав что- то себе под нос, Редактор принялся орудовать ножом и вилкой, и Молчаливый Гость последовал его примеру. Все снова принялись за еду. Некоторое время разговор состоял из одних удивленных восклицаний, перемежавшихся молчанием. Любопытство Редактора достигло предела. - Не пополняет ли наш общий друг свои скромные доходы нищенством? - начал он снова. - Или с ним случилось то же самое, что с Навуходоносором? - Я убежден, что это имеет какое-то отношение к Машине Времени, сказал я и стал продолжать рассказ о нашей предыдущей встрече с того места, где остановился Психолог. Новые гости слушали с явным недоверием. Редактор принялся возражать. - Хорошенькое путешествие по Времени! - воскликнул он. - Подумайте только! Не может же человек покрыться пылью только потому, что запутался в своем парадоксе! Найдя эту мысль забавной, он принялся острить: Неужели в Будущем нет платяных щеток? Журналист тоже ни за что не хотел нам верить и присоединился к Редактору, легко нанизывая одну на другую насмешки и несообразности. Оба они были журналистами нового типа - веселые разбитные молодые люди.
1 Our Special Correspondent in the Day after Tomorrow reports,' the Journalist was saying- - or rather shouting- - when the Time Traveller came back. He was dressed in ordinary evening clothes, and nothing save his haggard look remained of the change that had startled me. 'I say,' said the Editor hilariously, 'these chaps here say you have been travelling into the middle of next week! Tell us all about little Rosebery, will you? What will you take for the lot?' The Time Traveller came to the place reserved for him without a word. He smiled quietly, in his old way. 'Where's my mutton?' he said. 'What a treat it is to stick a fork into meat again!' 'Story!' cried the Editor. 'Story be damned!' said the Time Traveller. 'I want something to eat. I won't say a word until I get some peptone into my arteries. Thanks. And the salt.' 'One word, ' said I. 'Have you been time travelling?' 'Yes,' said the Time Traveller, with his mouth full, nodding his head. 'I'd give a shilling a line for a verbatim note,' said the Editor. The Time Traveller pushed his glass towards the Silent Man and rang it with his fingernail; at which the Silent Man, who had been staring at his face, started convulsively, and poured him wine. The rest of the dinner was uncomfortable. For my own part, sudden questions kept on rising to my lips, and I dare say it was the same with the others. The Journalist tried to relieve the tension by telling anecdotes of Hettie Potter. The Time Traveller devoted his attention to his dinner, and displayed the appetite of a tramp. The Medical Man smoked a cigarette, and watched the Time Traveller through his eyelashes. The Silent Man seemed even more clumsy than usual, and drank champagne with regularity and determination out of sheer nervousness. At last the Time Traveller pushed his plate away, and looked round us. - Наш специальный корреспондент из послезавтрашнего дня сообщает! - сказал или, скорее, выкрикнул Журналист в то мгновение, когда Путешественник по Времени появился снова. Он был теперь в своем обычном костюме, и, кроме блуждающего взгляда, во внешности его не осталось никаких следов недавней перемены, которая меня так поразила. Вообразите, - весело сказал Редактор, - эти шутники утверждают, что вы побывали в середине будущей недели!.. Не расскажете ли вы нам что- нибудь о Роз- бери? Какой желаете гонорар? Не произнося ни слова, Путешественник по Времени подошел к оставленному для него месту. Он улыбался своей обычной спокойной улыбкой. - Где моя баранина? спросил он. - Какое наслаждение снова воткнуть вилку в кусок мяса! Выкладывайте! - закричал Редактор. К черту! - сказал Путешественник по Времени. - Я умираю с голоду. Не скажу ни слова, пока не подкреплюсь. Благодарю вас. И, будьте любезны, передайте соль. Одно только слово, - проговорил я. Вы путешествовали по Времени? Да, - ответил Путешественник по Времени с набитым ртом и кивнул головой. Готов заплатить по шиллингу за строчку! - сказал Редактор. Путешественник по Времени пододвинул к Молчаливому Человеку свой бокал и постучал по нему пальцем; Молчаливый Человек, пристально смотревший на него, нервно вздрогнул и налил вина. Обед показался мне бесконечно долгим. Я с трудом удерживался от вопросов, и думаю, то же самое было со всеми остальными. Журналист пытался поднять настроение, рассказывая анекдоты. Но Путешественник по Времени был поглощен обедом и ел с аппетитом настоящего бродяги. Доктор курил сигару и, прищурившись, незаметно наблюдал за ним. Молчаливый Человек, казалось, был застенчивей обыкновенного и нервно пил шампанское. Наконец Путешественник по Времени отодвинул тарелку и оглядел нас.
'I suppose I must apologize, ' he said. 11 was simply starving. I' ve had a most amazing time. ' He reached out his hand for a cigar, and cut the end. ' But come into the smoking- room. It's too long a story to tell over greasy plates. ' And ringing the bell in passing, he led the way into the adjoining room. ' You have told Blank, and Dash, and Chose about the machine?' he said to me, leaning back in his easy- chair and naming the three new guests. 'But the thing's a mere paradox,' said the Editor. ' I can't argue tonight. I don't mind telling you the story, but I can't argue. I will, ' he went on, 'tell you the story of what has happened to me, if you like, but you must refrain from interruptions. I want to tell it. Badly. Most of it will sound like lying. So be it! It's true- - every word of it, all the same. I was in my laboratory at four o'clock, and since then ... I've lived eight days ... such days as no human being ever lived before! I'm nearly worn out, but I shan't sleep till I've told this thing over to you. Then I shall go to bed. But no interruptions! Is it agreed?' Я должен извиниться перед вами, сказал он. - Простите! Я умирал с голоду. Со мной случилось удивительнейшее происшествие. Он протянул руку за сигарой и обрезал ее конец. - Перейдемте в курительную. Это слишком длинная история, чтобы рассказывать ее за столом, уставленным грязными тарелками. И, позвонив прислуге, он отвел нас в соседнюю комнату. Рассказывали вы Бленку, Дэшу и Чо- узу о Машине? - спросил он меня, откидываясь на спинку удобного кресла и указывая на троих новых гостей. Но ведь это просто парадокс, сказал Редактор. Сегодня я не в силах спорить. Рассказать могу, но спорить не в состоянии. Если хотите, я расскажу вам о том, что со мной случилось, но прошу не прерывать меня. Я чувствую непреодолимую потребность рассказать вам все. Знаю, что едва ли не весь мой рассказ покажется вам вымыслом. Пусть так! Но все- таки это правда - от первого до последнего слова. . . Сегодня в четыре часа дня я был в своей лаборатории, и с тех пор. . . за три часа прожил восемь дней... Восемь дней, каких не переживал еще ни один человек! Я измучен, но не лягу спать до тех пор, пока не расскажу вам все. Тогда только я смогу заснуть. Но не прерывайте меня. Согласны? 'Agreed,' said the Editor, and the rest of us echoed 'Agreed. ' And with that the Time Traveller began his story as I have set it forth. He sat back in his chair at first, and spoke like a weary man. Afterwards he got more animated. In writing it down I feel with only too much keenness the inadequacy of pen and ink- - and, above all, my own inadequacy- - to express its quality. You read, I will suppose, attentively enough; but you cannot see the speaker's white, sincere face in the bright circle of the little lamp, nor hear the intonation of his voice. You cannot know how his expression followed the turns of his story! Согласен, - сказал Редактор. И все мы повторили хором: - Согласны! И Путешественник по Времени начал свой рассказ, который я привожу здесь. Сначала он сидел, откинувшись на спинку кресла, и казался крайне утомленным, но потом понемногу оживился. Пересказывая его историю, я слишком глубоко чувствую полнейшее бессилие пера и чернил и, главное, собственную свою неспособность передать все эти характерные особенности. Вероятно, вы прочтете ее со вниманием, но не увидите бледного искреннего лица рассказчика, освещенного ярким светом лампы, и не услышите звука его голоса. Вы не сможете представить себе, как по ходу рассказа изменялось выражение этого лица.
Most of us hearers were in shadow, for the candles in the smoking- room had not been lighted, and only the face of the Journalist and the legs of the Silent Man from the knees downward were illuminated. At first we glanced now and again at each other. After a time we ceased to do that, and looked only at the Time Traveller's face. 11 told some of you last Thursday of the principles of the Time Machine, and showed you the actual thing itself, incomplete in the workshop. There it is now, a little travel- worn, truly; and one of the ivory bars is cracked, and a brass rail bent; but the rest of it's sound enough. I expected to finish it on Friday, but on Friday, when the putting together was nearly done, I found that one of the nickel bars was exactly one inch too short, and this I had to get remade; so that the thing was not complete until this morning. It was at ten о' clock to- day that the first of all Time Machines began its career. I gave it a last tap, tried all the screws again, put one more drop of oil on the quartz rod, and sat myself in the saddle. I suppose a suicide who holds a pistol to his skull feels much the same wonder at what will come next as I felt then. I took the starting lever in one hand and the stopping one in the other, pressed the first, and almost immediately the second. I seemed to reel; I felt a nightmare sensation of falling; and, looking round, I saw the laboratory exactly as before. Had anything happened? For a moment I suspected that my intellect had tricked me. Then I noted the clock. A moment before, as it seemed, it had stood at a minute or so past ten; now it was nearly half-past three! 'I drew a breath, set my teeth, gripped the starting lever with both hands, and went off with a thud. The laboratory got hazy and went dark. Mrs. Watchett came in and walked, apparently without seeing me, towards the garden door. I suppose it took her a minute or so to traverse the place, but to me she seemed to shoot across the room like a rocket. Большинство из нас сидело в тени: в курительной комнате не были зажжены свечи, а лампа освещала только лицо Журналиста и ноги Молчаливого Человека, да и то лишь до колен. Сначала мы молча переглядывались, но вскоре забыли обо всем и смотрели только на Путешественника по Времени. В прошлый четверг я объяснял уже некоторым из вас принцип действия моей Машины Времени и показывал ее, еще не законченную, в своей мастерской. Там она находится и сейчас, правда, немного потрепанная путешествием. Один из костяных стержней надломлен, и бронзовая полоса погнута, но все остальные части в исправности. Я рассчитывал закончить ее еще в пятницу, но, собрав все, заметил, что одна из никелевых деталей на целый дюйм короче, чем нужно. Пришлось снова ее переделывать. Вот почему моя Машина была закончена только сегодня. В десять часов утра первая в мире Машина Времени была готова к путешествию. В последний раз я осмотрел все, испробовал винты и, снова смазав кварцевую ось, сел в седло. Думаю, что самоубийца, который подносит револьвер к виску, испытывает такое же странное чувство, какое охватило меня, когда одной рукой я взялся за пусковой рычаг, а другой - за тормоз. Я быстро повернул первый и почти тотчас же второй. Мне показалось, что я покачнулся, испытав, будто в кошмаре, ощущение падения . Но, оглядевшись, я увидел свою лабораторию такой же, как и за минуту до этого. Произошло ли что-нибудь? На мгновение у меня мелькнула мысль, что все мои теории ошибочны. Я посмотрел на часы. Минуту назад, как мне казалось, часы показывали начало одиннадцатого, теперь же - около половины четвертого! Я вздохнул и, сжав зубы, обеими руками повернул пусковой рычаг. Лаборатория стала туманной и неясной. Вошла миссис Уотчет и, по-видимому, не замечая меня, двинулась к двери в сад. Для того чтобы перейти комнату, ей понадобилось, вероятно , около минуты, но мне показалось, что она пронеслась с быстротой ракеты.
I pressed the lever over to its extreme position. The night came like the turning out of a lamp, and in another moment came to- morrow. The laboratory grew faint and hazy, then fainter and ever fainter. To- morrow night came black, then day again, night again, day again, faster and faster still. An eddying murmur filled my ears, and a strange, dumb confusedness descended on my mind. II am afraid I cannot convey the peculiar sensations of time travelling. They are excessively unpleasant. There is a feeling exactly like that one has upon a switchback- - of a helpless headlong motion! I felt the same horrible anticipation, too, of an imminent smash. As I put on pace, night followed day like the flapping of a black wing. The dim suggestion of the laboratory seemed presently to fall away from me, and I saw the sun hopping swiftly across the sky, leaping it every minute, and every minute marking a day. I supposed the laboratory had been destroyed and I had come into the open air. I had a dim impression of scaffolding, but I was already going too fast to be conscious of any moving things. The slowest snail that ever crawled dashed by too fast for me. The twinkling succession of darkness and light was excessively painful to the eye. Then, in the intermittent darknesses , I saw the moon spinning swiftly through her quarters from new to full, and had a faint glimpse of the circling stars. Presently, as I went on, still gaining velocity, the palpitation of night and day merged into one continuous greyness; the sky took on a wonderful deepness of blue, a splendid luminous color like that of early twilight; the jerking sun became a streak of fire, a brilliant arch, in space; the moon a fainter fluctuating band; and I could see nothing of the stars, save now and then a brighter circle flickering in the blue. 'The landscape was misty and vague. I was still on the hill- side upon which this house now stands, and the shoulder rose above me grey and dim. I saw trees growing and changing like puffs of vapour, now brown, now green; they grew, spread, shivered, and passed away. Я повернул рычаг до отказа. Сразу наступила темнота, как будто потушили лампу, но в следующее же мгновение вновь стало светло. Я неясно различал лабораторию, которая становилась все более и более туманной. Вдруг наступила ночь, затем снова день, снова ночь и так далее, все быстрее. У меня шумело в ушах, и странное ощущение падения стало сильнее . Боюсь, что не сумею передать вам своеобразных ощущений путешествия по Времени. Чтобы понять меня, их надо испытать самому. Они очень неприятны. Как будто мчишься куда-то, беспомощный, с головокружительной быстротой. Предчувствие ужасного, неизбежного падения не покидает тебя. Пока я мчался таким образом, ночи сменялись днями, подобно взмахам крыльев. Скоро смутные очертания моей лаборатории исчезли, и я увидел солнце, каждую минуту делавшее скачок по небу от востока до запада, и каждую минуту наступал новый день. Я решил, что лаборатория разрушена и я очутился под открытым небом. У меня было такое чувство, словно я нахожусь на эшафоте, но я мчался слишком быстро, чтобы отдаваться такого рода впечатлениям. Самая медленная из улиток двигалась для меня слишком быстро. Мгновенная смена темноты и света была нестерпима для глаз. В секунды потемнения я видел луну, которая быстро пробегала по небу, меняя свои фазы от новолуния до полнолуния, видел слабое мерцание кружившихся звезд. Я продолжал мчаться так со все возрастающей скоростью, день и ночь слились наконец в сплошную серую пелену; небо окрасилось в ту удивительную синеву, приобрело тот чудесный оттенок, который появляется в ранние сумерки; метавшееся солнце превратилось в огненную полосу, дугой сверкавшую от востока до запада, а луна - в такую же полосу слабо струившегося света; я уже не мог видеть звезд и только изредка замечал то тут, то там светлые круги, опоясавшие небесную синеву. Вокруг меня все было смутно и туманно. Я все еще находился на склоне холма, на котором и сейчас стоит этот дом, и вершина его поднималась надо мной, серая и расплывчатая. Я видел, как деревья вырастали и изменяли форму подобно клубам дыма: то желтея, то зеленея, они росли, увеличивались и исчезали.
I saw huge buildings rise up faint and fair, and pass like dreams. The whole surface of the earth seemed changed- - melting and flowing under my eyes. The little hands upon the dials that registered my speed raced round faster and faster. Presently I noted that the sun belt swayed up and down, from solstice to solstice, in a minute or less, and that consequently my pace was over a year a minute; and minute by minute the white snow flashed across the world, and vanished, and was followed by the bright, brief green of spring. 1 The unpleasant sensations of the start were less poignant now. They merged at last into a kind of hysterical exhilaration. I remarked indeed a clumsy swaying of the machine, for which I was unable to account. But my mind was too confused to attend to it, so with a kind of madness growing upon me, I flung myself into futurity. At first I scarce thought of stopping, scarce thought of anything but these new sensations. But presently a fresh series of impressions grew up in my mind- - a certain curiosity and therewith a certain dread- - until at last they took complete possession of me. What strange developments of humanity, what wonderful advances upon our rudimentary civilization, I thought, might not appear when I came to look nearly into the dim elusive world that raced and fluctuated before my eyes! I saw great and splendid architecture rising about me, more massive than any buildings of our own time, and yet, as it seemed, built of glimmer and mist. I saw a richer green flow up the hillside, and remain there, without any wintry intermission. Even through the veil of my confusion the earth seemed very fair. And so my mind came round to the business of stopping. 1 The peculiar risk lay in the possibility of my finding some substance in the space which I, or the machine, occupied. So long as I travelled at a high velocity through time, this scarcely mattered; I was, so to speak, attenuated - was slipping like a vapour through the interstices of intervening substances! Я видел, как огромные великолепные здания появлялись и таяли, словно сновидения. Вся поверхность земли изменялась на моих глазах. Маленькие стрелки на циферблатах, показывавшие скорость Машины, вертелись все быстрей и быстрей. Скоро я заметил, что полоса, в которую превратилось солнце, колеблется то к северу, то к югу - от летнего солнцестояния к зимнему, - показывая, что я пролетал более года в минуту, и каждую минуту снег покрывал землю и сменялся яркой весенней зеленью. Первые неприятные ощущения полета стали уже не такими острыми. Меня вдруг охватило какое- то исступление. Я заметил странное качание машины, но не мог понять причины этого. В голове моей был какой- то хаос, и я в припадке безумия летел в будущее. Я не думал об остановке, забыл обо всем, кроме своих новых ощущений. Но вскоре эти ощущения сменились любопытством, смешанным со страхом. "Какие удивительные изменения, произошедшие с человечеством, какие чудесные достижения прогресса по сравнению с нашей зачаточной цивилизацией, - думал я, могут открыться передо мной, если я взгляну поближе на мир, смутно мелькающий сейчас перед моими глазами!" Я видел, как вокруг меня проносились огромные сооружения чудесной архитектуры, гораздо более величественные, чем здания нашего времени, но они казались как бы сотканными из мерцающего тумана. Я видел, как склон этого холма покрылся пышной зеленью, и она оставалась на нем круглый год - летом и зимой. Даже сквозь дымку, окутавшую меня, зрелище показалось мне удивительно прекрасным. И я почувствовал желание остановиться. Риск заключался в том, что пространство, необходимое для моего тела или моей Машины, могло оказаться уже занятым. Пока я с огромной скоростью мчался по Времени, это не имело значения, я находился, так сказать, в разжиженном состоянии, подобно пару, скользил между встречавшимися предметами.
But to come to a stop involved the jamming of myself, molecule by molecule, into whatever lay in my way; meant bringing my atoms into such intimate contact with those of the obstacle that a profound chemical reaction- - possibly a far-reaching explosion - would result, and blow myself and my apparatus out of all possible dimensions - into the Unknown. This possibility had occurred to me again and again while I was making the machine; but then I had cheerfully accepted it as an unavoidable risk - one of the risks a man has got to take! Now the risk was inevitable, I no longer saw it in the same cheerful light. The fact is that, insensibly, the absolute strangeness of everything, the sickly jarring and swaying of the machine, above all, the feeling of prolonged falling, had absolutely upset my nerve. I told myself that I could never stop, and with a gust of petulance I resolved to stop forthwith. Like an impatient fool, I lugged over the lever, and incontinently the thing went reeling over, and I was flung headlong through the air. 1 There was the sound of a clap of thunder in my ears. I may have been stunned for a moment. A pitiless hail was hissing round me, and I was sitting on soft turf in front of the overset machine. Everything still seemed grey, but presently I remarked that the confusion in my ears was gone. I looked round me. I was on what seemed to be a little lawn in a garden, surrounded by rhododendron bushes, and I noticed that their mauve and purple blossoms were dropping in a shower under the beating of the hailstones. The rebounding, dancing hail hung in a cloud over the machine, and drove along the ground like smoke. In a moment I was wet to the skin. "Fine hospitality," said I, "to a man who has travelled innumerable years to see you." 1 Presently I thought what a fool I was to get wet. I stood up and looked round me. A colossal figure, carved apparently in some white stone, loomed indistinctly beyond the rhododendrons through the hazy downpour. But all else of the world was invisible. 'My sensations would be hard to describe. As the columns of hail grew thinner, I saw the white figure more distinctly. Но остановка означала, что я должен молекула за молекулой втиснуться в то, что оказалось бы на моем пути; атомы моего тела должны были войти в такое близкое соприкосновение с атомами этого препятствия, что между теми и другими могла произойти бурная химическая реакция - возможно, мощный взрыв, после которого я вместе с моим аппаратом оказался бы по ту сторону всех измерений, в Неизвестности. Эта возможность не раз приходила мне на ум, пока я делал Машину, но тогда я считал, что это риск, на который необходимо идти. Теперь же, когда опасность казалась неминуемой, я уже не смотрел на нее так беззаботно. Дело в том, что новизна окружающего, утомительные колебания и дрожание Машины, а главное, непрерывное ощущение падения - все это незаметно действовало на мои нервы. Я говорил себе, что уже больше не смогу никогда остановиться, и вдруг, досадуя на самого себя, решил это сделать. Как глупец, я нетерпеливо рванул тормоз. Машина в то же мгновение перевернулась, и я стремглав полетел в пространство. В ушах у меня словно загремел гром. На мгновение я был оглушен. Потом с трудом сел и осмотрелся. Вокруг меня со свистом падал белый град, а я сидел на мягком дерне перед опрокинутой Машиной. Все вокруг по-прежнему казалось серым, но вскоре я почувствовал, что шум в ушах прошел, и еще раз осмотрелся: я находился, по- видимому, в саду, на лужайке, обсаженной рододендронами, лиловые и алые цветы падали на землю под ударами града. Отскакивая от земли, градины летели над моей Машиной, таяли и сырым покровом стлались по земле. В одно мгновение я промок до костей. "Нечего сказать, хорошенькое гостеприимство, сказал я, - так встречать человека, который промчался сквозь бесчисленное множество лет" . Решив, что мокнуть дольше было бы глупо, я встал и осмотрелся. Сквозь туман за рододендронами я смутно различил колоссальную фигуру, высеченную, по- видимому, из какого- то белого камня. Больше ничего видно не было. Трудно передать мои ощущения. Когда град стал падать реже, я подробно разглядел белую фигуру.
It was very large, for a silver birch- tree touched its shoulder. It was of white marble, in shape something like a winged sphinx, but the wings, instead of being carried vertically at the sides, were spread so that it seemed to hover. The pedestal, it appeared to me, was of bronze, and was thick with verdigris. It chanced that the face was towards me; the sightless eyes seemed to watch me; there was the faint shadow of a smile on the lips. It was greatly weather- worn, and that imparted an unpleasant suggestion of disease. I stood looking at it for a little space - half a minute, perhaps, or half an hour. It seemed to advance and to recede as the hail drove before it denser or thinner. At last I tore my eyes from it for a moment and saw that the hail curtain had worn threadbare, and that the sky was lightening with the promise of the sun. 11 looked up again at the crouching white shape, and the full temerity of my voyage came suddenly upon me. What might appear when that hazy curtain was altogether withdrawn? What might not have happened to men? What if cruelty had grown into a common passion? What if in this interval the race had lost its manliness and had developed into something inhuman, unsympathetic, and overwhelmingly powerful? I might seem some old- world savage animal, only the more dreadful and disgusting for our common likeness - a foul creature to be incontinently slain. 'Already I saw other vast shapes huge buildings with intricate parapets and tall columns, with a wooded hillside dimly creeping in upon me through the lessening storm. I was seized with a panic fear. I turned frantically to the Time Machine, and strove hard to readjust it. As I did so the shafts of the sun smote through the thunderstorm. The grey downpour was swept aside and vanished like the trailing garments of a ghost. Above me, in the intense blue of the summer sky, some faint brown shreds of cloud whirled into nothingness. The great buildings about me stood out clear and distinct, shining with the wet of the thunderstorm, and picked out in white by the unmelted hailstones piled along their courses. Она была очень велика - высокий серебристый тополь достигал только до ее половины. Высечена она была из белого мрамора и походила на сфинкса, но крылья его не прилегали к телу, а были распростерты , словно он собирался взлететь. Пьедестал показался мне сделанным из бронзы и позеленевшим от времени. Лицо Сфинкса было обращено прямо ко мне, его незрячие глаза, казалось, смотрели на меня, и по губам скользила улыбка. Он был сильно потрепан непогодами, словно изъеден болезнью. Я стоял и глядел на него, быть может, полминуты, а может, и полчаса. Казалось, он то приближался, то отступал, смотря по тому, гуще или реже падал град. Наконец я отвел от него глаза и увидел, что завеса града прорвалась, небо прояснилось и скоро должно появиться солнце. Я снова взглянул на белую фигуру Сфинкса и вдруг понял все безрассудство своего путешествия. Что увижу я, когда совершенно рассеется этот туман? Разве люди не могли за это время измениться до неузнаваемости? Что, если они стали еще более жестокими? Что, если они совершенно утратили свой облик и превратились во что- то нечеловеческое, мерзкое и неодолимо сильное? А может быть, я увижу какое-нибудь дикое животное, еще более ужасное и отвратительное в силу своего человекоподобия, чем первобытный ящер, - мерзкую тварь, которую следовало бы тотчас же уничтожить. Я взглянул кругом, и увидел вдали какие- то очертания - огромные дома с затейливыми перилами и высокими колоннами, они отчетливо выступали на фоне лесистого холма, который сквозь утихающую грозу смутно вырисовывался передо мною. Панический страх вдруг овладел мною. Как безумный, я бросился к Машине Времени и попробовал снова запустить ее. Солнечные лучи пробились тем временем сквозь облака. Серая завеса расплылась и исчезла. Надо мной в густой синеве летнего неба растаяло несколько последних облаков. Ясно и отчетливо показались огромные здания, блестевшие после обмывшей их грозы и украшенные белыми грудами не растаявших градин.
I felt naked in a strange world. I felt as perhaps a bird may feel in the clear air, knowing the hawk wings above and will swoop. My fear grew to frenzy. I took a breathing space, set my teeth, and again grappled fiercely, wrist and knee, with the machine. It gave under my desperate onset and turned over. It struck my chin violently. One hand on the saddle, the other on the lever, I stood panting heavily in attitude to mount again. 1 But with this recovery of a prompt retreat my courage recovered. I looked more curiously and less fearfully at this world of the remote future. In a circular opening, high up in the wall of the nearer house, I saw a group of figures clad in rich soft robes. They had seen me, and their faces were directed towards me. 'Then I heard voices approaching me. Coming through the bushes by the White Sphinx were the heads and shoulders of men running. One of these emerged in a pathway leading straight to the little lawn upon which I stood with my machine. He was a slight creature - perhaps four feet high - clad in a purple tunic, girdled at the waist with a leather belt. Sandals or buskins - I could not clearly distinguish which - were on his feet; his legs were bare to the knees, and his head was bare. Noticing that, I noticed for the first time how warm the air was. 'He struck me as being a very beautiful and graceful creature, but indescribably frail. His flushed face reminded me of the more beautiful kind of consumptive- - that hectic beauty of which we used to hear so much. At the sight of him I suddenly regained confidence. I took my hands from the machine. ' In another moment we were standing face to face, I and this fragile thing out of futurity. He came straight up to me and laughed into my eyes. The absence from his bearing of any sign of fear struck me at once. Then he turned to the two others who were following him and spoke to them in a strange and very sweet and liquid tongue. 'There were others coming, and presently a little group of perhaps eight or ten of these exquisite creatures were about me. One of them addressed me. Я чувствовал себя совершенно беззащитным в этом неведомом мире. Вероятно, то же самое ощущает птичка, видя, как парит ястреб, собирающийся на нее броситься. Мой страх граничил с безумием. Я собрался с силами, сжал зубы, руками и ногами уперся в Машину, чтобы перевернуть ее. Она поддалась моим отчаянным усилиям и, наконец, перевернулась, сильно ударив меня по подбородку. Одной рукой держась за сиденье, другой - за рычаг, я стоял, тяжело дыша, готовый снова взобраться на нее. Но вместе с возможностью отступления ко мне снова вернулось мужество. С любопытством, к которому примешивалось все меньше страха, я взглянул на этот мир далекого будущего. Под аркой в стене ближайшего дома я увидел несколько фигур в красивых свободных одеждах. Они меня тоже увидели: их лица были обращены ко мне. Затем я услышал приближающиеся голоса. Из- за кустов позади Белого Сфинкса показались головы и плечи бегущих людей. Один из них выскочил на тропинку, ведущую к лужайке, где я стоял рядом со своей Машиной. Это было маленькое существо не более четырех футов ростом, одетое в пурпуровую тунику, перехваченную у талии кожаным ремнем. На ногах у него были не то сандалии, не то котурны. Ноги до колен были обнажены, и голова не покрыта. Обратив внимание на его легкую одежду, я впервые почувствовал, какой теплый был там воздух. Подбежавший человек показался мне удивительно прекрасным, грациозным, но чрезвычайно хрупким существом. Его залитое румянцем лицо напомнило мне лица больных чахоткой, - ту чахоточную красоту, о которой так часто приходится слышать. При виде его я внезапно почувствовал уверенность и отдернул руку от Машины. Через мгновение мы уже стояли лицом к лицу - я и это хрупкое существо далекого будущего. Он смело подошел ко мне и приветливо улыбнулся. Это полное отсутствие страха чрезвычайно поразило меня. Он повернулся к двум другим, которые подошли вслед за ним, и заговорил с ними на странном, очень нежном и певучем языке . Тем временем подоспели другие, и скоро вокруг меня образовалась группа из восьми или десяти очень изящных созданий. Один из них обратился ко мне с каким-то вопросом.
It came into my head, oddly enough, that my voice was too harsh and deep for them. So I shook my head, and, pointing to my ears, shook it again. He came a step forward, hesitated, and then touched my hand. Then I felt other soft little tentacles upon my back and shoulders . They wanted to make sure I was real. There was nothing in this at all alarming. Indeed, there was something in these pretty little people that inspired confidence- - a graceful gentleness, a certain childlike ease. And besides, they looked so frail that I could fancy myself flinging the whole dozen of them about like nine- pins. But I made a sudden motion to warn them when I saw their little pink hands feeling at the Time Machine. Happily then, when it was not too late, I thought of a danger I had hitherto forgotten, and reaching over the bars of the machine I unscrewed the little levers that would set it in motion, and put these in my pocket. Then I turned again to see what I could do in the way of communication. 'And then, looking more nearly into their features, I saw some further peculiarities in their Dresden-china type of prettiness. Their hair, which was uniformly curly, came to a sharp end at the neck and cheek; there was not the faintest suggestion of it on the face, and their ears were singularly minute. The mouths were small, with bright red, rather thin lips, and the little chins ran to a point. The eyes were large and mild; and- - this may seem egotism on my part- - I fancied even that there was a certain lack of the interest I might have expected in them. 'As they made no effort to communicate with me, but simply stood round me smiling and speaking in soft cooing notes to each other, I began the conversation. I pointed to the Time Machine and to myself. Then hesitating for a moment how to express time, I pointed to the sun. At once a quaintly pretty little figure in chequered purple and white followed my gesture, and then astonished me by imitating the sound of thunder. He знаю почему, но мне пришло вдруг в голову, что мой голос должен показаться им слишком грубым и резким. Поэтому я только покачал головой и указал на свои уши. Тот, кто обратился ко мне, сделал шаг вперед, остановился в нерешительности и дотронулся до моей руки. Я почувствовал еще несколько таких же нежных прикосновений на плечах и на спине. Они хотели убедиться, что я действительно существую. В их движениях не было решительно ничего внушающего опасение. Наоборот, в этих милых маленьких существах было что- то вызывающее доверие, какая- то грациозная мягкость, какая-то детская непринужденность. К тому же они были такие хрупкие, что, казалось, можно совсем легко в случае нужды разбросать их, как кегли, - целую дюжину одним толчком. Однако, заметив, что маленькие руки принялись ощупывать Машину Времени, я сделал предостерегающее движение. Я вдруг вспомнил то, о чем совершенно забыл, что она может внезапно исчезнуть, - вывинтил, нагнувшись над стержнями, рычажки, приводящие Машину в движение, и положил их в карман. Затем снова повернулся к этим людям, раздумывая, как бы мне с ними объясниться. Я пристально разглядывал их изящные фигурки, напоминавшие дрезденские фарфоровые статуэтки. Их короткие волосы одинаково курчавились, на лице не было видно ни малейшего признака растительности, уши были удивительно маленькие. Рот крошечный, с ярко- пунцовыми, довольно тонкими губами, подбородок остроконечный. Глаза большие и кроткие, но - не сочтите это за тщеславие! - в них недоставало выражения того интереса ко мне, какого я был вправе ожидать. Они больше не делали попыток объясняться со мной и стояли, улыбаясь и переговариваясь друг с другом нежными воркующими голосами. Я первым начал разговор. Указал рукой на Машину Времени, потом на самого себя. После этого, поколебавшись, как лучше выразить понятие о Времени, указал на солнце. Тотчас же одно изящное существо, одетое в клетчатую пурпурно-белую одежду, повторило мой жест и, несказанно поразив меня, издало звук, подражая грому.
'For a moment I was staggered, though the import of his gesture was plain enough. The question had come into my mind abruptly: were these creatures fools? You may hardly understand how it took me. You see I had always anticipated that the people of the year Eight Hundred and Two Thousand odd would be incredibly in front of us in knowledge, art, everything. Then one of them suddenly asked me a question that showed him to be on the intellectual level of one of our five- year- old children- - asked me, in fact, if I had come from the sun in a thunderstorm! It let loose the judgment I had suspended upon their clothes, their frail light limbs, and fragile features. A flow of disappointment rushed across my mind. For a moment I felt that I had built the Time Machine in vain. ' I nodded, pointed to the sun, and gave them such a vivid rendering of a thunderclap as startled them. They all withdrew a pace or so and bowed. Then came one laughing towards me, carrying a chain of beautiful flowers altogether new to me, and put it about my neck. The idea was received with melodious applause; and presently they were all running to and fro for flowers, and laughingly flinging them upon me until I was almost smothered with blossom. You who have never seen the like can scarcely imagine what delicate and wonderful flowers countless years of culture had created. Then someone suggested that their plaything should be exhibited in the nearest building, and so I was led past the sphinx of white marble, which had seemed to watch me all the while with a smile at my astonishment, towards a vast grey edifice of fretted stone. As I went with them the memory of my confident anticipations of a profoundly grave and intellectual posterity came, with irresistible merriment, to my mind. 'The building had a huge entry, and was altogether of colossal dimensions. I was naturally most occupied with the growing crowd of little people, and with the big open portals that yawned before me shadowy and mysterious. My general impression of the world I saw over their heads was a tangled waste of beautiful bushes and flowers, a long neglected and yet weedless garden. На мгновение я удивился, хотя смысл жеста был вполне ясен. Мне вдруг пришла мысль: а не имею ли я дело просто- напросто с дураками? Вы едва ли поймете, как это поразило меня. Я всегда держался того мнения, что люди эпохи восемьсот второй тысячи лет, куда я залетел, судя по счетчику моей Машины, уйдут невообразимо дальше нас в науке, искусстве и во всем остальном. И вдруг один из них задает мне вопрос, показывающий, что его умственный уровень не выше уровня нашего пятилетнего ребенка: он всерьез спрашивает меня, не упал ли я с солнца во время грозы? И потом, эта их яркая одежда, хрупкое, изящное сложение и нежные черты лица. Я почувствовал разочарование и на мгновение подумал, что напрасно трудился над своей Машиной Времени. Кивнув головой, я указал на солнце и так искусно изобразил гром, что все они отскочили от меня на шаг или два и присели от страха. Но тотчас снова ободрились , и один, смеясь, подошел ко мне с гирляндой чудесных и совершенно неизвестных мне цветов. Он обвил гирляндой мою шею под мелодичные одобрительные возгласы остальных. Все принялись рвать цветы, и, смеясь, обвивать ими меня, пока наконец я не стал задыхаться от благоухания. Вы, никогда не видевшие ничего подобного, вряд ли можете представить себе, какие чудесные, нежные цветы создала культура, этого невообразимо далекого от нас времени. Кто- то, видимо, подал мысль выставить меня в таком виде в ближайшем здании, и они повели меня к высокому серому, покрытому трещинами каменному дворцу, мимо Сфинкса из белого мрамора, который, казалось, все время с легкой усмешкой смотрел на мое изумление. Идя с ними, я едва удержался от смеха при воспоминании о том, как самоуверенно предсказывал вам несколько дней назад серьезность и глубину ума людей будущего. Здание, куда меня вели, имело огромный портал, да и все оно было колоссальных размеров. Я с интересом рассматривал огромную, все растущую толпу этих маленьких существ и зияющий вход, темный и таинственный. Общее впечатление от окружающего было таково, как будто весь мир покрыт густой порослью красивых кустов и цветов, словно давно запущенный, но все еще прекрасный сад.
I saw a number of tall spikes of strange white flowers, measuring a foot perhaps across the spread of the waxen petals. They grew scattered, as if wild, among the variegated shrubs, but, as I say, I did not examine them closely at this time. The Time Machine was left deserted on the turf among the rhododendrons . 1 The arch of the doorway was richly carved, but naturally I did not observe the carving very narrowly, though I fancied I saw suggestions of old Phoenician decorations as I passed through, and it struck me that they were very badly broken and weather- worn. Several more brightly clad people met me in the doorway, and so we entered, I, dressed in dingy nineteenth-century garments, looking grotesque enough, garlanded with flowers, and surrounded by an eddying mass of bright, soft- colored robes and shining white limbs, in a melodious whirl of laughter and laughing speech. 1 The big doorway opened into a proportionately great hall hung with brown. The roof was in shadow, and the windows, partially glazed with coloured glass and partially unglazed, admitted a tempered light. The floor was made up of huge blocks of some very hard white metal, not plates nor slabs- - blocks, and it was so much worn, as I judged by the going to and fro of past generations, as to be deeply channelled along the more frequented ways. Transverse to the length were innumerable tables made of slabs of polished stone, raised perhaps a foot from the floor, and upon these were heaps of fruits. Some I recognized as a kind of hypertrophied raspberry and orange, but for the most part they were strange. 1 Between the tables was scattered a great number of cushions. Upon these my conductors seated themselves, signing for me to do likewise. With a pretty absence of ceremony they began to eat the fruit with their hands, flinging peel and stalks, and so forth, into the round openings in the sides of the tables. I was not loath to follow their example, for I felt thirsty and hungry. As I did so I surveyed the hall at my leisure. Я видел высокие стебли и нежные головки странных белых цветов. Они были около фута в диаметре, имели прозрачный восковой оттенок и росли дико среди разнообразных кустарников; в то время я не мог хорошенько рассмотреть их. Моя Машина Времени осталась без присмотра среди рододендронов . Свод был украшен чудесной резьбой, но я, конечно, не успел ее как следует рассмотреть , хотя, когда я проходил под ним, мне показалось, что он сделан в древнефиникийском стиле, и меня поразило, что резьба сильно попорчена и стерта. Под взрывы мелодичного смеха и веселые разговоры меня встретило на пороге несколько существ, одетых в еще более светлые одежды, и я вошел внутрь в своем неподходящем темном одеянии девятнадцатого века. Я не мог не чувствовать, что вид у меня довольно забавный, - я был весь увешан гирляндами цветов и окружен волнующейся толпой людей, облаченных в светлые, нежных расцветок одежды, сверкавших белизной обнаженных рук и смеявшихся и мелодично ворковавших. Большая дверь вела в огромный, завешанный коричневой тканью зал. Потолок его был в тени, а через окна с яркими цветными стеклами, а местами совсем не застекленные, лился мягкий, приятный свет. Пол состоял из какого- то очень твердого белого металла - это были не плитки и не пластинки, а целые глыбы, но шаги бесчисленных поколений даже в этом металле выбили местами глубокие колеи. Поперек зала стояло множество низких столов, сделанных из полированного камня, высотою не больше фута, - на них лежали груды плодов. В некоторых я узнал что- то вроде огромной малины, другие были похожи на апельсины, но большая часть была мне совершенно неизвестна. Между столами было разбросано множество мягких подушек. Мои спутники расселись на них и знаками указали мне мое место. С милой непринужденностью они принялись есть плоды, беря их руками и бросая шелуху и огрызки в круглые отверстия по бокам столов. Я не заставил себя долго просить, так как чувствовал сильный голод и жажду. Поев, я принялся осматривать зал.
'And perhaps the thing that struck me most was its dilapidated look. The stained-glass windows, which displayed only a geometrical pattern, were broken in many places, and the curtains that hung across the lower end were thick with dust. And it caught my eye that the corner of the marble table near me was fractured. Nevertheless, the general effect was extremely rich and picturesque. There were, perhaps, a couple of hundred people dining in the hall, and most of them, seated as near to me as they could come, were watching me with interest, their little eyes shining over the fruit they were eating. All were clad in the same soft and yet strong, silky material . 'Fruit, by the by, was all their diet. These people of the remote future were strict vegetarians, and while I was with them, in spite of some carnal cravings, I had to be frugivorous also. Indeed, I found afterwards that horses, cattle, sheep, dogs, had followed the Ichthyosaurus into extinction. But the fruits were very delightful; one, in particular, that seemed to be in season all the time I was there- - a floury thing in a three-sided husk - was especially good, and I made it my staple. At first I was puzzled by all these strange fruits, and by the strange flowers I saw, but later I began to perceive their import. 'However, I am telling you of my fruit dinner in the distant future now. So soon as my appetite was a little checked, I determined to make a resolute attempt to learn the speech of these new men of mine. Clearly that was the next thing to do. The fruits seemed a convenient thing to begin upon, and holding one of these up I began a series of interrogative sounds and gestures. I had some considerable difficulty in conveying my meaning. At first my efforts met with a stare of surprise or inextinguishable laughter, but presently a fair-haired little creature seemed to grasp my intention and repeated a name. They had to chatter and explain the business at great length to each other, and my first attempts to make the exquisite little sounds of their language caused an immense amount of amusement. Меня особенно поразил его запущенный вид. Цветные оконные стекла, составлявшие узоры лишь строго геометрические, во многих местах были разбиты, а тяжелые занавеси покрылись густым слоем пыли. Мне также бросилось в глаза, что угол мраморного стола, за которым я сидел, отбит. Несмотря на это, зал был удивительно живописен. В нем находилось, может быть, около двухсот человек, и большинство из них с любопытством теснилось вокруг меня. Их глаза весело блестели, а белые зубы деликатно грызли плоды. Все они были одеты в очень мягкие, но прочные шелковистые ткани. Фрукты были их единственной пищей. Эти люди далекого будущего были строгими вегетарианцами, и на время я принужден был сделаться таким же травоядным, несмотря на потребность в мясе. Впоследствии я узнал, что лошади, рогатый скот, овцы, собаки в это время уже вымерли, как вымерли когда- то ихтиозавры. Однако плоды были восхитительны, в особенности один плод (который, по-видимому, созрел во время моего пребывания там), с мучнистой мякотью, заключенной в трехгранную скорлупу. Он стал моей главной пищей. Я был поражен удивительными плодами и чудесными цветами, но не знал, откуда они берутся: только позднее я начал это понимать . Таков был мой первый обед в далеком будущем. Немного насытившись, я решил сделать попытку научиться языку этих новых для меня людей. Само собой разумеется, это было необходимо. Плоды показались мне подходящим предметом для начала, и, взяв один из них, я попробовал объясниться при помощи вопросительных звуков и жестов. Мне стоило немалого труда заставить их понимать меня. Сначала все мои слова и жесты вызывали изумленные взгляды и бесконечные взрывы смеха, но вдруг одно белокурое существо, казалось, поняло мое намерение и несколько раз повторило какое- то слово. Все принялись болтать и перешептываться друг с другом, а потом наперебой начали весело обучать меня своему языку. Но мои первые попытки повторить их изящные короткие слова вызывали у них новые взрывы неподдельного веселья.
However, I felt like a schoolmaster amidst children, and persisted, and presently I had a score of noun substantives at least at my command; and then I got to demonstrative pronouns, and even the verb "to eat." But it was slow work, and the little people soon tired and wanted to get away from my interrogations, so I determined, rather of necessity, to let them give their lessons in little doses when they felt inclined. And very little doses I found they were before long, for I never met people more indolent or more easily fatigued. 'A queer thing I soon discovered about my little hosts, and that was their lack of interest. They would come to me with eager cries of astonishment, like children, but like children they would soon stop examining me and wander away after some other toy. The dinner and my conversational beginnings ended, I noted for the first time that almost all those who had surrounded me at first were gone. It is odd, too, how speedily I came to disregard these little people. I went out through the portal into the sunlit world again as soon as my hunger was satisfied. I was continually meeting more of these men of the future, who would follow me a little distance, chatter and laugh about me, and, having smiled and gesticulated in a friendly way, leave me again to my own devices. 1 The calm of evening was upon the world as I emerged from the great hall, and the scene was lit by the warm glow of the setting sun. At first things were very confusing. Everything was so entirely different from the world I had known- - even the flowers. The big building I had left was situated on the slope of a broad river valley, but the Thames had shifted perhaps a mile from its present position. I resolved to mount to the summit of a crest, perhaps a mile and a half away, from which I could get a wider view of this our planet in the year Eight Hundred and Two Thousand Seven Hundred and One A.D. For that, I should explain, was the date the little dials of my machine recorded. 'As I walked I was watching for every impression that could possibly help to explain the condition of ruinous splendour in which I found the world - for ruinous it was. Несмотря на то, что я брал у них уроки, я все- таки чувствовал себя как школьный учитель в кругу детей. Скоро я заучил десятка два существительных, а затем дошел до указательных местоимений и даже до глагола "есть" . Но это была трудная работа, быстро наскучившая маленьким существам, и я почувствовал, что они уже избегают моих вопросов. По необходимости пришлось брать уроки понемногу и только тогда, когда мои новые знакомые сами этого хотели. А это бывало не часто я никогда не встречал таких беспечных и быстро утомляющихся людей. Всего более поразило меня в этом новом мире почти полное отсутствие любознательности у людей. Они, как дети, подбегали ко мне с криками изумления и, быстро оглядев меня, уходили в поисках какой-нибудь новой игрушки. Когда все поели, и я перестал их расспрашивать, то впервые заметил, что в зале уже нет почти никого из тех людей, которые окружали меня вначале. И, как это ни странно, я сам быстро почувствовал равнодушие к этому маленькому народу. Утолив голод, я вышел через портал на яркий солнечный свет. Мне всюду попадалось на пути множество этих маленьких людей будущего. Они недолго следовали за мной, смеясь и переговариваясь, а потом, перестав смеяться, предоставляли меня самому себе. Когда я вышел из зала, в воздухе уже разлилась вечерняя тишина, и все вокруг было окрашено теплыми лучами заходящего солнца. Сначала окружающее казалось мне удивительно странным. Все здесь так не походило на тот мир, который я знал, - все, вплоть до цветов. Огромное здание, из которого я вышел, стояло на склоне речной долины, но Темза по меньшей мере на милю изменила свое теперешнее русло. Я решил добраться до вершины холма, лежавшего от меня на расстоянии примерно полутора миль, чтобы с его высоты поглядеть на нашу планету в восемьсот две тысячи семьсот первом году нашей эры именно эту дату показывала стрелка на циферблате моей Машины. По дороге я искал хоть какое-нибудь объяснение тому гибнущему великолепию, в состоянии которого я нашел мир, так как это великолепие, несомненно, гибло.
A little way up the hill, for instance, was a great heap of granite, bound together by masses of aluminium, a vast labyrinth of precipitous walls and crumpled heaps, amidst which were thick heaps of very beautiful pagoda- like plants- - nettles possibly- - but wonderfully tinted with brown about the leaves, and incapable of stinging. It was evidently the derelict remains of some vast structure, to what end built I could not determine. It was here that I was destined, at a later date, to have a very strange experience- - the first intimation of a still stranger discovery- - but of that I will speak in its proper place. Немного выше на холме я увидел огромные груды гранита, скрепленные полосами алюминия, гигантский лабиринт отвесных стен и кучи расколовшихся на мелкие куски камней, между которыми густо росли удивительно красивые растения. Возможно, что это была крапива, но ее листья были окрашены в чудесный коричневый цвет и не были жгучими, как у нашей крапивы. Вблизи были руины какого- то огромного здания, непонятно для чего предназначенного . Здесь мне пришлось впоследствии сделать одно странное открытие, но об этом я вам расскажу потом. 'Looking round with a sudden thought, from a terrace on which I rested for a while, I realized that there were no small houses to be seen. Apparently the single house, and possibly even the household, had vanished. Here and there among the greenery were palace- like buildings, but the house and the cottage, which form such characteristic features of our own English landscape, had disappeared. Я присел на уступе холма, чтобы немного отдохнуть, и, оглядевшись вокруг, заметил, что нигде не видно маленьких домов. По-видимому, частный дом и частное хозяйство окончательно исчезли. То тут, то там среди зелени виднелись огромные здания, похожие на дворцы, но нигде не было тех домиков и коттеджей, которые так характерны для современного английского пейзажа. '"Communism," said I to myself. 'And on the heels of that came another thought. I looked at the half- dozen little figures that were following me. Then, in a flash, I perceived that all had the same form of costume, the same soft hairless visage, and the same girlish rotundity of limb. It may seem strange, perhaps, that I had not noticed this before. But everything was so strange. Now, I saw the fact plainly enough. In costume, and in all the differences of texture and bearing that now mark off the sexes from each other, these people of the future were alike. And the children seemed to my eyes to be but the miniatures of their parents. I judged, then, that the children of that time were extremely precocious, physically at least, and I found afterwards abundant verification of my opinion. "Коммунизм", - сказал я сам себе. А следом за этой мыслью возникла другая. Я взглянул на маленьких людей, которые следовали за мной, и вдруг заметил, что на всех одежда всевозможных светлых цветов, но одинакового покроя, у всех те же самые безбородые лица, та же девичья округленность конечностей. Может показаться странным, что я не заметил этого раньше, но все вокруг меня было так необычно. Теперь это бросилось мне в глаза. Мужчины и женщины будущего не отличались друг от друга ни костюмом, ни телосложением, ни манерами, одним словом, ничем, что теперь отличает один пол от другого. И дети, казалось, были просто миниатюрными копиями своих родителей. Поэтому я решил, что дети этой эпохи отличаются удивительно ранним развитием, по крайней мере, в физическом отношении, и это мое мнение подтвердилось впоследствии множеством доказательств.
1 Seeing the ease and security in which these people were living, I felt that this close resemblance of the sexes was after all what one would expect; for the strength of a man and the softness of a woman, the institution of the family, and the differentiation of occupations are mere militant necessities of an age of physical force; where population is balanced and abundant, much childbearing becomes an evil rather than a blessing to the State; where violence comes but rarely and off- spring are secure, there is less necessity- - indeed there is no necessity- - for an efficient family, and the specialization of the sexes with reference to their children's needs disappears . We see some beginnings of this even in our own time, and in this future age it was complete. This, I must remind you, was my speculation at the time. Later, I was to appreciate how far it fell short of the reality. 'While I was musing upon these things, my attention was attracted by a pretty little structure, like a well under a cupola. I thought in a transitory way of the oddness of wells still existing, and then resumed the thread of my speculations . There were no large buildings towards the top of the hill, and as my walking powers were evidently miraculous, I was presently left alone for the first time. With a strange sense of freedom and adventure I pushed on up to the crest. ' There I found a seat of some yellow metal that I did not recognize, corroded in places with a kind of pinkish rust and half smothered in soft moss, the arm- rests cast and filed into the resemblance of griffins' heads. I sat down on it, and I surveyed the broad view of our old world under the sunset of that long day. It was as sweet and fair a view as I have ever seen. The sun had already gone below the horizon and the west was flaming gold, touched with some horizontal bars of purple and crimson. Below was the valley of the Thames, in which the river lay like a band of burnished steel. I have already spoken of the great palaces dotted about among the variegated greenery, some in ruins and some still occupied. При виде довольства и обеспеченности, в которой жили эти люди, сходство полов стало мне вполне понятно. Сила мужчины и нежность женщины, семья и разделение труда являются только жестокой необходимостью века, управляемого физической силой. Но там, где народонаселение многочисленно и достигло равновесия, где насилие - редкое явление, рождение многих детей нежелательно для государства, и нет никакой необходимости в существовании семьи. А вместе с тем и разделение полов, вызванное жизнью и потребностью воспитания детей, неизбежно исчезает. Первые признаки этого явления наблюдаются и в наше время, а в том далеком будущем оно уже вполне укоренилось. Таковы были мои тогдашние выводы. Позднее я имел возможность убедиться, насколько они были далеки от действительности. Размышляя так, я невольно обратил внимание на небольшую постройку приятной архитектуры, похожую на колодец, прикрытый куполом. У меня мелькнула мысль: как странно, что до сих пор существуют колодцы, но затем я снова погрузился в раздумья. До самой вершины холма больше не было никаких зданий, и, продолжая идти, я скоро очутился один, так как остальные за мной не поспевали. С чувством свободы, ожидая необыкновенных приключений, я направился к вершине холма. Дойдя до вершины, я увидел скамью из какого- то желтого металла; в некоторых местах она была разъедена чем- то вроде красноватой ржавчины и утопала в мягком мхе; ручки ее были отлиты в виде голов грифонов. Я сел и принялся смотреть на широкий простор, освещенный лучами догоравшего заката. Картина была небывалой красоты. Солнце только что скрылось за горизонтом; запад горел золотом, по которому горизонтально тянулись легкие пурпурные и алые полосы. Внизу расстилалась долина, по которой, подобно полосе сверкающей стали, дугой изогнулась Темза. Огромные старые дворцы, о которых я уже говорил, были разбросаны среди разнообразной зелени; некоторые уже превратились в руины, другие были еще обитаемы.
Here and there rose a white or silvery figure in the waste garden of the earth, here and there came the sharp vertical line of some cupola or obelisk. There were no hedges, no signs of proprietary rights, no evidences of agriculture; the whole earth had become a garden. 1 So watching, I began to put my interpretation upon the things I had seen, and as it shaped itself to me that evening, my interpretation was something in this way. (Afterwards I found I had got only a half- truth- - or only a glimpse of one facet of the truth.) 1 It seemed to me that I had happened upon humanity upon the wane. The ruddy sunset set me thinking of the sunset of mankind. For the first time I began to realize an odd consequence of the social effort in which we are at present engaged. And yet, come to think, it is a logical consequence enough. Strength is the outcome of need; security sets a premium on feebleness. The work of ameliorating the conditions of life - the true civilizing process that makes life more and more secure- - had gone steadily on to a climax. One triumph of a united humanity over Nature had followed another. Things that are now mere dreams had become projects deliberately put in hand and carried forward. And the harvest was what I saw! 'After all, the sanitation and the agriculture of today are still in the rudimentary stage. The science of our time has attacked but a little department of the field of human disease, but even so, it spreads its operations very steadily and persistently. Our agriculture and horticulture destroy a weed just here and there and cultivate perhaps a score or so of wholesome plants, leaving the greater number to fight out a balance as they can. We improve our favourite plants and animals- - and how few they are - gradually by selective breeding; now a new and better peach, now a seedless grape, now a sweeter and larger flower, now a more convenient breed of cattle. We improve them gradually, because our ideals are vague and tentative, and our knowledge is very limited; because Nature, too, is shy and slow in our clumsy hands. Тут и там, в этом огромном, похожем на сад мире, виднелись белые или серебристые изваяния; кое- где поднимались кверху купола и остроконечные обелиски. Нигде не было изгородей, не было даже следов собственности и никаких признаков земледелия, - вся земля превратилась в один цветущий сад. Наблюдая все это, я старался объяснить себе то, что видел, и сделал вот какие выводы из своих наблюдений. (Позже я убедился, что они были односторонними и содержали лишь половину правды.) Мне казалось, что я вижу человечество в эпоху увядания. Красноватая полоса на западе заставила меня подумать о закате человечества. Я впервые увидел те неожиданные последствия, к которым привели общественные отношения нашего времени. Теперь я прихожу к убеждению, что это были вполне логические последствия. Сила есть только результат необходимости; обеспеченное существование ведет к слабости. Стремление к улучшению условий жизни - истинный прогресс цивилизации, делающий наше существование все более обеспеченным, - привело к своему конечному результату. Объединенное человечество поколение за поколением торжествовало победы над природой. То, что в наши дни кажется несбыточными мечтами, превратилось в искусно задуманные и осуществленные проекты. И вот какова оказалась жатва! В конце концов, охрана здоровья человечества и земледелие находятся в наше время еще в зачаточном состоянии. Наука объявила войну лишь малой части человеческих болезней, но она неизменно и упорно продолжает свою работу. Земледельцы и садоводы то тут, то там уничтожают сорняки и выращивают лишь немногие полезные растения, предоставляя остальным бороться как угодно за свое существование. Мы улучшаем немногие избранные нами виды растений и животных путем постепенного отбора лучших из них; мы выводим новый, лучший сорт персика, виноград без косточек, более душистый и крупный цветок, более пригодную породу рогатого скота. Мы улучшаем их постепенно, потому что наши представления об идеале смутны и вырабатываются путем опыта, а знания крайне ограниченны, да и сама природа робка и неповоротлива в наших неуклюжих руках.
Some day all this will be better organized, and still better. That is the drift of the current in spite of the eddies. The whole world will be intelligent, educated, and со- operating; things will move faster and faster towards the subjugation of Nature. In the end, wisely and carefully we shall readjust the balance of animal and vegetable life to suit our human needs. 'This adjustment, I say, must have been done, and done well; done indeed for all Time, in the space of Time across which my machine had leaped. The air was free from gnats, the earth from weeds or fungi; everywhere were fruits and sweet and delightful flowers; brilliant butterflies flew hither and thither. The ideal of preventive medicine was attained. Diseases had been stamped out. I saw no evidence of any contagious diseases during all my stay. And I shall have to tell you later that even the processes of putrefaction and decay had been profoundly affected by these changes. 'Social triumphs, too, had been effected. I saw mankind housed in splendid shelters, gloriously clothed, and as yet I had found them engaged in no toil. There were no signs of struggle, neither social nor economical struggle. The shop, the advertisement, traffic, all that commerce which constitutes the body of our world, was gone. It was natural on that golden evening that I should jump at the idea of a social paradise. The difficulty of increasing population had been met, I guessed, and population had ceased to increase. 'But with this change in condition comes inevitably adaptations to the change. What, unless biological science is a mass of errors, is the cause of human intelligence and vigour? Hardship and freedom: conditions under which the active, strong, and subtle survive and the weaker go to the wall; conditions that put a premium upon the loyal alliance of capable men, upon self- restraint, patience, and decision. And the institution of the family, and the emotions that arise therein, the fierce jealousy, the tenderness for offspring, parental self- devotion, all found their justification and support in the imminent dangers of the young. Now, where are these imminent dangers? Когда-нибудь все это будет организовано лучше. Несмотря на водовороты, поток времени неуклонно стремится вперед. Весь мир когда-нибудь станет разумным, образованным, все будут трудиться коллективно; это поведет к быстрейшему и полнейшему покорению природы. В конце концов, мы мудро и заботливо установим равновесие животной и растительной жизни для удовлетворения наших потребностей. Это должно было свершиться и действительно свершилось за то время, через которое промчалась моя Машина. В воздухе не стало комаров и мошек, на земле сорных трав и плесени. Везде появились сочные плоды и красивые душистые цветы; яркие бабочки порхали повсюду. Идеал профилактической медицины был достигнут. Болезнетворные микробы были уничтожены. За время своего пребывания там я не видел даже и признаков заразных болезней. Благодаря всему этому даже процессы гниения и разрушения приняли совершенно новый вид. В общественных отношениях тоже была одержана большая победа. Я видел, что люди стали жить в великолепных дворцах, одеваться в роскошные одежды и освободились от всякого труда. Не было и следов борьбы, политической или экономической. Торговля, промышленность, реклама все, что составляет основу нашей государственной жизни, исчезло из этого мира Будущего. Естественно, что в тот золотистый вечер я невольно счел окружающий меня мир земным раем. Опасность перенаселения исчезла, так как население, по- видимому, перестало расти. Но изменение условий неизбежно влечет за собой приспособление к этим изменениям. Что является движущей силой человеческого ума и энергии, если только вся биология не представляет собой бесконечного ряда заблуждений? Только труд и свобода; таковы условия, при которых деятельный, сильный и ловкий переживает слабого, который должен уступить свое место; условия, дающие преимущество честному союзу талантливых людей, умению владеть собой, терпению и решительности. Семья и возникающие отсюда чувства: ревность, любовь к потомству, родительское самоотвержение все это находит себе оправдание в неизбежных опасностях, которым подвергается молодое поколение. Но где теперь эти опасности?
There is a sentiment arising, and it will grow, against connubial jealousy, against fierce maternity, against passion of all sorts; unnecessary things now, and things that make us uncomfortable, savage survivals, discords in a refined and pleasant life. 11 thought of the physical slightness of the people, their lack of intelligence, and those big abundant ruins, and it strengthened my belief in a perfect conquest of Nature. For after the battle comes Quiet. Humanity had been strong, energetic, and intelligent, and had used all its abundant vitality to alter the conditions under which it lived. And now came the reaction of the altered conditions . 'Under the new conditions of perfect comfort and security, that restless energy, that with us is strength, would become weakness. Even in our own time certain tendencies and desires, once necessary to survival, are a constant source of failure. Physical courage and the love of battle, for instance, are no great help- - may even be hindrances- - to a civilized man. And in a state of physical balance and security, power, intellectual as well as physical, would be out of place. For countless years I judged there had been no danger of war or solitary violence, no danger from wild beasts, no wasting disease to require strength of constitution, no need of toil. For such a life, what we should call the weak are as well equipped as the strong, are indeed no longer weak. Better equipped indeed they are, for the strong would be fretted by an energy for which there was no outlet. No doubt the exquisite beauty of the buildings I saw was the outcome of the last surgings of the now purposeless energy of mankind before it settled down into perfect harmony with the conditions under which it lived - the flourish of that triumph which began the last great peace. This has ever been the fate of energy in security; it takes to art and to eroticism, and then come languor and decay. 'Even this artistic impetus would at last die away- - had almost died in the Time I saw. Уже сейчас начинает проявляться протест против супружеской ревности, против слепого материнского чувства, против всяческих страстей, и этот протест будет нарастать. Все эти чувства даже теперь уже не являются необходимыми, они делают нас несчастными и, как остатки первобытной дикости, кажутся несовместимыми с приятной и возвышенной жизнью. Я стал думать о физической слабости этих маленьких людей, о бессилии их ума и об огромных развалинах, которые видел вокруг. Все это подтверждало мое предположение об окончательной победе, одержанной над природой. После войны наступил мир. Человечество было сильным, энергичным, оно обладало знаниями; люди употребляли все свои силы на изменение условий своей жизни. А теперь измененные ими условия оказали свое влияние на их потомков. При новых условиях полного довольства и обеспеченности неутомимая энергия, являющаяся в наше время силой, должна была превратиться в слабость. Даже в наши дни некоторые склонности и желания, когда- то необходимые для выживания человека, стали источником его гибели. Храбрость и воинственность, например, не помогают, а скорее даже мешают жизни цивилизованного человека. В государстве же, основанном на физическом равновесии и обеспеченности, превосходство - физическое или умственное - было бы совершенно неуместно . Я пришел к выводу, что на протяжении бесчисленных лет на земле не существовало ни опасности войн, ни насилия, ни диких зверей, ни болезнетворных микробов, не существовало и необходимости в труде . При таких условиях те, кого мы называем слабыми, были точно так же приспособлены, как и сильные, они уже не были слабыми. Вернее, они были даже лучше приспособлены, потому что сильного подрывала не находящая выхода энергия. Не оставалось сомнения, что удивительная красота виденных мною зданий была результатом последних усилий человечества перед тем, как оно достигло полной гармонии жизни, - последняя победа, после которой был заключен окончательный мир. Такова неизбежная судьба всякой энергии. Достигнув своей конечной цели, она еще ищет выхода в искусстве, в любви, а затем наступает бессилие и упадок. Даже эти художественные порывы, в конце концов, должны были заглохнуть, и они почти заглохли в то Время, куда я попал.
To adorn themselves with flowers, to dance, to sing in the sunlight: so much was left of the artistic spirit, and no more. Even that would fade in the end into a contented inactivity. We are kept keen on the grindstone of pain and necessity, and, it seemed to me, that here was that hateful grindstone broken at last! 'As I stood there in the gathering dark I thought that in this simple explanation I had mastered the problem of the world- - mastered the whole secret of these delicious people. Possibly the checks they had devised for the increase of population had succeeded too well, and their numbers had rather diminished than kept stationary- That would account for the abandoned ruins. Very simple was my explanation, and plausible enough- - as most wrong theories are! 'As I stood there musing over this too perfect triumph of man, the full moon, yellow and gibbous, came up out of an overflow of silver light in the northeast. The bright little figures ceased to move about below, a noiseless owl flitted by, and I shivered with the chill of the night. I determined to descend and find where I could sleep. ' I looked for the building I knew. Then my eye travelled along to the figure of the White Sphinx upon the pedestal of bronze, growing distinct as the light of the rising moon grew brighter. I could see the silver birch against it. There was the tangle of rhododendron bushes, black in the pale light, and there was the little lawn. I looked at the lawn again. A queer doubt chilled my complacency. "No," said I stoutly to myself , "that was not the lawn." 'But it was the lawn. For the white leprous face of the sphinx was towards it. Can you imagine what I felt as this conviction came home to me? But you cannot . The Time Machine was gone! 'At once, like a lash across the face, came the possibility of losing my own age, of being left helpless in this strange new world. The bare thought of it was an actual physical sensation. I could feel it grip me at the throat and stop my breathing. In another moment I was in a passion of fear and running with great leaping strides down the slope. Украшать себя цветами, танцевать и петь под солнцем - вот что осталось от этих стремлений. Но и это, в конце концов, должно было смениться бездействием. Все наши чувства и способности обретают остроту только на точиле труда и необходимости, а это неприятное точило было наконец разбито. Пока я сидел в сгущавшейся темноте, мне казалось, что этим простым объяснением я разрешил загадку мира и постиг тайну прелестного маленького народа. Возможно, они нашли удачные средства для ограничения рождаемости, и численность населения даже уменьшалась. Этим можно было объяснить пустоту заброшенных дворцов. Моя теория была очень ясна и правдоподобна - как и большинство ошибочных теорий! Пока я размышлял над этим слишком уж полным торжеством человека, из- за серебристой полосы на северо-востоке выплыла желтая полная луна. Маленькие светлые фигурки людей перестали праздно двигаться внизу, бесшумно пролетела сова, и я вздрогнул от вечерней прохлады. Я решил спуститься с холма и поискать ночлега. Я стал отыскивать глазами знакомое здание. Мой взгляд упал на фигуру Белого Сфинкса на бронзовом пьедестале, и, по мере того как восходящая луна светила все ярче, фигура яснее выступала из темноты. Я мог отчетливо рассмотреть стоявший около него серебристый тополь. Вон и густые рододендроны, черные при свете луны, вон и лужайка. Я еще раз взглянул на нее. Ужасное подозрение закралось в мою душу. "Нет, - решительно сказал я себе, - это не та лужайка". Но это была та самая лужайка. Бледное, словно изъеденное проказой лицо Сфинкса было обращено к ней. Можете ли вы представить себе, что я почувствовал, когда убедился в этом! Машина Времени исчезла! Как удар хлыстом по лицу, меня обожгла мысль, что я никогда не вернусь назад, навеки останусь беспомощный в этом новом, неведомом мире! Сама мысль об этом была мучительна. Я почувствовал, как сжалось мое горло, пресеклось дыхание. Ужас овладел мною, и дикими прыжками я кинулся вниз по склону.
Once I fell headlong and cut my face; I lost no time in stanching the blood, but jumped up and ran on, with a warm trickle down my cheek and chin. All the time I ran I was saying to myself: "They have moved it a little, pushed it under the bushes out of the way. " Nevertheless, I ran with all my might. All the time, with the certainty that sometimes comes with excessive dread, I knew that such assurance was folly, knew instinctively that the machine was removed out of my reach. My breath came with pain. I suppose I covered the whole distance from the hill crest to the little lawn, two miles perhaps, in ten minutes. And I am not a young man. I cursed aloud, as I ran, at my confident folly in leaving the machine, wasting good breath thereby. I cried aloud, and none answered. Not a creature seemed to be stirring in that moonlit world. 'When I reached the lawn my worst fears were realized. Not a trace of the thing was to be seen. I felt faint and cold when I faced the empty space among the black tangle of bushes. I ran round it furiously, as if the thing might be hidden in a corner, and then stopped abruptly, with my hands clutching my hair. Above me towered the sphinx, upon the bronze pedestal, white, shining, leprous, in the light of the rising moon. It seemed to smile in mockery of my dismay. 'I might have consoled myself by imagining the little people had put the mechanism in some shelter for me, had I not felt assured of their physical and intellectual inadequacy. That is what dismayed me: the sense of some hitherto unsuspected power, through whose intervention my invention had vanished. Yet, for one thing I felt assured: unless some other age had produced its exact duplicate, the machine could not have moved in time. The attachment of the levers- - I will show you the method later - prevented any one from tampering with it in that way when they were removed. It had moved, and was hid, only in space. But then, where could it be? Я упал и расшиб лицо, но даже не попытался остановить кровь, вскочил на ноги и снова побежал, чувствуя, как теплая струйка стекает по щеке. Я бежал и не переставал твердить себе: "Они просто немного отодвинули ее, поставили под кустами, чтобы она не мешала на дороге". Но, несмотря на это, бежал изо всех сил. С уверенностью, которая иногда рождается из самого мучительного страха, я с самого начала знал, что утешительная мысль моя - вздор; чутье говорило мне, что Машина унесена куда- то, откуда мне ее не достать. Я едва переводил дыхание. От вершины холма до лужайки было около двух миль, и я преодолел это расстояние за десять минут. А ведь я уже не молод. Я бежал и громко проклинал свою безрассудную доверчивость, побудившую меня оставить Машину, и задыхался от проклятий еще больше. Я попробовал громко кричать, но никто мне не ответил. Ни одного живого существа не было видно на залитой лунным светом земле! Когда я добежал до лужайки, худшие мои опасения подтвердились: Машины нигде не было видно. Похолодев, я смотрел на пустую лужайку среди черной чащи кустарников, потом быстро обежал ее, как будто Машина могла быть спрятана где-нибудь поблизости, и резко остановился, схватившись за голову. Надо мной на бронзовом пьедестале возвышался Сфинкс, все такой же бледный, словно изъеденный проказой, ярко озаренный светом луны. Казалось, он насмешливо улыбался, глядя на меня. Я мог бы утешиться мыслью, что маленький народец спрятал Машину под каким-нибудь навесом, если бы не знал наверняка, что у них не хватило бы на это ни сил, ни ума. Нет, меня ужасало теперь другое: мысль о какой- то новой, до сих пор неведомой мне силе, захватившей мое изобретение. Я был уверен только в одном: если в какой- либо другой век не изобрели точно такого же механизма, моя Машина не могла без меня отправиться путешествовать по Времени. Не зная способа закрепления рычагов - я потом покажу вам, в чем он заключается, - невозможно воспользоваться ею для путешествия. К тому же рычаги были у меня. Мою Машину перенесли, спрятали где- то в Пространстве, а не во Времени. Но где же?
11 think I must have had a kind of frenzy. I remember running violently in and out among the moonlit bushes all round the sphinx, and startling some white animal that, in the dim light, I took for a small deer. I remember, too, late that night, beating the bushes with my clenched fist until my knuckles were gashed and bleeding from the broken twigs. Then, sobbing and raving in my anguish of mind, I went down to the great building of stone. The big hall was dark, silent, and deserted. I slipped on the uneven floor, and fell over one of the malachite tables, almost breaking my shin. I lit a match and went on past the dusty curtains, of which I have told you. 1 There I found a second great hall covered with cushions, upon which, perhaps, a score or so of the little people were sleeping. I have no doubt they found my second appearance strange enough, coming suddenly out of the quiet darkness with inarticulate noises and the splutter and flare of a match. For they had forgotten about matches. "Where is my Time Machine?" I began, bawling like an angry child, laying hands upon them and shaking them up together. It must have been very queer to them. Some laughed, most of them looked sorely frightened. When I saw them standing round me, it came into my head that I was doing as foolish a thing as it was possible for me to do under the circumstances, in trying to revive the sensation of fear. For, reasoning from their daylight behaviour, I thought that fear must be forgotten. 'Abruptly, I dashed down the match, and, knocking one of the people over in my course, went blundering across the big dining- hall again, out under the moonlight. I heard cries of terror and their little feet running and stumbling this way and that. I do not remember all I did as the moon crept up the sky. I suppose it was the unexpected nature of my loss that maddened me. I felt hopelessly cut off from my own kind - a strange animal in an unknown world. I must have raved to and from, screaming and crying upon God and Fate. Я совершенно обезумел. Помню, как я неистово метался взад и вперед среди освещенных луной кустов вокруг Сфинкса; помню, как вспугнул какое- то белое животное, которое при лунном свете показалось мне небольшой ланью. Помню также, как поздно ночью я колотил кулаками по кустам до тех пор, пока не исцарапал все руки о сломанные сучья. Потом, рыдая, в полном изнеможении, я побрел к большому каменному зданию, темному и пустынному, поскользнулся на неровном полу и упал на один из малахитовых столов, чуть не сломав ногу, зажег спичку и прошел мимо пыльных занавесей, о которых я уже рассказывал вам. Дальше был второй большой зал, устланный подушками, на которых спали два десятка маленьких людей. Мое вторичное появление, несомненно, показалось им очень странным. Я так внезапно вынырнул из ночной тишины с отчаянными нечленораздельными криками и с зажженной спичкой в руке. Спички давно уже были позабыты в их время. "Где моя Машина Времени?" - кричал я во все горло, как рассерженный ребенок. Я хватал их и тряс полусонных. Вероятно, это их поразило. Некоторые смеялись, другие казались растерянными. Когда я увидел их, стоящих вокруг меня, я понял, что стараться пробудить в них чувство страха - чистое безумие. Вспоминая их поведение днем, я сообразил, что это чувство совершенно ими позабыто. Бросив спичку и сбив с ног кого-то, попавшегося на пути, я снова ощупью прошел по большому обеденному залу и вышел на лунный свет. Позади меня вдруг раздались громкие крики и топот маленьких спотыкающихся ног, но тогда я не понял причины этого. Не помню всего, что я делал при лунном свете. Неожиданная потеря довела меня почти до безумия. Я чувствовал себя теперь безнадежно отрезанным от своих современников, каким- то странным животным в неведомом мире. В исступлении я бросался в разные стороны, плача и проклиная бога и судьбу.
I have a memory of horrible fatigue, as the long night of despair wore away; of looking in this impossible place and that; of groping among moonlit ruins and touching strange creatures in the black shadows; at last, of lying on the ground near the sphinx and weeping with absolute wretchedness. I had nothing left but misery. Then I slept, and when I woke again it was full day, and a couple of sparrows were hopping round me on the turf within reach of my arm. 11 sat up in the freshness of the morning, trying to remember how I had got there, and why I had such a profound sense of desertion and despair. Then things came clear in my mind. With the plain, reasonable daylight, I could look my circumstances fairly in the face. I saw the wild folly of my frenzy overnight, and I could reason with myself. "Suppose the worst?" I said. "Suppose the machine altogether lost- - perhaps destroyed? It behoves me to be calm and patient, to learn the way of the people, to get a clear idea of the method of my loss, and the means of getting materials and tools; so that in the end, perhaps, I may make another." That would be my only hope, perhaps, but better than despair. And, after all, it was a beautiful and curious world. 'But probably, the machine had only been taken away. Still, I must be calm and patient, find its hiding- place, and recover it by force or cunning. And with that I scrambled to my feet and looked about me, wondering where I could bathe. I felt weary, stiff, and travel- soiled. The freshness of the morning made me desire an equal freshness. I had exhausted my emotion. Indeed, as I went about my business, I found myself wondering at my intense excitement overnight. I made a careful examination of the ground about the little lawn. I wasted some time in futile questionings, conveyed, as well as I was able, to such of the little people as came by. They all failed to understand my gestures; some were simply stolid, some thought it was a jest and laughed at me. Помню, как я измучился в эту длинную отчаянную ночь, как рыскал в самых неподходящих местах, как ощупью пробирался среди озаренных лунным светом развалин, натыкаясь в темных углах на странные белые существа; помню, как в конце концов я упал на землю около Сфинкса и рыдал в отчаянии. Вместе с силами исчезла и злость на себя за то, что я так безрассудно оставил Машину... Я ничего не чувствовал, кроме ужаса. Потом незаметно я уснул, а когда проснулся, уже совсем рассвело и вокруг меня по траве, на расстоянии протянутой руки, весело и без страха прыгали воробьи. Я сел, овеваемый свежестью утра, стараясь вспомнить, как я сюда попал и почему все мое существо полно чувства одиночества и отчаяния. Вдруг я вспомнил обо всем, что случилось. Но при дневном свете у меня хватило сил спокойно взглянуть в лицо обстоятельствам. Я понял всю нелепость своего вчерашнего поведения и принялся рассуждать сам с собою. "Предположим самое худшее, - говорил я. Предположим, что Машина навсегда утеряна, может быть, даже уничтожена. Из этого следует только то, что я должен быть терпеливым и спокойным, изучить образ жизни этих людей, разузнать, что случилось с Машиной, попытаться добыть необходимые материалы и инструменты; в конце концов я, может быть, сумею сделать новую Машину. На это теперь моя единственная надежда, правда, очень слабая, - но все же надежда лучше отчаяния. Но, во всяком случае, я очутился в прекрасном и любопытном мире. И вполне вероятно, что моя Машина где- нибудь спрятана. Значит, я должен спокойно и терпеливо искать то место, где она спрятана, и постараться взять ее силой или хитростью". С такими мыслями я встал на ноги и осмотрелся вокруг в поисках места, где можно было бы выкупаться. Я чувствовал себя усталым, мое тело одеревенело и покрылось грязью. Утренняя свежесть вызывала желание стать самому чистым и свежим. Волнение истощало меня. Когда я принялся размышлять о своем положении, то удивился вчерашним опрометчивым поступкам. Я тщательно исследовал лужайку. Некоторое время ушло на напрасные расспросы проходивших мимо маленьких людей. Никто не понимал моих жестов: одни тупо смотрели на меня, другие принимали мои слова за шутку и смеялись .
I had the hardest task in the world to keep my hands off their pretty laughing faces. It was a foolish impulse, but the devil begotten of fear and blind anger was ill curbed and still eager to take advantage of my perplexity. The turf gave better counsel. I found a groove ripped in it, about midway between the pedestal of the sphinx and the marks of my feet where, on arrival, I had struggled with the overturned machine. There were other signs of removal about, with queer narrow footprints like those I could imagine made by a sloth. This directed my closer attention to the pedestal. It was, as I think I have said, of bronze. It was not a mere block, but highly decorated with deep framed panels on either side. I went and rapped at these. The pedestal was hollow. Examining the panels with care I found them discontinuous with the frames. There were no handles or keyholes, but possibly the panels, if they were doors, as I supposed, opened from within. One thing was clear enough to my mind. It took no very great mental effort to infer that my Time Machine was inside that pedestal. But how it got there was a different problem. II saw the heads of two orange-clad people coming through the bushes and under some blossom- covered apple- trees towards me. I turned smiling to them and beckoned them to me. They came, and then, pointing to the bronze pedestal, I tried to intimate my wish to open it. But at my first gesture towards this they behaved very oddly. I don' t know how to convey their expression to you. Suppose you were to use a grossly improper gesture to a delicate- minded woman- - it is how she would look. They went off as if they had received the last possible insult. I tried a sweet- looking little chap in white next, with exactly the same result. Somehow, his manner made me feel ashamed of myself. But, as you know, I wanted the Time Machine , and I tried him once more. As he turned off, like the others, my temper got the better of me. In three strides I was after him, had him by the loose part of his robe round the neck, and began dragging him towards the sphinx. Then I saw the horror and repugnance of his face, and all of a sudden I let him go. 1 But I was not beaten yet. Мне стоило невероятных усилий удержаться и не броситься с кулаками на этих весельчаков. Безумный порыв! Но сидевший во мне дьявол страха и слепого раздражения еще не был обуздан и пытался овладеть мною. Очень помогла мне густая трава. На полпути между пьедесталом Сфинкса и моими следами, там, где я возился с опрокинутой Машиной, на земле оказалась свежая борозда. Были видны и другие следы: странные узкие отпечатки ног, похожие, как мне казалось, на следы ленивца. Это побудило меня тщательней осмотреть пьедестал. Я уже, кажется, сказал, что он был из бронзы. Однако он представлял собою не просто плиту, а был с обеих сторон украшен искусно выполненными панелями. Я подошел и постучал. Пьедестал оказался полым. Внимательно осмотрев панели, я понял, что они не составляют одного целого с пьедесталом. На них не было ни ручек, ни замочных скважин, но, возможно, они открывались изнутри, если, как я предполагал, служили входом в пьедестал. Во всяком случае, одно было мне ясно: Машина Времени находилась внутри пьедестала. Но как она попала туда - это оставалось загадкой. Я увидел головы двух людей в оранжевой одежде, шедших ко мне между кустами и цветущими яблонями. Улыбаясь, я повернулся к ним и поманил их рукой. Когда они подошли, я указал им на бронзовый пьедестал и постарался объяснить, что хотел бы открыть его. Но при первом же моем жесте они стали вести себя очень странно. Не знаю, сумею ли я объяснить вам, какое выражение появилось на их лицах. Представьте себе, что вы сделали бы неприличный жест перед благовоспитанной дамой - именно с таким выражением она посмотрела бы на вас. Они ушли, как будто были грубо оскорблены. Я попытался подозвать к себе миловидное существо в белой одежде, но результат оказался тот же самый. Мне стало стыдно. Но Машина Времени была необходима, и я сделал новую попытку. Малыш с отвращением отвернулся от меня. Я потерял терпение. В три прыжка я очутился около него и, захлестнув его шею полой его же одежды, потащил к Сфинксу. Тогда на лице у него вдруг выразились такой ужас и отвращение, что я тотчас же выпустил его. Однако я не сдавался.
I banged with my fist at the bronze panels. I thought I heard something stir inside- - to be explicit, I thought I heard a sound like a chuckle- - but I must have been mistaken. Then I got a big pebble from the river, and came and hammered till I had flattened a coil in the decorations, and the verdigris came off in powdery flakes. The delicate little people must have heard me hammering in gusty outbreaks a mile away on either hand, but nothing came of it. I saw a crowd of them upon the slopes, looking furtively at me. At last, hot and tired, I sat down to watch the place. But I was too restless to watch long; I am too Occidental for a long vigil. I could work at a problem for years, but to wait inactive for twenty- four hours- - that is another matter. II got up after a time, and began walking aimlessly through the bushes towards the hill again. "Patience," said I to myself. "If you want your machine again you must leave that sphinx alone. If they mean to take your machine away, it's little good your wrecking their bronze panels, and if they don't, you will get it back as soon as you can ask for it. To sit among all those unknown things before a puzzle like that is hopeless. That way lies monomania. Face this world. Learn its ways, watch it, be careful of too hasty guesses at its meaning. In the end you will find clues to it all. " Then suddenly the humour of the situation came into my mind: the thought of the years I had spent in study and toil to get into the future age, and now my passion of anxiety to get out of it. I had made myself the most complicated and the most hopeless trap that ever a man devised. Although it was at my own expense, I could not help myself. I laughed aloud. 'Going through the big palace, it seemed to me that the little people avoided me. It may have been my fancy, or it may have had something to do with my hammering at the gates of bronze. Я принялся бить кулаками по бронзовым панелям. Мне показалось, что внутри что- то зашевелилось, послышался звук, похожий на хихиканье, но я решил, что это мне только почудилось. Подобрав у реки большой камень, я вернулся и принялся колотить им до тех пор, пока не расплющил одно из украшений и зеленая крошка не стала сыпаться на землю. Маленький народец, должно быть, слышал грохот моих ударов на расстоянии мили вокруг, но ничего у меня не вышло. Я видел целую толпу на склоне холма, украдкой смотревшую на меня. Злой и усталый, я опустился на землю, но нетерпение не давало мне долго сидеть на месте, я был слишком деятельным человеком для неопределенного ожидания. Я мог годами трудиться над разрешением какой-нибудь проблемы, но сидеть в бездействии двадцать четыре часа было свыше моих сил. Скоро я встал и принялся бесцельно бродить среди кустарника. Потом направился к холму. "Терпение, - сказал я себе. - Если хочешь вновь получить свою Машину, оставь Сфинкса в покое. Если кто- то решил отнять ее у тебя, ты не принесешь себе никакой пользы тем, что станешь портить бронзовые панели Сфинкса; если же у похитителя не было злого умысла, ты получишь ее обратно, как только найдешь способ попросить об этом. Бессмысленно торчать здесь, среди незнакомых вещей, становясь в тупик перед каждым новым затруднением. Это прямой путь к безумию. Осмотрись лучше вокруг. Изучи нравы этого мира, наблюдай его, остерегайся слишком поспешных заключений! В конце концов, ты найдешь ключ ко всему!" Мне ясно представлялась и комическая сторона моего приключения: я вспомнил о годах напряженной учебы и труда, потраченных только для того, чтобы попасть в будущее и изучить его, и сопоставил с этим свое нетерпение поскорее выбраться отсюда. Я своими руками изготовил себе самую сложную и самую безвыходную ловушку, какая когда- либо была создана человеком. И хотя смеяться приходилось только над самим собой, я не мог удержаться и громко расхохотался. Войдя в зал огромного дворца, я заметил, что маленькие люди стали избегать меня. Быть может, причина этому была и другая, но их отчуждение могло быть связано и с моей попыткой разбить бронзовые двери.
Yet I felt tolerably sure of the avoidance. I was careful, however, to show no concern and to abstain from any pursuit of them, and in the course of a day or two things got back to the old footing. I made what progress I could in the language, and in addition I pushed my explorations here and there. Either I missed some subtle point or their language was excessively simple - almost exclusively composed of concrete substantives and verbs. There seemed to be few, if any, abstract terms, or little use of figurative language. Their sentences were usually simple and of two words, and I failed to convey or understand any but the simplest propositions. I determined to put the thought of my Time Machine and the mystery of the bronze doors under the sphinx as much as possible in a corner of memory, until my growing knowledge would lead me back to them in a natural way. Yet a certain feeling, you may understand, tethered me in a circle of a few miles round the point of my arrival. 1 So far as I could see, all the world displayed the same exuberant richness as the Thames valley. From every hill I climbed I saw the same abundance of splendid buildings, endlessly varied in material and style, the same clustering thickets of evergreens, the same blossom- laden trees and tree- ferns. Here and there water shone like silver, and beyond, the land rose into blue undulating hills, and so faded into the serenity of the sky. A peculiar feature, which presently attracted my attention, was the presence of certain circular wells, several, as it seemed to me, of a very great depth. One lay by the path up the hill, which I had followed during my first walk. Like the others, it was rimmed with bronze, curiously wrought, and protected by a little cupola from the rain. Sitting by the side of these wells, and peering down into the shafted darkness, I could see no gleam of water, nor could I start any reflection with a lighted match. But in all of them I heard a certain sound: a thud - thud - thud, like the beating of some big engine; and I discovered, from the flaring of my matches, that a steady current of air set down the shafts. Я ясно чувствовал, что они избегали меня, но постарался не придавать этому значения и не пытался более заговаривать с ними. Через день- другой все пошло своим чередом. Насколько было возможно, я продолжал изучать их язык и урывками производил исследования. Не знаю, был ли их язык слишком прост, или же я упускал в нем какие-нибудь тонкие оттенки, но, по-моему, он почти исключительно состоял из существительных и глаголов. Отвлеченных понятий было мало или, скорее, совсем не было, так же, как и слов, имеющих переносный смысл. Фразы обыкновенно были несложны и состояли всего из двух слов, и мне не удавалось высказать или уловить ничего, кроме простейших вопросов или ответов. Мысли о моей Машине Времени и о тайне бронзовых дверей под Сфинксом я решил запрятать в самый дальний уголок памяти, пока накопившиеся знания не приведут меня к ним естественным путем. Но чувство, без сомнения, понятное вам, все время удерживало меня поблизости от места моего прибытия. Насколько я мог судить, весь окружавший меня мир был отмечен той же печатью изобилия и роскоши, которая поразила меня в долине Темзы. С вершины каждого нового холма я видел множество великолепных зданий, бесконечно разнообразных по материалу и стилю; видел повсюду те же чащи вечнозеленых растений, те же цветущие деревья и высокие папоротники. Кое- где отливала серебром зеркальная гладь воды, а вдали тянулись голубоватые волнистые гряды холмов, растворяясь в прозрачной синеве воздуха. С первого взгляда мое внимание привлекли к себе круглые колодцы, казалось, достигавшие во многих местах очень большой глубины. Один из них был на склоне холма, у тропинки, по которой я поднимался во время своей первой прогулки. Как и другие колодцы, он был причудливо отделан по краям бронзой и защищен от дождя небольшим куполом. Сидя около этих колодцев и глядя вниз, в непроглядную темноту, я не мог увидеть в них отблеска воды или отражения зажигаемых мною спичек. Но всюду слышался какой- то стук: "Тук, тук, тук", - похожий на шум работы огромных машин. По колебанию пламени спички я убедился, что в глубь колодца постоянно поступал свежий воздух.
Further, I threw a scrap of paper into the throat of one, and, instead of fluttering slowly down, it was at once sucked swiftly out of sight. 'After a time, too, I came to connect these wells with tall towers standing here and there upon the slopes; for above them there was often just such a flicker in the air as one sees on a hot day above a sun- scorched beach. Putting things together, I reached a strong suggestion of an extensive system of subterranean ventilation, whose true import it was difficult to imagine. I was at first inclined to associate it with the sanitary apparatus of these people. It was an obvious conclusion, but it was absolutely wrong. 'And here I must admit that I learned very little of drains and bells and modes of conveyance, and the like conveniences, during my time in this real future. In some of these visions of Utopias and coming times which I have read, there is a vast amount of detail about building, and social arrangements, and so forth. But while such details are easy enough to obtain when the whole world is contained in one's imagination, they are altogether inaccessible to a real traveller amid such realities as I found here. Conceive the tale of London which a negro, fresh from Central Africa, would take back to his tribe! What would he know of railway companies, of social movements, of telephone and telegraph wires, of the Parcels Delivery Company, and postal orders and the like? Yet we, at least, should be willing enough to explain these things to him! And even of what he knew, how much could he make his untravelled friend either apprehend or believe? Then, think how narrow the gap between a negro and a white man of our own times, and how wide the interval between myself and these of the Golden Age! I was sensible of much which was unseen, and which contributed to my comfort; but save for a general impression of automatic organization, I fear I can convey very little of the difference to your mind. 'In the matter of sepulture, for instance, I could see no signs of crematoria nor anything suggestive of tombs. Я бросил в один из них кусочек бумаги, и, вместо того, чтобы медленно опуститься , он быстро полетел вниз и исчез. Вскоре я заметил, что между этими колодцами и высокими башнями на склонах, холмов существует какая-то связь. Над ними можно было часто увидеть марево колеблющегося воздуха вроде того, какое бывает в жаркий день над берегом моря. Сопоставив все это, я пришел к заключению, что башни вместе с колодцами входили в систему какой-то загадочной подземной вентиляции. Сначала я подумал, что она служит каким-нибудь санитарным целям. Это заключение само напрашивалось, но оказалось потом неверным. Вообще должен сознаться, что за время своего пребывания в Будущем я очень мало узнал относительно водоснабжения, связи, путей сообщения и тому подобных жизненных удобств. В некоторых прочитанных мною утопиях и рассказах о грядущих временах я всегда находил множество подробностей насчет домов, общественного порядка и тому подобного. Нет ничего легче, как придумать сколько угодно всяких подробностей, когда весь будущий мир заключен только в голове автора, но для путешественника, находящегося, подобно мне, среди незнакомой действительности, почти невозможно узнать обо всем этом в короткое время. Вообразите себе негра, который прямо из Центральной Африки попал в Лондон. Что расскажет он по возвращении своему племени? Что будет он знать о железнодорожных компаниях, общественных движениях, телефоне и телеграфе, транспортных конторах и почтовых учреждениях? А ведь мы охотно согласимся все ему объяснить! Но даже то, что он узнает из наших рассказов, как передаст он своим друзьям, как заставит их поверить себе? Учтите при этом, что негр сравнительно недалеко отстоит от белого человека нашего времени, между тем как пропасть между мною и этими людьми Золотого Века была неизмеримо громадна! Я чувствовал существование многого, что было скрыто от моих глаз, и это давало мне надежду, но, помимо общего впечатления какой- то автоматически действующей организации, я, к сожалению, могу передать вам лишь немногое. Я нигде не видел следов крематория, могил или чего-либо связанного со смертью.
But it occurred to me that, possibly, there might be cemeteries (or crematoria) somewhere beyond the range of my explorings. This, again, was a question I deliberately put to myself, and my curiosity was at first entirely defeated upon the point. The thing puzzled me, and I was led to make a further remark, which puzzled me still more: that aged and infirm among this people there were none. 11 must confess that my satisfaction with my first theories of an automatic civilization and a decadent humanity did not long endure. Yet I could think of no other. Let me put my difficulties. The several big palaces I had explored were mere living places, great dining- halls and sleeping apartments. I could find no machinery, no appliances of any kind. Yet these people were clothed in pleasant fabrics that must at times need renewal , and their sandals, though undeco- rated, were fairly complex specimens of metalwork. Somehow such things must be made. And the little people displayed no vestige of a creative tendency. There were no shops, no workshops, no sign of importations among them. They spent all their time in playing gently, in bathing in the river, in making love in a half- playful fashion, in eating fruit and sleeping. I could not see how things were kept going. 'Then, again, about the Time Machine: something, I knew not what, had taken it into the hollow pedestal of the White Sphinx. Why? For the life of me I could not imagine. Those waterless wells, too, those flickering pillars. I felt I lacked a clue. I felt- - how shall I put it? Suppose you found an inscription, with sentences here and there in excellent plain English, and interpolated therewith, others made up of words, of letters even, absolutely unknown to you? Well, on the third day of my visit, that was how the world of Eight Hundred and Two Thousand Seven Hundred and One presented itself to me! 'That day, too, I made a friend - of a sort. It happened that, as I was watching some of the little people bathing in a shallow, one of them was seized with cramp and began drifting downstream. The main current ran rather swiftly, but not too strongly for even a moderate swimmer . Однако было весьма возможно, что кладбища (или крематории) были где-нибудь за пределами моих странствий. Это был один из тех вопросов, которые я сразу поставил перед собой и разрешить которые сначала был не в состоянии. Отсутствие кладбищ поразило меня и повело к дальнейшим наблюдениям, которые поразили меня еще сильнее: среди людей будущего совершенно не было старых и дряхлых. Должен сознаться, что мои первоначальные теории об автоматически действующей цивилизации и о приходящем в упадок человечестве недолго удовлетворяли меня. Но я не мог придумать ничего другого. Вот что меня смущало: все большие дворцы, которые я исследовал, служили исключительно жилыми помещениями - огромными столовыми и спальнями. Я не видел нигде машин или других приспособлений. А между тем на этих людях была прекрасная одежда, требовавшая обновления, и их сандалии, хоть и без всяких украшений, представляли собой образец изящных и сложных изделий. Как бы то ни было, но вещи эти нужно было сделать. А маленький народец не проявлял никаких созидательных наклонностей. У них не было ни цехов, ни мастерских, ни малейших следов ввоза товаров. Все свое время они проводили в играх, купании, полушутливом флирте, еде и сне. Я не мог понять, на чем держалось такое общество. К этому добавилось происшествие с Машиной Времени: кто-то, мне неведомый, спрятал ее в пьедестале Белого Сфинкса. Для чего? Я никак не мог ответить на этот вопрос! Вдобавок - безводные колодцы и башни с колеблющимся над ними воздухом. Я чувствовал, что не нахожу ключа к этим загадочным явлениям. Я чувствовал. .. как бы это вам объяснить? Представьте себе, что вы нашли бы надпись на хорошем английском языке, перемешанном с совершенно вам незнакомыми словами. Вот как на третий день моего пребывания представлялся мне мир восемьсот две тысячи семьсот первого года! В этот день я приобрел в некотором роде друга. Когда я смотрел на группу маленьких людей, купавшихся в реке на неглубоком месте, кого- то из них схватила судорога, и маленькую фигурку понесло по течению. Течение было здесь довольно быстрое, но даже средний пловец мог бы легко с ним справиться.
It will give you an idea, therefore, of the strange deficiency in these creatures, when I tell you that none made the slightest attempt to rescue the weakly crying little thing which was drowning before their eyes. When I realized this, I hurriedly slipped off my clothes, and, wading in at a point lower down, I caught the poor mite and drew her safe to land. A little rubbing of the limbs soon brought her round, and I had the satisfaction of seeing she was all right before I left her. I had got to such a low estimate of her kind that I did not expect any gratitude from her. In that, however, I was wrong. 'This happened in the morning. In the afternoon I met my little woman, as I believe it was, as I was returning towards my centre from an exploration, and she received me with cries of delight and presented me with a big garland of flowers- - evidently made for me and me alone. The thing took my imagination. Very possibly I had been feeling desolate. At any rate I did my best to display my appreciation of the gift. We were soon seated together in a little stone arbour, engaged in conversation, chiefly of smiles. The creature's friendliness affected me exactly as a child's might have done. We passed each other flowers, and she kissed my hands. I did the same to hers. Then I tried talk, and found that her name was Weena, which, though I don't know what it meant, somehow seemed appropriate enough. That was the beginning of a queer friendship which lasted a week, and ended - as I will tell you! 'She was exactly like a child. She wanted to be with me always. She tried to follow me everywhere, and on my next journey out and about it went to my heart to tire her down, and leave her at last, exhausted and calling after me rather plaintively. But the problems of the world had to be mastered. I had not, I said to myself, come into the future to carry on a miniature flirtation. Yet her distress when I left her was very great, her expostulations at the parting were sometimes frantic, and I think, altogether, I had as much trouble as comfort from her devotion. Nevertheless she was, somehow, a very great comfort. Чтобы дать вам некоторое понятие о странной психике этих существ, я скажу лишь, что никто из них не сделал ни малейшей попытки спасти бедняжку, которая с криками тонула на их глазах. Увидя это, я быстро сбросил одежду, побежал вниз по реке, вошел в воду и, схватив ее, легко вытащил на берег. Маленькое растирание привело ее в чувство, и я с удовольствием увидел, что она совершенно оправилась. Я сразу же оставил ее, поскольку был такого невысокого мнения о ней и ей подобных, что не ожидал никакой благодарности. Но на этот раз я ошибся. Все это случилось утром. После полудня, возвращаясь к своим исследованиям, я снова встретил ту же маленькую женщину. Она подбежала с громкими криками радости и поднесла мне огромную гирлянду цветов, очевидно, приготовленную специально для меня. Это создание очень меня заинтересовало. Вероятно, я чувствовал себя слишком одиноким. Но как бы то ни было, я, насколько сумел, высказал ей, что мне приятен подарок. Мы оба сели в небольшой каменной беседке и завели разговор, состоявший преимущественно из улыбок. Дружеские чувства этого маленького существа радовали меня, как радовали бы чувства ребенка. Мы обменялись цветами, и она целовала мои руки. Я отвечал ей тем же. Когда я попробовал заговорить, то узнал, что ее зовут Уина, и хотя не понимал, что это значило, но все же чувствовал, что между ней и ее именем было какое- то соответствие. Таково было начало нашей странной дружбы, которая продолжалась неделю, а как окончилась - об этом я расскажу потом! Уина была совсем как ребенок. Ей хотелось всегда быть со мной. Она бегала за мной повсюду, так что на следующий день мне пришло в голову нелепое желание утомить ее и наконец бросить, не обращая внимания на ее жалобный зов. Мировая проблема, думал я, должна быть решена. Я не для того попал в Будущее, повторял я себе, чтобы заниматься легкомысленным флиртом. Но ее отчаяние было слишком велико, а в ее сетованиях, когда она начала отставать, звучало исступление. Ее привязанность тронула меня, я вернулся, и с этих пор она стала доставлять мне столько же забот, сколько и удовольствия. Все же она была для меня большим утешением.
I thought it was mere childish affection that made her cling to me. Until it was too late, I did not clearly know what I had inflicted upon her when I left her. Nor until it was too late did I clearly understand what she was to me. For, by merely seeming fond of me, and showing in her weak, futile way that she cared for me, the little doll of a creature presently gave my return to the neighbourhood of the White Sphinx almost the feeling of coming home; and I would watch for her tiny figure of white and gold so soon as I came over the hill. 'It was from her, too, that I learned that fear had not yet left the world. She was fearless enough in the daylight, and she had the oddest confidence in me; for once, in a foolish moment, I made threatening grimaces at her, and she simply laughed at them. But she dreaded the dark, dreaded shadows, dreaded black things. Darkness to her was the one thing dreadful. It was a singularly passionate emotion, and it set me thinking and observing. I discovered then, among other things, that these little people gathered into the great houses after dark, and slept in droves. To enter upon them without a light was to put them into a tumult of apprehension. I never found one out of doors, or one sleeping alone within doors, after dark. Yet I was still such a blockhead that I missed the lesson of that fear, and in spite of Weena's distress I insisted upon sleeping away from these slumbering multitudes . 'It troubled her greatly, but in the end her odd affection for me triumphed, and for five of the nights of our acquaintance, including the last night of all, she slept with her head pillowed on my arm. But my story slips away from me as I speak of her. It must have been the night before her rescue that I was awakened about dawn. I had been restless, dreaming most disagreeably that I was drowned, and that sea anemones were feeling over my face with their soft palps. I woke with a start, and with an odd fancy that some greyish animal had just rushed out of the chamber. I tried to get to sleep again, but I felt restless and uncomfortable. It was that dim grey hour when things are just creeping out of darkness, when everything is colourless and clear cut, and yet unreal. Мне казалось сначала, что она испытывала ко мне лишь простую детскую привязанность, и только потом, когда было уже слишком поздно, я ясно понял, чем я сделался для нее и чем стала она для меня. Уже потому одному, что эта малышка выказывала мне нежность и заботу, я, возвращаясь к Белому Сфинксу, чувствовал, будто возвращаюсь домой, и каждый раз, добравшись до вершины холма, отыскивал глазами знакомую фигурку в белой, отороченной золотом одежде. От нее я узнал, что чувство страха все еще не исчезло в этом мире. Днем она ничего не боялась и испытывала ко мне самое трогательное доверие. Однажды у меня возникло глупое желание напугать ее страшными гримасами, но она весело засмеялась. Она боялась только темноты, густых теней и черных предметов. Страшней всего была ей темнота. Она действовала на нее настолько сильно, что это натолкнуло меня на новые наблюдения и размышления. Я открыл, между прочим, что с наступлением темноты маленькие люди собирались в больших зданиях и спали все вместе. Войти к ним ночью значило произвести среди них смятение и панику. Я ни разу не видел, чтобы после наступления темноты кто-нибудь вышел на воздух или спал один под открытым небом. Но все же я был таким глупцом, что не обращал на это внимания и, несмотря на ужас Уины, продолжал спать один, не в общих спальнях. Сначала это очень беспокоило ее, но наконец привязанность ко мне взяла верх, и пять ночей за время нашего знакомства, считая и самую последнюю ночь, она спала со мной, положив голову на мое плечо. Но, говоря о ней, я отклоняюсь от главной темы своего рассказа. Кажется, в ночь накануне ее спасения я проснулся на рассвете. Ночь прошла беспокойно, мне снился очень неприятный сон: будто бы я утонула море, и морские анемоны касались моего лица мягкими щупальцами. Вздрогнув, я проснулся, и мне почудилось, что какое-то сероватое животное выскользнуло из комнаты. Я попытался снова заснуть, но мучительная тревога уже овладела мною. Был тот ранний час, когда предметы только начинают выступать из темноты, когда все вокруг кажется бесцветным и каким- то нереальным, несмотря на отчетливость очертаний.
I got up, and went down into the great hall, and so out upon the flagstones in front of the palace. I thought I would make a virtue of necessity, and see the sunrise. 1 The moon was setting, and the dying moonlight and the first pallor of dawn were mingled in a ghastly half- light. The bushes were inky black, the ground a sombre grey, the sky colourless and cheerless. And up the hill I thought I could see ghosts. There several times, as I scanned the slope, I saw white figures. Twice I fancied I saw a solitary white, ape- like creature running rather quickly up the hill, and once near the ruins I saw a leash of them carrying some dark body. They moved hastily. I did not see what became of them. It seemed that they vanished among the bushes. The dawn was still indistinct, you must understand. I was feeling that chill, uncertain, early- morning feeling you may have known. I doubted my eyes. 'As the eastern sky grew brighter, and the light of the day came on and its vivid colouring returned upon the world once more, I scanned the view keenly. But I saw no vestige of my white figures . They were mere creatures of the half light. "They must have been ghosts," I said; "I wonder whence they dated." For a queer notion of Grant Allen' s came into my head, and amused me. If each generation die and leave ghosts, he argued, the world at last will get overcrowded with them. On that theory they would have grown innumerable some Eight Hundred Thousand Years hence, and it was no great wonder to see four at once. But the jest was unsatisfying, and I was thinking of these figures all the morning, until Weena's rescue drove them out of my head. I associated them in some indefinite way with the white animal I had startled in my first passionate search for the Time Machine. But Weena was a pleasant substitute. Yet all the same, they were soon destined to take far deadlier possession of my mind. ' I think I have said how much hotter than our own was the weather of this Golden Age. I cannot account for it. It may be that the sun was hotter, or the earth nearer the sun. Я встал и, пройдя по каменным плитам большого зала, вышел на воздух. Желая извлечь хоть какую-нибудь пользу из этого случая, я решил посмотреть восход солнца. Луна закатывалась, ее прощальные лучи, и первые бледные проблески наступающего дня смешивались в таинственный полусвет. Кусты казались совсем черными, земля - темно- серой, а небо - бесцветным и туманным. На верху холма мне почудились привидения. Поднимаясь по его склону, я три раза видел смутные белые фигуры. Дважды мне показалось, что я вижу какое- то одинокое белое обезьяноподобное существо, быстро бегущее к вершине холма, а один раз около руин я увидел их целую толпу: они тащили какой- то темный предмет. Двигались они быстро, и я не заметил, куда они исчезли. Казалось, они скрылись в кустах. Все вокруг было еще смутным, поймите это. Меня охватило то неопределенное предрассветное ощущение озноба, которое вам всем, вероятно, знакомо. Я не верил своим глазам. Когда на востоке заблестела заря, и лучи света возвратили всему миру обычные краски и цвета, я тщательно обследовал местность. Но нигде не оказалось и следов белых фигур. По-видимому, это была просто игра теней. "Может быть, это привидения, - сказал я себе. - Желал бы я знать, к какому времени они принадлежат ..." Я сказал это потому, что вспомнил любопытный вывод Гранта Аллена, говорившего, что если б каждое умирающее поколение оставляло после себя привидения, то в конце концов весь мир переполнился бы ими. По этой теории, их должно было накопиться бесчисленное множество за восемьсот тысяч прошедших лет, и потому не было ничего удивительного, что я увидел сразу четырех. Эта шутливая мысль, однако, не успокоила меня, и я все утро думал о белых фигурках, пока наконец появление Уины не вытеснило их из моей головы. Не знаю почему, я связал их с белым животным, которое вспугнул при первых поисках своей Машины. Общество Уины на время отвлекло меня, но, несмотря на эту, белые фигуры скоро снова овладели моими мыслями. Я уже говорил, что климат Золотого Века значительно теплее нашего. Причину я не берусь объяснить. Может быть, солнце стало горячее, а может быть, земля приблизилась к нему.
It is usual to assume that the sun will go on cooling steadily in the future. But people, unfamiliar with such speculations as those of the younger Darwin, forget that the planets must ultimately fall back one by one into the parent body. As these catastrophes occur, the sun will blaze with renewed energy; and it may be that some inner planet had suffered this fate. Whatever the reason, the fact remains that the sun was very much hotter than we know it. 1 Well, one very hot morning - my fourth, I think- - as I was seeking shelter from the heat and glare in a colossal ruin near the great house where I slept and fed, there happened this strange thing: Clambering among these heaps of masonry, I found a narrow gallery, whose end and side windows were blocked by fallen masses of stone. By contrast with the brilliancy outside, it seemed at first impenetrably dark to me. I entered it groping, for the change from light to blackness made spots of colour swim before me. Suddenly I halted spellbound. A pair of eyes, luminous by reflection against the daylight without, was watching me out of the darkness. 1 The old instinctive dread of wild beasts came upon me. I clenched my hands and steadfastly looked into the glaring eyeballs. I was afraid to turn. Then the thought of the absolute security in which humanity appeared to be living came to my mind. And then I remembered that strange terror of the dark. Overcoming my fear to some extent, I advanced a step and spoke. I will admit that my voice was harsh and ill- controlled. I put out my hand and touched something soft. At once the eyes darted sideways, and something white ran past me. I turned with my heart in my mouth, and saw a queer little ape- like figure, its head held down in a peculiar manner, running across the sunlit space behind me. It blundered against a block of granite, staggered aside, and in a moment was hidden in a black shadow beneath another pile of ruined masonry. Принято считать, что солнце постепенно охлаждается. Однако люди, незнакомые с такими теориями, как теория Дарвина- младшего, забывают, что планеты должны одна за другой приближаться к центральному светилу и в конце концов упасть на него. После каждой из таких катастроф солнце будет светить с обновленной энергией; и весьма возможно, что эта участь постигла тогда одну из планет. Но какова бы ни была причина, факт остается фактом: солнце грело значительно сильнее, чем в наше время. И вот в одно очень жаркое утро - насколько помню, четвертое по моем прибытии, - когда я собирался укрыться от жары и ослепительного света в гигантских руинах (невдалеке от большого здания, где я ночевал и питался) , со мной случилось странное происшествие. Карабкаясь между каменными грудами, я обнаружил узкую галерею, конец и окна которой были завалены обрушившимися глыбами. После ослепительного дневного света галерея показалась мне непроглядно темной. Я вошел в нее ощупью, потому что от яркого солнечного света перед глазами у меня плыли цветные пятна и ничего нельзя было разобрать. И вдруг я остановился как вкопанный. На меня из темноты, отражая проникавший в галерею дневной свет, смотрела пара блестящих глаз. Древний инстинктивный страх перед дикими зверями охватил меня. Я сжал кулаки и уставился в светившиеся глаза. Мне было страшно повернуть назад. На мгновение в голову мне пришла мысль о той абсолютной безопасности, в которой, как казалось, жило человечество. И вдруг я вспомнил странный ужас этих людей перед темнотой. Пересилив свой страх, я шагнул вперед и заговорил. Мой голос, вероятно, звучал хрипло и дрожал. Я протянул руку и коснулся чего- то мягкого. В то же мгновение блестящие глаза метнулись в сторону и что- то белое промелькнуло мимо меня. Испугавшись, я повернулся и увидел маленькое обезьяноподобное существо со странно опущенной вниз головой, бежавшее по освещенному пространству галереи. Оно налетело на гранитную глыбу, отшатнулось в сторону и в одно мгновение скрылось в черной тени под другой грудой каменных обломков.
'My impression of it is, of course, imperfect; but I know it was a dull white, and had strange large greyish-red eyes; also that there was flaxen hair on its head and down its back. But, as I say, it went too fast for me to see distinctly. I cannot even say whether it ran on all- fours, or only with its forearms held very low. After an instant's pause I followed it into the second heap of ruins. I could not find it at first; but, after a time in the profound obscurity, I came upon one of those round well- like openings of which I have told you, half closed by a fallen pillar. A sudden thought came to me. Could this Thing have vanished down the shaft? I lit a match, and, looking down, I saw a small, white, moving creature, with large bright eyes which regarded me steadfastly as it retreated. It made me shudder. It was so like a human spider! It was clambering down the wall, and now I saw for the first time a number of metal foot and hand rests forming a kind of ladder down the shaft. Then the light burned my fingers and fell out of my hand, going out as it dropped, and when I had lit another the little monster had di sappeared. ' I do not know how long I sat peering down that well. It was not for some time that I could succeed in persuading myself that the thing I had seen was human. But, gradually, the truth dawned on me: that Man had not remained one species, but had differentiated into two distinct animals: that my graceful children of the Upper- world were not the sole descendants of our generation, but that this bleached, obscene, nocturnal Thing, which had flashed before me, was also heir to all the ages. ' I thought of the flickering pillars and of my theory of an underground ventilation. I began to suspect their true import. And what, I wondered, was this Lemur doing in my scheme of a perfectly balanced organization? How was it related to the indolent serenity of the beautiful Upper- worlders? And what was hidden down there, at the foot of that shaft? I sat upon the edge of the well telling myself that, at any rate, there was nothing to fear, and that there I must descend for the solution of my difficulties . Мое впечатление о нем было, конечно, неполное. Я заметил только, что оно было грязно- белое и что у него были странные, большие, серовато- красные глаза; его голова и спина были покрыты светлой шерстью. Но, как я уже сказал, оно бежало слишком быстро, и мне не удалось его отчетливо рассмотреть. Не могу даже сказать, бежало ли оно на четвереньках или же руки его были так длинны, что почти касались земли. После минутного замешательства я бросился за ним ко второй груде обломков. Сначала я не мог ничего найти, но скоро в кромешной темноте наткнулся на один из тех круглых безводных колодцев, о которых я уже говорил. Он был частично прикрыт упавшей колонной. В голове у меня блеснула внезапная мысль. Не могло ли это существо спуститься в колодец? Я зажег спичку и, взглянув вниз, увидел маленькое белое создание с большими блестящими глазами, которое удалялось, упорно глядя на меня. Я содрогнулся. Это было что- то вроде человекообразного паука. Оно спускалось вниз по стене колодца, и я впервые заметил множество металлических скобок для рук и ног, образовавших нечто вроде лестницы. Но тут догоревшая спичка обожгла мне пальцы и, выпав, потухла; когда я зажег другую, маленькое страшилище уже исчезло. Не знаю, долго ли я просидел, вглядываясь в глубину колодца. Во всяком случае, прошло немало времени, прежде чем я пришел к заключению, что виденное мною существо тоже было человеком. Понемногу истина открылась передо мной. Я понял, что человек разделился на два различных вида. Изящные дети Верхнего Мира не были единственными нашими потомками: это беловатое отвратительное ночное существо, которое промелькнуло передо мной, также было наследником минувших веков. Вспомнив о дрожании воздуха над колодцами и о своей теории подземной вентиляции, я начал подозревать их истинное значение. Но какую роль, хотелось мне знать, мог играть этот лемур в моей схеме окончательной организации человечества? Каково было его отношение к безмятежности и беззаботности прекрасных жителей Верхнего Мира? Что скрывалось там, в глубине этого колодца? Я присел на его край, убеждая себя, что мне, во всяком случае, нечего опасаться и что необходимо спуститься туда для разрешения моих недоумений.
And withal I was absolutely afraid to go! As I hesitated, two of the beautiful Upper- world people came running in their amorous sport across the daylight in the shadow. The male pursued the female, flinging flowers at her as he ran. 'They seemed distressed to find me, my arm against the overturned pillar, peering down the well. Apparently it was considered bad form to remark these apertures; for when I pointed to this one, and tried to frame a question about it in their tongue, they were still more visibly distressed and turned away. But they were interested by my matches, and I struck some to amuse them. I tried them again about the well, and again I failed. So presently I left them, meaning to go back to Weena, and see what I could get from her. But my mind was already in revolution; my guesses and impressions were slipping and sliding to a new adjustment. I had now a clue to the import of these wells, to the ventilating towers, to the mystery of the ghosts; to say nothing of a hint at the meaning of the bronze gates and the fate of the Time Machine! And very vaguely there came a suggestion towards the solution of the economic problem that had puzzled me. 'Here was the new view. Plainly, this second species of Man was subterranean. There were three circumstances in particular which made me think that its rare emergence above ground was the outcome of a long- continued underground habit. In the first place, there was the bleached look common in most animals that live largely in the dark- - the white fish of the Kentucky caves, for instance. Then, those large eyes, with that capacity for reflecting light, are common features of nocturnal things- witness the owl and the cat. And last of all, that evident confusion in the sunshine, that hasty yet fumbling awkward flight towards dark shadow, and that peculiar carriage of the head while in the light- - all reinforced the theory of an extreme sensitiveness of the retina. 'Beneath my feet, then, the earth must be tunnelled enormously, and these tun- nellings were the habitat of the new race. The presence of ventilating shafts and wells along the hill slopes - everywhere, in fact, except along the river valley - showed how universal were its ramifications. Но вместе с тем я чувствовал какой- то страх! Пока я колебался, двое прекрасных наземных жителей, увлеченные любовной игрой, пробежали мимо меня через освещенное пространство в тень. Мужчина бежал за женщиной, бросая в нее цветами. Они, казалось, очень огорчились, увидя, что я заглядываю в колодец, опираясь на упавшую колонну. Очевидно, было принято не замечать эти отверстия. Как только я указал на колодец и попытался задать вопросы на их языке, смущение их стало еще очевиднее, и они отвернулись от меня. Но спички их заинтересовали, и мне пришлось сжечь несколько штук, чтобы позабавить их. Я снова попытался узнать что-нибудь про колодцы, но снова тщетно. Тогда, оставив их в покое, я решил вернуться к Уине и попробовать узнать что- нибудь у нее. Все мои представления о новом мире теперь перевернулись. У меня был ключ, чтобы понять значение этих колодцев, а также вентиляционных башен и таинственных привидений, не говоря уже о бронзовых дверях и о судьбе, постигшей Машину Времени! Вместе с этим ко мне в душу закралось смутное предчувствие возможности разрешить ту экономическую проблему, которая до сих пор приводила меня в недоумение. Вот каков был мой новый вывод. Ясно, что этот второй вид людей обитал под землей. Три различных обстоятельства приводили меня к такому заключению. Они редко появлялись на поверхности земли, по-видимому, вследствие давней привычки к подземному существованию. На это указывала их блеклая окраска, присущая большинству животных, обитающих в темноте, - например, белые рыбы в пещерах Кентукки. Глаза, отражающие свет, - это также характерная черта ночных животных, например, кошки и совы. И, наконец, это явное замешательство при дневном свете, это поспешное неуклюжее бегство в темноту, эта особая манера опускать на свету лицо вниз - все это подкрепляло мою догадку о крайней чувствительности сетчатки их глаз. Итак, земля у меня под ногами, видимо, была изрыта тоннелями, в которых и обитала новая раса. Существование вентиляционных башен и колодцев по склонам холмов - всюду, кроме долины реки, - доказывало, что эти тоннели образуют разветвленную сеть.
What so natural, then, as to assume that it was in this artificial Underworld that such work as was necessary to the comfort of the daylight race was done? The notion was so plausible that I at once accepted it, and went on to assume the how of this splitting of the human species. I dare say you will anticipate the shape of my theory; though, for myself, I very soon felt that it fell far short of the truth. 'At first, proceeding from the problems of our own age, it seemed clear as daylight to me that the gradual widening of the present merely temporary and social difference between the Capitalist and the Labourer, was the key to the whole position. No doubt it will seem grotesque enough to you- - and wildly incredible! - - and yet even now there are existing circumstances to point that way. There is a tendency to utilize underground space for the less ornamental purposes of civilization; there is the Metropolitan Railway in London, for instance, there are new electric railways, there are subways, there are underground workrooms and restaurants, and they increase and multiply. Evidently, I thought, this tendency had increased till Industry had gradually lost its birthright in the sky. I mean that it had gone deeper and deeper into larger and ever larger underground factories, spending a still increasing amount of its time therein, till, in the end - ! Even now, does not an East-end worker live in such artificial conditions as practically to be cut off from the natural surface of the earth? 'Again, the exclusive tendency of richer people - due, no doubt, to the increasing refinement of their education, and the widening gulf between them and the rude violence of the poor- - is already leading to the closing, in their interest, of considerable portions of the surface of the land. About London, for instance, perhaps half the prettier country is shut in against intrusion. Разве не естественно было предположить, что в искусственном подземном мире шла работа, необходимая для благосостояния дневной расы? Мысль эта была так правдоподобна, что я тотчас же принял ее и пошел дальше, отыскивая причину раздвоения человеческого рода. Боюсь, что вы с недоверием отнесетесь к моей теории, но что касается меня самого, то я убедился в скором времени, насколько она была близка к истине. Мне казалось ясным, как день, что постепенное углубление теперешнего временного социального различия между Капиталистом и Рабочим было ключом к новому положению вещей. Без сомнения, это покажется вам смешным и невероятным, но ведь уже теперь есть обстоятельства, которые указывают на такую возможность. Существует тенденция использовать подземные пространства для нужд цивилизации, не требующих особой красоты: существует, например, подземная железная дорога в Лондоне, строятся новые электрические подземные дороги и тоннели, существуют подземные мастерские и рестораны, все они растут и множатся. Очевидно, думал я, это стремление перенести работу под землю существует с незапамятных времен. Все глубже и глубже под землю уходили мастерские, где рабочим приходилось проводить все больше времени, пока наконец. .. Да разве и теперь искусственные условия жизни какого-нибудь уэст- эндского рабочего не отрезают его, по сути дела, от поверхности земли? А вслед за тем кастовая тенденция богатых людей, вызванная все большей утонченностью жизни, - тенденция расширить пропасть между ними и оскорбляющей их грубостью бедняков тоже ведет к захвату привилегированными сословиями все большей и большей части поверхности земли исключительно для себя. В окрестностях Лондона и других больших городов уже около половины самых красивых мест недоступно для посторонних!
And this same widening gulf- - which is due to the length and expense of the higher educational process and the increased facilities for and temptations towards refined habits on the part of the rich- - will make that exchange between class and class, that promotion by intermarriage which at present retards the splitting of our species along lines of social stratification, less and less frequent. So, in the end, above ground you must have the Haves, pursuing pleasure and comfort and beauty, and below ground the Have- nots, the Workers getting continually adapted to the conditions of their labour. Once they were there, they would no doubt have to pay rent, and not a little of it, for the ventilation of their caverns; and if they refused, they would starve or be suffocated for arrears. Such of them as were so constituted as to be miserable and rebellious would die; and, in the end, the balance being permanent, the survivors would become as well adapted to the conditions of underground life, and as happy in their way, as the Upper- world people were to theirs. As it seemed to me, the refined beauty and the etiolated pallor followed naturally enough. 1 The great triumph of Humanity I had dreamed of took a different shape in my mind. It had been no such triumph of moral education and general со- operation as I had imagined. Instead, I saw a real aristocracy, armed with a perfected science and working to a logical conclusion the industrial system of to- day. Its triumph had not been simply a triumph over Nature, but a triumph over Nature and the fellow- man. This, I must warn you, was my theory at the time. I had no convenient cicerone in the pattern of the Utopian books. My explanation may be absolutely wrong. I still think it is the most plausible one. But even on this supposition the balanced civilization that was at last attained must have long since passed its zenith, and was now far fallen into decay. The too- perfect security of the Upper- worlders had led them to a slow movement of degeneration, to a general dwindling in size, strength, and intelligence. А эта неуклонно расширяющаяся пропасть между богатыми и бедными, результат продолжительности и дороговизны высшего образования и стремления богатых к утонченным привычкам, - разве не поведет это к тому, что соприкосновения между классами станут все менее возможными? Благодаря такому отсутствию общения и тесных отношений браки между обоими классами, тормозящие теперь разделение человеческого рода на два различных вида, станут в будущем все более и более редкими. В конце концов на земной поверхности должны будут остаться только Имущие, наслаждающиеся в жизни исключительно удовольствиями и красотой, а под землей окажутся все Неимущие - рабочие, приспособившиеся к подземным условиям труда. А раз очутившись там, они, без сомнения, должны будут платить Имущим дань за вентиляцию своих жилищ. Если они откажутся от этого, то умрут с голода или задохнутся. Неприспособленные или непокорные вымрут. Мало- помалу при установившемся равновесии такого порядка вещей выжившие Неимущие сделаются такими же счастливыми на свой собственный лад, как и жители Верхнего Мира. Таким образом, естественно возникнут утонченная красота одних и бесцветная бедность других. Окончательный триумф Человечества, о котором я мечтал, принял теперь совершенно иной вид в моих глазах. Это не был тот триумф духовного прогресса и коллективного труда, который я представлял себе . Вместо него я увидел настоящую аристократию, вооруженную новейшими знаниями и деятельно потрудившуюся для логического завершения современной нам индустриальной системы. Ее победа была не только победой над природой, но также и победой над своими собратьями- людьми. Такова была моя теория. У меня не было проводника, как в утопических книгах. Может быть, мое объяснение совершенно неправильно. Но все же я думаю и до сих пор, что оно самое правдоподобное. Однако даже и эта по- своему законченная цивилизация давно прошла свой зенит и клонилась к упадку. Чрезмерная обеспеченность жителей Верхнего Мира привела их к постепенной дегенерации, к общему вырождению, уменьшению роста, сил и умственных способностей.
That I could see clearly enough already. What had happened to the Under- grounders I did not yet suspect; but from what I had seen of the Morlocks- - that, by the by, was the name by which these creatures were called- - I could imagine that the modification of the human type was even far more profound than among the "Eloi," the beautiful race that I already knew. 1 Then came troublesome doubts. Why had the Morlocks taken my Time Machine? For I felt sure it was they who had taken it. Why, too, if the Eloi were masters, could they not restore the machine to me? And why were they so terribly afraid of the dark? I proceeded, as I have said, to question Weena about this Under- world, but here again I was disappointed. At first she would not understand my questions, and presently she refused to answer them. She shivered as though the topic was unendurable. And when I pressed her, perhaps a little harshly, she burst into tears. They were the only tears, except my own, I ever saw in that Golden Age. When I saw them I ceased abruptly to trouble about the Morlocks, and was only concerned in banishing these signs of the human inheritance from Weena' s eyes. And very soon she was smiling and clapping her hands, while I solemnly burned a match. 1 It may seem odd to you, but it was two days before I could follow up the new- found clue in what was manifestly the proper way. I felt a peculiar shrinking from those pallid bodies. They were just the half- bleached colour of the worms and things one sees preserved in spirit in a zoological museum. And they were filthily cold to the touch. Probably my shrinking was largely due to the sympathetic influence of the Eloi, whose disgust of the Morlocks I now began to appreciate. 'The next night I did not sleep well. Probably my health was a little disordered. I was oppressed with perplexity and doubt. Once or twice I had a feeling of intense fear for which I could perceive no definite reason. I remember creeping noiselessly into the great hall where the little people were sleeping in the moonlight - that night Weena was among them - and feeling reassured by their presence. Это я видел достаточно ясно. Что произошло с Подземными Жителями, я еще не знал, но все виденное мной до сих пор показывало, что "морлоки", как их называли обитатели Верхнего Мира, ушли еще дальше от нынешнего человеческого типа, чем "элои" - прекрасная наземная раса, с которой я уже познакомился. Во мне возникли тревожные опасения. Для чего понадобилась морлокам моя Машина Времени? Теперь я был уверен, что это они похитили ее. И почему элои, если они господствующая раса, не могут возвратить ее мне? Почему они так боятся темноты? Я попытался было расспросить о Подземном Мире Уину, но меня снова ожидало разочарование. Сначала она не понимала моих вопросов, а затем отказалась на них отвечать . Она так дрожала, как будто не могла вынести этого разговора. Когда к начал настаивать, быть может, слишком резко, она горько расплакалась. Это были единственные слезы, которые я видел в Золотом Веке, кроме тех, что пролил я сам. Я тотчас же перестал мучить ее расспросами о морлоках и постарался, чтобы с ее лица исчезли эти следы человеческих чувств. Через минуту она уже улыбалась и хлопала в ладоши, когда я торжественно зажег перед ней спичку. Вам может показаться странным, что прошло целых два дня, прежде чем я решился продолжать свои изыскания в новом и, очевидно, верном направлении. Я ощущал какой- то страх перед этими белыми фигурами. Они походили на почти обесцвеченных червей и другие препараты, хранящиеся в спирту в зоологических музеях. А прикоснувшись к ним, я почувствовал, какие они были отвратительно холодные ! Этот страх отчасти объяснялся моей симпатией к элоям, чье отвращение к морлокам стало мало-помалу передаваться и мне. В следующую ночь я спал очень плохо. Вероятно, мое здоровье расстроилось . Страхи и сомнения угнетали меня. Порой на меня нападало чувство ужаса, причину которого я не мог понять. Помню, как я тихонько пробрался в большую залу, где, освещенные луной, спали маленькие люди. В эту ночь с ними спала и Уина.
It occurred to me even then, that in the course of a few days the moon must pass through its last quarter, and the nights grow dark, when the appearances of these unpleasant creatures from below, these whitened Lemurs, this new vermin that had replaced the old, might be more abundant. And on both these days I had the restless feeling of one who shirks an inevitable duty. I felt assured that the Time Machine was only to be recovered by boldly penetrating these underground mysteries. Yet I could not face the mystery. If only I had had a companion it would have been different. But I was so horribly alone, and even to clamber down into the darkness of the well appalled me. I don't know if you will understand my feeling, but I never felt quite safe at my back. 'It was this restlessness, this insecurity, perhaps, that drove me further and further afield in my exploring expeditions. Going to the south- westward towards the rising country that is now called Combe Wood, I observed far off, in the direction of nineteenth- century Banstead, a vast green structure, different in character from any I had hitherto seen. It was larger than the largest of the palaces or ruins I knew, and the facade had an Oriental look: the face of it having the lustre, as well as the pale- green tint, a kind of bluish- green, of a certain type of Chinese porcelain. This difference in aspect suggested a difference in use, and I was minded to push on and explore. But the day was growing late, and I had come upon the sight of the place after a long and tiring circuit; so I resolved to hold over the adventure for the following day, and I returned to the welcome and the caresses of little Weena. But next morning I perceived clearly enough that my curiosity regarding the Palace of Green Porcelain was a piece of self- deception, to enable me to shirk, by another day, an experience I dreaded. I resolved I would make the descent without further waste of time, and started out in the early morning towards a well near the ruins of granite and aluminium. Их присутствие успокоило меня. Мне еще тогда пришло в голову, что через несколько дней луна будет в последней четверти и наступят темные ночи, когда должны участиться появления этих белых лемуров, этих новых червей, пришедших на смену старым. В последние два дня меня не оставляло тревожное чувство, какое обыкновенно испытывает человек, уклоняясь от исполнения неизбежного долга. Я был уверен, что смогу вернуть Машину Времени, только проникнув без страха в тайну Подземного Мира. Но я все еще не решался встретиться с этой тайной. Будь у меня товарищ, возможно, все сложилось бы иначе. Но я был так ужасно одинок, что даже самая мысль спуститься в мрачную глубину колодца была невыносима для меня. Не знаю, поймете ли вы мое чувство, но мне непрестанно казалось, что за спиной мне угрожает страшная опасность. Вероятно, это беспокойство и ощущение неведомой опасности заставляли меня уходить все дальше и дальше на разведку. Идя на юго-запад к возвышенности, которая в наше время называется Ком- Вуд, я заметил далеко впереди, там, где в девятнадцатом веке находится городок Бэнс- гид, огромное зеленое здание, совершенно не похожее по стилю на все дома, виденные мной до сих пор. Размерами оно превосходило самые большие дворцы. Его фасад был отделан в восточном духе; выкрашенный блестящей бледно- зеленой краской с голубоватым оттенком, он походил на дворец из китайского фарфора. Такое отличие во внешнем виде невольно наводило на мысль о его особом назначении, и я намеревался получше осмотреть дворец. Но впервые я увидел его после долгих и утомительных скитаний, когда день уже клонился к вечеру; поэтому, решив отложить осмотр до следующего дня, я вернулся домой к ласкам приветливой маленькой Уины. На следующее утро я ясно понял, что мое любопытство к Зеленому Фарфоровому Дворцу было вроде самообмана, изобретенного мною для того, чтобы еще на день отложить страшившее меня исследование Подземного Мира. Без дальнейших проволочек я решил пересилить себя и в то же утро спуститься в один из колодцев; я направился прямо к ближайшему из них, расположенному возле кучи гранитных и алюминиевых обломков.
'Little Weena ran with me. She danced beside me to the well, but when she saw me lean over the mouth and look downward, she seemed strangely disconcerted. "Good- bye, little Weena," I said, kissing her; and then putting her down, I began to feel over the parapet for the climbing hooks. Rather hastily, I may as well confess, for I feared my courage might leak away! At first she watched me in amazement. Then she gave a most piteous cry, and running to me, she began to pull at me with her little hands. I think her opposition nerved me rather to proceed. I shook her off, perhaps a little roughly, and in another moment I was in the throat of the well. I saw her agonized face over the parapet, and smiled to reassure her. Then I had to look down at the unstable hooks to which I clung. 'I had to clamber down a shaft of perhaps two hundred yards. The descent was effected by means of metallic bars projecting from the sides of the well, and these being adapted to the needs of a creature much smaller and lighter than myself, I was speedily cramped and fatigued by the descent. And not simply fatigued! One of the bars bent suddenly under my weight, and almost swung me off into the blackness beneath. For a moment I hung by one hand, and after that experience I did not dare to rest again. Though my arms and back were presently acutely painful, I went on clambering down the sheer descent with as quick a motion as possible. Glancing upward, I saw the aperture, a small blue disk, in which a star was visible, while little Weena' s head showed as a round black projection. The thudding sound of a machine below grew louder and more oppressive. Everything save that little disk above was profoundly dark, and when I looked up again Weena had disappeared. 'I was in an agony of discomfort. I had some thought of trying to go up the shaft again, and leave the Under- world alone. But even while I turned this over in my mind I continued to descend. At last, with intense relief, I saw dimly coming up, a foot to the right of me, a slender loophole in the wall. Swinging myself in, I found it was the aperture of a narrow horizontal tunnel in which I could lie down and rest. It was not too soon. Маленькая Уина бежала рядом, со мной. Она, танцуя, проводила меня до колодца, но когда увидела, что я перегнулся через край и принялся смотреть вниз, пришла в ужасное волнение. "Прощай, маленькая Уина", - сказал я, целуя ее. Отпустив ее и перегнувшись через стенку, я принялся ощупывать металлические скобы. Не скрою, что делал я это торопливо из страха, что решимость меня покинет. Уина сначала смотрела на меня с изумлением. Потом, испустив жалобный крик, бросилась ко мне и принялась оттаскивать меня прочь своими маленькими ручками. Мне кажется, ее сопротивление и побудило меня действовать решительно. Я оттолкнул ее руки, может быть, немного резко и мгновенно спустился в шахту колодца. Взглянув вверх, я увидел полное отчаяния лицо Уины и улыбнулся, чтобы ее успокоить. Но тотчас же вслед за тем я должен был обратить все свое внимание на скобы, едва выдерживавшие мою тяжесть. Мне нужно было спуститься примерно на глубину двухсот ярдов. Так как металлические скобы были приспособлены для спуска небольших существ, то очень скоро я почувствовал усталость. Нет, не только усталость, но и подлинный ужас! Одна скоба неожиданно прогнулась под моей тяжестью, и я едва не полетел вниз, в непроглядную темноту. С минуту я висел на одной руке и после этого случая не решался более останавливаться. Хотя я скоро ощутил жгучую боль в руках и спине, но все же продолжал спускаться быстро, как только мог. Посмотрев наверх, я увидел в отверстии колодца маленький голубой кружок неба, на котором виднелась одна звезда, а головка Уины казалась на фоне неба черным круглым пятнышком. Внизу все громче раздавался грохот машин. Все, кроме небольшого кружка вверху, было темным. Когда я снова поднял голову, Уина уже исчезла. Мучительная тревога овладела мной. У меня мелькнула мысль вернуться наверх и оставить Подземный Мир в покое. Но все- таки я продолжал спускаться вниз. Наконец, не знаю через сколько времени, я с невероятным облегчением увидел или скорее почувствовал справа от себя небольшое отверстие в стене колодца. Проникнув в него, я убедился, что это был вход в узкий горизонтальный тоннель, где я мог прилечь и отдохнуть. Можно было не спешить.
My arms ached, my back was cramped, and I was trembling with the prolonged terror of a fall. Besides this, the unbroken darkness had had a distressing effect upon my eyes. The air was full of the throb and hum of machinery pumping air down the shaft. 'I do not know how long I lay. I was roused by a soft hand touching my face. Starting up in the darkness I snatched at my matches and, hastily striking one, I saw three stooping white creatures similar to the one I had seen above ground in the ruin, hastily retreating before the light. Living, as they did, in what appeared to me impenetrable darkness, their eyes were abnormally large and sensitive, just as are the pupils of the abysmal fishes, and they reflected the light in the same way. I have no doubt they could see me in that rayless obscurity, and they did not seem to have any fear of me apart from the light. But, so soon as I struck a match in order to see them, they fled incontinently, vanishing into dark gutters and tunnels, from which their eyes glared at me in the strangest fashion. 11 tried to call to them, but the language they had was apparently different from that of the Over- world people; so that I was needs left to my own unaided efforts, and the thought of flight before exploration was even then in my mind. But I said to myself, "You are in for it now," and, feeling my way along the tunnel, I found the noise of machinery grow louder. Presently the walls fell away from me, and I came to a large open space, and striking another match, saw that I had entered a vast arched cavern, which stretched into utter darkness beyond the range of my light. The view I had of it was as much as one could see in the burning of a match. 'Necessarily my memory is vague. Great shapes like big machines rose out of the dimness, and cast grotesque black shadows, in which dim spectral Morlocks sheltered from the glare. The place, by the by, was very stuffy and oppressive, and the faint halitus of freshly shed blood was in the air. Some way down the central vista was a little table of white metal, laid with what seemed a meal. Руки мои ныли, спину ломило, и я весь дрожал от страха перед падением. К тому же непроницаемая темнота сильно угнетала меня. Все вокруг было наполнено гулом машины, накачивавшей в глубину воздух. Не знаю, сколько времени я пролежал так. Очнулся я от мягкого прикосновения чьей- то руки, ощупывавшей мое лицо. Вскочив в темноте, я торопливо зажег спичку и разглядел при ее свете три сутуловатые белые фигуры, подобные той, какую я видел в развалинах наверху. Они быстро отступили при виде огня. Морлоки, как я уже говорил, проводили всю жизнь в темноте, и потому глаза их были необычайно велики. Они не могли вытерпеть света моей спички и отражали его, совсем как зрачки глубоководных океанских рыб. Я нимало не сомневался, что они видели меня в этой густой темноте, и их пугал только свет. Едва я зажег новую спичку, чтобы разглядеть их, как они обратились в бегство и исчезли в темных тоннелях, откуда сверкали только их блестящие глаза. Я попытался заговорить с ними, но их язык, видимо, отличался от языка наземных жителей, так что волей- неволей пришлось мне положиться на свои собственные силы. Снова мелькнула у меня мысль бежать, бросив все исследования. Но я сказал самому себе: "Надо довести дело до конца". Двигаясь ощупью по тоннелю, я заметил, что с каждым шагом гул машины становится все громче. Внезапно стены раздвинулись, я вышел на открытое место и, чиркнув спичкой, увидел, что нахожусь в просторной сводчатой пещере. Я не успел рассмотреть ее всю, потому что спичка скоро погасла. Разумеется, мои воспоминания - очень смутны. В темноте проступали контуры огромных машин, отбрасывавших при свете спички причудливые черные тени, в которых укрывались похожие на привидения морлоки. Было очень душно, и в воздухе чувствовался слабый запах свежепролитой крови. Чуть подальше, примерно в середине пещеры, стоял небольшой стол из белого металла, на котором лежали куски свежего мяса.
The Morlocks at any rate were carnivorous ! Even at the time, I remember wondering what large animal could have survived to furnish the red joint I saw. It was all very indistinct: the heavy smell, the big unmeaning shapes, the obscene figures lurking in the shadows, and only waiting for the darkness to come at me again! Then the match burned down, and stung my fingers, and fell, a wriggling red spot in the blackness. 11 have thought since how particularly ill-equipped I was for such an experience. When I had started with the Time Machine, I had started with the absurd assumption that the men of the Future would certainly be infinitely ahead of ourselves in all their appliances. I had come without arms, without medicine, without anything to smoke- - at times I missed tobacco frightfully- - even without enough matches. If only I had thought of a Kodak! I could have flashed that glimpse of the Underworld in a second, and examined it at leisure. But, as it was, I stood there with only the weapons and the powers that Nature had endowed me with- - hands, feet, and teeth; these, and four safety - matches that still remained to me. 11 was afraid to push my way in among all this machinery in the dark, and it was only with my last glimpse of light I discovered that my store of matches had run low. It had never occurred to me until that moment that there was any need to economize them, and I had wasted almost half the box in astonishing the Upper- worlders, to whom fire was a novelty. Now, as I say, I had four left, and while I stood in the dark, a hand touched mine, lank fingers came feeling over my face, and I was sensible of a peculiar unpleasant odour. I fancied I heard the breathing of a crowd of those dreadful little beings about me. I felt the box of matches in my hand being gently disengaged, and other hands behind me plucking at my clothing. The sense of these unseen creatures examining me was indescribably unpleasant. The sudden realization of my ignorance of their ways of thinking and doing came home to me very vividly in the darkness. I shouted at them as loudly as I could. They started away, and then I could feel them approaching me again. Оказалось, что морлоки не были вегетарианцами! Помню, как уже тогда я с изумлением подумал, - что это за домашнее животное сохранилось от наших времен, мясо которого лежало теперь передо мной? Все вокруг было видно смутно; тяжелый запах, громадные контуры машин, отвратительные фигуры, притаившиеся в тони и ожидающие только темноты, чтобы снова приблизиться ко мне! Догоревшая спичка обожгла мне пальцы и упала на землю, тлея красной точкой в непроглядной тьме. С тех пор много раз я думал, как плохо был я подготовлен к такому исследованию. Отправляясь в путешествие на Машине Времени, я был исполнен нелепой уверенности, что люди Будущего опередили нас во всех отношениях. Я пришел к ним без оружия, без лекарств, без табака, а временами мне так ужасно хотелось курить! Даже спичек у меня было мало. Ах, если б я только сообразил захватить фотографический аппарат! Можно было бы запечатлеть этот Подземный Мир и потом спокойно рассмотреть его. Теперь же я стоял там, вооруженный лишь тем, чем снабдила меня Природа, - руками, ногами и зубами; только это да четыре спасительные спички еще оставались у меня. Я побоялся пройти дальше в темный проход между машинами и только при последней вспышке зажженной спички увидел, что моя коробка кончается. До этой минуты мне и в голову не приходило, что нужно беречь спички, и я истратил почти половину коробки, удивляя наземных жителей, для которых огонь сделался диковинкой. Теперь, когда у меня оставалось только четыре спички, а сам я очутился в темноте, я снова почувствовал, как чьи- то тонкие пальцы принялись ощупывать мое лицо, и меня поразил какой- то особенно неприятный запах. Мне казалось, что я слышу дыхание целой толпы этих ужасных существ. Я почувствовал, как чьи- то руки осторожно пытаются отнять у меня спичечную коробку, а другие тянут меня сзади за одежду. Мне было нестерпимо ощущать присутствие невидимых созданий. Там, в темноте, я впервые ясно осознал, что не могу понять их побуждений и поступков. Я крикнул на них изо всех сил. Они отскочили, но тотчас же я снова почувствовал их приближение.
They clutched at me more boldly, whispering odd sounds to each other. I shivered violently, and shouted again- rather discordantly. This time they were not so seriously alarmed, and they made a queer laughing noise as they came back at me. I will confess I was horribly frightened. I determined to strike another match and escape under the protection of its glare. I did so, and eking out the flicker with a scrap of paper from my pocket, I made good my retreat to the narrow tunnel. But I had scarce entered this when my light was blown out and in the blackness I could hear the Morlocks rustling like wind among leaves, and pattering like the rain, as they hurried after me. 1 In a moment I was clutched by several hands, and there was no mistaking that they were trying to haul me back. I struck another light, and waved it in their dazzled faces. You can scarce imagine how nauseatingly inhuman they looked- - those pale, chinless faces and great, lidless, pinkish- grey eyes!- as they stared in their blindness and bewilderment. But I did not stay to look, I promise you: I retreated again, and when my second match had ended, I struck my third. It had almost burned through when I reached the opening into the shaft. I lay down on the edge, for the throb of the great pump below made me giddy. Then I felt sideways for the projecting hooks, and, as I did so, my feet were grasped from behind, and I was violently tugged backward. I lit my last match ... and it incontinently went out. But I had my hand on the climbing bars now, and, kicking violently, I disengaged myself from the clutches of the Morlocks and was speedily clambering up the shaft, while they stayed peering and blinking up at me: all but one little wretch who followed me for some way, and well-nigh secured my boot as a trophy. 1 That climb seemed interminable to me. With the last twenty or thirty feet of it a deadly nausea came upon me. I had the greatest difficulty in keeping my hold. The last few yards was a frightful struggle against this faintness. Several times my head swam, and I felt all the sensations of falling. At last, however, I got over the well- mouth somehow, and staggered out of the ruin into the blinding sunlight. На этот pas они уже смелее хватали меня и обменивались какими-то странными звуками. Я задрожал, крикнул опять, еще громче прежнего. Но в этот раз они уже не так испугались и тотчас приблизились снова, издавая странные звуки, похожие на тихий смех. Признаюсь, меня охватил страх. Я решил зажечь еще спичку и бежать под защитой света. Сделав это, я вынул из кармана кусок бумаги, зажег его и отступил назад в узкий тоннель. Но едва я вошел туда, мой факел задул ветер и стало слышно, как морлоки зашуршали в тоннеле, словно осенние листья. Их шаги звучали негромко и часто, как капли дождя. . . В одно мгновение меня схватило несколько рук. Морлоки пытались втащить меня назад в пещеру. Я зажег еще спичку и помахал ею прямо перед их лицами. Вы едва ли можете себе представить, какими омерзительно нечеловеческими они были, эти бледные лица без подбородков, с большими, лишенными век красновато- серыми глазами! Как они дико смотрели на меня в своем слепом отупении! Впрочем, могу вас уверить, что я недолго разглядывал их. Я снова отступил и, едва догорела вторая спичка, зажег третью. Она тоже почти догорела, когда мне наконец удалось добраться до шахты колодца. Я прилег, потому что у меня кружилась голова от стука огромного насоса внизу. Затем сбоку я нащупал скобы, но тут меня схватили за ноги и потащили обратно. Я зажег последнюю спичку. . . она тотчас же погасла. Но теперь, ухватившись за скобы и рассыпая ногами щедрые пинки, я высвободился из цепких объятий морлоков и принялся быстро взбираться по стене колодца. Все они стояли внизу и, моргая, смотрели на меня, кроме одной маленькой твари, которая некоторое время следовала за мной и чуть не сорвала с меня башмак в качестве трофея. Подъем показался мне бесконечным. Преодолевая последние двадцать или тридцать футов, я почувствовал ужасную тошноту. Невероятным усилием я овладел собой. Последние несколько ярдов были ужасны. Сил больше не было. Несколько раз у меня начинала кружиться голова, и тогда падение казалось неминуемым. Сам не знаю, как я добрался до отверстия колодца и, шатаясь, выбрался из руин на ослепительный солнечный свет.
I fell upon my face. Even the soil smelt sweet and clean. Then I remember Weena kissing my hands and ears, and the voices of others among the Eloi. Then, for a time, I was insensible. 'Now, indeed, I seemed in a worse case than before. Hitherto, except during my night's anguish at the loss of the Time Machine, I had felt a sustaining hope of ultimate escape, but that hope was staggered by these new discoveries. Hitherto I had merely thought myself impeded by the childish simplicity of the little people, and by some unknown forces which I had only to understand to overcome; but there was an altogether new element in the sickening quality of the Morlocks- - a something inhuman and malign. Instinctively I loathed them. Before, I had felt as a man might feel who had fallen into a pit: my concern was with the pit and how to get out of it. Now I felt like a beast in a trap, whose enemy would come upon him soon. 'The enemy I dreaded may surprise you. It was the darkness of the new moon. Weena had put this into my head by some at first incomprehensible remarks about the Dark Nights. It was not now such a very difficult problem to guess what the coming Dark Nights might mean. The moon was on the wane: each night there was a longer interval of darkness. And I now understood to some slight degree at least the reason of the fear of the little Upper- world people for the dark. I wondered vaguely what foul villainy it might be that the Morlocks did under the new moon. I felt pretty sure now that my second hypothesis was all wrong. The Upper- world people might once have been the favoured aristocracy, and the Morlocks their mechanical servants: but that had long since passed away. The two species that had resulted from the evolution of man were sliding down towards, or had already arrived at, an altogether new relationship. The Eloi, like the Carolingian kings, had decayed to a mere beautiful futility. They still possessed the earth on sufferance: since the Morlocks, subterranean for innumerable generations, had come at last to find the daylit surface intolerable. Я упал ничком. Даже земля показалось мне здесь чистой и благоуханной. Помню, как Уина осыпала поцелуями мои руки и лицо и как вокруг меня раздавались голоса других элоев. А потом я потерял сознание . После этого я оказался еще в худшем положении, чем раньше. Если не считать минут отчаяния в ту ночь, когда я лишился Машины Времени, меня все время ободряла надежда на возможность бегства. Однако новые открытия пошатнули ее. До сих пор я видел для себя препятствие лишь в детской непосредственности миленького народа и в каких- то неведомых мне силах, узнать которые, казалось мне, было равносильно тому, чтобы их преодолеть. Теперь же появилось совершенно новое обстоятельство - отвратительные морлоки, что- то нечеловеческое и враждебное. Я инстинктивно ненавидел их. Прежде я чувствовал себя в положении человека, попавшего в яму: думал только о яме и о том, как бы из нее выбраться. Теперь же я чувствовал себя в положении зверя, попавшего в западню и чующего, что враг близко. Враг, о котором я говорю, может вас удивить: это темнота перед новолунием. Уина внушила мне этот страх несколькими сначала непонятными словами о Темных Ночах. Теперь нетрудно было догадаться, что означало это приближение Темных Ночей. Луна убывала, каждую ночь темнота становилась все непроницаемей. Теперь я хоть отчасти понял наконец причину ужаса жителей Верхнего Мира перед темнотой. Я спрашивал себя, что за мерзости проделывали морлоки в безлунные ночи. Я был уже окончательно убежден, что моя гипотеза о господстве элоев над морлоками совершенно неверна. Конечно, раньше жители Верхнего Мира были привилегированным классом, а морлоки - их рабочими- слугами, но это давным- давно ушло в прошлое. Обе разновидности людей, возникшие вследствие эволюции общества, переходили или уже перешли к совершенно новым отношениям. Подобно династии Каролингов, элои переродились в прекрасные ничтожества. Они все еще из милости владели поверхностью земли, тогда как морлоки, жившие в продолжение бесчисленных поколений под землей, в конце концов стали совершенно неспособными выносить дневной свет.
And the Morlocks made their garments, I inferred, and maintained them in their habitual needs, perhaps through the survival of an old habit of service. They did it as a standing horse paws with his foot, or as a man enjoys killing animals in sport: because ancient and departed necessities had impressed it on the organism. But, clearly, the old order was already in part reversed. The Nemesis of the delicate ones was creeping on apace. Ages ago, thousands of generations ago, man had thrust his brother man out of the ease and the sunshine. And now that brother was coming back changed! Already the Eloi had begun to learn one old lesson anew. They were becoming reac- quainted with Fear. And suddenly there came into my head the memory of the meat I had seen in the Under- world. It seemed odd how it floated into my mind: not stirred up as it were by the current of my meditations, but coming in almost like a question from outside. I tried to recall the form of it. I had a vague sense of something familiar, but I could not tell what it was at the time. 1 Still, however helpless the little people in the presence of their mysterious Fear, I was differently constituted. I came out of this age of ours, this ripe prime of the human race, when Fear does not paralyse and mystery has lost its terrors. I at least would defend myself. Without further delay I determined to make myself arms and a fastness where I might sleep. With that refuge as a base, I could face this strange world with some of that confidence I had lost in realizing to what creatures night by night I lay exposed. I felt I could never sleep again until my bed was secure from them. I shuddered with horror to think how they must already have examined me. 'I wandered during the afternoon along the valley of the Thames, but found nothing that commended itself to my mind as inaccessible. All the buildings and trees seemed easily practicable to such dexterous climbers as the Morlocks, to judge by their wells, must be. Then the tall pinnacles of the Palace of Green Porcelain and the polished gleam of its walls came back to my memory; and in the evening, taking Weena like a child upon my shoulder, I went up the hills towards the south-west. Морлоки по-прежнему делали для них одежду и заботились об их повседневных нуждах, может быть, вследствие старой привычки работать на них. Они делали это так же бессознательно, как конь бьет о землю копытом или охотник радуется убитой им дичи: старые, давно исчезнувшие отношения все еще накладывали свою печать на человеческий организм. Но ясно, что изначальные отношения этих двух рас стали теперь прямо противоположны. Неумолимая Немезида неслышно приближалась к изнеженным счастливцам. Много веков назад, за тысячи и тысячи поколений, человек лишил своего ближнего счастья и солнечного света. А теперь этот ближний стал совершенно неузнаваем! Элои снова получили начальный урок жизни. Они заново познакомились с чувством страха. Я неожиданно вспомнил о мясе, которое видел в Подземном Мире. Не знаю, почему мне это пришло в голову: то было не следствие моих мыслей, а как бы вопрос извне. Я попытался припомнить, как выглядело мясо. Оно уже тогда показалось мне каким- то знакомым, но что это было, я не мог понять. Маленький народ был беспомощен в присутствии существ, наводивших на него этот таинственный страх, но я был не таков. Я был сыном своего века, века расцвета человеческой расы, когда страх перестал сковывать человека и таинственность потеряла свои чары. Во всяком случае, я мог защищаться. Без промедления я решил приготовить себе оружие и найти безопасное место для сна. Имея такое убежище, я мог бы сохранить по отношению к этому неведомому миру некоторую долю той уверенности, которой я лишился, узнав, какие существа угрожали мне по ночам. Я знал, что не засну до тех пор, пока сон мой не будет надежно защищен. Я содрогнулся при мысли, что эти твари уже не раз рассматривали меня. Весь день я бродил по долине Темзы, но не нашел никакого убежища, которое было бы для них недосягаемым. Все здания и деревья казались легко доступными для таких ловких и цепких существ, какими были морлоки, судя по их колодцам. И тут я снова вспомнил о высоких башенках и гладких блестящих стенах Зеленого Фарфорового дворца. В тот же вечер, посадив Уину, как ребенка, на плечо, я отправился по холмам на юго-запад.
The distance, I had reckoned, was seven or eight miles, but it must have been nearer eighteen. I had first seen the place on a moist afternoon when distances are deceptively diminished. In addition, the heel of one of my shoes was loose, and a nail was working through the sole- - they were comfortable old shoes I wore about indoors- - so that I was lame. And it was already long past sunset when I came in sight of the palace, silhouetted black against the pale yellow of the sky. 'Weena had been hugely delighted when I began to carry her, but after a while she desired me to let her down, and ran along by the side of me, occasionally darting off on either hand to pick flowers to stick in my pockets. My pockets had always puzzled Weena, but at the last she had concluded that they were an eccentric kind of vase for floral decoration. At least she utilized them for that purpose. And that reminds me! In changing my jacket I found...' The Time Traveller paused, put his hand into his pocket, and silently placed two withered flowers, not unlike very large white mallows, upon the little table. Then he resumed his narrative . 'As the hush of evening crept over the world and we proceeded over the hill crest towards Wimbledon, Weena grew tired and wanted to return to the house of grey stone. But I pointed out the distant pinnacles of the Palace of Green Porcelain to her, and contrived to make her understand that we were seeking a refuge there from her Fear. You know that great pause that comes upon things before the dusk? Even the breeze stops in the trees. To me there is always an air of expectation about that evening stillness. The sky was clear, remote, and empty save for a few horizontal bars far down in the sunset. Well, that night the expectation took the colour of my fears. In that darkling calm my senses seemed preternaturally sharpened. I fancied I could even feel the hollowness of the ground beneath my feet: could, indeed, almost see through it the Morlocks on their ant- hill going hither and thither and waiting for the dark. In my excitement I fancied that they would receive my invasion of their burrows as a declaration of war. And why had they taken my Time Machine? Я полагал, что до Зеленого Дворца семь или восемь миль, но, вероятно, до него были все восемнадцать. В первый раз я увидел это место в довольно пасмурный день, когда расстояния кажутся меньше. А теперь, когда я двинулся в путь, у меня, кроме всего остального, еще оторвался каблук и в ногу впивался гвоздь - это были старые башмаки, которые я носил только дома. Я захромал. Солнце давно уже село, когда показался дворец, вырисовывавшийся черным силуэтом на бледно- желтом фоне неба. Уина была в восторге, когда я понес ее на плече, но потом она захотела сойти на землю и семенила рядом со мной, перебегая то на одну, то на другую сторону за цветами и засовывая их мне в карманы. Карманы всегда удивляли Уину, и в конце концов она решила, что это своеобразные вазы для цветов. Во всяком случае, она их использовала для этой цели... Да! Кстати... Переодеваясь, я нашел... (Путешественник по Времени умолк, опустил руку в карман и положил перед нами на столик два увядших цветка, напоминавших очень крупные белые мальвы. Потом возобновил свой рассказ.) - Землю уже окутала вечерняя тишина, а мы все еще шли через холм по направлению к Уимблдону. Уина устала и хотела вернуться в здание из серого камня. Но я указал на видневшиеся вдалеке башенки Зеленого Дворца и постарался объяснить ей, что там мы найдем убежище. Знакома ли вам та мертвая тишина, которая наступает перед сумерками? Даже листья на деревьях не шелохнутся. На меня эта вечерняя тишина всегда навевает какое- то неясное чувство ожидания. Небо было чистое, высокое и ясное; лишь на западе виднелось несколько легких облачков. Но к этому гнету вечернего ожидания примешивался теперь страх. В тишине мои чувства, казалось, сверхъестественно обострились . Мне чудилось, что я мог даже ощущать пещеры в земле у себя под ногами, мог чуть ли не видеть морлоков, кишащих в своем подземном муравейнике в ожидании темноты. Мне казалось, что они примут мое вторжение как объявление войны. И зачем взяли они мою Машину Времени?
'So we went on in the quiet, and the twilight deepened into night. The clear blue of the distance faded, and one star after another came out. The ground grew dim and the trees black. Weena' s fears and her fatigue grew upon her. I took her in my arms and talked to her and caressed her. Then, as the darkness grew deeper, she put her arms round my neck, and, closing her eyes, tightly pressed her face against my shoulder. So we went down a long slope into a valley, and there in the dimness I almost walked into a little river. This I waded, and went up the opposite side of the valley, past a number of sleeping houses, and by a statue- - a Faun, or some such figure, minus the head. Here too were acacias. So far I had seen nothing of the Morlocks, but it was yet early in the night, and the darker hours before the old moon rose were still to come. ' From the brow of the next hill I saw a thick wood spreading wide and black before me. I hesitated at this. I could see no end to it, either to the right or the left. Feeling tired- - my feet, in particular, were very sore- - I carefully lowered Weena from my shoulder as I halted, and sat down upon the turf. I could no longer see the Palace of Green Porcelain, and I was in doubt of my direction. I looked into the thickness of the wood and thought of what it might hide. Under that dense tangle of branches one would be out of sight of the stars. Even were there no other lurking danger- - a danger I did not care to let my imagination loose upon- - there would still be all the roots to stumble over and the tree- boles to strike against. 'I was very tired, too, after the excitements of the day; so I decided that I would not face it, but would pass the night upon the open hill. 'Weena, I was glad to find, was fast asleep. I carefully wrapped her in my jacket, and sat down beside her to wait for the moon- rise. The hill- side was quiet and deserted, but from the black of the wood there came now and then a stir of living things. Above me shone the stars, for the night was very clear. I felt a certain sense of friendly comfort in their twinkling. Мы продолжали идти в вечерней тишине, а сумерки тем временем постепенно сгущались. Голубая ясность дали померкла, одна за другой стали загораться звезды. Земля под ногами становилась смутной, деревья - черными. Страх и усталость овладели Уин ой. Я взял ее на руки, успокаивая и лаская. По мере наступления темноты она все крепче и крепче прижималась лицом к моему плечу. По длинному склону холма мы спустились в долину, и тут я чуть было не свалился в маленькую речку. Перейдя ее вброд, я взобрался на противоположный склон долины, прошел мимо множества домов, мимо статуи, изображавшей, как мне показалось, некое подобие фавна, но только без головы. Здесь росли акации. Морлоков не было видно, но ведь ночь только начиналась и самые темные часы, перед восходом ущербленной луны, были еще впереди. С вершины следующего холма я увидел густую чащу леса, которая тянулась передо мной широкой и черной полосой. Я остановился в нерешительности. Этому лесу не было видно конца ни справа, ни слева. Чувствуя себя усталым - у меня нестерпимо болели ноги, - я осторожно снял с плеча Уину и опустился на землю. Я уже не видел Зеленого дворца и не знал, куда идти. Взглянув на лесную чащу, я невольно подумал о том, что могла скрывать она в своей глубине. Под этими густо переплетенными ветвями деревьев, должно быть, не видно даже звезд. Если б в лесу меня даже и не подстерегала опасность - та опасность, самую мысль о которой я гнал от себя, - там все же было достаточно корней, чтобы споткнуться, и стволов, чтобы расшибить себе лоб. К тому же я был измучен волнениями этого дня и решил не идти в лес, а провести ночь на открытом месте. Я был рад, что Уина уже крепко спала. Заботливо завернув ее в свою куртку, я сел рядом с ней и стал ожидать восхода луны. На склоне холма было тихо и пустынно, но из темноты леса доносился по временам какой- то шорох. Надо мной сияли звезды, ночь была очень ясная. Их мерцание успокаивало меня.
All the old constellations had gone from the sky, however: that slow movement which is imperceptible in a hundred human lifetimes, had long since rearranged them in unfamiliar groupings. But the Milky Way, it seemed to me, was still the same tattered streamer of star- dust as of yore. Southward (as I judged it) was a very bright red star that was new to me; it was even more splendid than our own green Sirius. And amid all these scintillating points of light one bright planet shone kindly and steadily like the face of an old friend. 1 Looking at these stars suddenly dwarfed my own troubles and all the gravities of terrestrial life. I thought of their unfathomable distance, and the slow inevitable drift of their movements out of the unknown past into the unknown future. I thought of the great preces- sional cycle that the pole of the earth describes. Only forty times had that silent revolution occurred during all the years that I had traversed. And during these few revolutions all the activity, all the traditions, the complex organizations, the nations, languages, literatures , aspirations, even the mere memory of Man as I knew him, had been swept out of existence. Instead were these frail creatures who had forgotten their high ancestry, and the white Things of which I went in terror. Then I thought of the Great Fear that was between the two species, and for the first time, with a sudden shiver, came the clear knowledge of what the meat I had seen might be. Yet it was too horrible! I looked at little Weena sleeping beside me, her face white and starlike under the stars, and forthwith dismissed the thought. 1 Through that long night I held my mind off the Morlocks as well as I could, and whiled away the time by trying to fancy I could find signs of the old constellations in the new confusion. The sky kept very clear, except for a hazy cloud or so. No doubt I dozed at times. Then, as my vigil wore on, came a faintness in the eastward sky, like the reflection of some colourless fire, and the old moon rose, thin and peaked and white. And close behind, and overtaking it, and overflowing it, the dawn came, pale at first, and then growing pink and warm. No Morlocks had approached us. На небе уже не было знакомых созвездий: они приняли новые очертания благодаря тем медленным перемещениям звезд, которые становятся ощутимы лишь по истечении сотен человеческих жизней. Один только Млечный Путь, казалось, остался тем же потоком звездной пыли, что и в наше время. На юге сияла какая- то очень яркая, неизвестная мне красная звезда, она была ярче даже нашего Сириуса. И среди всех этих мерцающих точек мягко и ровно сияла большая планета, как будто спокойно улыбающееся лицо старого друга. При свете звезд все заботы и горести земной жизни показались мне ничтожными. Я подумал о том, как они бесконечно далеки, как медленно движутся из неведомого прошлого в неведомое будущее. Подумал о кругах, которые описывает в пространстве земная ось. Всего сорок раз описала она этот круг за восемьсот тысяч лет, которые я преодолел. И за это время вся деятельность, все традиции, вся сложная организация, все национальности, языки, вся литература, все человеческие стремления и даже самое воспоминание о Человеке, каким я его знал, исчезли. Взамен этого в мире появились хрупкие существа, забывшие о своем высоком происхождении, и белесые твари, от которых я в ужасе бежал. Я думал и о том Великом Страхе, который разделил две разновидности человеческого рода, и впервые с содроганием понял, что за мясо видел я в Подземном Мире. Нет, это было бы слишком ужасно! Я взглянул на маленькую Уину, спавшую рядом со мной, на ее личико, беленькое и ясное, как звездочка, и тотчас же отогнал страшную мысль. Всю эту долгую ночь я старался не думать о морлоках и убивал время, стараясь найти в путанице звезд следы старых созвездий. Небо было совершенно чистое, кроме нескольких легких облачков. По временам я дремал. Когда такое бдение совсем истомило меня, в восточной части неба показался слабый свет, подобный зареву какого- то бесцветного пожара, и вслед за тем появился белый тонкий серп убывающей луны. А следом, как бы настигая и затопляя его своим сиянием, блеснули первые лучи утренней зари, сначала бледные, но потом с каждой минутой все ярче разгоравшиеся теплыми алыми красками. Ни один морлок не приблизился к нам; в эту ночь я даже не видел никого из них.
Indeed, I had seen none upon the hill that night. And in the confidence of renewed day it almost seemed to me that my fear had been unreasonable. I stood up and found my foot with the loose heel swollen at the ankle and painful under the heel; so I sat down again, took off my shoes, and flung them away. 11 awakened Weena, and we went down into the wood, now green and pleasant instead of black and forbidding. We found some fruit wherewith to break our fast. We soon met others of the dainty ones, laughing and dancing in the sunlight as though there was no such thing in nature as the night. And then I thought once more of the meat that I had seen. I felt assured now of what it was, and from the bottom of my heart I pitied this last feeble rill from the great flood of humanity. Clearly, at some time in the Long- Ago of human decay the Morlocks' food had run short. Possibly they had lived on rats and such- like vermin. Even now man is far less discriminating and exclusive in his food than he was- - far less than any monkey. His prejudice against human flesh is no deep- seated instinct. And so these inhuman sons of men- - - - ! I tried to look at the thing in a scientific spirit. After all, they were less human and more remote than our cannibal ancestors of three or four thousand years ago. And the intelligence that would have made this state of things a torment had gone. Why should I trouble myself? These Eloi were mere fatted cattle, which the ant- like Morlocks preserved and preyed upon- probably saw to the breeding of. And there was Weena dancing at my side! ' Then I tried to preserve myself from the horror that was coming upon me, by regarding it as a rigorous punishment of human selfishness. Man had been content to live in ease and delight upon the labours of his fellow- man, had taken Necessity as his watchword and excuse, and in the fullness of time Necessity had come home to him. I even tried a Carlyle- like scorn of this wretched aristocracy in decay. But this attitude of mind was impossible. С первым светом наступающего дня все мои ночные страхи стали казаться почти смешными. Я встал и почувствовал, что моя нога в башмаке без каблука распухла у лодыжки, пятка болела. Я сел на землю, снял башмаки и отшвырнул их прочь. Разбудив Уину, я спустился с ней вниз. Мы вошли в лес, теперь зеленый и приветливый, а не черный и зловещий, как ночью. Мы позавтракали плодами, а потом встретили несколько прекрасных маленьких существ, которые смеялись и танцевали на солнышке, как будто в мире никогда и не существовало ночей. Но тут я снова вспомнил о том мясе, которое видел у морлоков. Теперь мне стало окончательно ясно, что это было за мясо, и я от всей души пожалел о том слабом ручейке, который остался на земле от некогда могучего потока Человечества. Ясно, что когда- то давно, века назад, пища у морлоков иссякла. Возможно, что некоторое время они питались крысами и всякой другой мерзостью. Даже и в наше время человек гораздо менее разборчив в пище, чем когда- то, - значительно менее разборчив, чем любая обезьяна. Его предубеждение против человеческого мяса не есть глубоко укоренившийся инстинкт. И теперь вот что делали эти бесчеловечные потомки людей! . . Я постарался взглянуть на дело с научной точки зрения. Во всяком случае, морлоки были менее человекоподобны и более далеки от нас, чем наши предки- каннибалы, жившие три или четыре тысячи лет назад. А тот высокоразвитый ум, который сделал бы для нас людоедство истинной пыткой, окончательно исчез. "О чем мне беспокоиться? - подумал я. - Эти элои просто- напросто откормленный скот, который разводят и отбирают себе в пищу муравьеподобные морлоки, - вероятно, они даже следят за тем, чтобы элои были хорошо откормлены..." А маленькая Уина тем временем танцевала около меня. Я попытался подавить отвращение, заставляя себя думать, что такое положение вещей - суровая кара за человеческий эгоизм. Люди хотели жить в роскоши за счет тяжкого труда своих собратьев и оправдывались необходимостью, а теперь, когда настало время, та же необходимость повернулась к ним своей обратной стороной. Я даже, подобно Карлейлю, пытался возбудить в себе презрение к этой жалкой, упадочной аристократии. Но мне это не удалось.
However great their intellectual degradation, the Eloi had kept too much of the human form not to claim my sympathy, and to make me perforce a sharer in their degradation and their Fear. 11 had at that time very vague ideas as to the course I should pursue. My first was to secure some safe place of refuge, and to make myself such arms of metal or stone as I could contrive. That necessity was immediate. In the next place, I hoped to procure some means of fire, so that I should have the weapon of a torch at hand, for nothing, I knew, would be more efficient against these Morlocks. Then I wanted to arrange some contrivance to break open the doors of bronze under the White Sphinx. I had in mind a battering ram. I had a persuasion that if I could enter those doors and carry a blaze of light before me I should discover the Time Machine and escape. I could not imagine the Morlocks were strong enough to move it far away. Weena I had resolved to bring with me to our own time. And turning such schemes over in my mind I pursued our way towards the building which my fancy had chosen as our dwelling. 11 found the Palace of Green Porcelain, when we approached it about noon, deserted and falling into ruin. Only ragged vestiges of glass remained in its windows, and great sheets of the green facing had fallen away from the corroded metallic framework. It lay very high upon a turfy down, and looking northeastward before I entered it, I was surprised to see a large estuary, or even creek, where I judged Wandsworth and Battersea must once have been. I thought then- - though I never followed up the thought- - of what might have happened, or might be happening, to the living things in the sea. 1 The material of the Palace proved on examination to be indeed porcelain, and along the face of it I saw an inscription in some unknown character. I thought, rather foolishly, that Weena might help me to interpret this, but I only learned that the bare idea of writing had never entered her head. She always seemed to me, I fancy, more human than she was, perhaps because her affection was so human. Как ни велико было их духовное падение, все же элои сохранили в своей внешности слишком много человеческого, и я невольно сочувствовал им, разделяя с ними унижение и страх. Что мне делать, я еще не знал. Прежде всего я хотел найти безопасное убежище и раздобыть какое- нибудь металлическое или каменное оружие. Это было необходимо . Затем я надеялся найти средства для добывания огня, чтобы иметь факел, так как знал, что это оружие было самым действенным против морлоков. А еще я хотел сделать какое-нибудь приспособление для того, чтобы выломать бронзовые двери в пьедестале Белого Сфинкса. Я намеревался сделать таран. Я был уверен, что если войду в эти двери, неся с собой факел, то найду там Машину Времени и смогу вырваться из этого ужасного мира. Я не думал, чтобы у морлоков хватило сил утащить мою Машину куда- нибудь очень далеко . Уину я решил взять с собой в наше время. Обдумывая все эти планы, я продолжал идти к тому зданию, которое избрал для своего жилища. Когда около полудня мы дошли до Зеленого Дворца, то нашли его полуразрушенным и пустынным. В окнах торчали только осколки стекол, а большие куски зеленой облицовки отвалились от проржавевшего металлического каркаса. Дворец стоял на высоком травянистом склоне, и, взглянув на северо-восток, я изумился, увидя большой эстуарий, или, скорее, бухту, там, где, по моим соображениям, были наши Уондсворт и Бэттерси. И я сразу подумал, - что же произошло или происходит теперь с существами, населяющими морскую глубину, но долго раздумывать об этом не стал. Оказалось, что дворец был действительно сделан из фарфора, и вдоль его фасада тянулась надпись на каком-то незнакомом языке. Мне пришла в голову нелепая мысль, что Уина может помочь разобрать ее, но оказалось, что она и понятия не имеет о письме. Она всегда казалась мне более человеком, чем была на самом деле, может быть, потому, что ее привязанность ко мне была такой человеческой.
'Within the big valves of the door- - which were open and broken- - we found, instead of the customary hall, a long gallery lit by many side windows. At the first glance I was reminded of a museum. The tiled floor was thick with dust, and a remarkable array of miscellaneous objects was shrouded in the same grey covering. Then I perceived, standing strange and gaunt in the centre of the hall, what was clearly the lower part of a huge skeleton. I recognized by the oblique feet that it was some extinct creature after the fashion of the Megatherium. The skull and the upper bones lay beside it in the thick dust, and in one place, where rain- water had dropped through a leak in the roof, the thing itself had been worn away. Further in the gallery was the huge skeleton barrel of a Brontosaurus. My museum hypothesis was confirmed. Going towards the side I found what appeared to be sloping shelves, and clearing away the thick dust, I found the old familiar glass cases of our own time. But they must have been air- tight to judge from the fair preservation of some of their contents. 'Clearly we stood among the ruins of some latter-day South Kensington! Here, apparently, was the Palaeontological Section, and a very splendid array of fossils it must have been, though the inevitable process of decay that had been staved off for a time, and had, through the extinction of bacteria and fungi, lost ninety- nine hundredths of its force, was nevertheless, with extreme sureness if with extreme slowness at work again upon all its treasures. Here and there I found traces of the little people in the shape of rare fossils broken to pieces or threaded in strings upon reeds. And the cases had in some instances been bodily removed- - by the Morlocks as I judged. The place was very silent. The thick dust deadened our footsteps. Weena, who had been rolling a sea urchin down the sloping glass of a case, presently came, as I stared about me, and very quietly took my hand and stood beside me. За огромными поломанными створчатыми дверями, которые были открыты настежь, мы увидели вместо обычного зала длинную галерею с целым рядом окон. С первого же взгляда я понял, что это музей. Паркетный пол был покрыт густым слоем пыли, и такой же серый покров лежал на удивительных и разнообразных предметах, в беспорядке сваленных повсюду. Среди прочего я увидел что- то странное и высохшее посреди зала - несомненно, это была нижняя часть огромного скелета. По форме его ног я определил, что это вымершее животное типа мегатерия. Рядом в густой пыли лежали его череп и кости верхних конечностей, а в одном месте, где крыша протекала, часть костей почти совершенно рассыпалась. Далее в галерее стоял огромный скелет бронтозавра. Мое предположение, что это музей, подтвердилось. По бокам галереи я нашел то, что принял сначала за покосившиеся полки, но, стерев с них густой слой пыли, убедился, что это стеклянные витрины. Вероятно, они были герметически закупорены, судя по некоторым прекрасно сохранившимся экспонатам. Ясно, что мы находились среди развалин огромного музея, подобного Южно- Кенсингтонскому, но относившегося к более поздним временам. Здесь, по- видимому, был палеонтологический отдел, обладавший чудеснейшей коллекцией ископаемых, однако неизбежное разрушение, искусственно остановленное на некоторое время и утратившее благодаря уничтожению бактерий и грибков девяносто девять сотых своей силы, все же верно и медленно продолжало свою работу. То тут, то там находил я следы посещения музея маленьким народом: кое- где попадались редкие ископаемые, разломанные ими на куски или нанизанные гирляндами на тростник. В некоторых местах витрины были сорваны. И я решил, что это сделали морлоки. Дверец был совершенно пуст. Густой слой пыли заглушал звук наших шагов. Пока я с изумлением осматривался, ко мне подошла Уина, которая до тех пор забавлялась тем, что катала морского ежа по наклонному стеклу витрины. Она тихонько взяла меня за руку и встала рядом со мной.
'And at first I was so much surprised by this ancient monument of an intellectual age, that I gave no thought to the possibilities it presented. Even my preoccupation about the Time Machine receded a little from my mind. 'To judge from the size of the place, this Palace of Green Porcelain had a great deal more in it than a Gallery of Palaeontology; possibly historical galleries; it might be, even a library! To me, at least in my present circumstances, these would be vastly more interesting than this spectacle of oldtime geology in decay. Exploring, I found another short gallery running transversely to the first. This appeared to be devoted to minerals, and the sight of a block of sulphur set my mind running on gunpowder. But I could find no saltpeter; indeed, no nitrates of any kind. Doubtless they had deliquesced ages ago. Yet the sulphur hung in my mind, and set up a train of thinking. As for the rest of the contents of that gallery, though on the whole they were the best preserved of all I saw, I had little interest. I am no specialist in mineralogy, and I went on down a very ruinous aisle running parallel to the first hall I had entered. Apparently this section had been devoted to natural history, but everything had long since passed out of recognition. A few shrivelled and blackened vestiges of what had once been stuffed animals, desiccated mummies in jars that had once held spirit, a brown dust of departed plants: that was all! I was sorry for that, because I should have been glad to trace the patent readjustments by which the conquest of animated nature had been attained. Then we came to a gallery of simply colossal proportions, but singularly ill-lit, the floor of it running downward at a slight angle from the end at which I entered. At intervals white globes hung from the ceiling - many of them cracked and smashed - which suggested that originally the place had been artificially lit. Here I was more in my element, for rising on either side of me were the huge bulks of big machines, all greatly corroded and many broken down, but some still fairly complete. Я был так изумлен при виде этого разрушающегося памятника интеллектуального периода существования человечества, что не подумал о той пользе, какую отсюда мог бы для себя извлечь. Даже мысль о Машине вылетела у меня на время из головы. Судя по размерам, Зеленый Дворец должен был заключать в себе не только палеонтологическую галерею: вероятно, тут были и исторические отделы, а может быть, даже библиотека. Для меня это было бы неизмеримо интереснее, чем геологическая выставка времен упадка. Принявшись за дальнейшие исследования, я открыл вторую, короткую, галерею, пересекавшую первую. По-видимому, это был Минералогический отдел, и вид куска серы навел меня на мысль о порохе. Но я нигде не мог отыскать селитры или каких-нибудь азотнокислых солей. Без сомнения, они разложились много столетий назад. Но сера не выходила у меня из головы и натолкнула меня на целый ряд мыслей. Все остальное здесь мало меня интересовало, хотя, в общем, пожалуй, этот отдел сохранился лучше всего. Я не специалист по минералогии, и потому я отправился дальше в полуразрушенное крыло здания, параллельное первой галерее, через которую я вошел. По-видимому, этот новый отдел был посвящен естественной истории, но все в нем давным-давно изменилось до неузнаваемости. Несколько съежившихся и почерневших остатков того, что прежде было чучелом зверей, высохшие коконы в банках, когда- то наполненных спиртом, темная пыль, оставшаяся от засушенных растений, - вот и все, что я здесь нашел. Я пожалел об этом; мне было бы интересно проследить те медленные терпеливые усилия, благодаря которым была достигнута полная победа над животным и растительным миром. Оттуда мы попали в огромную плохо освещенную галерею. Пол постепенно понижался, хотя и под небольшим углом, от того конца, где мы стояли. С потолка через одинаковые промежутки свешивались белые шары; некоторые из них были треснуты или разбиты вдребезги, и у меня невольно явилась мысль, что это помещение когда-то освещалось искусственным светом. Тут я больше чувствовал себя в своей среде, так как по обе стороны от меня поднимались остовы огромных машин, все сильно попорченные и многие даже поломанные; некоторые, однако, были еще в сравнительной целости.
You know I have a certain weakness for mechanism, and I was inclined to linger among these; the more so as for the most part they had the interest of puzzles, and I could make only the vaguest guesses at what they were for. I fancied that if I could solve their puzzles I should find myself in possession of powers that might be of use against the Morlocks. 1 Suddenly Weena came very close to my side. So suddenly that she startled me. Had it not been for her I do not think I should have noticed that the floor of the gallery sloped at all. The end I had come in at was quite above ground, and was lit by rare slit- like windows. As you went down the length, the ground came up against these windows, until at last there was a pit like the "area" of a London house before each, and only a narrow line of daylight at the top. I went slowly along, puzzling about the machines, and had been too intent upon them to notice the gradual diminution of the light, until Weena's increasing apprehensions drew my attention. Then I saw that the gallery ran down at last into a thick darkness. I hesitated, and then, as I looked round me, I saw that the dust was less abundant and its surface less even. Further away towards the dimness, it appeared to be broken by a number of small narrow footprints. My sense of the immediate presence of the Morlocks revived at that. I felt that I was wasting my time in the academic examination of machinery. I called to mind that it was already far advanced in the afternoon, and that I had still no weapon, no refuge, and no means of making a fire. And then down in the remote blackness of the gallery I heard a peculiar pattering, and the same odd noises I had heard down the well. 'I took Weena's hand. Then, struck with a sudden idea, I left her and turned to a machine from which projected a lever not unlike those in a signal- box. Clambering upon the stand, and grasping this lever in my hands, I put all my weight upon it sideways. Suddenly Weena, deserted in the central aisle, began to whimper. I had judged the strength of the lever pretty correctly, for it snapped after a minute's strain, and I rejoined her with a mace in my hand more than sufficient, I judged, for any Morlock skull I might encounter. Вы знаете, у меня слабость к машинам; мне захотелось подольше остаться здесь, тем более что большая часть их поразила меня новизной и непонятностью, и я мог строить лишь самые неопределенные догадки относительно целей, которым они служили . Мне казалось, что если я разрешу эти загадки, то найду могущественное оружие для борьбы с морлоками. Вдруг Уина прижалась ко мне. Это было так неожиданно, что я вздрогнул. Если бы не она, я, по всей вероятности, не обратил бы внимания на покатость пола. Тот конец галереи, откуда я вошел, поднимался довольно высоко над землей и был освещен через немногие узкие окна. Но по мере того как мы шли дальше, склон холма подступал к самым окнам, постепенно заслоняя их, так что наконец осталось только углубление, как в Лондоне перед полуподвалом, а в неширокую щель просачивалась лишь едва заметная полоска света. Я медленно шел вперед, с любопытством рассматривая машины. Это занятие совершенно поглотило меня, и поэтому я не заметил постепенного ослабления света, пока наконец возрастающий страх Уины не привлек моего внимания. Я заметил тогда, что галерея уходит в непроглядную темноту. Остановившись в нерешительности и осмотревшись вокруг, я увидел, что слой пыли здесь был тоньше и местами лежал неровно. Еще дальше, в темноте, на пыльном полу как будто виднелись небольшие узкие следы. При виде их я вспомнил о близости морлоков. Я почувствовал, что даром теряю время на осмотр машин, и спохватился, что уже перевалило далеко за полдень, а я все еще не имею оружия, убежища и средств для добывания огня. Вдруг далеко в глубине темной галереи я услышал тот же своеобразный шорох, те же странные звуки, что и тогда в глубине колодца. Я взял Уину за руку. Но вдруг мне в голову пришла новая мысль, я оставил Уину и направился к машине, из которой торчал рычаг, вроде тех, какие употребляются на железнодорожных стрелках. Взобравшись на подставку и ухватившись обеими руками за рычаг, я всей своей тяжестью навалился на него. Уина, оставшись одна, начала плакать. Я рассчитал правильно: рычаг сломался после минутного усилия, и я вернулся к Уине с палицей в руке, достаточно надежной для того, чтобы проломить череп любому морлоку, который повстречался бы на пути.
And I longed very much to kill a Mor- lock or so. Very inhuman, you may think, to want to go killing one' s own descendants! But it was impossible, somehow, to feel any humanity in the things. Only my disinclination to leave Weena, and a persuasion that if I began to slake my thirst for murder my Time Machine might suffer, restrained me from going straight down the gallery and killing the brutes I heard. 1 Well, mace in one hand and Weena in the other, I went out of that gallery and into another and still larger one, which at the first glance reminded me of a military chapel hung with tattered flags. The brown and charred rags that hung from the sides of it, I presently recognized as the decaying vestiges of books. They had long since dropped to pieces, and every semblance of print had left them. But here and there were warped boards and cracked metallic clasps that told the tale well enough. Had I been a literary man I might, perhaps, have moralized upon the futility of all ambition. But as it was, the thing that struck me with keenest force was the enormous waste of labour to which this sombre wilderness of rotting paper testified. At the time I will confess that I thought chiefly of the Philosophical Transactions and my own seventeen papers upon physical optics. 'Then, going up a broad staircase, we came to what may once have been a gallery of technical chemistry. And here I had not a little hope of useful discoveries . Except at one end where the roof had collapsed, this gallery was well preserved. I went eagerly to every unbroken case. And at last, in one of the really air- tight cases, I found a box of matches. Very eagerly I tried them. They were perfectly good. They were not even damp. I turned to Weena. "Dance," I cried to her in her own tongue. For now I had a weapon indeed against the horrible creatures we feared. And so, in that derelict museum, upon the thick soft carpeting of dust, to Weena's huge delight, I solemnly performed a kind of composite dance, whistling The Land of the Leal as cheerfully as I could. А мне ужасно хотелось убить хотя бы одного! Быть может, вам это желание убить одного из наших потомков покажется бесчеловечным. Но к этим отвратительным существам невозможно было относиться по- человечески. Только мое нежелание оставить Уину и уверенность, что может пострадать Машина Времени, если я примусь за избиение морлоков, удержали меня от попытки тотчас же спуститься по галерее вниз и начать истребление копошившихся там тварей. И вот, держа палицу в правой руке, а левой обнимая Уину, я вышел из этой галереи и направился в другую - с виду еще большую, - которую я с первого взгляда принял за военную часовню, обвешанную изорванными знаменами. Но скоро в этих коричневых и черных лоскутьях, которые висели по стенам, я узнал остатки истлевших книг. Они давным-давно рассыпались на куски, на них не осталось даже следов букв. Лишь кое- где валялись покоробленные корешки и треснувшие металлические застежки, достаточно красноречиво свидетельствовавшие о своем прошлом назначении. Будь я писателем, возможно, при виде всего этого я пустился бы философствовать о тщете всякого честолюбия. Но так как я не писатель, меня всего сильнее поразила потеря колоссального труда, о которой говорили эти мрачные груды истлевшей бумаги. Должен сознаться, впрочем, что в ту минуту я вспомнил о "Трудах философского общества" и о своих собственных семнадцати статьях по оптике. Поднявшись по широкой лестнице, мы вошли в новое помещение, которое было когда- то отделом прикладной химии. У меня была надежда найти здесь что-нибудь полезное . За исключением одного угла, где обвалилась крыша, эта галерея прекрасно сохранилась. Я торопливо подходил к каждой уцелевшей витрине и наконец в одной из них, закупоренной поистине герметически, нашел коробку спичек. Горя от нетерпения, я испробовал одну из них. Спички оказались вполне пригодными: они нисколько не отсырели. Я повернулся к Уине. " Танцуй! " - воскликнул я на ее языке. Теперь у нас действительно было оружие против ужасных существ, которых мы боялись. И вот в этом заброшенном музее, на густом ковре пыли, к величайшему восторгу Уины, я принялся торжественно исполнять замысловатый танец, весело насвистывая песенку "Моя Шотландия" .
In part it was a modest cancan, in part a step dance, in part a skirt- dance (so far as my tail- coat permitted) , and in part original. For I am naturally inventive, as you know. 'Now, I still think that for this box of matches to have escaped the wear of time for immemorial years was a most strange, as for me it was a most fortunate thing. Yet, oddly enough, I found a far unlikelier substance, and that was camphor. I found it in a sealed jar, that by chance, I suppose, had been really hermetically sealed. I fancied at first that it was paraffin wax, and smashed the glass accordingly. But the odour of camphor was unmistakable. In the universal decay this volatile substance had chanced to survive, perhaps through many thousands of centuries. It reminded me of a sepia painting I had once seen done from the ink of a fossil Belemnite that must have perished and become fossilized millions of years ago. I was about to throw it away, but I remembered that it was inflammable and burned with a good bright flame- - was, in fact, an excellent candle- - and I put it in my pocket. I found no explosives, however, nor any means of breaking down the bronze doors. As yet my iron crowbar was the most helpful thing I had chanced upon. Nevertheless I left that gallery greatly elated. ' I cannot tell you all the story of that long afternoon. It would require a great effort of memory to recall my explorations in at all the proper order. I remember a long gallery of rusting stands of arms, and how I hesitated between my crowbar and a hatchet or a sword. I could not carry both, however, and my bar of iron promised best against the bronze gates. There were numbers of guns, pistols, and rifles. The most were masses of rust, but many were of some new metal, and still fairly sound. But any cartridges or powder there may once have been had rotted into dust. One corner I saw was charred and shattered; perhaps, I thought, by an explosion among the specimens. In another place was a vast array of idols- - Polynesian, Mexican, Grecian, Phoenician, every country on earth I should think. Это был частью скромный канкан, частью полонез, частью вальс (заставлявший развеваться фалды моего сюртука) и частью мое собственное оригинальное изобретение. Вы же знаете, что я в самом деле изобретателен. Эта коробка спичек, которая сохранилась в течение стольких лет вопреки разрушительному действию времени, была самой необычайной и счастливой случайностью. К своему удивлению, я сделал еще одну неожиданную находку - камфору. Я нашел ее в запечатанной банке, которая, я думаю, случайно была закупорена герметически. Сначала я принял ее за парафин и разбил банку. Но запах камфоры не оставлял сомнений. Среди общего разрушения это летучее вещество пережило, быть может, многие тысячи столетий. Она напомнила мне об одном рисунке, сделанном сепией, приготовленной из ископаемого белемнита, погибшего и ставшего окаменелостью, вероятно, миллионы лет тому назад. Я хотел уже выбросить камфору, как вдруг вспомнил, что она горит прекрасным ярким пламенем, так что из нее можно сделать отличную свечку. Я положил ее в карман. Зато я нигде не нашел взрывчатых веществ или каких- либо других средств, чтобы взломать бронзовые двери. Железный рычаг был самым полезным орудием, на которое я до сих пор наткнулся. Тем не менее я с гордым видом вышел из галереи. Не могу пересказать вам всего, что я видел за этот долгий день. Пришлось бы сильно напрячь память, чтобы по порядку рассказать о всех моих изысканиях. Помню длинную галерею с заржавевшим оружием и свои размышления: не выбрать ли мне топор или саблю вместо моего железного рычага? Но я не мог унести то и другое, а железный лом был более пригоден для атаки на бронзовые двери. Я видел множество ружей, пистолетов и винтовок. Почти все они были совершенно изъедены ржавчиной, хотя некоторые, сделанные из какого- то неизвестного металла, прекрасно сохранились. Но патроны и порох давно уже рассыпались в пыль. Один угол галереи обгорел и был совершенно разрушен; вероятно, это произошло вследствие взрыва патронов. В другом месте оказалась большая коллекция идолов: полинезийских, мексиканских, греческих, финикийских, - собранных со всех концов земли.
And here, yielding to an irresistible impulse, I wrote my name upon the nose of a steatite monster from South America that particularly took my fancy. 'As the evening drew on, my interest waned. I went through gallery after gallery, dusty, silent, often ruinous, the exhibits sometimes mere heaps of rust and lignite, sometimes fresher. In one place I suddenly found myself near the model of a tin- mine, and then by the merest accident I discovered, in an airtight case, two dynamite cartridges! I shouted "Eureka!" and smashed the case with joy. Then came a doubt. I hesitated. Then, selecting a little side gallery, I made my essay. I never felt such a disappointment as I did in waiting five, ten, fifteen minutes for an explosion that never came. Of course the things were dummies, as I might have guessed from their presence. I really believe that had they not been so, I should have rushed off incontinently and blown Sphinx, bronze doors, and (as it proved) my chances of finding the Time Machine, all together into non- existence . 'It was after that, I think, that we came to a little open court within the palace. It was turfed, and had three fruit- trees. So we rested and refreshed ourselves. Towards sunset I began to consider our position. Night was creeping upon us, and my inaccessible hiding- place had still to be found. But that troubled me very little now. I had in my possession a thing that was, perhaps, the best of all defences against the Morlocks - I had matches! I had the camphor in my pocket, too, if a blaze were needed. It seemed to me that the best thing we could do would be to pass the night in the open, protected by a fire. In the morning there was the getting of the Time Machine. Towards that, as yet, I had only my iron mace. But now, with my growing knowledge, I felt very differently towards those bronze doors. Up to this, I had refrained from forcing them, largely because of the mystery on the other side. They had never impressed me as being very strong, and I hoped to find my bar of iron not altogether inadequate for the work. И тут, уступая непреодолимому желанию, я написал свое имя на носу каменного урода из Южной Америки, особенно меня поразившего. К вечеру мое любопытство ослабело. Одну за другой проходил я галереи, пыльные, безмолвные, часто разрушенные, все содержимое которых представляло собой по временам груды ржавчины и обуглившихся обломков. В одном месте я неожиданно наткнулся на модель рудника, а затем, также совершенно случайно, нашел в плотно закупоренной витрине два динамитных патрона. "Эврика!" - воскликнул я с радостью и разбил витрину. Но вдруг на меня напало сомнение. Я остановился в раздумье. Выбрав маленькую боковую галерею , я сделал опыт. Никогда в жизни не чувствовал я такого разочарования, как в те пять - десять минут, когда ждал взрыва и ничего не дождался. Без сомнения, это были модели, я мог бы догадаться об этом уже по их виду. Уверен, что иначе я тотчас же кинулся бы к Белому Сфинксу и отправил бы его одним взрывом в небытие вместе с его бронзовыми дверями и (как оказалось впоследствии) уже никогда не получил бы обратно Машину Времени. Насколько я могу припомнить, мы вышли в маленький открытый дворик внутри главного здания. Среди зеленой травы росли три фруктовых дерева. Здесь мы отдохнули и подкрепились. Приближался закат, и я стал обдумывать наше положение. Ночь уже надвигалась, а безопасное убежище все еще не было найдено. Однако теперь это меня мало тревожило. В моих руках была лучшая защита от морлоков: спички! А на случай, если бы понадобился яркий свет, у меня в кармане была камфора. Самое лучшее, казалось мне, - провести ночь на открытом месте под защитой костра. А наутро я хотел приняться за розыски Машины Времени. Единственным средством для этого был железный лом. Но теперь, лучше зная, что к чему, я совершенно иначе относился к бронзовым дверям. Ведь до сих пор я не хотел их ломать, не зная, что находилось по другую их сторону. Однако они никогда не казались мне очень прочными, и теперь я надеялся, что легко взломаю их своим рычагом.
'We emerged from the palace while the sun was still in part above the horizon. I was determined to reach the White Sphinx early the next morning, and ere the dusk I purposed pushing through the woods that had stopped me on the previous journey. My plan was to go as far as possible that night, and then, building a fire, to sleep in the protection of its glare. Accordingly, as we went along I gathered any sticks or dried grass I saw, and presently had my arms full of such litter. Thus loaded, our progress was slower than I had anticipated, and besides Weena was tired. And I began to suffer from sleepiness too; so that it was full night before we reached the wood. Upon the shrubby hill of its edge Weena would have stopped, fearing the darkness before us; but a singular sense of impending calamity, that should indeed have served me as a warning, drove me onward. I had been without sleep for a night and two days, and I was feverish and irritable. I felt sleep coming upon me, and the Morlocks with it. 'While we hesitated, among the black bushes behind us, and dim against their blackness, I saw three crouching figures . There was scrub and long grass all about us, and I did not feel safe from their insidious approach. The forest, I calculated, was rather less than a mile across. If we could get through it to the bare hill- side, there, as it seemed to me, was an altogether safer resting- place; I thought that with my matches and my camphor I could contrive to keep my path illuminated through the woods. Yet it was evident that if I was to flourish matches with my hands I should have to abandon my firewood; so, rather reluctantly, I put it down. And then it came into my head that I would amaze our friends behind by lighting it. I was to discover the atrocious folly of this proceeding, but it came to my mind as an ingenious move for covering our retreat. 'I don't know if you have ever thought what a rare thing flame must be in the absence of man and in a temperate climate. The sun's heat is rarely strong enough to burn, even when it is focused by dewdrops, as is sometimes the case in more tropical districts. Мы вышли из Зеленого Дворца, когда солнце еще не скрылось за горизонтом. Я решил на следующий же день, рано утром, вернуться к Белому Сфинксу, а пока, до наступления темноты, предполагал пробраться через лес, задержавший нас по пути сюда. В этот вечер я рассчитывал пройти возможно больше, а затем, разведя костер, лечь спать под защитой огня. Дорогой я собирал сучья и сухую траву и скоро набрал целую охапку. С этим грузом мы подвигались вперед медленнее, чем я предполагал, и к тому же Уина очень устала . Мне тоже ужасно хотелось спать. Когда мы дошли до леса, наступила полная темнота. Из страха перед ней Уина хотела остаться на склоне холма перед опушкой, но чувство опасности толкало меня вперед, вместо того чтобы образумить и остановить . Я не спал всю ночь и два дня находился в лихорадочном, раздраженном состоянии. Я чувствовал, как ко мне подкрадывается сон, а вместе с ним и морлоки. Пока мы стояли в нерешительности, я увидел сзади на темном фоне кустов три притаившиеся твари. Нас окружали высокая трава и мелкий кустарник, так что они могли коварно подкрасться вплотную. Чтобы пересечь лес, надо было, по моим расчетам, пройти около мили. Мне казалось, что если бы нам удалось выйти на открытый склон, то мы нашли бы там безопасное место для отдыха. Спичками и камфорой я рассчитывал освещать дорогу. Но, чтобы зажигать спички, я, очевидно, должен был бросить сучья, набранные для костра. Волей- неволей мне пришлось это сделать. И тут у меня возникла мысль, что я могу позабавить наших друзей, если подожгу кучу хвороста. Впоследствии я понял, какое это было безумие, но тогда такой маневр показался мне отличным прикрытием нашего отступления. Не знаю, задумывались ли вы когда- нибудь над тем, какой редкостью бывает пламя в умеренном климате, где нет человека. Солнечный жар редко способен зажечь какое-нибудь дерево даже в том случае, если его лучи собирают, словно зажигательные стекла, капли росы, как это иногда случается в тропических странах.
Lightning may blast and blacken, but it rarely gives rise to widespread fire. Decaying vegetation may occasionally smoulder with the heat of its fermentation, but this rarely results in flame. In this decadence, too, the art of fire- making had been forgotten on the earth. The red tongues that went licking up my heap of wood were an altogether new and strange thing to Weena. 1 She wanted to run to it and play with it. I believe she would have cast herself into it had I not restrained her. But I caught her up, and in spite of her struggles, plunged boldly before me into the wood. For a little way the glare of my fire lit the path. Looking back presently, I could see, through the crowded stems, that from my heap of sticks the blaze had spread to some bushes adjacent, and a curved line of fire was creeping up the grass of the hill. I laughed at that, and turned again to the dark trees before me. It was very black, and Weena clung to me convulsively, but there was still, as my eyes grew accustomed to the darkness, sufficient light for me to avoid the stems. Overhead it was simply black, except where a gap of remote blue sky shone down upon us here and there. I struck none of my matches because I had no hand free. Upon my left arm I carried my little one, in my right hand I had my iron bar. 1 For some way I heard nothing but the crackling twigs under my feet, the faint rustle of the breeze above, and my own breathing and the throb of the bloodvessels in my ears. Then I seemed to know of a pattering about me. I pushed on grimly. The pattering grew more distinct, and then I caught the same queer sound and voices I had heard in the Under- world. There were evidently several of the Morlocks, and they were closing in upon me. Indeed, in another minute I felt a tug at my coat, then something at my arm. And Weena shivered violently, and became quite still. 'It was time for a match. But to get one I must put her down. I did so, and, as I fumbled with my pocket, a struggle began in the darkness about my knees, perfectly silent on her part and with the same peculiar cooing sounds from the Morlocks. Soft little hands, too, were creeping over my coat and back, touching even my neck. Молния разит и убивает, но редко служит причиной большого пожара. Гниющая растительность иногда тлеет от теплоты внутренних химических реакций, но редко загорается. А в этот период упадка на земле было позабыто самое искусство добывания огня. Красные языки, которые принялись лизать груду хвороста, были для Уины чем-то совершенно новым и поразительным . Она хотела подбежать и поиграть с пламенем. Вероятно, она даже бросилась бы в огонь, не удержи я ее. Я схватил ее и, несмотря на сопротивление, смело увлек за собой в лес. Некоторое время костер освещал нам дорогу. Потом, оглянувшись назад, я увидел сквозь частые стволы деревьев, как занялись ближние кустарники и пламя, змеясь, поползло вверх на холм. Я засмеялся и снова повернулся к темным деревьям. Там царил полнейший мрак; Уина судорожно прижималась ко мне, но мои глаза быстро освоились с темнотой, и я достаточно хорошо видел, чтобы не натыкаться на стволы. Над головой было чер- ным-черно, и только кое-где сиял клочок неба. Я не зажигал спичек, потому что руки мои были заняты. На левой руке сидела малышка Уина, а в правой я держал свой лом. Некоторое время я не слышал ничего, кроме треска веток под ногами, легкого шелеста ветра, своего дыхания и стука крови в ушах. Затем я услышал позади топот, но упорно продолжал идти вперед. Топот становился все громче, и вместе с ним долетали странные звуки и голоса, которые я уже слышал в Подземном Мире. Очевидно, за нами гнались морлоки; они настигали нас. Действительно, в следующее же мгновение я почувствовал, как кто-то дернул меня за одежду, а потом за руку. Уина задрожала и притихла. Необходимо было зажечь спичку. Но, чтобы достать ее, я должен был спустить Уину на землю. Я так и сделал, но пока я рылся в кармане, около моих ног в темноте началась возня. Уина молчала, и только морлоки что-то бормотали. Чьи-то маленькие мягкие руки скользнули по моей спине и даже прикоснулись к шее.
Then the match scratched and fizzed. I held it flaring, and saw the white backs of the Morlocks in flight amid the trees. I hastily took a lump of camphor from my pocket, and prepared to light it as soon as the match should wane. Then I looked at Weena. She was lying clutching my feet and quite motionless, with her face to the ground. With a sudden fright I stooped to her. She seemed scarcely to breathe. I lit the block of camphor and flung it to the ground, and as it split and flared up and drove back the Morlocks and the shadows, I knelt down and lifted her. The wood behind seemed full of the stir and murmur of a great company! 1 She seemed to have fainted. I put her carefully upon my shoulder and rose to push on, and then there came a horrible realization. In manoeuvring with my matches and Weena, I had turned myself about several times, and now I had not the faintest idea in what direction lay my path. For all I knew, I might be facing back towards the Palace of Green Porcelain. I found myself in a cold sweat. I had to think rapidly what to do. I determined to build a fire and encamp where we were. I put Weena, still motionless, down upon a turfy bole, and very hastily, as my first lump of camphor waned, I began collecting sticks and leaves. Here and there out of the darkness round me the Morlocks' eyes shone like carbuncles. 'The camphor flickered and went out. I lit a match, and as I did so, two white forms that had been approaching Weena dashed hastily away. One was so blinded by the light that he came straight for me, and I felt his bones grind under the blow of my fist. He gave a whoop of dismay, staggered a little way, and fell down. I lit another piece of camphor, and went on gathering my bonfire. Presently I noticed how dry was some of the foliage above me, for since my arrival on the Time Machine, a matter of a week, no rain had fallen. So, instead of casting about among the trees for fallen twigs, I began leaping up and dragging down branches. Very soon I had a choking smoky fire of green wood and dry sticks, and could economize my camphor. Спичка чиркнула и зашипела. Я подождал , пока она не разгорелась, и тогда увидел белые спины убегавших в чащу морлоков. Поспешно вынув из кармана кусок камфоры, я приготовился его зажечь, как только начнет гаснуть спичка. Я взглянул на Уину. Она лежала ничком, обхватив мои колени, совершенно неподвижная. Со страхом я наклонился над ней. Казалось, она едва дышала. Я зажег кусок камфоры и бросил его на землю; расколовшись, он ярко запылал, отгоняя от нас морлоков и ночные тени. Я встал на колени и поднял Уину. В лесу, позади нас, слышался шум и бормотание огромной толпы. По-видимому, Уина лишилась чувств. Я осторожно положил ее к себе на плечо, встал и собрался идти дальше, но вдруг ясно понял безвыходность нашего положения. Возясь со спичками и с Уиной, я несколько раз повернулся и теперь не имел ни малейшего понятия, куда мне идти. Может быть, я снова шел назад к Зеленому Дворцу. Меня прошиб холодный пот. Нельзя было терять времени; приходилось действовать . Я решил развести костер и остаться на месте. Положив все еще неподвижную Уину на мшистый пень, я принялся торопливо собирать сучья и листья, пока догорал кусок камфоры. Вокруг меня то тут, то там, подобно рубинам, светились в темноте глаза морлоков. Камфора в последний раз вспыхнула и погасла. Я зажег спичку и увидел, как два белые существа, приближавшиеся к Уине , поспешно метнулись прочь. Одно из них было так ослеплено светом, что прямо натолкнулось на меня, и я почувствовал, как под ударом моего кулака хрустнули его кости. Морлок закричал от ужаса, сделал, шатаясь, несколько шагов и упал. Я зажег другой кусок камфоры и продолжал собирать хворост для костра. Скоро я заметил, что листья здесь совершенно сухие, так как со времени моего прибытия, то есть целую неделю, ни разу не было дождя. Я перестал разыскивать меж деревьями хворост и начал вместо этого прыгать и обламывать нижние ветви деревьев . Скоро разгорелся удушливо- дымный костер из свежего дерева и сухих сучьев, и я сберег остаток камфоры.
Then I turned to where Weena lay beside my iron mace. I tried what I could to revive her, but she lay like one dead. I could not even satisfy myself whether or not she breathed. 'Now, the smoke of the fire beat over towards me, and it must have made me heavy of a sudden. Moreover, the vapour of camphor was in the air. My fire would not need replenishing for an hour or so. I felt very weary after my exertion, and sat down. The wood, too, was full of a slumbrous murmur that I did not understand. I seemed just to nod and open my eyes. But all was dark, and the Morlocks had their hands upon me. Flinging off their clinging fingers I hastily felt in my pocket for the match- box, and- - it had gone! Then they gripped and closed with me again. In a moment I knew what had happened. I had slept, and my fire had gone out, and the bitterness of death came over my soul. The forest seemed full of the smell of burning wood. I was caught by the neck, by the hair, by the arms, and pulled down. It was indescribably horrible in the darkness to feel all these soft creatures heaped upon me. I felt as if I was in a monstrous spider's web. I was overpowered, and went down. I felt little teeth nipping at my neck. I rolled over, and as I did so my hand came against my iron lever. It gave me strength. I struggled up, shaking the human rats from me, and, holding the bar short, I thrust where I judged their faces might be. I could feel the succulent giving of flesh and bone under my blows, and for a moment I was free. ' The strange exultation that so often seems to accompany hard fighting came upon me. I knew that both I and Weena were lost, but I determined to make the Morlocks pay for their meat. I stood with my back to a tree, swinging the iron bar before me. The whole wood was full of the stir and cries of them. A minute passed. Their voices seemed to rise to a higher pitch of excitement, and their movements grew faster. Yet none came within reach. I stood glaring at the blackness. Then suddenly came hope. What if the Morlocks were afraid? And close on the heels of that came a strange thing. Я вернулся туда, где рядом с моим ломом лежала Уина. Я всеми силами старался привести ее в чувство, но она лежала как мертвая. Я не мог даже понять, дышала она или нет. Тут мне пахнуло дымом прямо в лицо, и голова моя, и без того тяжелая от запаха камфоры, отяжелела еще больше. Костра должно было хватить примерно на час. Смертельно усталый, я присел на землю. Мне почудилось, что по лесу носится какой-то непонятный сонливый шепот. Я, наверное, вздремнул, но как мне показалось, лишь на миг. Вокруг меня была темнота, и руки морлоков касались моего тела. Стряхнув с себя их цепкие пальцы, я торопливо принялся искать в кармане спички, но их там не оказалось. Морлоки снова схватили меня, окружив со всех сторон. В одну секунду я сообразил, что случилось. Я заснул, костер погас. Меня охватил смертельный ужас. Весь лес, казалось , был наполнен запахом гари. Меня схватили за шею, за волосы, за руки и старались повалить. Ужасны были в темноте прикосновения этих мягкотелых созданий, облепивших меня. Мне казалось, что я попал в какую-то чудовищную паутину. Они пересилили меня, и я упал. Чьи-то острые зубы впились мне в шею. Я перевернулся, и в то же мгновение рука моя нащупала железный рычаг. Это придало мне силы. Стряхнув с себя всю кучу человекообразных крыс, я вскочил и, размахнувшись рычагом, принялся бить им наугад, стараясь попасть по их головам. Я слышал, как под моими ударами обмякали их тела, как хрустели кости. На минуту я освободился. Мною овладело то странное возбуждение, которое, говорят, так часто приходит во время боя. Я знал, что мы оба с Уиной погибли, но решил дорого продать свою жизнь. Я стоял, опираясь спиной о дерево и размахивая перед собой железной палицей. Лес оглашали громкие крики морлоков. Прошла минута. Голоса их, казалось, уже не могли быть пронзительней, движения становились все быстрее и быстрее. Но ни один не подходил ко мне близко. Я все время стоял на месте, стараясь хоть что- нибудь разглядеть в темноте. В душу мою закралась надежда: может быть, морлоки испугались? И тут произошло нечто необычайное.
The darkness seemed to grow luminous. Very dimly I began to see the Morlocks about me - three battered at my feet - and then I recognized, with incredulous surprise, that the others were running, in an incessant stream, as it seemed, from behind me, and away through the wood in front. And their backs seemed no longer white, but reddish. As I stood agape, I saw a little red spark go drifting across a gap of starlight between the branches, and vanish. And at that I understood the smell of burning wood, the slumbrous murmur that was growing now into a gusty roar, the red glow, and the Morlocks' flight. ' Stepping out from behind my tree and looking back, I saw, through the black pillars of the nearer trees, the flames of the burning forest. It was my first fire coming after me. With that I looked for Weena, but she was gone. The hissing and crackling behind me, the explosive thud as each fresh tree burst into flame, left little time for reflection. My iron bar still gripped, I followed in the Morlocks' path. It was a close race. Once the flames crept forward so swiftly on my right as I ran that I was outflanked and had to strike off to the left. But at last I emerged upon a small open space, and as I did so, a Morlock came blundering towards me, and past me, and went on straight into the fire! 'And now I was to see the most weird and horrible thing, I think, of all that I beheld in that future age. This whole space was as bright as day with the reflection of the fire. In the centre was a hillock or tumulus, surmounted by a scorched hawthorn. Beyond this was another arm of the burning forest, with yellow tongues already writhing from it, completely encircling the space with a fence of fire. Upon the hill- side were some thirty or forty Morlocks, dazzled by the light and heat, and blundering hither and thither against each other in their bewilderment. At first I did not realize their blindness, and struck furiously at them with my bar, in a frenzy of fear, as they approached me, killing one and crippling several more. But when I had watched the gestures of one of them groping under the hawthorn against the red sky, and heard their moans, I was assured of their absolute helplessness and misery in the glare, and I struck no more of them. Казалось, окружающий меня мрак стал проясняться. Я смутно начал различать фигуры морлоков, трое корчились у моих ног, а остальные непрерывным потоком бежали мимо меня в глубь леса. Спины их казались уж не белыми, а красноватыми. Застыв в недоумении, я увидел красную полосу, скользившую между деревьев, освещенных светом звезд. Я сразу понял, откуда взялся запах гари и однообразный шорох, перешедший теперь в страшный рев, и красное зарево, обратившее в бегство морлоков. Отойдя от дерева и оглянувшись назад, я увидел между черными стволами пламя лесного пожара. Это меня догонял мой первый костер. Я искал Уину, но ее не было... Свист и шипенье позади, треск загоревшихся ветвей - все это не оставляло времени для размышлений. Схватив свой лом, я побежал за морлоками. Пламя следовало за мной по пятам. Пока я бежал, оно обогнало меня справа, так что я оказался отрезанным и бросился влево. Наконец я выбежал на небольшую поляну. Один из морлоков, ослепленный, наткнулся на меня и промчался мимо прямо в огонь. После этого мне пришлось наблюдать самое потрясающее зрелище из всех, какие я видел в Будущем. От зарева стало светло, как днем. Посреди огненного моря был холмик или курган, на вершине которого рос полузасохший боярышник. А дальше, в лесу, бушевали желтые языки пламени, и холм был со всех сторон окружен огненным забором. На склоне холма толпилось около тридцати или сорока морлоков; ослепленные, они метались и натыкались в замешательстве друг на друга. Я забыл об их слепоте и, как только они приближались, в безумном страхе принимался яростно наносить им удары. Я убил одного и искалечил многих. Но, увидев, как один из них ощупью пробирался в багровом свете среди боярышника, и услыхав стоны, я убедился в полной беспомощности и отчаянии морлоков и не трогал уже больше никого.
1 Yet every now and then one would come straight towards me, setting loose a quivering horror that made me quick to elude him. At one time the flames died down somewhat, and I feared the foul creatures would presently be able to see me. I was thinking of beginning the fight by killing some of them before this should happen; but the fire burst out again brightly, and I stayed my hand. I walked about the hill among them and avoided them, looking for some trace of Weena. But Weena was gone. 'At last I sat down on the summit of the hillock, and watched this strange incredible company of blind things groping to and fro, and making uncanny noises to each other, as the glare of the fire beat on them. The coiling uprush of smoke streamed across the sky, and through the rare tatters of that red canopy, remote as though they belonged to another universe, shone the little stars. Two or three Morlocks came blundering into me, and I drove them off with blows of my fists, trembling as I did so. 'For the most part of that night I was persuaded it was a nightmare. I bit myself and screamed in a passionate desire to awake. I beat the ground with my hands, and got up and sat down again, and wandered here and there, and again sat down. Then I would fall to rubbing my eyes and calling upon God to let me awake. Thrice I saw Morlocks put their heads down in a kind of agony and rush into the flames. But, at last, above the subsiding red of the fire, above the streaming masses of black smoke and the whitening and blackening tree stumps, and the diminishing numbers of these dim creatures, came the white light of the day. 'I searched again for traces of Weena, but there were none. It was plain that they had left her poor little body in the forest. I cannot describe how it relieved me to think that it had escaped the awful fate to which it seemed destined. As I thought of that, I was almost moved to begin a massacre of the helpless abominations about me, but I contained myself. The hillock, as I have said, was a kind of island in the forest. Иногда некоторые из них натыкались на меня и так дрожали, что я сразу давал им дорогу. Однажды, когда пламя немного угасло, я испугался, что эти гнусные существа скоро меня увидят. Я даже подумывал о том, не убить ли мне нескольких из них, прежде чем это случится, но пламя снова ярко вспыхнуло. Я бродил между морлоками по холму, избегая столкновений, и старался найти хоть какие- нибудь следы Уины. Но Уина исчезла. Я присел наконец на вершине холма и стал смотреть на это необычайное сборище слепых существ, бродивших ощупью и перекликавшихся нечеловеческими голосами при вспышках пламени. Огромные клубы дыма плыли по небу, и сквозь красное зарево изредка проглядывали звезды, такие далекие, как будто они принадлежали какой- то иной вселенной. Два или три морлока сослепу наткнулись на меня, и я, задрожав, отогнал их ударами кулаков. Почти всю ночь продолжался этот кошмар. Я кусал себе руки и кричал в страстном желании проснуться, колотил кулаками по земле, вставал, потом садился, бродил взад-вперед и снова садился на землю. Я тер глаза, умолял бога дать мне проснуться. Три раза я видел, как морлоки, опустив головы, обезумевшие, кидались прямо в огонь. Наконец над утихшим пламенем пожара, над клубами дыма, над почерневшими стволами деревьев и над жалким остатком этих мерзких существ блеснули первые лучи рассвета. Я снова принялся искать Уину, но не нашел ее. По- видимому, ее маленькое тельце осталось в лесу. Все же она избегла той ужасной участи, которая, казалось, была ей уготована. При этой мысли я чуть снова не принялся за избиение беспомощных отвратительных созданий, но сдержался. Холмик, как я сказал, был чем-то вроде острова в лесу.
From its summit I could now make out through a haze of smoke the Palace of Green Porcelain, and from that I could get my bearings for the White Sphinx. And so, leaving the remnant of these damned souls still going hither and thither and moaning, as the day grew clearer, I tied some grass about my feet and limped on across smoking ashes and among black stems, that still pulsated internally with fire, towards the hiding- place of the Time Machine. I walked slowly, for I was almost exhausted, as well as lame, and I felt the intensest wretchedness for the horrible death of little Weena. It seemed an overwhelming calamity. Now, in this old familiar room, it is more like the sorrow of a dream than an actual loss. But that morning it left me absolutely lonely again- - terribly alone. I began to think of this house of mine, of this fireside, of some of you, and with such thoughts came a longing that was pain. 1 But as I walked over the smoking ashes under the bright morning sky, I made a discovery. In my trouser pocket were still some loose matches. The box must have leaked before it was lost. 'About eight or nine in the morning I came to the same seat of yellow metal from which I had viewed the world upon the evening of my arrival. I thought of my hasty conclusions upon that evening and could not refrain from laughing bitterly at my confidence. Here was the same beautiful scene, the same abundant foliage, the same splendid palaces and magnificent ruins, the same silver river running between its fertile banks. The gay robes of the beautiful people moved hither and thither among the trees. Some were bathing in exactly the place where I had saved Weena, and that suddenly gave me a keen stab of pain. And like blots upon the landscape rose the cupolas above the ways to the Under- world. I understood now what all the beauty of the Over- world people covered. Very pleasant was their day, as pleasant as the day of the cattle in the field. Like the cattle, they knew of no enemies and provided against no needs. And their end was the same. С его вершины сквозь пелену дыма я теперь мог разглядеть Зеленый Дворец и определить путь к Белому Сфинксу. Когда окончательно рассвело, я покинул кучку проклятых морлоков, все еще стонавших и бродивших ощупью по холму, обмотал ноги травой и по дымящемуся пеплу, меж черных стволов, среди которых еще трепетал огонь, поплелся туда, где была спрятана Машина Времени. Шел я медленно, так как почти выбился из сил и, кроме того, хромал: я чувствовал себя глубоко несчастным, вспоминая об ужасной смерти бедной Уины. Это было тяжко. Теперь, когда я сижу здесь у себя, в привычной обстановке, потеря Уины кажется мне скорее тяжелым сном, чем настоящей утратой. Но в то утро я снова стал совершенно одинок, ужасно одинок. Я вспомнил о своем доме, о вас, друзья мои, и меня охватила мучительная тоска. Идя по дымящемуся пеплу под ясным утренним небом, я сделал одно открытие. В кармане брюк уцелело несколько спичек. По-видимому, коробка разломалась, прежде чем ее у меня похитили. В восемь или девять часов утра я добрался до той самой скамьи из желтого металла, откуда в первый вечер осматривал окружавший меня мир. Я не мог удержаться и горько посмеялся над своей самоуверенностью, вспомнив, к каким необдуманным выводам пришел я в тот вечер. Теперь передо мной была та же дивная картина, та же роскошная растительность, те же чудесные дворцы и великолепные руины, та же серебристая гладь реки, катившей свои воды меж плодородными берегами. Кое-где среди деревьев мелькали яркие одежды очаровательно-прекрасных маленьких людей. Некоторые из них купались на том самом месте, где я спас Уину, и у меня больно сжалось сердце. И над всем этим чудесным зрелищем, подобно черным пятнам, подымались купола, прикрывавшие колодцы, которые вели в подземный мир. Я понял теперь, что таилось под красотой жителей Верхнего Мира. Как радостно они проводили день! Так же радостно, как скот, пасущийся в поле. Подобно скоту, они не знали врагов и ни о чем не заботились . И таков же был их конец.
11 grieved to think how brief the dream of the human intellect had been. It had committed suicide. It had set itself steadfastly towards comfort and ease, a balanced society with security and permanency as its watchword, it had attained its hopes- - to come to this at last. Once, life and property must have reached almost absolute safety. The rich had been assured of his wealth and comfort, the toiler assured of his life and work. No doubt in that perfect world there had been no unemployed problem, no social question left unsolved. And a great quiet had followed. 'It is a law of nature we overlook, that intellectual versatility is the compensation for change, danger, and trouble. An animal perfectly in harmony with its environment is a perfect mechanism. Nature never appeals to intelligence until habit and instinct are useless . There is no intelligence where there is no change and no need of change. Only those animals partake of intelligence that have to meet a huge variety of needs and dangers. 'So, as I see it, the Upper-world man had drifted towards his feeble pretti- ness, and the Under- world to mere mechanical industry. But that perfect state had lacked one thing even for mechanical perfection- - absolute permanency. Apparently as time went on, the feeding of the Under- world, however it was effected, had become disjointed. Mother Necessity, who had been staved off for a few thousand years, came back again, and she began below. The Underworld being in contact with machinery, which, however perfect, still needs some little thought outside habit, had probably retained perforce rather more initiative, if less of every other human character, than the Upper. And when other meat failed them, they turned to what old habit had hitherto forbidden. So I say I saw it in my last view of the world of Eight Hundred and Two Thousand Seven Hundred and One. It may be as wrong an explanation as mortal wit could invent. It is how the thing shaped itself to me, and as that I give it to you. Мне стало горько при мысли, как кратковременно было торжество человеческого разума, который сам совершил самоубийство . Люди упорно стремились к благосостоянию и довольству, к тому общественному строю, лозунгом которого была обеспеченность и неизменность; и они достигли цели, к которой стремились, только чтобы прийти к такому концу... Когда- то Человечество дошло до того, что жизнь и собственность каждого оказались в полной безопасности. Богатый знал, что его благосостояние и комфорт неприкосновенны, а бедный довольствовался тем, что ему обеспечены жизнь и труд. Без сомнения, в таком мире не было ни безработицы, ни нерешенных социальных проблем. А за всем этим последовал великий покой. Мы забываем о законе природы, гласящем, что гибкость ума является наградой за опасности, тревоги и превратности жизни. Существо, которое живет в совершенной гармонии с окружающими условиями, превращается в простую машину. Природа никогда не прибегает к разуму до тех пор, пока ей служат привычка и инстинкт. Там, где нет перемен и необходимости в переменах, разум погибает. Только те существа обладают им, которые сталкиваются со всевозможными нуждами и опасностями. Таким путем, мне кажется, человек Верхнего Мира пришел к своей беспомощной красоте, а человек Подземного Мира - к чисто механическому труду. Но даже и для этого уравновешенного положения вещей, при всем его механическом совершенстве, недоставало одного - полной неизменности. С течением времени запасы Подземного Мира истощились. И вот Мать- Нужда, сдерживаемая в продолжение нескольких тысячелетий, появилась снова и начала внизу свою работу. Жители Подземного Мира, имея дело со сложными машинами, что, кроме, навыков, требовало все же некоторой работы мысли, невольно удерживали в своей озверелой душе больше человеческой энергии, чем жители земной поверхности. И когда обычная пища пришла к концу, они обратились к тому, чего до сих пор не допускали старые привычки. Вот как все это представилось мне, когда я в последний раз смотрел на мир восемьсот две тысячи семьсот первого года. Мое объяснение, быть может, ошибочно, поскольку человеку свойственно ошибаться. Но таково мое мнение, и я высказал его вам.
'After the fatigues, excitements, and terrors of the past days, and in spite of my grief, this seat and the tranquil view and the warm sunlight were very pleasant. I was very tired and sleepy, and soon my theorizing passed into dozing. Catching myself at that, I took my own hint, and spreading myself out upon the turf I had a long and refreshing sleep. 'I awoke a little before sunsetting. I now felt safe against being caught napping by the Morlocks, and, stretching myself, I came on down the hill towards the White Sphinx. I had my crowbar in one hand, and the other hand played with the matches in my pocket. 'And now came a most unexpected thing. As I approached the pedestal of the sphinx I found the bronze valves were open. They had slid down into grooves. 'At that I stopped short before them, hesitating to enter. 'Within was a small apartment, and on a raised place in the corner of this was the Time Machine. I had the small levers in my pocket. So here, after all my elaborate preparations for the siege of the White Sphinx, was a meek surrender. I threw my iron bar away, almost sorry not to use it. 'A sudden thought came into my head as I stooped towards the portal. For once, at least, I grasped the mental operations of the Morlocks. Suppressing a strong inclination to laugh, I stepped through the bronze frame and up to the Time Machine. I was surprised to find it had been carefully oiled and cleaned. I have suspected since that the Morlocks had even partially taken it to pieces while trying in their dim way to grasp its purpose. 'Now as I stood and examined it, finding a pleasure in the mere touch of the contrivance, the thing I had expected happened. The bronze panels suddenly slid up and struck the frame with a clang. I was in the dark-trapped. So the Morlocks thought. At that I chuckled gleefully. После трудов, волнений и страхов последних дней, несмотря на тоску по бедной Уине, эта скамья, мирный пейзаж и теплый солнечный свет все же казались мне прекрасными. Я смертельно устал, меня клонило ко сну, и, размышляя, я вскоре начал дремать. Поймав себя на этом, я не стал противиться и, растянувшись на дерне, погрузился в долгий освежающий сон. Проснулся я незадолго до заката солнца. Теперь я уже не боялся, что морлоки захватят меня во сне. Расправив члены, я спустился с холма и направился к Белому Сфинксу. В одной руке я держал лом, другой перебирал спички у себя в кармане. Но там меня ждала. Самая большая неожиданность. Приблизившись к Белому Сфинксу, я увидел, что бронзовые двери открыты и обе половинки задвинуты в специальные пазы. Я остановился как вкопанный, не решаясь войти. Внутри было небольшое помещение, и в углу на возвышении стояла Машина Времени. Рычаги от нее лежали у меня в кармане . Итак, здесь после всех приготовлений к осаде Белого Сфинкса меня ожидала покорная сдача. Я отбросил свой лом, почти недовольный тем, что не пришлось им воспользоваться. Но в ту самую минуту, когда я уже наклонился, чтобы войти, у меня мелькнула внезапная мысль. Я сразу понял нехитрый замысел морлоков. С трудом удерживаясь от смеха, я перешагнул через бронзовый порог и направился к Машине Времени. К своему удивлению, я видел, что она была тщательно смазана и вычищена. Впоследствии мне пришло в голову, что морлоки даже разбирали машину на части, стараясь своим слабым разумом понять ее назначение . И пока я стоял и смотрел на свою машину, испытывая удовольствие при одном прикосновении к ней, случилось то, чего я ожидал. Бронзовые панели скользнули вверх и с треском закрылись. Я попался. Так, по крайней мере, думали морлоки. Эта мысль вызвала у меня только веселый смех.
11 could already hear their murmuring laughter as they came towards me. Very calmly I tried to strike the match. I had only to fix on the levers and depart then like a ghost. But I had overlooked one little thing. The matches were of that abominable kind that light only on the box. 1 You may imagine how all my calm vanished. The little brutes were close upon me. One touched me. I made a sweeping blow in the dark at them with the levers, and began to scramble into the saddle of the machine. Then came one hand upon me and then another. Then I had simply to fight against their persistent fingers for my levers, and at the same time feel for the studs over which these fitted. One, indeed, they almost got away from me. As it slipped from my hand, I had to butt in the dark with my head - I could hear the Morlock' s skull ring - to recover it. It was a nearer thing than the fight in the forest, I think, this last scramble. I But at last the lever was fitted and pulled over. The clinging hands slipped from me. The darkness presently fell from my eyes. I found myself in the same grey light and tumult I have already described. II have already told you of the sickness and confusion that comes with time travelling. And this time I was not seated properly in the saddle, but sideways and in an unstable fashion. For an indefinite time I clung to the machine as it swayed and vibrated, quite unheeding how I went, and when I brought myself to look at the dials again I was amazed to find where I had arrived. One dial records days, and another thousands of days, another millions of days, and another thousands of millions. Now, instead of reversing the levers, I had pulled them over so as to go forward with them, and when I came to look at these indicators I found that the thousands hand was sweeping round as fast as the seconds hand of a watch - into futurity. 'As I drove on, a peculiar change crept over the appearance of things. Они уже бежали ко мне со своим противным хихиканьем. Сохраняя хладнокровие, я чиркнул спичкой. Мне оставалось только укрепить рычаги и умчаться от них, подобно призраку. Но я упустил из виду одно маленькое обстоятельство. Это были отвратительные спички, которые зажигаются только о коробки. Куда подевалось мое спокойствие! Маленькие, гадкие твари уже окружили меня. Кто-то прикоснулся ко мне. Отбиваясь рычагами, я полез в седло. Меня схватила чья-то рука, потом еще и еще. Мне пришлось с трудом вырывать рычаги из цепких пальцев и в то же время ощупывать гнезда , в которых они крепились. Один раз морлоки вырвали у меня рычаг. Когда он выскользнул из моих рук, мне пришлось, чтобы найти его на полу в темноте, отбиваться от них головой. Черепа морлоков трещали под моими ударами. Мне кажется, эта последняя схватка была еще упорнее, чем битва в лесу. В конце концов я укрепил рычаги и повернул их. Цепкие руки соскользнули с моего тела. Темнота исчезла из моих глаз. Вокруг не было ничего, кроме туманного света и шума, о которых я уже вам говорил. Я уже рассказывал о болезненных и муторных ощущениях, которые вызывает путешествие по Времени. Но на этот раз я к тому же плохо сидел в седле, неловко свесившись набок. Не знаю, долго ли я провисел таким образом, не замечая, как моя Машина дрожит и раскачивается. Когда я пришел в себя и снова посмотрел на циферблаты, то был поражен. На одном из циферблатов отмечались дни, на другом тысячи, на третьем миллионы и на четвертом миллиарды дней. Оказалось, что вместо того, чтобы повернуть рычаги назад, я привел их в действие таким образом, что Машина помчалась вперед, и, взглянув на указатели, я увидел, что стрелка, отмечающая тысячи дней, вертелась с быстротой секундной стрелки, - я уносился в Будущее. По мере движения все вокруг начало принимать какой- то необыкновенный вид.
The palpitating greyness grew darker; then - though I was still travelling with prodigious velocity- - the blinking succession of day and night, which was usually indicative of a slower pace, returned, and grew more and more marked. This puzzled me very much at first. The alternations of night and day grew slower and slower, and so did the passage of the sun across the sky, until they seemed to stretch through centuries . At last a steady twilight brooded over the earth, a twilight only broken now and then when a comet glared across the darkling sky. The band of light that had indicated the sun had long since disappeared; for the sun had ceased to set - it simply rose and fell in the west, and grew ever broader and more red. All trace of the moon had vanished. The circling of the stars, growing slower and slower, had given place to creeping points of light. At last, some time before I stopped, the sun, red and very large, halted motionless upon the horizon, a vast dome glowing with a dull heat, and now and then suffering a momentary extinction. At one time it had for a little while glowed more brilliantly again, but it speedily reverted to its sullen red heat. I perceived by this slowing down of its rising and setting that the work of the tidal drag was done. The earth had come to rest with one face to the sun, even as in our own time the moon faces the earth. Very cautiously, for I remembered my former headlong fall, I began to reverse my motion. Slower and slower went the circling hands until the thousands one seemed motionless and the daily one was no longer a mere mist upon its scale. Still slower, until the dim outlines of a desolate beach grew visible. 11 stopped very gently and sat upon the Time Machine, looking round. The sky was no longer blue. North- eastward it was inky black, and out of the blackness shone brightly and steadily the pale white stars. Overhead it was a deep Indian red and starless, and south- eastward it grew brighter to a glowing scarlet where, cut by the horizon, lay the huge hull of the sun, red and motionless . Дрожащая серая пелена стала темнее; потом снова - хотя я все еще продолжал двигаться с невероятной скоростью - началась мерцающая смена ночи и дня, обычно указывавшая на не очень быстрое движение Машины. Это чередование становилось все медленнее и отчетливее. Сначала я очень удивился. День и ночь уже не так быстро сменяли друг друга. Солнце тоже постепенно замедляло свое движение по небу, пока наконец мне не стало казаться , что сутки тянутся целое столетие. В конце концов над землей повисли сумерки, которые лишь но временам прорывались ярким светом мчавшейся по темному небу кометы. Красная полоса над горизонтом исчезла; солнце больше не закатывалось оно просто поднималось и опускалось на западе, становясь все более огромным и кровавым. Луна бесследно исчезла. Звезды, медленно описывавшие свои круговые орбиты, превратились из сплошных полосок света в отдельные, ползущие по небу точки. Наконец, незадолго до того, как я остановился, солнце, кровавое и огромное, неподвижно застыло над горизонтом; оно походило на огромный купол, горевший тусклым светом и на мгновения совершенно потухавший. Один раз оно запылало прежним своим ярким огнем, но быстро вновь приобрело угрюмо- красный цвет. Из того, что солнце перестало всходить и закатываться, я заключил, что периодическое торможение наконец завершилось. Земля перестала вращаться, она была обращена к Солнцу одной стороной, точно так же, как в наше время обращена к Земле Луна. Помня свое предыдущее стремительное падение, я с большой осторожностью принялся замедлять движение Машины. Стрелки стали крутиться все медленней и медленней, пока наконец та, что указывала тысячи дней, не замерла неподвижно, а та, что указывала дни, перестала казаться сплошным кругом. Я еще замедлил движение, и передо мной стали смутно вырисовываться очертания пустынного берега. Наконец я осторожно остановился и, не слезая с Машины Времени, огляделся. Небо утратило прежнюю голубизну. На северо- востоке оно было как чернила, и из глубины мрака ярким и неизменным светом сияли бледные звезды. Прямо над головой небо было темно- красное, беззвездное, а к юго- востоку оно светлело и становилось пурпурным; там, усеченное линией горизонта, кровавое и неподвижное, огромной горой застыло солнце.
The rocks about me were of a harsh reddish colour, and all the trace of life that I could see at first was the intensely green vegetation that covered every projecting point on their southeastern face. It was the same rich green that one sees on forest moss or on the lichen in caves: plants which like these grow in a perpetual twilight. 1 The machine was standing on a sloping beach. The sea stretched away to the south- west, to rise into a sharp bright horizon against the wan sky. There were no breakers and no waves, for not a breath of wind was stirring. Only a slight oily swell rose and fell like a gentle breathing, and showed that the eternal sea was still moving and living. And along the margin where the water sometimes broke was a thick incrustation of salt- - pink under the lurid sky. There was a sense of oppression in my head, and I noticed that I was breathing very fast. The sensation reminded me of my only experience of mountaineering, and from that I judged the air to be more rarefied than it is now. 1 Far away up the desolate slope I heard a harsh scream, and saw a thing like a huge white butterfly go slanting and fluttering up into the sky and, circling, disappear over some low hillocks beyond. The sound of its voice was so dismal that I shivered and seated myself more firmly upon the machine. Looking round me again, I saw that, quite near, what I had taken to be a reddish mass of rock was moving slowly towards me. Then I saw the thing was really a monstrous crab- like creature. Can you imagine a crab as large as yonder table, with its many legs moving slowly and uncertainly, its big claws swaying, its long antennae, like carters' whips, waving and feeling, and its stalked eyes gleaming at you on either side of its metallic front? Its back was corrugated and ornamented with ungainly bosses, and a greenish incrustation blotched it here and there. I could see the many palps of its complicated mouth flickering and feeling as it moved. 'As I stared at this sinister apparition crawling towards me, I felt a tickling on my cheek as though a fly had lighted there. Скалы вокруг меня были темно- коричневые, и единственным признаком жизни, который я увидел сначала, была темно- зеленая растительность, покрывавшая все юго- западные выступы на скалах. Эта густая, пышная зелень походила на лесные мхи или лишайники, растущие в пещерах, - растения, которые живут в постоянной полутьме . Моя Машина стояла на отлогом берегу. К юго-западу вплоть до резкой линии горизонта расстилалось море. Не было ни прибоя, ни волн, так как не чувствовалось ни малейшего дуновения ветра. Только слабая ровная зыбь слегка вздымалась и опускалась, море как будто тихо дышало, сохраняя еще признаки своей вечной жизни. Вдоль берега, там, где вода отступила, виднелась кора соли, красноватая под лучами солнца. Голова у меня была словно налита свинцом, и я заметил, что дыхание мое участилось. Это напомнило мне мою единственную попытку восхождения в горы, и я понял, что воздух стал более разреженным , чем прежде. Вдали, на туманном берегу, я услышал пронзительный писк и увидел нечто похожее на огромную белую бабочку. Она взлетела и, описав несколько неровных кругов, исчезла за невысокими холмами. Писк ее был таким зловещим, что я невольно вздрогнул и поплотнее уселся в седле. Оглядевшись снова, я вдруг увидел, как то, что я принимал за красноватую скалу, стало медленно приближаться ко мне. Это было чудовищное существо, похожее на краба. Представьте себе краба величиной с этот стол, со множеством медленно и нерешительно шевелящихся ног, с огромными клешнями, с длинными, как хлысты, щупальцами и выпуклыми глазами, сверкающими по обе стороны отливающего металлом лба! Спина его была вся в отвратительных буграх и выступах, местами покрытая зеленоватым налетом. Я видел, как шевелились и дрожали многочисленные щупальца у его рта. С ужасом глядя на это подползающее чудище, я вдруг почувствовал щекочущее прикосновение на щеке. Казалось, будто на нее села муха.
I tried to brush it away with my hand, but in a moment it returned, and almost immediately came another by my ear. I struck at this, and caught something threadlike. It was drawn swiftly out of my hand. With a frightful qualm, I turned, and I saw that I had grasped the antenna of another monster crab that stood just behind me. Its evil eyes were wriggling on their stalks, its mouth was all alive with appetite, and its vast ungainly claws, smeared with an algal slime, were descending upon me. In a moment my hand was on the lever, and I had placed a month between myself and these monsters. But I was still on the same beach, and I saw them distinctly now as soon as I stopped. Dozens of them seemed to be crawling here and there, in the sombre light, among the foliated sheets of intense green. II cannot convey the sense of abominable desolation that hung over the world. The red eastern sky, the northward blackness, the salt Dead Sea, the stony beach crawling with these foul, slow- stirring monsters, the uniform poisonous- looking green of the lichenous plants, the thin air that hurts one' s lungs: all contributed to an appalling effect. I moved on a hundred years, and there was the same red sun- - a little larger, a little duller- - the same dying sea, the same chill air, and the same crowd of earthy Crustacea creeping in and out among the green weed and the red rocks. And in the westward sky, I saw a curved pale line like a vast new moon. 1 So I travelled, stopping ever and again, in great strides of a thousand years or more, drawn on by the mystery of the earth's fate, watching with a strange fascination the sun grow larger and duller in the westward sky, and the life of the old earth ebb away. At last, more than thirty million years hence, the huge red-hot dome of the sun had come to obscure nearly a tenth part of the darkling heavens. Then I stopped once more, for the crawling multitude of crabs had disappeared, and the red beach, save for its livid green liverworts and lichens, seemed lifeless. And now it was flecked with white. A bitter cold assailed me. Я попробовал согнать ее взмахом руки, но ощущение сразу же возобновилось, и почти одновременно я почувствовал такое же прикосновение возле уха. Я отмахнулся и схватил рукой нечто похожее на нитку. Она быстро выдернулась. Дрожа от ужаса, я обернулся и увидел, что это было щупальце другого чудовищного краба, очутившегося как раз у меня за спиной. Его свирепые глаза вращались, рот был разинут в предвкушении добычи, огромные, неуклюжие клешни, покрытые слизью водорослей, нацелились прямо на меня! В одно мгновение я схватился за рычаг, и между мной и чудовищами сразу же легло расстояние целого месяца. Но я по- прежнему находился на том же берегу и, как только остановился, снова увидел тех же самых чудовищ. Они десятками ползали взад и вперед под мрачным небом, среди скользкой зелени мхов и лишайников. Не могу передать вам, какое страшное запустение царило в мире. На востоке - багровое небо, на севере - темнота, мертвое соленое море, каменистый берег, по которому медленно ползали эти мерзкие чудовища. Однообразные, ядовито- зеленые лишайники, разреженный воздух, вызывающий боль в легких, - все это производило подавляющее впечатление! Я перенесся на столетие вперед и увидел все то же багровое солнце - только немного больше и тусклее, - тот же умирающий океан, тот же серый холодный воздух и то же множество ракообразных, ползающих среди красных скал и зеленых лишайников. А на западе, низко над горизонтом, я увидел бледный серп, похожий на огромную нарождающуюся луну. Так продолжал я передвигаться по времени огромными скачками, каждый в тысячу лет и больше, увлеченный тайной судеб Земли и в состоянии какого- то гипноза наблюдая, как солнце на западе становится все огромней и тусклей, как угасает жизнь. Наконец больше чем через тридцать миллионов лет огромный красный купол солнца заслонил собой десятую часть потемневшего неба. Я остановился, так как многочисленные крабы уже исчезли, а красноватый берег казался безжизненным и был покрыт лишь мертвенно- бледными мхами и лишайниками. Местами виднелись пятна снега. Ужасный холод окружал меня.
Rare white flakes ever and again came eddying down. To the north- eastward, the glare of snow lay under the starlight of the sable sky and I could see an undulating crest of hillocks pinkish white. There were fringes of ice along the sea margin, with drifting masses further out; but the main expanse of that salt ocean, all bloody under the eternal sunset, was still unfrozen. 11 looked about me to see if any traces of animal life remained. A certain indefinable apprehension still kept me in the saddle of the machine. But I saw nothing moving, in earth or sky or sea. The green slime on the rocks alone testified that life was not extinct. A shallow sandbank had appeared in the sea and the water had receded from the beach. I fancied I saw some black object flopping about upon this bank, but it became motionless as I looked at it, and I judged that my eye had been deceived, and that the black object was merely a rock. The stars in the sky were intensely bright and seemed to me to twinkle very little. 1 Suddenly I noticed that the circular westward outline of the sun had changed; that a concavity, a bay, had appeared in the curve. I saw this grow larger. For a minute perhaps I stared aghast at this blackness that was creeping over the day, and then I realized that an eclipse was beginning. Either the moon or the planet Mercury was passing across the sun's disk. Naturally, at first I took it to be the moon, but there is much to incline me to believe that what I really saw was the transit of an inner planet passing very near to the earth. ' The darkness grew apace; a cold wind began to blow in freshening gusts from the east, and the showering white flakes in the air increased in number. From the edge of the sea came a ripple and whisper. Beyond these lifeless sounds the world was silent. Silent? It would be hard to convey the stillness of it. All the sounds of man, the bleating of sheep, the cries of birds, the hum of insects, the stir that makes the background of our lives - all that was over. As the darkness thickened, the eddying flakes grew more abundant, dancing before my eyes; and the cold of the air more intense. Редкие белые хлопья медленно падали на землю. На северо-востоке под звездами, усеивавшими траурное небо, блестел снег и высились волнистые вершины красновато- белых гор. Прибрежная полоса моря была скована льдом, и огромные ледяные глыбы уносились на простор; однако большая часть соленого океана, кровавая от лучей негаснущего заката, еще не замерзла. Я огляделся в поисках каких-нибудь животных. Смутное опасение все еще удерживало меня в седле Машины. Но ни в небе, ни на море, ни на земле не было признаков жизни. Лишь зеленые водоросли на скалах свидетельствовали, что жизнь еще не совсем угасла. Море далеко отступило от прежних берегов, обнажив песчаное дно. Мне показалось, что на отмели что- то движется, но когда я вгляделся пристальнее, то не увидел никакого движения; я решил, что зрение обмануло меня и это был просто черный камень. На небе горели необычайно яркие звезды, и мне казалось, что они почти перестали мерцать . Вдруг я увидел, что диск солнца на западе стал менять свои очертания. На его краю появилась какая-то трещина или впадина . Она все более увеличивалась. С минуту я в ужасе смотрел, как на солнце наползала темнота, а потом понял, что это начинается затмение. Должно быть, Луна или Меркурий проходили перед его диском. Разумеется, прежде всего я подумал о Луне, но дальнейшие соображения привели меня к выводу, что в действительности очень близко к Земле прошла перед солнцем одна из крупных планет нашей системы. Темнота быстро надвигалась. Холодными порывами задул восточный ветер, и в воздухе гуще закружились снежные хлопья. С моря до меня донеслись всплески волн. Но, кроме этих мертвенных звуков, в мире царила тишина. Тишина? Нет, невозможно описать это жуткое безмолвие. Все звуки жизни, блеяние овец, голоса птиц, жужжание насекомых, все то движение и суета, которые нас окружают, - все это отошло в прошлое. По мере того как мрак сгущался, снег падал все чаще, белые хлопья плясали у меня перед глазами, мороз усиливался .
At last, one by one, swiftly, one after the other, the white peaks of the distant hills vanished into blackness. The breeze rose to a moaning wind. I saw the black central shadow of the eclipse sweeping towards me. In another moment the pale stars alone were visible. All else was ray less obscurity. The sky was absolutely black. 'A horror of this great darkness came on me. The cold, that smote to my marrow, and the pain I felt in breathing, overcame me. I shivered, and a deadly nausea seized me. Then like a red- hot bow in the sky appeared the edge of the sun. I got off the machine to recover myself. I felt giddy and incapable of facing the return journey. As I stood sick and confused I saw again the moving thing upon the shoal- - there was no mistake now that it was a moving thing- - against the red water of the sea. It was a round thing, the size of a football perhaps, or, it may be, bigger, and tentacles trailed down from it; it seemed black against the weltering blood- red water, and it was hopping fitfully about. Then I felt I was fainting. But a terrible dread of lying helpless in that remote and awful twilight sustained me while I clambered upon the saddle. I So I came back. For a long time I must have been insensible upon the machine. The blinking succession of the days and nights was resumed, the sun got golden again, the sky blue. I breathed with greater freedom. The fluctuating contours of the land ebbed and flowed. The hands spun backward upon the dials. At last I saw again the dim shadows of houses, the evidences of decadent humanity. These, too, changed and passed, and others came. Presently, when the million dial was at zero, I slackened speed. I began to recognize our own petty and familiar architecture, the thousands hand ran back to the starting- point, the night and day flapped slower and slower. Then the old walls of the laboratory came round me. Very gently, now, I slowed the mechanism down. II saw one little thing that seemed odd to me. I think I have told you that when I set out, before my velocity became very high, Mrs. Watchett had walked across the room, travelling, as it seemed to me, like a rocket. Одна за другой погружались в темноту белые вершины далеких гор. Ветер перешел в настоящий ураган. Черная тень ползла на меня. Через мгновение на небе остались одни только бледные звезды. Кругом была непроглядная тьма. Небо стало совершенно черным. Ужас перед этой безбрежной тьмой охватил все мое существо. Холод, пронизывавший до мозга костей, и боль при дыхании стали невыносимы. Я дрожал и чувствовал сильную тошноту. Потом, подобно раскаленной дуге, на небе снова появилось солнце. Я слез с Машины, чтобы немного прийти в себя. Голова у меня кружилась, и не было сил даже подумать об обратном путешествии. Измученный и растерянный, я вдруг снова увидел на отмели, на фоне красноватой морской воды, какое-то движение. Теперь сомневаться уже не приходилось. Это было нечто круглое, величиною с футбольный мяч, а может быть, и больше, и с него свисали длинные щупальца; мяч этот казался черным на колыхавшейся кроваво- красной воде, и передвигался он резкими скачками. Я почувствовал, что начинаю терять сознание. Но ужас при мысли, что я могу беспомощно упасть на землю в этой далекой и страшной полутьме, заставил меня снова взобраться на седло. И я отправился назад. Долгое время я лежал без чувств на своей Машине. Снова началась мерцающая смена дней и ночей, снова солнце заблистало золотом, а небо прежней голубизной. Дышать стало легче. Внизу подо мной быстро изменялись контуры земли. Стрелки на циферблатах вертелись в обратную сторону. Наконец я снова увидел неясные очертания зданий периода упадка человечества. Они изменялись, исчезали, и появлялись другие. Когда стрелка, показывавшая миллионы дней, остановилась на нуле, я уменьшил скорость. Я стал узнавать знакомую архитектуру наших домов. Стрелка, отмечавшая тысячи дней, возвращалась ко времени отправления, ночь и день сменяли друг друга все медленней. Стены лаборатории снова появились вокруг меня. Осторожно замедлил я движение Машины. Мне пришлось наблюдать странное явление. Я уже говорил вам, что, когда я отправился в путь и еще не развил большой скорости, через комнату промчалась миссис Уотчет, двигаясь, как мне показалось, с быстротой ракеты.
As I returned, I passed again across that minute when she traversed the laboratory. But now her every motion appeared to be the exact inversion of her previous ones. The door at the lower end opened, and she glided quietly up the laboratory, back foremost, and disappeared behind the door by which she had previously entered. Just before that I seemed to see Hillyer for a moment; but he passed like a flash. 1 Then I stopped the machine, and saw about me again the old familiar laboratory, my tools, my appliances just as I had left them. I got off the thing very shakily, and sat down upon my bench. For several minutes I trembled violently. Then I became calmer. Around me was my old workshop again, exactly as it had been. I might have slept there, and the whole thing have been a dream. 'And yet, not exactly! The thing had started from the south- east corner of the laboratory. It had come to rest again in the north- west, against the wall where you saw it. That gives you the exact distance from my little lawn to the pedestal of the White Sphinx, into which the Morlocks had carried my machine. ' For a time my brain went stagnant. Presently I got up and came through the passage here, limping, because my heel was still painful, and feeling sorely begrimed. I saw the Pall Mall Gazette on the table by the door. I found the date was indeed to- day, and looking at the timepiece, saw the hour was almost eight о'clock. I heard your voices and the clatter of plates. I hesitated- - I felt so sick and weak. Then I sniffed good wholesome meat, and opened the door on you. You know the rest. I washed, and dined, and now I am telling you the story. 'I know,' he said, after a pause, ' that all this will be absolutely incredible to you. To me the one incredible thing is that I am here to- night in this old familiar room looking into your friendly faces and telling you these strange adventures.' He looked at the Medical Man. 'No. I cannot expect you to believe it. Take it as a lie- - or a prophecy. Say I dreamed it in the workshop. Consider I have been speculating upon the destinies of our race until I have hatched this fiction. Когда же я возвратился, то снова миновал ту минуту, в которую она проходила по лаборатории. Но теперь каждое ее движение казалось мне обратным. Сначала открылась вторая дверь в дальнем конце комнаты, потом, пятясь, появилась миссис Уотчет и исчезла за той дверью, в которую прежде вошла. Незадолго перед этим мне показалось, что я вижу Хилльера, но он мелькнул мгновенно, как вспышка. Я остановил Машину и снова увидел свою любимую лабораторию, свои инструменты и приборы в том же виде, в каком я их оставил. Совершенно разбитый, я сошел с Машины и сел на скамью. Сильная дрожь пробежала по моему телу. Но понемногу я начал приходить в себя. Лаборатория была такой же, как всегда. Мне казалось, что я заснул и все это мне приснилось. Но нет! Не все было по-прежнему. Машина Времени отправилась в путешествие из юго-восточного угла лаборатории, а вернулась она в северо-западный и остановилась напротив той стены, у которой вы ее видели. Точно такое же расстояние было от лужайки до пьедестала Белого Сфинкса, в котором морлоки спрятали мою Машину. Не знаю, долго ли, но я был не в состоянии думать. Наконец я встал и прошел сюда через коридор, хромая, потому что пятка моя еще болела. Я был весь перепачкан грязью. На столе у двери я увидел номер "Пэл-мэл газэтт" . Она была сегодняшняя. Взглянув на часы, я увидел, что было около восьми. До меня донеслись ваши голоса и звон тарелок. Я не сразу решился войти: так я был слаб и утомлен! Но я почувствовал приятный запах еды и открыл дверь. Остальное вы знаете. Я умылся, пообедал и вот теперь рассказываю вам свою историю. Я знаю, - сказал он, помолчав, - все это кажется вам совершенно невероятным; для меня же самое невероятное состоит в том, что я сижу здесь, в этой милой, знакомой комнате, вижу ваши дружеские лица и рассказываю вам свои приключения . Он взглянул на Доктора. - Нет, я даже не надеюсь, что вы поверите мне. Примите мой рассказ за ложь или. . . за пророчество . Считайте, что я видел это во сне, у себя в лаборатории. Представьте себе, что я раздумывал о грядущих судьбах человечества и придумал эту сказку.
Treat my assertion of its truth as a mere stroke of art to enhance its interest. And taking it as a story, what do you think of it?' He took up his pipe, and began, in his old accustomed manner, to tap with it nervously upon the bars of the grate. There was a momentary stillness. Then chairs began to creak and shoes to scrape upon the carpet. I took my eyes off the Time Traveller' s face, and looked round at his audience. They were in the dark, and little spots of colour swam before them. The Medical Man seemed absorbed in the contemplation of our host. The Editor was looking hard at the end of his cigar- - the sixth. The Journalist fumbled for his watch. The others, as far as I remember, were motionless . The Editor stood up with a sigh. 'What a pity it is you're not a writer of stories! ' he said, putting his hand on the Time Traveller's shoulder. 'You don't believe it?' 'Well- - - - ' 'I thought not. ' The Time Traveller turned to us. 'Where are the matches?' he said. He lit one and spoke over his pipe, puffing. ' To tell you the truth ... I hardly believe it myself.... And yet...' His eye fell with a mute inquiry upon the withered white flowers upon the little table. Then he turned over the hand holding his pipe, and I saw he was looking at some half- healed scars on his knuckles. The Medical Man rose, came to the lamp, and examined the flowers. 'The gy- naeceum's odd,' he said. The Psychologist leant forward to see, holding out his hand for a specimen. 'I'm hanged if it isn't a quarter to one,' said the Journalist. 'How shall we get home?' 'Plenty of cabs at the station,' said the Psychologist. 'It's a curious thing,' said the Medical Man; 'but I certainly don't know the natural order of these flowers. May I have them? ' The Time Traveller hesitated. Then suddenly: 'Certainly not.' ' Where did you really get them?' said the Medical Man. Отнеситесь к моим уверениям в ее достоверности как к простой уловке, к желанию придать ей побольше интереса. Но, относясь ко всему этому как к выдумке, что вы скажете? Он вынул изо рта трубку и начал по старой привычке нервно постукивать ею о прутья каминной решетки. Наступило минутное молчание. Потом послышался скрип стульев и шарканье ног по полу. Я отвел глаза от лица Путешественника по Времени и взглянул на его слушателей. Все они сидели в теки, и блики от огня в камине скользили по их лицам. Доктор пристально вгляделся в лицо рассказчика. Редактор, закурив шестую сигару, уставился на ее кончик. Журналист вертел в руках часы. Остальные, насколько помню, сидели неподвижно. Глубоко вздохнув, Редактор встал. Какая жалость, что вы не пишете статей, сказал он, кладя руку на плечо Путешественника по Времени. Вы не верите? Ну, знаете... Я так и думал. Путешественник по Времени повернулся к нам. - Где спички? - спросил он. Он зажег спичку и, дымя трубкой, сказал: Признаться. . . я и сам верю с трудом, но все же... Его глаза с немым вопросом устремились на белые увядшие цветы, лежавшие на столе . Потом он повернул руку, в которой была трубка, и посмотрел на едва затянувшиеся шрамы на своих пальцах. Доктор встал, подошел к лампе и принялся рассматривать цветы. - Какие странные у них пестики, - сказал он. Психолог наклонился вперед и протянул руку за одним из цветков. Ручаюсь головой, что уже четверть первого, - сказал Журналист. - Как же мы доберемся до дому? У станции много извозчиков, - сказал Психолог. Странная вещь, - произнес Доктор. Я не могу определить вид этих цветов. Не позволите ли мне взять их с собою? На лице Путешественника по Времени мелькнула нерешительность. - Конечно, нет, - сказал он. Серьезно, откуда вы их взяли? спросил Доктор.
The Time Traveller put his hand to his head. He spoke like one who was trying to keep hold of an idea that eluded him. 1 They were put into my pocket by Weena, when I travelled into Time. ' He stared round the room. 'I'm damned if it isn't all going. This room and you and the atmosphere of every day is too much for my memory. Did I ever make a Time Machine, or a model of a Time Machine? Or is it all only a dream? They say life is a dream, a precious poor dream at times- - but I can' t stand another that won' t fit. It's madness. And where did the dream come from? ... I must look at that machine. If there is one!' He caught up the lamp swiftly, and carried it, flaring red, through the door into the corridor. We followed him. There in the flickering light of the lamp was the machine sure enough, squat, ugly, and askew; a thing of brass, ebony, ivory, and translucent glimmering quartz. Solid to the touch- - for I put out my hand and felt the rail of it- - and with brown spots and smears upon the ivory, and bits of grass and moss upon the lower parts, and one rail bent awry. The Time Traveller put the lamp down on the bench, and ran his hand along the damaged rail. 'It's all right now, ' he said. 'The story I told you was true. I' m sorry to have brought you out here in the cold. ' He took up the lamp, and, in an absolute silence, we returned to the smoking- room. He came into the hall with us and helped the Editor on with his coat. The Medical Man looked into his face and, with a certain hesitation, told him he was suffering from overwork, at which he laughed hugely. I remember him standing in the open doorway, bawling good night. I shared a cab with the Editor. He thought the tale a ' gaudy lie. ' For my own part I was unable to come to a conclusion. The story was so fantastic and incredible, the telling so credible and sober. I lay awake most of the night thinking about it. I determined to go next day and see the Time Traveller again. I was told he was in the laboratory, and being on easy terms in the house, I went up to him. Путешественник по Времени приложил руку ко лбу. Он имел вид человека, который старается собрать разбегающиеся мысли. Их положила мне в карман Уина, когда я путешествовал по Времени. Он оглядел комнату. - Все плывет у меня в глазах. Эта комната, вы и вся знакомая обстановка не вмещаются в моей голове. Строил ли я когда- нибудь Машину Времени или ее модель? Может быть, все это был сон? Говорят, вся жизнь - это сон, и к тому же скверный, жалкий, короткий сон, хотя ведь другой все равно не приснится. С ума можно сойти. И откуда взялся этот сон?.. Я должен взглянуть на мою Машину. Существует ли она?.. Он схватил лампу и пошел по коридору. Пламя колебалось и по временам вспыхивало красным огнем. Мы последовали за ним. Освещенная трепетавшим пламенем лампы, низкая, изуродованная, погнутая, перед нами, несомненно, была та же самая Машина, сделанная из бронзы, черного дерева, слоновой кости и прозрачного блестящего кварца. Я потрогал ее. Она была тут, ощутимая и реальная. Темные полосы и пятна покрывали слоновую кость, а на нижних частях висели клочья травы и мха, одна из металлических полос была изогнута . Поставив лампу на скамью, Путешественник по Времени ощупал поврежденную полосу. - Теперь ясно, - сказал он. То, что я вам рассказал, правда. Простите, что я привел вас в этот холод... Он взял лампу. Никто из нас не произнес ни слова, и мы вернулись обратно в курительную . Провожая нас в переднюю, он помог Редактору надеть пальто. Доктор посмотрел ему в лицо и сказал несколько неуверенно, что он переутомлен. Путешественник по Времени громко рассмеялся. Помню, как он, стоя в дверях, крикнул нам вслед несколько раз: "Спокойной ночи!" Я поехал в одном кэбе с Редактором. По его словам, весь рассказ был "эффектным вымыслом" . Что касается меня, я не мог ничего решить. Этот рассказ был таким невероятным и фантастическим, а тон рассказчика так искренен и правдив. Почти всю ночь я не спал и думал об этом. На другое утро я решил снова повидать Путешественника по Времени. Мне сказали, что он в лаборатории. Я запросто бывал у него в доме и поэтому пошел прямо туда.
The laboratory, however, was empty. I stared for a minute at the Time Machine and put out my hand and touched the lever. At that the squat substantial- looking mass swayed like a bough shaken by the wind. Its instability startled me extremely, and I had a queer reminiscence of the childish days when I used to be forbidden to meddle. I came back through the corridor. The Time Traveller met me in the smoking- room. He was coming from the house. He had a small camera under one arm and a knapsack under the other. He laughed when he saw me, and gave me an elbow to shake. 'I'm frightfully busy,' said he, 'with that thing in there.' 'But is it not some hoax?' I said. 'Do you really travel through time?' 'Really and truly I do.' And he looked frankly into my eyes. He hesitated. His eye wandered about the room. ' I only want half an hour,' he said. 'I know why you came, and it's awfully good of you. There's some magazines here. If you'll stop to lunch I' 11 prove you this time travelling up to the hilt, specimen and all. If you'll forgive my leaving you now? ' I consented, hardly comprehending then the full import of his words, and he nodded and went on down the corridor. I heard the door of the laboratory slam, seated myself in a chair, and took up a daily paper. What was he going to do before lunch- time? Then suddenly I was reminded by an advertisement that I had promised to meet Richardson, the publisher, at two. I looked at my watch, and saw that I could barely save that engagement. I got up and went down the passage to tell the Time Traveller. As I took hold of the handle of the door I heard an exclamation, oddly truncated at the end, and a click and a thud. A gust of air whirled round me as I opened the door, and from within came the sound of broken glass falling on the floor. The Time Traveller was not there. Но лаборатория была пуста. На минуту я остановился перед Машиной Времени, протянул руку и дотронулся до рычага. В то же мгновение она, такая тяжелая и устойчивая, заколыхалась, как листок от порыва ветра. Это поразило меня, и в голове моей мелькнуло забавное воспоминание о том, как в детстве мне запрещали трогать разные вещи. Я вернулся обратно. Пройдя по коридору, я столкнулся в курительной с Путешественником по Времени, который собирался уходить. В одной руке у него был небольшой фотографический аппарат, в другой - сумка. При виде меня он рассмеялся и протянул мне для пожатия локоть. - Я очень занят, хочу побывать там, - сказал он. Значит, это правда? - спросил я. - Вы действительно путешествуете по Времени? Да, действительно и несомненно. Он посмотрел мне в глаза. На его лице отразилась нерешительность. - Мне нужно только полчаса, - сказал он. - Я знаю, зачем вы пришли, это очень мило с вашей стороны. Вот здесь журналы. Если вы подождете до завтрака, я, безусловно, докажу вам возможность путешествия по Времени, доставлю вам образцы и все прочее. .. Вы позволите оставить вас? Я согласился, едва ли понимая все значение его слов. Он кивнул мне и вышел в коридор. Я услышал, как хлопнула дверь его лаборатории, потом сел и стал читать газету. Что он собирается делать до завтрака? Взглянув на одно из объявлений, я вдруг вспомнил, что в два часа обещал встретиться с Ричардсоном по издательским делам. Я посмотрел на часы и увидел, что опаздываю. Я встал и пошел по коридору, чтобы сказать об этом Путешественнику по Времени. Взявшись за ручку двери, я услышал отрывистое восклицание, треск и удар. Открыв дверь, я очутился в сильном водовороте воздуха и услышал звук разбитого стекла. Путешественника по Времени в лаборатории не было.
I seemed to see a ghostly, indistinct figure sitting in a whirling mass of black and brass for a moment - a figure so transparent that the bench behind with its sheets of drawings was absolutely distinct; but this phantasm vanished as I rubbed my eyes. The Time Machine had gone. Save for a subsiding stir of dust, the further end of the laboratory was empty. A pane of the skylight had, apparently, just been blown in. I felt an unreasonable amazement. I knew that something strange had happened, and for the moment could not distinguish what the strange thing might be. As I stood staring, the door into the garden opened, and the man-servant appeared. We looked at each other. Then ideas began to come. ' Has Mr - - - - gone out that way?' said I. 'No, sir. No one has come out this way. I was expecting to find him here.' At that I understood. At the risk of disappointing Richardson I stayed on, waiting for the Time Traveller; waiting for the second, perhaps still stranger story, and the specimens and photographs he would bring with him. But I am beginning now to fear that I must wait a lifetime. The Time Traveller vanished three years ago. And, as everybody knows now, he has never returned. One cannot choose but wonder. Will he ever return? It may be that he swept back into the past, and fell among the blood- drinking, hairy savages of the Age of Unpolished Stone; into the abysses of the Cretaceous Sea; or among the grotesque saurians, the huge reptilian brutes of the Jurassic times. He may even now- - if I may use the phrase- - be wandering on some plesiosaurus- haunted Oolitic coral reef, or beside the lonely saline lakes of the Triassic Age. Or did he go forward, into one of the nearer ages, in which men are still men, but with the riddles of our own time answered and its wearisome problems solved? Мне показалось, что на миг передо мной промелькнула неясная, похожая на призрак фигура человека, сидевшего верхом на кружившейся массе из черного дерева и бронзы, настолько призрачная, что скамья позади нее, на которой лежали чертежи, была видна совершенно отчетливо. Но едва я успел протереть глаза, как это видение исчезло. Исчезла и Машина Времени. Дальний угол лаборатории был пуст, и там виднелось легкое облако оседавшей пыли. Одно из верхних стекол окна было, очевидно, только что разбито. Я стоял в изумлении. Я видел, что случилось нечто необычное, но не мог сразу понять, что именно. Пока я так стоял, дверь, ведущая в сад, открылась, и на пороге показался слуга. Мы посмотрели друг на друга. В голове у меня блеснула внезапная мысль. Скажите, мистер... вышел из этой двери? спросил я. Нет, сэр, никто не выходил. Я думал , он здесь. Теперь я все понял. Рискуя рассердить Ричардсона, я остался ждать возвращения Путешественника по Времени, ждать его нового, быть может, еще более странного рассказа и тех образцов и фотографий, которые он мне обещал. Теперь я начинаю опасаться, что никогда его не дождусь. Прошло уже три года со времени его исчезновения, и все знают, что он не вернулся . Нам остается теперь лишь строить догадки. Вернется ли он когда- нибудь? Может быть, он унесся в прошлое и попал к кровожадным дикарям палеолита, или в пучину мелового моря, или же к чудовищным ящерам и огромным земноводным юрской эпохи? Может быть, и сейчас он бродит в одиночестве по какому-нибудь кишащему плезиозаврами оолитовому рифу или по пустынным берегам соленых морей триасового периода? Или, может быть, он отправился в Будущее, в эпоху расцвета человеческой расы, в один из тех менее отдаленных веков, когда люди оставались еще людьми, но уже разрешили все сложнейшие вопросы и все общественные проблемы, доставшиеся им в наследство от нашего времени?
Into the manhood of the race: for I, for my own part, cannot think that these latter days of weak experiment, fragmentary theory, and mutual discord are indeed man's culminating time! I say, for my own part. He, I know- - for the question had been discussed among us long before the Time Machine was made- thought but cheerlessly of the Advancement of Mankind, and saw in the growing pile of civilization only a foolish heaping that must inevitably fall back upon and destroy its makers in the end. If that is so, it remains for us to live as though it were not so. But to me the future is still black and blank- - is a vast ignorance, lit at a few casual places by the memory of his story. And I have by me, for my comfort, two strange white flowers - shrivelled now, and brown and flat and brittle - to witness that even when mind and strength had gone, gratitude and a mutual tenderness still lived on in the heart of man. Я лично не могу поверить, чтобы наш век только что начавшихся исследований, бессвязных теорий и всеобщего разногласия по основным вопросам науки и жизни был кульминационным пунктом развития человечества! Так, по крайней мере, думаю я. Что же до него, то он держался другого мнения. Мы не раз спорили с ним об этом задолго до того, как была сделана Машина Времени, и он всегда мрачно относился к Прогрессу Человечества. Развивающаяся цивилизация представлялась ему в виде беспорядочного нагромождения материала, который в конце концов должен обрушиться и задавить строителей. Но если это и так, все же нам ничего не остается, как продолжать жить. Для меня будущее неведомо, полно загадок и только кое- где освещено его удивительным рассказом. И я храню в утешение два странных белых цветка, засохших и блеклых, с хрупкими лепестками, как свидетельство того, что даже в то время, когда исчезают сила и ум человека, благодарность и нежность продолжают жить в сердцах.
Юмор СОВСЕМ АНЕКДОТ На заре развития ядерных технологий перед СССР и США возникла проблема - определить зависимость силы ядерного взрыва от расстояния. Американцы подошли к ее решению с американским размахом: закупили новейшую, по тем временам, аппаратуру, за бешеные деньги создали специально к этому случаю суперкомпьютер. Испытательное поле покрыли километрами проводов от датчиков к регистраторам. После испытания данные с них забивали в перфокарты и чудо техники, радостно подмигивая лампами, килограммами глотало эти самые карты, обогревая отходами мыслительного процесса помещение. И вот он, долгожданный результат - столбцы цифири в руках. Американцы сильно гордились своим произведением, если бы гордость была легче воздуха, косяки американских физиков циркулировали бы в стратосфере. Прошло время, секретные данные перестали таковыми быть, но осталась гордость за результат, и американцы опубликовали свои данные. Вслед за ними опубликовали данные своих испытаний наши ученые. В предчувствии, что Советы окажутся в глубоком заднем проходе по сравнению с Ними, американцы начали сверять данные. И оказалось, что Советские уже во втором знаке точнее! Дядя Кондратий широко раскрыл перед американцами свои крепкие объятия. Страшные мысли витали в их головах - если Советские данные такие точные, то у них в то уже время был не просто суперкомпьютер а супер-пупер компьютер, а уровень техники вообще, совсем нечета американскому. Ну, раз такое дело, американцы на всех парах снарядили делегацию по обмену опытом в СССР. Прибыв к советским коллегам они взяли быка за рога - а не покажите ли вы тот славный аппарат на котором вы рассчитывали свои данные. - Да, вот он, перед вами. Советский коллега показал на агрегат, ближайшего родственника Железного Фе- лекса1. - А-а-а, секретность - подумали американцы - прикидываются. Знаем мы вас! Арифмометр механический.
- Может вы нам продемонстрируете аппаратуру с которой вы работали в поле? - с надеждой спросили тогда они. Ассистент ушел, вернулся с кирпичом, который и положили перед учеными. Этот нехитрый предмет поверг американцев в гипнотический транс. Вот если бы тут лежал кирпич сделанный из печатных плат и полупроводников, тогда бы все было ясно, но ЭТО кирпич обыкновенный силикатный, только что пронумерованный. Американцам стало совершенно очевидно, русские глумятся над ними и не просто глумятся, а самым изощренным образом Из состояния прострации их начал выводить рассказ о собственно испытаниях. Оказалось, кирпичи отномеровали и расставили по радиусам от центра. После взрыва солдаты рулеткой вымерили расстояние, на которое улетел каждый конкретный кирпич, а потом группа сотрудников по простейшим физическим формулам определила искомое давление. Слава Советской науке. НЕ СОВСЕМ АНЕКДОТ Самогонный аппарат на основе процессора AMD На сайте энтузиаста-компьютерщика Джеймса Шармена (http://www.exaflop.org/docs/x86still/index.html) появилось описание компьютера на основе процессора AMD Кб, использующегося в качестве перегонного куба для получения чистого спирта. По заявлению самого Шармена, он не помнит, откуда у него возникла идея использовать настольный компьютер для получения спирта, однако однажды он решил претворить эту идею в жизнь. Принцип получения чистого алкоголя из спиртосодержащей жидкости прост: для этого необходимо нагреть жидкость, из которой будут испаряться пары алкоголя, затем эти пары охлаждаются, конденсируются, и получается чистый спирт. В любом персональном компьютере имеется как источник тепла (процессор), так и охлаждающее устройство (кулер). Главной задачей было определить, можно ли, разделив процессор и кулер, и добавив некоторые дополнительные детали, превратить компьютер в перегонный куб. Для создания "высокотехнологичного самогонного аппарата" был использован компьютер на основе процессора AMD Кб с тактовой частотой 233 МГц (напряжение питания - 3,3 В). Для нагревания жидкости Шармен спаял из тонкого медного листа герметичный сосуд размером 5x5x1 см с входной и выходной трубками из меди. Этот сосуд был размещен непосредственно на процессоре. После этого при помощи гибких соединительных шлангов медные трубки были закреплены на кулере, а все это устройство - на материнской плате
Чтобы испытать получившуюся систему, Шармен загрузил операционную систему Linux и небольшой программный код, который должен был сильно нагрузить процессор . Чтобы обеспечить максимальное охлаждение, емкость, в которую должен стекать спирт, была размещена в небольшой миске с холодной водой, а сосуд для нагревания был наполовину заполнен ромом. Уже через десять минут внутри гибких прозрачных трубок появился конденсат, а сосуд для нагревания стал очень горячим. Примерно через час, в течение которого из-за перегрева компьютер пришлось дважды перезагрузить, в емкость для сбора спирта стекло около 2 мл прозрачной жидкости, которая на вкус оказалась очень крепким спиртом. Горела полученная жидкость также очень хорошо. Комментарии специалиста: 1. Использование процессора AMD Кб - 233 Мгц, следует признать ошибочным, поскольку он нормально не обеспечивает достаточного нагрева и его приходится программно приводить к перегреву. Более целесообразно использовать процессор один из мощных современных процессоров, например AMD Athlon64 3800+ работающих на компьютере под управлением MS Vista. 2. Охлаждение процессора на основе перегонки этанола, можно признать даже целесообразным, поскольку процесс кипения может потреблять больше тепла, чем нагрев до точки кипения. 3. Температура кипения водных растворов спирта лежит в диапазоне от 78 до 100 градусов Цельсия, в зависимости от концентрации, что граничит с диапазоном выживаемости процессора. Проток спирта сырца в зависимости от температуры нетрудно автоматизировать с помощью того же компьютера на котором осуществляется перегонка.
4. Использование данной технологии в масштабах страны может существенно увеличить ВВП, в два и более раза. СОВСЕМ НЕ АНЕКДОТ Домашняя заправочная станция Автомобили можно заправлять бензином и газом. Но в целях экологической безопасности лучше этиловым спиртом. Вопросами экологии наша страна не сильно обеспокоена. А вот в США производство этанола для «прокорма» автомобилей растет от года к году. Впрочем, как и его цена. Компания EFuel решила всплыть на гребне этой волны, выпустив на рынок EFuel 100 MicroFueler, агрегат для дома, производящий из сахара, дрожжей и воды стопроцентный этанол, одним нажатием кнопки. «Вы просто открываете дверку как у стиральной машинки, засыпаете сахар, нажимаете кнопку и через несколько дней этанол готов», говорит основатель компании EFuel Том Куинн (Tom Quinn). Стокилограммовый аппарат подключается к водоснабжению, канализации и электропитанию. В качестве сырья используется сахар-сырец (не рафинад), который после питания дрожжей превращается в этанол. Полная загрузка аппарата сахаром через 7 дней даст 35 галлонов (~130 литров) этанола. MicroFueler уже оборудован насосом и шлангом с пистолетом для заправки автомобиля. В зависимости от стоимости электричества и воды себестоимость производства галлона этанола может составить менее $1. При этом сам MicroFueler обойдется покупателям в $9995 (хотя снизить стоимость аппарата американцам могут помочь налоговые вычеты). Куинн говорит, что самое главная часть их аппарата - это дистиллятор, отделяющий воду от алкоголя при низкой температуре за меньшее количество операций, чем позволяют другие методы. Использование сахара в качестве сырья не дает неприятных запахов, а отработанная вода остается настолько чистой, что ее можно пить. Куинн сравнил свое изобретение по значимости для общества с персональным компьютером: «Как компьютеры стали настольными и изменили жизнь людей, так и EFuel переносит АЗС в дома». Конечно, компании предстоит еще очень большой путь. В планах ее руководства сделать домашнее производства этилового спирта еще более дешевым, легким и эффективным. Для этого первым делом Куинн хочет наладить поставки своим клиентам дешевого, так называемо технического сахара из Мексики по 5 центов за килограмм. То есть EFuel поступает весьма грамотно, продавая не только оборудование, но и постоянно требующееся сырье. Комментарий специалиста: Аппарат явно недоработан. Использование стиральной машины в Российской народной технологии позволяет значительно сократить сроки получения конечного продукта.
ИНФОРМАЦИЯ К РАЗМЫШЛЕНИЮ Бесплатное размещение ваших объявлений некоммерческого плана на этой странице проделает дверь в стене неизвестности и позволит им выйти в широкий мир русскоязычного интернета.