Текст
                    П. НОРТОН
Программно-
аппаратная
организация
IBM PC

Inside the IBM PC Revised and Enlarged Peter Norton A Brady Book Published by Prentice Hall Press New York, NY 10023
П. НОРТОН Программно- аппаратная организация IBM PC Перевод с английского Е.Г.Карпинской, М.В.Рыбалкиной, В.Г.Тонконогова Под редакцией В.Г.Абрамова Издательство «Радио и связь» Москва, 1992
Н83 УДК 681.322-181.4 Редакция переводной литературы Нортон П. Н83 Программно-аппаратная организация IBM PC: Пер. с англ. — М.: Радио и связь, 1992. - 336 с.: ил. ISBN 5-256-00381-Х В книге известного американского специалиста изложены принципы функционирования технических средств персональных компьютеров фир- мы IBM и их взаимодействия с программными компонентами: операцион- ной системой, базовой системой управления вводом-выводом, драйвера- ми и др. Для начинающих пользователей персональных ЭВМ. 2404010000-057 046(01) -92 138-91 ББК 32.973 ISBN 5-256-00381-Х (рус.) ISBN 0-89303-583-L (англ.) ©1986 by Brady Books, a division of Simon & Schuster, Inc. ©Перевод на русский язык. Карпинская с.Г., Рыбалкина М.В., Тонконогов В.Г., 1991. ©Предисловие к русскому изданию. Примечания. Абрамов В.Г. 1991.
ПРЕДИСЛОВИЕ РЕДАКТОРА ПЕРЕВОДА Перед вами, уважаемые читатели, книга очень известного спе- циалиста в области создания программного обеспечения для пер- сональных компьютеров и замечательного автора Питера Нортона. Практически каждый пользователь персонального компьютера типа IBM PC встречался в своей работе с его знаменитыми творе- ниями, позволяющими даже начинающему в полном объеме ос- воить искусство управления персональным компьютером (доста- точно вспомнить пакет сервисных программ "Утилиты Нортона"). Нортон обладает редкой способностью в краткой и доступной форме излагать достаточно сложные и фундаментальные понятия в области использования аппаратных возможностей и программно- го обеспечения персональных компьютеров. Опытный програм- мист может заметить, что трактовка некоторых понятий отличается от принятой в нашей стране, но эти отличия скорее поверхностные и носят лишь терминологический характер. В настоящем издании книги освещены практически все аспекты, связанные с использованием персонального компьютера IBM PC: от истории его создания до особенностей программно-аппаратных средств. Материал выстроен таким образом, что читатель посте- пенно погружается в мир удивительных возможностей IBM PC. Основная цель автора — от простого к сложному — Дать читате- лю представление о технических компонентах, программном обеспечении и о способах наиболее эффективного использования возможностей персонального компьютера. К настоящему моменту выпущено в свет много книг по персо- нальному компьютеру IBM PC. Книга П.Нортона отличается широ- ким диапазоном предоставляемых читателю сведений. Для того чтобы убедиться в этом, достаточно взглянуть на оглавление. Многие действия, происходящие при работе с компьютером, становятся понятными и естественными после знакомства с этой книгой. Очень удачно выбран уровень изложения. Даже такие традиционно трудные понятия, как операционная система, система прерываний, графический и алфавитно-цифровой режимы работы экрана, преподносятся просто и ясно. Автор не опускается до тех- нических деталей, которые можно найти в руководствах по персо- нальному компьютеру IBM PC, а описывает саму проблему и как она решается, почему одни возможности не получили широкого распространения, а другие используются очень активно и порой даже не для тех целей, для которых планировались первоначаль- но. В конце каждой главы читателю предлагается несколько зада- 5
ний. Причем они носят скорее проблемный характер, чем техни- ческий. Читателю предлагается подумать над решением опреде- ленных задач и обосновать это решение. Начинающему пользова- телю персонального компьютера рекомендуется при первона- чальном чтении опускать технические подробности, специально выделенные в тексте. Искушенному программисту эти подробно- сти доставят наибольшее удовлетворение. Приведенные в прило- жении программы носят иллюстративный характер и не претенду- ют на оптимальность. Тем не менее рекомендуем набрать их на компьютере и проделать ряд экспериментов над ними. В.Г.Абрамов Об авторе. Питер Нортон родился с Сиэтле (штат Вашингтон, США). Полу- чил образование в Рид Колледже (г.Портленд, штат Орегон). По- следние 20 лет работал с различными видами вычислительной тех- ники — от персональных компьютеров (ПК) до самых мощных ЭВМ, а также с различными видами программного обеспечения, начиная от самого сложного системного программирования и кон- чая отдельными коммерческими программами. Начав заниматься ПК, П. Нортон создал легендарный "Пакет сервисных программ Нортона" для семейства персональных ком- пьютеров фирмы IBM. В настоящее время П. Нортон продолжает разрабатывать про- граммное обеспечение для мини- и микроЭВМ, уделяя при этом большое внимание вопросам практического использование персо- нальных компьютеров. Ограничение ответственности и отказ от гарантий. Автор и издатель сделали все возможное для подготовки этой книги и со- держащихся в ней программ. Теоретический материал и программы были тща- тельно разработаны, исследованы и проверены на эффективность. Но автор и издатель не дают никаких гарантий в отношении программ и документации, со- держащихся в настоящей книге. Автор и издатель снимают с себя ответствен- ность за любой случайный ущерб, понесенный вследствие использования этих программ.
ВВЕДЕНИЕ Начинается увлекательное путешествие в мир секретов, чудес и загадок персональных компьютеров фирмы IBM! С первых дней своего появления на свет персональный компь- ютер (ПК) вызывает всеобщее восхищение, потому что ознамено- вал приход новой эры — эры персональных вычислений. Сегодня ПК стал мощным средством, не имеющим себе равных в оказании практической помощи и ученым, и деловым людям, позволяю- щим необычайно повысить эффективность их работы. Сегодня в мире существует огромное количество компьютеров совместимых друг с другом, созданных как IBM, так и другими фирмами, — то, что мы сейчас называем "семейством" IBM PC. Цель моей книги — помочь вам узнать поближе этот замечательный компьютер и все его семейство. Мы вместе — вы и я — отправимся знакомиться с чудесами и отгадывать загадки ПК. Я уже давно стал восторженным энтузиа- стом семейства IBM PC и хочу, чтобы вы разделили со мной ра- дость умения профессионально работать с компьютером, исполь- зовать все его возможности. Как вы, вероятно, уже догадались, эта книга не для тех, кто не- охотно включает свой компьютер. Она предназначена для таких, как вы, для тех, у кого достаточно энтузиазма и любопытства, что- бы встать на путь постижения премудрости работы с ПК. Моя за- дача — сделать этот путь легче и увлекательнее. В этой книге вы найдете сведения и об устройстве компьютера. Знать, как он работает, не менее важно, чем уметь работать с ПК. Вы можете вполне успешно пользоваться услугами компьютера, не понимая того, что в нем происходит. Однако чем глубже вы представляете процессы, происходящие в ПК, тем лучше будете использовать его возможности. Вы сможете выбирать наиболее подходящее программное обеспечение и периферийное обору- дование для вашей машины, легче справитесь со всеми критиче- скими — не будем исключать и это — ситуациями. Если что-ни- будь случится в процессе работы с компьютером, вероятность то- го, что вы примете правильное решение, а не наделаете глупостей и не испортите все окончательно, будет выше. Существует еще целый ряд причин, по которым стоит понять внутреннее устройство ПК. Первая причина, достаточно веская, со- стоит в появлении чувства интеллектуального удовлетворения, ко- торое приходит с полным пониманием того, что происходит с тво- им инструментом. Другая причина заключается в открытии для се- бя новых областей знаний. Ведь в наши дни компьютерная грамот- ность — это необходимый компонент образования. Но, пожалуй, 7
самая главная причина та, о которой я уже сказал выше. По ана- логии мы можем вспомнить, что на заре автомобилестроения во- дителю приходилось быть и механиком-любителем, чтобы без всякой опаски отправляться в автомобильное путешествие. Сегод- ня для того чтобы водить машину, знаний механика не требуется. Автомобили достаточно надежны и удобны для повседневного пользования. Хотелось бы, чтоб так было и в отношении компью- теров, но, откровенно говоря, дело еще не зашло так далеко. Се- годня для успешного пользования компьтером необходимо быть специалистом. Чем лучше вы овладеете этой специальностью, тем быстрее сможете найти выход из любой критической ситуации. Для этого и предназначена эта книга — рассказать о том, как стать специалистом, помочь вам войти в славную когорту волшеб- ников, которые действительно знают, как заставить ПК творить чу- деса. Если вы знаете что-нибудь обо мне, Питере Нортоне, или о первом издании этой книги, вы в курсе того, как я заработал себе репутацию и как эта книга стала бетселлером. На заре истории ПК пользователи как раз больше всего хотели знать технические принципы работы машин. Сейчас мир ПК повзрослел и изменился, изменились и интересы пользователей. Но сегодня им все-таки по-прежнему еще нужно разбираться в тонкостях работы своих машин, уметь заставить их "петь". Новое издание этой книги ("Inside the IBM PC") изменилось в соответствии с этими потребно- стями. Вы по-прежнему найдете здесь множество интересной и по- лезной технической информации, которая поможет вам понять как работает ПК. Но в настоящем издании я провожу разграничение между двумя видами материала, представленного в книге. Основная часть объясняет принципы работы ПК, охватывая все то, что нужно для понимания, избавляя вас от необходимости про- бираться сквозь завалы технической информации. Эта часть книги предназначена для всех читателей, она набрана обычным шриф- том. Для тех читателей, которые хотят пойти дальше, копнуть глубже и понять больше, — фрагменты книги, и озаглавленные ### Технические подробности. Конец такого фрагмента помечен знаком ###. Они содержат более трудный материал. В этих разделах мы углубимся в детали аппаратной реализации и программного обес- печения, чтобы показать те инженерные принципы, которые ис- пользуются в семействе IBM PC. Эти более сложные разделы предназначены для всех, кто хочет добиться большего, чем про- сто практическое освоение ПК, кто хочет действительно надеть колпак волшебника и совершать или по крайней мере знать как совершаются чудеса, на которые способен ПК. Когда вы увидите 8
такой заголовок, то будете знать, что это путь к вершинам позна- ния, и попытаетесь одолеть эти вершины, если это соответствует вашим потребностям, или обойдете их стороной. В этой книге вы найдете отдельные образцы программ, с по- мощью которых мы продемонстрируем вам некоторые возмож- ности ПК. С их помощью вы сами сможете проверить характери- стики вашей машины или просто немного развлечься. Эти про- граммы в основном составлены на языке программирования Бей- сик, что облегчает перенос их со страниц этой книги в ваш ПК. В конце каждой главы вы также найдете несколько заданий, выпол- нив которые сможете проверить понимание изложенного материа- ла и приобрести навыки работы с ПК. А сейчас давайте немного развлечемся. Занимательный лабиринт Для развлечения я составил небольшую программу на языке Бейсик, иллюстрирующую то, что составляет нашу жизнь, включая и процесс познания. (Вы найдете текст этой программы, названной MAZE, в приложении А, где помещены все наиболее объемные примеры программ). На рис. В.1 иллюстрируется работа програм- мы. На нем изображены два прямоугольника с надписями СТАРТ и ФИНИШ. Программа должна проложить путь от одного пункта к другому. Но она не знает, куда должна прийти в итоге, и поэтому прокладывает путь наугад, до тех пор, пока не упрется в нужный прямоугольник. Рис.В.1. Движение в лабиринте от СТАРТА к ФИНИШУ Когда финиш достигнут, раздаются звуки фанфар. Вы в этом убедитесь сами, если доведете дело до конца. К счастью, наша книга не похожа на этот путь. Мы будем идти своей дорогой, тща- тельно продуманной. Хотя иногда, наверное, вам будет казаться, 9
что наш путь от старта к финишу так же бесцелен, как и програм- ма, которая Вам сейчас была предложена. Я предложил вам эту игру по двум причинам. Во-первых, она действительно может пригодиться для того, чтобы убедить кого угодно, что путь к успеху бывает очень извилистым. С помощью нее вы сможете объяснить вашему начальнику, почему результа- ты работы не появляются мгновенно, и показать друзьям, каким нелегким путем вы пришли к мастерству в обращении с персо- нальным компьтером. Во-вторых, эта программа дает нам пищу для размышлений. Важно понимать, что отладка и улучшение компьютерных программ весьма непростая задача. Если вы усвоите это, то бу- дете лучше подготовлены для понимания сущности программы, с которой работаете, или любой программы, которую хотите соста- вить. Итак, я предлагаю вам несколько вопросов относительно на- шей игрушечной программы MAZE, над которой следует поду- мать, прежде, чем мы перейдем к гл.1 и исследуем основные понятия, касающиеся компьютеров. Задания 1. Если Вы еще не успели взглянуть на текст программы MAZE в приложении А, подумайте, насколько сложно составить программу, которая прокладывает произвольный путь от старта к финишу. Попробуйте составить — на одном из известных вам языков программирования — программу для решения этой задачи. Как сделать так, чтобы линия не уходила за край экрана? Как Вы узнае- те, что программа достигла своей цели? 2. Ознакомьтесь с текстом программы MAZE в приложении А. Оказалась пи эта программа сложнее или легче, чем вы думали? Если вы знаете,как прочитать программу на языке Бейсик, или если вы догадаетесь, как это сделать, проверь- те, включает ли мой вариант программы какие-либо важные детали, которые не имеет ваш вариант, или наоборот. Удалось ли вам включить какие-либо сущест- венные детали, которые я упустил? 3. Когда программа MAZE прокладывает свой путь, она чертит линии, пересе- кающие уже имеющиеся. А если мы захотим узнать, когда мы пересекаем ста- рую линию, или избежать возвращения назад по уже имеющейся линии? Не вда- ваясь в специфику программирования, попытайтесь разработать логические фрагменты, которые мы должны добавить в программу. Какие фрагменты ока- жутся самыми важными? Какие фрагменты можно назвать чистым украшением? Делает ли добавление этих фрагментов программу более сложной? Что это мо- жет сказать вам об общем характере компьютерных программ? 10
Глава 1 ГЕНЕАЛОГИЧЕСКОЕ ДЕРЕВО Одно из самых важных качеств персональных компьютеров фирмы IBM заключается в том, что все они являются именно семейством родственных компьютеров, а не просто коллекцией подобных машин. Это делает историю развития ПК более богатой и занимательной. Кроме того семейство IBM PC дает нам большой набор компьютерных систем, различающихся по своим характе- ристикам, цене и эффективности. В этой главе мы рассмотрим генеалогическое дерево семейства ПК. Наш рассказ будет иметь несколько аспектов. Мы познако- мимся с хронологией появления на свет членов семейства IBM PC. Рассмотрим различные модели ПК, особое внимание уделив их производительности и различным техническим характеристикам. Дополнительной будет информация о той роли, которую играют члены семейства ПК, не производимые фирмой IBM. Это так на- зываемые аналоги IBM PC или его дальние родственники. Еще од- ним направлением нашего рассказа будет история семейства мик- ропроцессоров, являющихся душой IBM PC и открывающих ему дорогу в будущее. Все это будет рассмотрено в настоящей главе, так что у читателя должно сложиться достаточно полное представление о семействе ПК и перспективах его развития. 1.1. Немного семейной истории Официальная история ПК берет начало с августа 1981 г., когда фирма IBM известила о создании "Персонального компьютера IBM", который мы с вами знаем как исходный, оригинальный ПК. Неофициальная история началась, разумеется, раньше, но не на- столько, как это может показаться. С момента принятия решения о создании персонального компьютера IBM до момента официаль- ного объявления о его создании прошел, как нам сообщили, всего один год — изумительно короткий срок для такой большой и та- кой решительной фирмы, как IBM. Освещение предыстории ПК, какой бы она интересной не была, не входит сейчас в нашу задачу (однако я сообщу вам один зани- мательный факт в подразделе "Как IBM PC стал 16-разрядным компьютером"). Что нам действительно интересно и полезно знать, так это то, как появилась каждая модель ПК. Это поможет II
нам понять, как появилось на свет целое семейство ПК и что ждет это семейство. Как IBM PC стал 16-разрядным компьютером Во время разработки IBM PC все персональные компьютеры принадлежали к теперь уже устаревшим 8-разрядным моделям (подробно о 8- и 16-разрядных компьютерах см. последний раз- дел этой главы, а также гл. 3). Как гласит одно из преданий, IBM PC был на грани того, чтобы стать 8-разрядным компьютером, что значительно ограничило бы его возможности по сравнению с тем, чем он должен был стать, и сильно затруднило бы перерастание этого ПК в целое семейство. Итак, фирма IBM собиралась создавать 8-разрядный ПК, пото- му, что это соответствовало существующим стандартам того вре- мени. Одним из специалистов, консультировавших IBM в процессе создания ПК, был Билл Гейтс, легендарный основатель фирмы Microsoft. Билл понял, что хотя 8-разрядные ПК были широко рас- пространены, дни их сочтены. Для действительного успеха IBM PC было необходимо перейти в область более производительных 16- разрядных вычислений. Билл осозновал это и уговорил фирму IBM изменить свои планы. Было ли так на самом деле или это просто легенда — неваж- но. Главное то, что решение сделать ПК 16-разрядным компьюте- ром было чрезвычайно важным в достижении того, чтобы IBM PC стал самым распространенным настольным компьютером. История, излагаемая здесь, естественно, неполная, так как из-за недостатка места я опускаю многие детали. История семейства ПК продолжается и в эти минуты, когда я пишу эти строки. Вот ее ос- новные моменты. IBM PC появился на свет осенью 1981 г. К весне 1982 г. этот ПК продавался в больших количествах, но ко всеобщему удивлению спрос намного превысил предложение. Персональный компьютер ждал, несомненно, громадный успех. И так как этот успех не за- стал врасплох и IBM, и других производителей в этой отрасли, все быстро ухватились за открывающиеся возможности. С самого на- чала появления ПК стало ясно, что необходима модель ПК, кото- рую можно носить с собой в небольшом чемодане. Это привело к появлению фирмы Compaq Computer. И первым пополнением се- мейства ПК стал компьютер, известный под названием Compaq. О его создании было официально объявлено осенью 1982 г., спустя чуть больше года после выпуска оригинального ПК. Следующей весной, в 1983 г., свой вклад в пополнение семей- ства ПК внесла фирма IBM. Появилась модель XT, которая доба- вила к ПК жесткий диск памяти большого объема, фирма Compaq Computer ответила тем же, создав аналогичную машину в перено- симом варианте осенью 1983 г. Эта модель была названа Compaq Plus. 12
В 1983 г. начала просачиваться информация о том, что IBM го- товится к выпуску дешевого упрощенного персонального компью- тера, который мог бы стать домашней ЭВМ или более экономич- ной моделью ПК для использования в бизнесе или науке. Машина была названа PCjr или Junior. Почти все полагали, что PCjr ждет еще больший успех, чем ис- ходную модель IBM PC, но когда она появилась в конце 1983 г., разочарованию не было предела. Персональный компьютер PCjr был обречен на недолговременное существование из-за неудоб- ной клавиатуры, очевидной неспособности к расширению и других недостатков (таких, например, как взаимные помехи между клави- атурой и дисководом). Все это затрудняло работу с PCjr и привело к падению интереса к нему. В течение 1984 года PCjr продавался крайне плохо, несмотря на героические попытки фирмы IBM по- мочь его успеху. В 1985 г. он незаметно прекратил свое сущест- вование. Но если 1984 г. оказался неудачным для дешевого компьютера PCjr, то для ПК высокого класса это был год успеха. Летом 1984 г. появились две высокопроизводительные модели ПК. Одной из них была модель Compaq Desk Pro, первый член семейства ПК, пре- восходивший исходную модель по производительности вычисле- ний. Вскоре после этого IBM выпустила компьютер АТ, скорость вычислений которого намного превышала соответствующие пара- метры моделей исходных компьютеров и XT, и даже нового Desk Pro. Все это время фирма IBM приспосабливалась к замечательно- му успеху семейства ПК и ко все возрастающему значению, кото- рое приобретали персональные компьютеры. Это незаметно при- вело к постепенному изменению философии руководства IBM в отношении семейства ПК. Новая тенденция "следования в едином русле" проявилась в отказе от ориентации на изолированные пер- сональные компьютеры и повороте в сторону более стандартного подхода, который приблизил семейство ПК к центру деловых ин- тересов IBM. Вот вкратце, что характеризовало каждый из упомянутых шести лет жизни ПК. # 1980 г. Планирование. IBM решает создать ПК и начинает раз- работки. # 1981 г. Сообщение. Разработка ПК закончена и всем на удив- ление в августе объявлено о создании ПК. # 1982 г. Потрясающий успех. ПК появляются в магазинах и имеют бурный успех вопреки всем ожиданиям, в том числе и со стороны IBM. # 1983 г. Жесткие диски и неприятности с бытовым ПК. В нача- ле года появляется модель XT, добавившая к ПК жесткий диск. В конце года после всеобщего ожидания сообщается о создании персонального компьютера PCjr.
# 1984 г. Неудовлетворенность возможностями бытового ком- пьютера и появление высокопроизводительной модели. Компью- тер PCjr проходит основной период своей полной разочарования истории. Летом объявлено о появлении АТ, указывающего путь к новому поколению ПК. # 1985 г. Смена караула. IBM укрепляет и улучшает линию персональных компьютеров, готовясь заменить старые модели на модель второго поколения; семейство ПК переориентируется на главное направление продукции IBM. Кратко это и есть история семейства ПК. А сейчас давайте рас- смотрим подробнее различные модели персональных компьюте- ров и их связь между собой. 1.2. Семейство IBM PC Исторический обзор, с которым вы только что ознакомились, дает некоторое представление о том, как развивалось то семейст- во ПК, которое мы имеем сейчас, а также позволяет почувство- вать, что это развитие шло путем проб и ошибок. Но вы еще не получили полного представления о каждом члене этого семейства и о том, как они соотносятся друг с другом по производительности и техническим характеристикам. Как раз это мы и собираемся сей- час сделать. Как и в предыдущем разделе, я хочу снять с себя ответствен- ность за недостаточно полное и подробное описание этого семей- ства. Здесь мы сталкиваемся с тремя ограничивающими фактора- ми. Первый из них — это фактор времени: пока я описываю ны- нешнее положение вещей, появляются новые модели. Так что вы найдете здесь данные, которые являются не самыми свежими к моменту издания этой книги. Второй фактор — это объем. Если бы мы повели разговор о каждом незначительном и дальнем родственнике этого обширно- го семейства, то генеалогическое дерево разрослось бы до таких пределов, разобраться в которых ни у вас, ни у меня не хватило бы терпения. И, наконец, третьим лимитирующим фактором явля- ется мое собственное мнение, которое подсказывает мне, какие элементы генеалогического дерева достойны вашего наибольшего внимания. Теперь с учетом этих откровенных признаний давайте рассмот- рим основные модели компьютеров, составляющих семейство ПК. Рис. 1.1 дает вам некоторое представление о семействе ПК. Верти- кальная линия представляет собой ствол генеалогического дерева, ведущий от наименее производительной модели PCjr к самой мощной машине АТ внизу дерева. Боковые ответвления ведут к моделям со специфическими характеристиками. Рис. 1.1 позволяет понять, насколько необычной или нетрадиционной является та или 14
иная модель по степени ее удаления от ствола генеалогического дерева. Мы начинаем наше путешествие вниз по стволу дерева. I lep- вым и наименее производительным членом семейства является несчастный PCjr. Чтобы получить представление о производитель- ности и возможностях каждой модели, мы будем сравнивать их с более или менее стандартным ПК, говоря о скорости вычисления и объеме дисковой памяти. По обоим этим параметрам PCjr при- мерно вдвое отстает от модели IBM PC. По объему оперативной памяти (который практически одинаков у большинства остальных моделей) PCjr также отстает от стандартного ПК в два раза. PCjr 3270 PC— ЙЖЗрс — PC Х370 Compaq Plus XT I Compaq Desk Pro AT — AT 370 Compaq-286--Compaq Desk Pro-286 Рисунок 1.1. Основное генеалогическое дерево семейства IBM PC Дальше идет исходная форма ПК — IBM PC, по своим стандар- там представляющая собой на 100% идеальную модель персо- нального компьютера фирмы IBM. Ее производительность состав- ляет примерно 250 000 операций в секунду. Объем дисковой па- мяти этой машины самый типичный — 360 000 символов (байт) на каждом из двух дисководов накопителей на гибких магнитных дис- ках,что в сумме составляет 750 000 байт. Ее оперативная память, представляющая собой рабочий объем для проведения собствен- но вычислений, также типична и составляет 250 000 байт, но может быть увеличена в два с половиной раза. Следующим шагом явилась модель XT, которая полностью совпадает с PC по скорости вычислений и объему оперативной па- мяти, но отличается гораздо большим по объему и намного более скоростным диском, который называется жестким или фиксиро- ванным, в отличии от используемого в стандартном ПК гибкого ди- ска или дискеты. Диск компьютера сочетает в себе хранилище файлов и оперативную библиотеку. Таким образом, более объем- 15
ный и скоростной диск существенно увеличивает рабочие возмож- ности машины даже несмотря на то, что модель XT имеет ту же скорость вычислений и такой же объем оперативной памяти, что и модель PC. Объем диска XT — 10 млн. символов, что более чем в 12 раз превышает объем гибкого диска модели PC. Эффектив- ная рабочая скорость жесткого диска XT в 5 раз выше, чем скоро- сть работы дискеты PC. Следующей ступенью вниз по стволу генеалогического дерева является модель Compaq Desk Pro, использующая более быстрый микропроцессор, чем модели PC и XT. Вследствие этого скорость вычислений у этой модели увеличилась. По сравнению с моделью PC производительность Desk Pro на 50% выше. (В разд. 1.3 мы с вами узнаем, что такое более быстрый микропроцессор.) Объем диска модели Desk Pro вдвое больше объема диска модели XT и составляет 20 млн.байт. Благодаря более высокой скорости вычис- лений и большему объему диска Desk Pro, кажется, еще дальше отстоит от XT, чем сам XT ушел от PC. Но на практике это совсем небольшой, хотя и очень важный шаг вперед. Следующим скачком вперед явилась модель IBM АТ. Подобно Desk Pro, в АТ используется свой микропроцессор, позволяющий повысить скорость вычислений по сравнению с моделью PC и Desk Pro. Таким образом, эффективность АТ в 5 раз превышает эффек- тивность PC и более чем в 3 раза эффекивность Desk Pro. Это уже значительное преимущество. Кроме того АТ имеет жесткий диск объемом 20 млн. байт, т.е. в 2 раза больше, чем XT, а при необ- ходимости можно использовать диски еще большего объема. И в довершение всего, АТ может увеличивать объем своей оператив-, ной памяти до 3 млн.байт и более. Последним шагом (на момент написания книги) по стволу гене- алогического дерева IBM PC можно считать модель Compaq Desk Pro-286. Desk Pro-286 сходна с моделью IBM АТ, но скорость ее процессора выше на 30%, что делает ее более эффективной. Вдо- бавок она комплектуется жестким диском объемом в 30 млн. байт. Семейство ПК включает также ряд упрощенных машин-анало- гов, которые сами по себе не представляют никакого интереса, кроме довольно низкой цены. Среди этих ПК можно упомянуть модели Tandy 1000 (аналог PC) и 1200 (аналог XT); NCR РС-4 и Zenit 150 (аналоги PC); Texas Instruments Pro (класса AT). Отклонившись от главного ствола генеалогического дерева, можно обнаружить несколько очень интересных вариаций ПК. Первая ветвь состоит из портативных машин, хотя и довольно тя- желых, так что их следовало бы назвать не "переносимыми", а "перевозимыми". Портативные ПК соединяют в себе главный ком- пьютер и экран дисплея и помещаются в довольно массивном че- модане, что v позволяет переносить их с одного места на другое, сдавать в багаж в самолете и даже отправлять посылкой. Достой- ны внимания четыре портативных ПК: исходная модель Compaq и 16
портативная модель IBM PC; переносимая Compaq Plus^ эквива- лент XT; и, наконец, Compaq Portable-286 — переносимы.^ вариант Desk Pro-286, превосходящая стандарты модели IBM AT. Несколько особняком в классе переносимых ПК стоит порта- тивная модель Data General One или DG-1. Модель DG-1 пред- ставляет собой несколько неудачную попытку уменьшить массу компьютера и сделать его переносимым в самом прямом смысле этого слова. Благодаря оригинальной конструкции DG-1 достигает 85% производительности машин класса IBM PC — немногим мень- ше стандарта. Но вдвое больший обьем диска DG-1 был героиче- ской, но неудавшейся попыткой создать действительно порта- тивную ПК. Я уверен, однако, что с развитием технологии произ- водства ПК следующие шаги будут более удачными. Сам по себе DG-1 не является особо заметным членом семейства ПК, но он представляет класс машин, которые, вероятно, вскоре будут иметь огромное значение. Наконец, мы добрались до наиболее экзотической части се- мейства ПК. Это машины, обладающие поистине необычайными возможностями. Три модели IBM заслуживают внимания, все они принадлежат к классу IBM PC, но могут иметь дополнительные функции. Так, 3270-РС может использоваться как ЭВМ класса XT, а также служить стандартным терминалом (называемым 3270), кото- рый может вести диалог с большой ЭВМ фирмы IBM. Две другие модели — это ХТ-370 и АТ-370, удивительные "малышки", могут использоваться как обычные XT и АТ, а также выполнять значи- тельную часть работы большой ЭВМ. И последняя категория компьютеров, которую нам осталось рассмотреть, — это дальние родственники ПК, компьютеры, кото- рые только частично сопоставимы с IBM PC. Среди них следует от- метить Tandy 2000, профессиональный компьютер Texas Instru- ments Pro, Wang PC, DEC Rainbow и NEC APC-IIL Откровенно го- воря, этих дальних и иногда экстравагантных родственников гораз- до больше, чем может показаться на первый взгляд. Они не представляют для нас особого интереса, но я упомянул здесь не- сколько самых известных, чтобы вы узнали об их существовании. 1.3. Семейство микропроцессоров 8086 Ключом к пониманию семейства ПК является познание мик- ропроцессора, который представляет собой рабочий "мозг" ком- пьютера. В отличие от больших ЭВМ, микрокомпьютеры, подо- бные нашему ПК, проектируются и создаются из унифицированных деталей. Почти все микрокомпьютеры включают в себя стандарт- ные компоненты, созданные независимо от компьютеров, в кото- рых они используются. Если производитель компьютеров, такой, как, например, фирма IBM, самостоятельно проектирует компьютер, что называется, с нуля, то он сам определяет параметры и технические характери- 17
стики будущей машины, включая и систему команд, и внутренний язык машины. Однако большинство микрокомпьютеров, включая и наш ПК, создается по-другому. Они получают свой "разум" (и систему команд) от одного из нескольких стандартных микропро- цессоров, предлагаемых производителями компьютерных интег- ральных схем. У фирмы IBM был достаточный выбор из несколь- ких возможных микропроцессоров, которые могли служить моз- гом ПК. Выбранный фирмой IBM микропроцессор во многом оп- ределил используемую в настоящее время систему команд, или язык ПК, а также обусловил дальнейшее направление развития ПК в будущем. Фирма IBM выбрала микропроцессор Intel 8088 в качестве ос- новы своего ПК. Intel 8088 представляет собой всего лишь один микропроцессор из большого семейства, называемого семейст- вом 8086, разработанного пионером в области кремниевых микро- схем — фирмой Intel. Выбрав 8088 для исходной модели ПК, IBM задала всему семейству своих ПК диапазон возможностей, опре- деляемый этим семейством микропроцессоров. Для того чтобы понять, что представляет собой семейство ПК (и что оно будет представлять в будущем), мы должны разобраться в основных положениях семейства их микропроцессоров — семейства 8086. Пока вы окончательно не запутались, я хотел бы пояснить, что, хотя каждый член семейства ПК IBM оборудован одним из микро- процессоров семейства 8086, прямого соответствия между этими двумя семействами нет, т.е. мы не можем говорить о том, что каждому типу ПК соответствует определенный тип микропроцес- сора. Но так как каждый ПК включает в себя одного из представи- телей семейства 8086, знакомство с этим семейством поможет нам понять направление дальнейшего развития семейства ПК. Родоначальником семейства Intel 8086 является собственно ин- тегральная схема 8086, давшая свое имя всему семейству. Интег- ральная схема 8086 была предназначена для претворения в жизнь идеи 16-разрядного вычисления, а это означает, что компьютер может одновременно оперировать 16 битами информации. Мы получим более полное представление об этом, когда будем гово- рить о компьютерных данных в гл.З. Предшествующее поколение микропроцессоров Intel (8080) было 8-разрядным и использова- лось в более простых ПК. Микросхема 8086, как 16-битовый микропроцессор, имеет го- раздо больший диапазон возможностей, чем ее предшественники. Производительность компьютера можно лишь условно обозна- чить выражениями "8-битовый","16-битовый" или "32-битовый". Характеристики каждого нового поколения компьютерных интег- ральных схем представляют собой нечто гораздо большее, чем его номинал в битах. Но битовый номинал дает представление по крайней мере о том, сколькими единицами данных компьютер может оперировать одновременно, и в этом смысле микросхема 18
8086 обладает вдвое большими возможностями, чем предшеству- ющая ей микросхема Intel 8080. Существует, однако, одна неизбежная проблема при использо- вании микросхемы 8086 в качестве основы конструкции компьюте- ра. Так, неотъемлемым качеством микросхемы 8086 является ее 16-битовая архитектура, что, к сожалению, ограничивает возмож- ности ее употребления сочетанием только с теми внешними ком- понентами компьютера, которые также способны обрабатывать одновременно 16 бит информации. Когда проектировался исход- ный тип ПК, рынок был наполнен дешевыми 8-битовыми микро- процессорами, в то время, как 16-битовые были и дефицитны, и дороги. Это было серьезным препятствием на пути тех, кто созда- вал компьютер на базе 8086-го микропроцессора. Фирма Intel нашла простое практическое решение этой про- блемы, использовав интегральную микросхему 8088, которая по своим параметрам может работать одновременно с 16 битами, но при наличии соответствующей электронной схемы передает и при- нимает только 8 бит. Это слегка снижает скоростные качества мик- росхемы 8088, но позволяет ей работать с другими 8-битовыми компонентами, более дешевыми и имеющимися в достатке. В связи с этими сугубо практическими причинами исходная мо- дель IBM PC основывалась на 16-битовом микропроцессоре с 8- разрядными шинами передачи данных. 8088-й микропроцессор стал сердцем первых четырех моделей IBM PC: PC, XT, портатив- ной PC и PCjr и двух моделей фирмы Compaq Computer: Compaq и Compaq Plus. Большинство других аналогов ПК также использо- вали микросхему 8088. Однако, когда фирма Compaq Computer захотела увеличить производительность своей третьей модели Desk Pro, они использовали более скоростной 8086-й микропро- цессор. После разработки микропроцессоров 8086 и 8088 фирма Intel начала производить усовершенствование своего семейства микро- процессоров. До этого времени все микропроцессоры, включая и эти два, зависели от других родственных интегральных микросхем, которые помогали им в работе. Специалисты фирмы Intel поняли, что выполнение вспомогательных функций отдельными электрон- ными микросхемами имеет два недостатка. Во-первых, замедля- ется скорость вычислений и, во-вторых, возрастает себестоимость компьютера. Если же вспомогательные функции будут выполнять- ся одной интегральной микросхемой как микропроцессором, то машина будет работать быстрее и станет дешевле вследствие ис- пользования меньшего количества микросхем. Эти рассуждения привели к разработке микропроцессоров Intel 80186 и 80188, которые обычно для краткости обозначаются 186 и 188. Эти два новых микропроцессора имели дополнитель- ные команды и возможности по сравнению со своими предшест- венниками, но их основным преимуществом было интегрирование в микропроцессоре вспомогательных функций. И как вы уже до- 19
гадались из цифрового обозначения этих микропроцессоров, 186-й подобно 8086-ому и "внутри", и "снаружи" представляет собой 16- битовый микропроцессор, а 188, как и 8088, является 16-битовым "изнутри" и 8-битовым "снаружи". Каждый из этих двух микропроцессоров мог использоваться для оснащения основных членов семейства ПК, однако этого не произошло. Они использовались в дальних родственниках IBM PC, включая и компьютер Tandy 2000. Ни фирма IBM, ни Compaq Computer не использовали эти микропроцессоры даже несмотря на то, что 188-й был бы естественной "начинкой" для PCjr, а 186-й идеально подходил для Compaq Desk Pro. Объяснение простое: когда 186-й и 188-й были на гребне успеха, их количества еще не- доставало для массового производства самого популярного ком- пьютера. А к тому времени, как они стали выпускаться в достаточ- ном количестве, в производстве компьютеров появились совер- шенно новые идеи. Хотя 186-й и 188-й микропроцессоры были важным (правда, мало используемым) пополнением семьи 8086, они по своим воз- можностям не намного превосходили уже сушествующие модели. Существенным шагом вперед стало создание микропроцессора 80286 — результат напряженной работы фирмы Intel, ее нынеш- няя гордость. Микропроцессор 80286 (или сокращенно 286-й) оставляет дале- ко позади своих предшественников. Во-первых, объем оператив- ной памяти, с которой он может непосредственно работать, на- много превосходит объем памяти предшествующих моделей. Если у его предшественников этот объем не превышал миллиона байт, то у микропроцессора 286 этот показатель составил уже 16 млн. байт — существенная разница! Во-вторых, микропроцессор 286 обладает такой важной особенностью, как виртуальная память, по- зволяющей пользователю работать с памятью, размер которой превышает физическую память ПК. Эти два качества значительно увеличивают производительность 286-го микропроцессора. Третьей отличительной чертой микро- процессора 286 является аппаратно-поддерживаемый режим мультипрограммирования, позволяющий одновременно решать несколько задач. Предыдущие микропроцессоры также обладали способностью мультипрограммирования, но без аппаратной поддержки, резуль- таты были ненадежными, и система часто давала сбои. Фирма IBM внедрила 286-й микропроцессор в семью своих ПК с появлением модели АТ летом 1984 г. За этим последовали ана- логи АТ, лучшими из которых были Compaq Desk Pro-286 и Compaq Portable-286. Подобно предыдущим моделям, Compaq 286 соответствовал машинам фирмы IBM и добавлял к ним не- большие, но важные возможности. Самой интересной из этих воз- можностей является "переключатель скорости", позволяющий ма- шинам Compaq-286 работать с такой же скоростью, что и АТ (про- 20
сто для эмуляции скоростей), либо на 30% быстрее, для повыше- ния производительности. Подобно 186-й и 188-й моделям микропроцессора, 286-я мо- дель включает в себя вспомогательные микросхемы и имеет большую скорость, чем предыдущие модели. С самого начала машины, оснащенные 286-м микропроцессором не использовали присущие им значительные преимущества, а использовались про- сто как более скоростные ПК, как будто они были основаны на модели 186, а не 286. Разумеется, семейство микропроцессоров Intel 8086 не закан- чивается на модели 286. Ко времени большого коммерческого успеха АТ фирма Intel уже работала над моделью 386-го процес- сора, главным преимуществом которой была возможность рабо- тать одновременно с 32 битовыми данными одновременно. Однако можно с уверенностью утверждать, что с развитием семейства 8086 будет развиваться и семейство наших ПК, полно- стью используя все преимущества, которые предоставляют новые микросхемы. Задания 1. Заметили ли вы какие-нибудь пропуски в генеалогическом дереве IBM PC? Подумайте, какие модели могли бы логично дополнить это семейство. 2. Добавляет ли включение жесткого диска в модель XT IBM PC какие-либо полезные для нас возможности? Какие виды работ легче выполнять на ПК моде- ли XT, чем на PC? Какие виды работ, недоступные модели PC, может выполнять 3. Всегда ли важна скорость вычислений? Существуют ли виды работ, для которых скоростные качества АТ не являются преимуществом перед моделями PC и даже PCjr? 21
Глава 2 ОСНОВЫ: ЧТО ТАКОЕ КОМПЬЮТЕР Сегодня компьютеры известны каждому, так широко они ис- пользуются в нашей жизни. Среди них все большее место занима- ют персональные компьютеры, такие как наш IBM PC. Повсед- невное использование этих машин делает их обычными помощни- ками, и это прекрасно. Но это не означает, что мы понимаем их, знаем, как они работают. Эта книга написана для того, чтобы облегчить вам понимание IBM PC: как он работает внутри и как это выглядит снаружи. Но прежде чем перейти к специфике IBM PC, мы должны убедиться, что понимаем принципы ее работы, знаем, что может и чего не может компьютер. Вот для этого и предназначается эта глава, объясняющая основные понятия, связанные со всеми компьютера- ми. 2.1. Мой компьютер. Модель Компьютеры основаны на простой идее моделирования, или имитации. По этому же принципу работают радио- и звуковоспро- изводящие устройства, и если мы задумаемся над этим, то лучше будем понимать наши компьютеры. Когда мы ставим пластинку на электропроигрыватель и слу- шаем музыку, то прекрасно знаем, что внутри проигрывателя нет никаких музыкантов. Проигрыватель представляет собой электрон- ную модель оркестра, имитирующую его звуки. Наши радиопри- емники и проигрыватели стали реальностью благодаря открытию, давшему возможность постичь природу звука, создать его меха- ническую или электронную имитационную модель, построить ма- шину для воспроизведения нужных звуков. То же произошло и с визуальными изображениями, получаемыми с помощью телеви- дения или кинематографа. Наши компьютеры в принципе то же самое, но они работают с числами и арифметическими действиями. Основным принципом работы компьютера является создание рабочей модели чисел и выполнение арифметических действий над ними. Если мы хотим изобрести машину для арифметических вычис- лений, то должны совместить возможности машины с моделью арифметических вычислений. Несомненно, решение этой задачи требует высокоинтеллектуальных способностей и знания матема- 22
тической теории. Самое важное — найти точку пересечения мате- матики и возможностей машины для их полного слияния. И такой точкой пересечения является идея двоичной арифметики. Числа, к которым мы с вами привыкли, основаны на числе 10. Иными словами мы используем десятичную систему счисления, в которой имеется десять базовых цифр от 0 до 9, на основе кото- рых строятся все числа. Но эта система не является единственной. Мы с таким же успехом можем пользоваться восемью цифрами или тремя, или всего лишь двумя. Математическая теория и про- стые примеры показывают, что можно записать те же самые числа в любой системе счисления. Математическая теория, однако, дока- зывает, что мы не можем обойтись менее чем двумя цифрами — двоичная система является минимально возможным носителем информации. Это было счастливым открытием. Очень легко построить маши- ну, которая моделирует двоичные числа. Двоичные числа записы- ваются с помощью двух символов: 0 и 1 (подобно тому, как деся- тичные числа записываются с помощью десятичных символов 0-9), и электротехнические детали, например выключатели, имеют обычно два устойчивых положения: "включено", "выключено". Поняв это, нам нетрудно будет с некоторой долей фантазии пред- ставить себе обычный двухпозиционный выключатель в виде мо- дели двоичной системы. Это так естественно, что даже выключате- ли питания многих машин и устройств маркированы "0" и "1", что означает соответственно "выключено" и "включено". Разумеется, от представления обычного электрического выклю- чателя в качестве двоичной системы очень и очень далеко до со- здания компьютера, способного проявлять чудеса вычисления. Расстояние действительно огромно. Но теперь нам нетрудно по- нять, как такую простую электронную модель двоичных чисел превратить в сложную машину. Это так же понятно, как и то, что, научившись в детстве писать простыми предложениями, человек, вырастая, способен писать сочинения, дипломные работы и книги. В промежутке, естественно, заключено огромное количество ра- боты, но идеи, основные принципы достаточно ясны. Вот основные принципы устройства наших ЭВМ. Информация, включая числа и арифметические действия, может быть представ- лена в двоичной форме. А электронные компоненты машины, по- добные выключателям, которые могут быть выключены или вклю- чены, уже изначально двоичны. Используя выключатели и другие свои компоненты, электронная машина может имитировать (или моделировать) числа и другие виды информации. Этих сведений вполне достаточно, чтобы получить представле- ние о том, как стало возможным создать такое чудо, как компью- тер. Но это еще ничего не объяснило нам в самих компьютерах. Мы до сих пор говорили только о кирпичах для строительства, не 23
сказав ни слова об архитектуре, ни о том, как выглядит закончен- ное здание. Об этом разговор в следующем разделе. 2.2 Устройство компьютера Существуют пять основных, ключевых, компонентов компьюте- ра: процессор, память, устройство ввода-вывода (часто обозначае- мое как I/O), дисковый накопитель и программы (см.рис.2.1). В этом разделе мы познакомимся с каждым из этих компонентов и с их основными свойствами. Остальная часть книги будет посвяще- на поистине изумительным деталям их работы. Важно отметить, что эти компоненты между собой тесно связа- ны и активно взаимодействуют. Их работа похожа на игру оркес- тра, где у каждого инструмента своя партия, свой голос, но играет этот оркестр необыкновенно слажено и дружно. г Ввод Вывод Диски kJ J Программы Рис.2.1. Пять основных частей компьютера ПРОЦЕССОР является "мозгом" компьютера, его двигателем, или, если хотите, сердцем этой чудесной машины. Именно про- цессор обладает способностью передавать наши команды (про- грамму) компьютеру. Процессор — это та часть компьютера, ко- торая "знает" как складывать и вычитать числа, как проводить про- стые логические операции. В большой ЭВМ процессор называется Центральным процессорным устройством (ЦПУ). В миниатюрных микро-ЭВМ, подобных IBM PC, процессор часто называется мик- ропроцессором. В нашей книге мы будем практически повсемест- но использовать именно этот термин. Из гл.1 вы уже знаете, что наше семейство ПК оснащено семейством микропроцессоров 8086. В этой главе мы узнаем о том, что делают микропроцес- соры, а в гл.6 поговорим об их специфических особенностях. ПАМЯТЬ — это рабочее место компьютера. Она не имеет ни- чего общего с памятью человека. Память ПК подобна письменно- 24
му столу конторского служащего, верстаку столяра или травяному полю для футбольной команды. Память компьютера - это место всей его деятельности. Сравнение с рабочим местом мне особен- но1 нравится потому, что оно помогает нам понять, когда объем па- мяти имеет существенное значение, а когда нет. Подобно разме- ру верстака, размер памяти компьютера является практическим ограничением для видов работ, выполняемых компьютером. Уме- ние и навыки мастера, как и другие факторы, разумеется, опреде- ляют его возможности, но размер его верстака также играет не последнюю роль. Это справедливо и в отношении компьютера. Поэтому часто можно слышать, что компьютеры характеризуются в основном в терминах объема их памяти, обычно в килобайтах (т.е. в тысячах байтов, об этом подробнее мы расскажем в гл. 3). Например максимально возможный объем памяти ПК типа IBM PC составляет 640 Кбайт. ВВОД-ВЫВОД (I/O) — это все то,что используется компьюте- ром для получения данных и выдачи результатов. В первую оче- редь сюда относится ввод, т.е. набор данных на клавиатуре, и вы- вод, т.е. тот результат, который компьютер выдает на экран дисп- лея или распечатывает на принтере. Всякий раз, когда компьютер получает или выдает данные, он делает это с помощью устройств ввода-вывода, которые также называются периферийными устрой- ствами. Среди всех устройств ввода-вывода имеется одно, на- столько важное и существенное для успешной работы компьюте- ра, что это заставляет выделить его в один из пяти самостоятель- ных частей компьютера. ДИСКОВАЯ ПАМЯТЬ является очень важным средством ввода- вывода: это справочная библиотека компьютера, его сейф с доку- ментацией и ящик с инструментами одновременно. Дисковая па- мять — это место хранения данных, не используемых в этот мо- мент в памяти компьютера. Данные могут храниться и в другом месте, но диск — наиболее удобное место хранения. Ведь как мы узнали из гл.1 при обсуждении семейства ПК, значительного увеличения объема диска достаточно, чтобы провести различие между высокопроизводительными (XT) и обычными (PC) ПК. ПРОГРАММЫ — последний из пяти компонентов компьютера. Это то, что заставляет компьютер работать, что приводит его к жизни, что превращает его из груды собранных в определенную конструкцию деталей в мощное орудие. Программы — это ко- манды, диктующие компьютеру ..орядок его действий. Обобщив все это, попытаемся заглянуть поглубже в каждую из этих основных составных частей, не забывая про их краткое описа- ние. Основные подробности будут изложены в последующих гла- вах. Микропроцессор — это часть компьютера, предназначенная для выполнения программ. Основная задача, стоящая перед каж- дым компьютером, состоит в выполнении определенной серии 25
действий, которую мы называем программой. Для того чтобы со- вершать свои чудеса, микропроцессор должен обладать опреде- ленными способностями, которые он использует при выполнении тех или иных операций. Первой такой способностью является возможность считывать и записывать информацию в память компьютера. Это очень важная способность, так как и программа, которую должен выполнять компьютер, и данные временно хранятся в памяти машины. Следующей способностью микропроцессора является умение распознавать и выполнять серию очень простых команд. И по- следнее — это способность передавать команды другим частям компьютера, что позволяет ему управлять всеми действиями ком- пьютера. Как вы можете себе представить, микропроцессор обладает еще многими другими возможностями. Об остальных мы более подробно поговорим в гл.6, которая посвящена тому, как микро- процессор творит свое волшебство. На протяжении всей книги мы будем говорить с вами о про- граммах и данных: о программах, которые выполняет компьютер, и о данных, с которыми он работает. Для микропроцессора очень важно отличать программы от. данных, так как первые определяют то,что он должен делать, а последние — то, с чем он будет это делать. Память, как мы уже знаем, является тем устройством, где мик- ропроцессор находит свои программы и данные в процессе вы- полнения конкретного задания. Как мы уже упоминали, память — это центр деятельности, место сосредоточения материала, с кото- рым идет работа. Чтобы понять наши компьютеры, важно знать, что память компьютера лишь временное место работы, черновик, грифельная доска, на которой пишет компьютер в процессе рабо- ты. Память компьютера не является постоянным хранилищем дан- ных, как, например, мозг человека. Вместо этого память компью- тера просто обеспечивает место для проведения вычислений. Это просто спортивная площадка, где происходит игра в вычисление. После каждой игры площадка освобождается для другой группы спортсменов и для следующей игры. В то время как микропроцессор способен отличить программу от данных, компьютерная память не может этого сделать. Для па- мяти, равно как и для многих других частей компьютера, нет ника- ких различий между программами и данными. Листок бумаги не знает того, что на нем написано, ему все равно, будет ли это лири- ческое стихотворение, цифры из нашего банковского счета или за- писка к другу. То же самое можно сказать о памяти компьютера. Только микропроцессор знает (или может определить) различие между программами и данными. Для компьютера, так же как и для устройств ввода-вывода и дисковой памяти, программа пред- 26
ставляет собой всего лишь еще одну порцию данных, порцию ин- формации для запоминания. Память компьютера скорее напоминает грифельную доску, чем лист бумаги, потому что на ней ничего не записывается навеч- но. Все, что угодно, можно записать в любую часть памяти и так же легко стереть, записав на это место новую информацию. В от- личие от грифельной доски из памяти ничего не надо стирать^ для того, чтобы записать что-нибудь новое. Сам факт записи нолзой ин- формации автоматически стирает то, что было записано в этом ме- сте до этого. Считывать информацию из памяти так же легко, как с доски или бумаги. Как микропроцессор, так и все устройства вво- да-вывода имеют естественную способность считывать информа- цию из памяти или заносить в нее новую. Микропроцессор вместе с памятью являются актерами, участ- вующими в спектакле вычисления, и сценой для этого спектакля. Но сами по себе они представляют замкнутый мир. Устройства ввода-вывода открывают для нас этот мир и позволяют общаться с ним. Как уже упоминалось, эти устройства включают в себя клави- атуру, на которой мы набираем информацию, экран, на который мы смотрим, телефонную линию, подключенную к компьютеру, а также любой другой канал связи с машиной. В общем, ввод-вы- вод — это окно компьютера в окружающий его мир, разрываю- щее замкнутый круг цепи микропроцессор-память, которая в про- тивном случае была бы бесполезной. Мы уделим много времени и места различным устройствам ввода-вывода в последующих главах книги. Короче говоря, мы можем утверждать, что все устройства вво- да-вывода, с которыми работает компьютер, нацелены на нас с вами. Так или иначе, все, что поступает в компьютер, особенно че- рез клавиатуру, исходит от нас. И все, что компьютер выдает на экран, на принтер или куда-либо еще, тоже предназначено для нас с вами. Но существует особая категория устройств ввода-вы- вода, предназначенная только "для служебного пользования" са- мого компьютера: устройства дисковой памяти. Дисковая память, как мы уже говорили, — это лишь один из видов ввода-вывода, один тип устройства, используемого компью- тером для ввода данных в память или для вывода данных из па- мяти. Есть, однако, одно существенное отличие устройств диско- вой памяти от практически всех остальных устройств — информа- ция, записанная в дисковой памяти, не может быть считана или за- писана нами, и она не для нас: она может быть испо>._^ована толь- ко самим компьютером. Другие устройства ввода-вывода являют- ся интерфейсом, т.е. средством взамодействия между нами и компьютером. Компьютер "видит" то, что мы набираем на клавиа- туре, мы видим то, что компьютер воспроизводит на принтере или на экране дисплея. Это справедливо и для устройств дисковой па- мяти. 27
Кроме этого дисковая память является библиотекой компьюте- ра, его ящиком с инструментами и складом. Именно там компью- тер хранит инструкции (наши программы), сырье (наши данные) и любую другую необходимую информацию. Мы с вами детально рассмотрим дисковую память ПК, так что вы сможете понять принцип ее работы, ее функции и то, как мы можем сохранить ин- формацию, записанную на дисках нашего компьютера. И, наконец, перейдем к программам. Программы говорят компьютеру, что делать, и являются самой важной частью при использовании вычислительной техники потому, что компьютеры "потребляют" программы в качестве "топлива". Конечно это не совсем так потому, что если двигатель сжигает свое топливо и не может использовать е^о повторно, то компьютер может использо- вать ту же самую программу не один раз. Но даже если компью- тер не "потребляет", не "сжигает" программы, у наших ПК неук- ротимый аппетит, такой же, какой у нас на газеты, журналы и кни- ги. Люди могут бесконечно долго читать и наслаждаться написан- ной книгой, тан же и компьютер может бесконечно долго пользо- ваться одной программой. Но как людям постоянно нужны новые книги, новые газеты и новые журналы, так и компьютерам посто- янно нужны новые программы. Всегда находится какой-либо но- вый вид работы для наших ЭВМ, следовательно, всегда возникает необходимость в новых программах. Что интересно, существуют две разновидности программ. Они называются системными и прикладными программами, и мы дол- жны хорошо отличать одни от других. Все программы выполняют какую-либо работу. Системные программы выполняют работу, об- легчающую пользование компьютером, ведь устройство компью- тера настолько сложное, что мы не можем заставить его работать без помощи специальных программ. Прикладные программы вы- полняют наши задачи, будь то сложение колонки чисел или про- верка правописания того, что мы набрали на клавиатуре компью- тера. Одним словом, прикладные программы выполняют наши за- дания, а системные программы помогают компьютеру это сде- лать. Некоторые из системных программ, необходимых IBM PC в ра- боте, встроены в машину. Это та часть компьютера, которая назы- вается постоянным запоминающим устройством (ПЗУ). Програм- мы ПЗУ доступны только для чтения (в отличие от оперативной памяти). Эти системные программы осуществляют контроль, ока- зание помощи и необходимых услуг прикладным программам. Эти программы называются базовой системой ввода-вывода, или BIOS. Их часто называют ROM-BIOS. Другие системные программы создаются на основе программ ROM-BIOS и обеспечивают более высокий уровень сервисной под- держки. Операционные системы (например известная дисковая 28
операционная система, или DOS) представляют собой образцы программ более высокого уровня, обычно не включаемых в ПЗУ ПК. Системные программы послужат нам одной из основных тем для беседы на протяжении всей книги. Хотя прикладные програм- мы имеют большое значение, и мы еще уделим им достаточно внимания, системные программы представляют для нас больший интерес в связи с тем, что наша цель — понять принцип работы и возможности ПК. И то, и другое тесно связано с системными про- граммами ПК. Устройство компьютера, которое мы с вами рассмотрели в этой главе, послужит отправной точкой в нашей дальнейшей беседе, трамплином для прыжка в глубины компьютерных знаний. Преж- де чем отправиться дальше, давайте ненадолго задумаемся над тем, что компьютер, и в частности, его микропроцессор, может сделать для нас и чего он сделать не может. Задания 1. Мы говорили о том, что компьютер "моделирует" арифметические вычис- ления так же, как радиприемник или проигрыватель "моделирует" звук. Сущест- вуют ли другие аппараты, работающие по принципу "моделирования"? Мы мо- жем сказать, что телевидение моделирует как звук, так и изображение. Моде- лируют ли наши компьютеры что-либо помимо чисел? 2. Представьте себе, будто бы электрические выключатели имеют совер- шенно другую конструкцию. Вместо двух положений ("включено" и "выключе- но") у них имеется теперь три положения. Можно было бы и в этом случае сде- лать из них вычислительную машину? Было бы между ними коренное различие или они различались бы только в деталях, имея тот же принцип работы? 3. Назовите несколько любых компьютерных программ, с которыми вы зна- комы. Какие из них вы можете отнести к системным программам, а какие к прикладным? Как вы думаете, существует ли четкая линия разделения программ на системные и прикладные? Существуют ли программы, заключающие в себе признаки тех и других? 29
Глава 3 ДАННЫЕ! В этой главе мы познакомимся с основами компьютерных дан- ных и с их основными форматами, используемыми в IBM PC. Лишь после этого мы будем готовы к пониманию того, с чем на самом деле работает компьютер — с данными! 3.1. Биты, байты и символы Базовая единица компьютерных данных — наименьшая и самая основная — называется бит. Слово бит является удобным сокра- щением неуклюжего английского выражения "binary digit", т.е. "двоичная цифра". Мы знакомы с десятью десятичными цифрами 0-9, применяемыми для записи чисел. Двоичные цифры, или би- ты, это — в принципе, то же самое, с той лишь разницей, что су- ществует десять различных десятичных цифр и только две двоич- ных — нуль и единица, которые обозначаются, естественно, как 0 и 1. Биты 0 и 1 означают "выключено" и "включено", "ложь" и "ис- тина", "нет" и "да". У них есть и очевидные числовые значения, как вы совершенно справедливо могли предположить: бит 0 и в самом деле обозначает нуль, или ничего, а 1 обозначает единицу. Как мы говорили в гл.2, именно понятие бита делает создание и работу компьютера возможной. Все зависит, однако, от того, мо- жем ли мы сочетать используемую нами информацию с доступ- ной компьютеру "моделью" информации. А это, в свою очередь, определяется тем, можем ли мы построить модель информации из простых битов 0 и 1. Как здравый смысл, так и серьезная математическая теория подсказывают нам, что бит — это наименьший возможный квант информации. Биты служат строительными блоками, с помощью которых мы можем строить более крупные и более значимые кванты информации и работать уже с ними. Сами по себе отдель- ные биты не представляют для нас большого интереса, и мы бу- дем вспоминать о них лишь от случая к случаю. Только там, где биты выстраиваются в строки, начинается более интересная и по- лезная для нас область. Самым важным сочетанием битов являются байты. Байт — это 8 битов, рассматриваемые как единое целое. Байты играют важ- ную роль как основные единицы компьютерных данных. Вы уже, несомненно, привыкли к тому, что размер памяти компьютера или объем диска выражается в байтах (или килобайтах, как мы вскоре 30
узнаем). Это обусловлено тем, что байт — действительно основная единица данных. Бит можно сравнить с атомом, с мельчайшей песчинкой информации, тогда как байт — это кирпич, строитель- ный блок данных. Наши компьютеры работают в основном с байтами. Они могут работать с целыми совокупностями байтов или с отдельными бита- ми внутри байта, но в основном они всетаки предназначены для работы с байтами. Как мы уже говорили, в байте содержится 8 битов, т.е. 8 нулей или единиц, 8 положений "включено" или "выключено". С по- мощью математических расчетов определяем, что если у нас име- ется восемь каких-либо единиц (битов) и каждая из них может принять значение 0 либо 1, то число возможных комбинаций битов в одном байте составит 2 , т.е. 256. Таким образом, байт может принимать одно из 256 значений или комбинаций битов. Это число нам еще не раз встретится в книге, так что советую его запомнить. Нас нечасто будут интересовать единицы, меньшие чем байт, но иногда нам придется иметь дело с отдельными битами внутри байта, особенно когда мы перейдем к специальным техническим вопросам. Дополнительную информацию об отдельных битах можно получить из подраздела "Биты внутри байтов и слов"; ###Технические подробности Биты внутри байтов и слов Когда нам нужно рассмотреть биты внутри байта, появляется необходимость их как-то обозначить. Для этого их обычно нуме- руют справа налево (начиная с младшего бита) от нуля до семи, как показано в таблице ниже. Номер бита Числовое значение 76543210 1 1 1 . 2 1 . . 4 . . . . 1.... . 8 ... 1 ... . 16 .1................ 32 • 1................. 64 1........; . 128 Может показаться странным нумеровать биты справа налево, да еще начиная с нуля, но для этого имеется веская причина. Но- мер бита — это также и степень, в которую необходимо возвести число 2, чтобы получить такое значение, чтобы значение 1 этого бита оказалось на том или ином месте (когда мы рассматриваем байты и биты внутри него как число). Например: третьему биту со- 31
ответствует значение 8, так как третья степень числа два — 8. Та- кая же схема применяется и тогда, когда мы рассматриваем два байта как одно машинное слово. В этом случае мы применяем сквозную нумерацию битов от 0 до 15. Но, повторяю, это делается только тогда, когда мы рассматриваем пару байтов как единое целое, т.е. 16-битовое машинное слово. ### Байты внутри нашего компьютера — это необработанные дан- ные, которые могут получить самое разнообразное применение. Мы используем наши ЭВМ для работы как с числами, так и с тек- стом (таким как слова, которые вы сейчас читаете). Байты исполь- зуются как строительные блоки для составления как чисел, так и текста. В самом байте или в любой другой единице данных нет еще ничего, что давало бы возможность трактовать их как числовые или текстовые данные. Все зависит от той работы, которую мы вы- полняем на компьютере. Если мы работаем с числами, то байты в нашем компьютере рассматриваются как числа и сочетания битов внутри байта получают числовую интерпретацию. С другой сторо- ны, когда мы работаем с текстовой информацией, байты итерпре- тируются как символы, с помощью которых записана текстовая ин- формация. Каждый байт представляет собой один знак текста. Короче говоря, с помощью наших программ мы работаем с байтами как с числами или буквенными знаками в зависимости от наших потребностей. В самом деле, байты — это сырая глина, из которой мы можем лепить либо числа, либо буквенные знаки, ис- ходя из наших задач. Сочетания битов не уникальны и никак не не- сут сами по себе того значения, которое мы в них вкладываем. Одно и то же сочетание битов может быть, например, буквой А или числом 65 в зависимости от того, для чего мы его используем, Ниже мы поговорим о том, что байты могут использоваться как числа или буквы и что несколько байтов, соединенных вместе, мо- гут рассматриваться как более сложные числа или цепочки букв. Этому мы посвятим весь остаток настоящей главы. О том, как бай- ты могут использоваться в качестве отдельных символов и обо всех удивительных символах, с которыми может работать наш ПК, мы поговорим особо, в гл.4. Это настолько интересная и благодат- ная для беседы тема, что мы вынуждены посвятить ей целую гла- ву. Прежде чем перейти к более детальному обсуждению вопро- са интерпретации данных, нам необходимо остановиться на одном термине, который будет время от времени появляться в нашем повествовании, термин этот — слово. В то время как байт является основной и наиболее удобной операционной единицей наших ком- пьютерных данных, иногда появляется необходимость одновре- менно оперировать сразу двумя байтами, так как компьютер име- 32
ет дело одновременно не с8, ас 16 битами данных. Для этой па- ры байтов необходимо название, и был выбран термин машинное слово. В данном случае это чисто технический термин, означаю- щий 16 бит или 2 байта одновременно. У этого термина нет ничего общего со словом "слово" в обычном его понимании, поэтому будьте с ним осторожны. Мы нечасто будем употреблять этот термин в книге, но когда вы его встретите, не забудьте, о чем идет речь. Кстати, если вы когда-нибудь слышали, что компьюте- ры иногда классифицируются как "столько-то битовые" — 8-, 16- или даже 32-битовые, знайте, что речь идет о числе единиц дан- ных, с которыми компьютер может оперировать одновременно. Наше семейство ПК целиком состоит из 16-битовых компьютеров, так как они могут обрабатывать одновременно 16 бит данных, 16 бит — это размер машинного слова наших компьютеров. Несмот- ря на это большую часть времени наши компьютеры и их про- граммы оперируют лишь отдельными байтами, т.е. 8 битами од- новременно. И, наконец, еще один термин, относящийся к компьютерным данным, — килобайт, или К. Часто очень удобно округлять числа, особенно если речь идет о больших числах. Наши компьютеры имеют дело с огромным ко- личеством байтов, так что люди привыкли считать компьютерные данные в круглых числах. Но так как компьютеры используют двоичные данные, то круглые числа являются круглыми числами в смысле двоичной системы и только приближаются к круглым в нашей обычной десятичной системе. Загадочным круглым числом является 1024 - результат возведения числа 2 в десятую степень, т.е. истинно круглое число в двоичной системе. Оно также доста- точно близко подходит к круглому числу 1000 в десятичной систе- ме и по этой причине используется довольно часто. Это число 1024 называется К, или иногда кило (заимствование из метрической системы мер, где оно обозначает тысячу). Таким образом, 1024 байта составляет килобайт, или Кбайт, или иногда просто 1К. Когда речь идет, допустим, о 64К, это означает 64 раза по 1024, что соответствует числу 65536. Имейте в виду, что термин К иногда используется в точном значении, а иногда в приближенном. Точное значение К соответст- вует 1024, а приближенное — около 1000. Мы должны знать еще один термин — мега. Это К раз по К, т.е. 1024, умноженное на 1024, что составляет ровно 1 048 576. Это примерно 1 млн., т.е. один мегабайт это миллион байтов. В разго- воре вы можете услышать: " В моей АТ диск на 32 Мбайт"; так люди употребляют этот термин. Теперь, после такого небольшого лирического отступления, мы пойдем дальше к познанию о гроз- ной щестнадцатеричной системы и продолжим изучение числовых данных. 2 - 6472 33
# # # ^^Технические подробности 3.2. Изучаем шестнадцатеричную систему Если вы хотите понять тонкости работы любого ПК, вам необхо- димо иметь достаточное представление о специальной компью- терной системе счисления, которая называется шестнадцатеричной системой. Знать эту систему совершенно необязательно для поль- зователя компьютером, но если вы хотите понимать вашу машину и наиболее полно использовать ее самые скрытые возможности, включая отладочную программу DEBUG, являющуюся частью DOS, то вы должны разбираться в шестнадцатеричной системе, о которой мы и будем вести речь в этом разделе. Как видите, мы обозначили этот раздел грифом "Технические подробности", что- бы выделить более специальную и сложную для понимания часть материала. В двух словах, шестнадцатеричная система — это простое ре- шение сложной проблемы: точное представление данных в ком- пьютере. Как мы уже говорили, наименьшими строительными блоками компьютерых данных являются биты, которые представляют зна- чения 0 или 1. Если мы запишем компьютерые данные в их двоич- ной форме, т.е. в виде битов, то получим довольно длинную строчку нулей и единиц. Запись одного байта в двоичной системе займет довольно много места, например 01010101. Для того чтобы записать слово "шестнадцатеричный", потребуется 80 бит. Обыч- ная дискета вмещает около 3 млн. бит записи. Для того чтобы ввести точные данные в ПК, нам нужно средство, позволяющее записать все биты и сделать это не таким длинным и утомитель- ным способом, как предлагает нам двоичная система. И вот тут-то нам на помощь приходит шестнадцатеричная система. Шестнадцатеричная система — это краткая запись двоичной но- тации, при этом одна шестнадцатеричная цифра обозначает четы- ре двоичные, т.е. четыре бита. Если брать отдельные биты, то у них только два значения: 0 и 1. Если мы сгруппируем их в пары, то получим четыре возможные комбинации значений битов в па- ре: 00, 01, 10, 11. Продвигаясь на два шага вперед и группируя биты по четыре, мы получаем уже 16 возможных комбинаций из 4 битов: от 0000 до 1111 (математическая сущность этого заключает- ся в том, что число различных комбинаций двух значений четырех битов составляет число два в четвертой степени, т.е. 16). В нашей повседневной десятичной системе счисления мы ис- пользуем 10 цифровых символов, от 0 до 9, представляющих 10 числовых значений. Затем мы используем эти цифры для записи более крупных чисел, например, 100. Этот же принцип применяет- ся и при записи двоичного числа. Эта же идея применяется и в шестнадцатеричной системе, но в отличие от двоичных цифр или 10 десятичных мы используем 16 различных шестнадцатеричных цифр, имеющих 16 различных числовых значений. В шестнадцате- ричной системе применяются цифровые символы от 0 до 9, имею-
щие те же числовые значения, что и в десятичной системе, и еще 6 особых символов для выражения остальных 6 числовых значе- ний. Они обозначаются с помощью букв А, В, С, D и F. Эти симво- лы имеют значение чисел, идущих после девяти: А — 10, В — 11 и так далее до F — 15. Каждая из шестнадцатеричных цифр обозначает числовое зна- чения от 0 до 15, но также представляет собой комбинацию из 4 бит. Например, А — это комбинация 1010, F — 1111. Таб.3.1 со- держит все 16 цифр шестнадцатеричной системы, их эквиваленты в десятичной системе и запись в двоичной системе, т.е. комбина- ции из 4 бит. Существует два подхода к этим шестнадцатеричным цифрам и к комбинации из 4 бит, стоящей за каждой из них. Важно видеть разницу между этими подходами. Это различие относится ко всем компьютерным данным, о которых мы говорили в гл.2 и разд.3.1. При рассмотрении шестнадцатеричного числа, например В, нас может интересовать либо его числовое значение (т.е. 11), либо комбинация битов в нем (т.е. 1011) безо всякого числового значе- ния. Обратите внимание на то,что одни и те же компьютерные данные могут иметь различные значения в зависимости от нашего подхода к ним. Таблица 3.1. Цифры шестнадцатеричной системы Шестнадцате- Десятичные Двоичные Числовое ричные цифры эквиваленты эквиваленты значение 0 0 0000 Нуль 1 1 0001 Один 2 2 0010 Два 3 3 0011 Три 4 4 0100 Четыре 5 5 0101 Пять 6 6 0110 Шесть 7 7 0111 Семь 8 8 1000 Восемь 9 9 1001 Девять А 10 1010 Десять В 11 1011 Одиннадцать С 12 1100 Двенадцать D 13 1101 Тринадцать Е 14 1110 Четырнадцать F 15 1111 Пятнадцать Вы можете спросить, в чем преимущество шестнадцатеричной системы? Легко понять, что двоичная система очень неудобна и громоздка, и требуется нечто более компактное. Но почему именно шестнадцатеричная? Почему 4 бита одновременно, если это приводит нас к совершенно необычным цифрам от А до F? Ответ заключается в том, что шестнадцатеричная система __ ра- зумный компромисс между тем, что удобно машине, и тем, что удобно нам с вами. Так как наиболее распространенная единица 35
информации — это байт, то шестнадцатеричная система может легко представить все биты в байте с помощью всего 2 шестнад- цатеричных цифр, каждая из которых обозначает 4 из 8 битов од- ного байта. Эта система логично вписывается в основную схему на- ших компьютерных данных. До сих пор мы говорили об отдельных шестнадцатеричных цифрах, но часто приходится иметь дело с большими числами, вы- раженными в этой системе. Ниже мы еще будем вести речь, в частности, об адресах памяти в семействе ПК, в которых возникает необходимость иметь дело с 4- и даже 5-значными числами в ше- стнадцатеричной системе. Поэтому мы должны получить пред- ставление о больших шестнадцатеричных чисел и навыки выполне- ния некоторых арифметических вычислений с ними. Арифметические действия в шестнадцатеричной системе, разу- меется, схожи с действиями в десятичной системе, но значение чи- сел различное. Самое большое однозначное десятичное число - это девять (9), а следующее за ним число — десять (10). Тот же принцип применяется в шестнадцатеричной системе (или в систе- ме, основанной на любом другом числе): самое большое одно- значное число — это F (15), за ним следует 10 (что обозначает число 16), затем 11 (17) и т.д. Двух шестнадцатеричных цифр вполне достаточно для выраже- ния всех возможных комбинаций битов в байте. Так как в байте 8 битов, то число их возможных комбинаций составит два в восьмой степени, т.е. 256 различных комбинаций на один байт, от 00000000 до 11111111. В шестнадцатеричной системе 00000000 записывается как 00, а 11111111 — как FF. Первые 4 бита обозначаются первой шестнадцатеричной цифрой, а последние 4 — второй. Для перевода любой комбинации бит и их шестнадцатеричных эквивалентов в десятичную систему воспользуемся табл.3.2. Эта таблица может пригодиться, когда мы имеем дело с призвольны- ми данными, выраженными в битах или шестнадцатеричной систе- ме. Когда нам нужно найти числовое выражение некоторой ком- бинации шестнадцатеричных цифр (а мы несколько раз столкнем- ся с этим в нашей книге), то нам необходимо знать, как перевести шестнадцатеричные числа в десятичные, и как выполнить простые арифметические действия в шестнадцатеричной системе. / Сначала давайте посмотрим, как можно найти значение шест- надцатеричного числа. Для этого вспомним, как находить значение десятичного числа, например 123. Это означает 100 + 20 + 3. Каждая левая цифра десятичного числа имеет в 10 раз большее значение, чем цифра справа от нее. Тот же принцип применяется и в шестнадцатеричной системе, только умножать нужно не на 10, а на 16. Если мы будем определять значение шестнадцатеричного числа 123, то его можно представить как 3 + 2x16’ + 1х162. В сум- ме получается 291 в десятичной системе. В табл.3.2 значения шестнадцатеричных чисел записаны в 5 ле- вых колонках. Если вы хотите перевести шестнадцатеричное число 36
в десятичное, вы можете воспользоваться числами из табл.3.2. На- пример, чтобы перевести шестнадцатеричное число F3A в десяти- чное, мы найдем значение А в первой колонке (10), значение 30 во второй колонке (48) и значение F00 в третьей колонке (3840). Сложив все эти значения, получим 3898. Это и будет десятичным эквивалентом шестнадцатеричного числа F3A. Таблаца 3.2. Значения шестнадцатеричных чисел. 16 10 16 10 16 10 16 10 16 10 1 1 10 16 100 256 1000 4096 10000 65536 2 2 20 32 200 512 2000 8192 20000 131072 3 3 30 48 300 768 3000 12288 30000 196608 4 4 40 64 400 1024 4000 16384 40000 262144 5 5 50 80 500 1280 5000 20480 50000 327680 6 6 60 96 600 1536 6000 24576 60000 393216 7 7 70 112 700 1792 7000 28672 70000 458752 8 8 80 128 800 2048 8000 32768 80000 524288 9 9 90 144 900 2304 9000 36864 90000 589824 А 10 АО 160 А00 2560 А000 40960 А0000 655360 В 11 ВО 176 ВОО 2816 вооо 54056 ВОООО 720896 С 12 СО 192 СОО 3072 сооо 49152 СОООО 786432 D 13 DO 208 D00 3328 D000 53248 D0000 851968 Е 14 ЕО 224 Е00 3584 Е000 57344 Е0000 917504 F 15 F0 240 F00 3840 F000 61440 F0000 983040 Чтобы перевести десятичное число в шестнадцатеричное, мы будем не складывать, а вычитать. Например, чтобы перевести десятичное число 1 000 000 в шестнадцатеричное, мы найдем наи- большее число, не превышающее наше десятичное. В данном случае это будет F0000 в конце последней колонки. Мы вычитаем десятичное значение этого числа (9 830 040) из заданного нами и продолжаем такие вычитания до тех пор, пока у нас ничего не ос- танется. Затем записываем подряд шестнадцатеричные значения тех десятичных чисел, которые мы вычитали. Эта комбинация шестнадцатеричных цифр и будет шестнадца- теричным эквивалентом нашего десятичного числа. В данном слу- чае это будет число F4240. К счастью, есть другая возможность перевода десятичных чи- сел в шестнадцатеричные и наоборот. Это не обязательно делать вручную, в этом может помочь, в частности, программа Sidekick фирмы Borland International, которая включает в себя калькулятор перевода шестнадцатеричных чисел в десятичные и обратно, а также выполняющая арифметические действия в той и другой сис- теме. Еще одну возможность предоставляет язык Бейсик. Предлага- ем вам две небольшие программы, демонстрирующие способ- ность Бейсика легко переводить шестнадцатеричные числа в деся- тичные: 37
W ’ Перевод шестнадцатеричного числа в десятичное 30 INPUT "Введите шестнадцатеричное число ", Х$ 40 PRINT "Десятичный эквивалент равен"; VAL ("&Н" + Х$) 50 GOTO 30 и наоборот: W ' Перевод десятичного числа в шестстнадцатеричное 30 INPUT "Введите десятичное число ", X 40 PRINT "Шестнадцатеричный эквивалент равен"; НЕХ$(Х) 50 GOTO 30 Если вам когда-нибудь придется выполнять какие-либо вычис- ления с шестнадцатеричными числами, вы можете воспользовать- ся калькулятором Sidekick или способностью языка Бейсик выпол- нять действия с десятичными числами, а также, как видно из при- веденных здесь программ, переводить десятичные числа в шест- надцатеричные и наоборот. Если же вы будете вынуждены прово- дить вычисления с шестнадцатеричными числами вручную или просто захотите проверить свои способности, вы найдете таблицы сложения, вычитания и умножения шестнадцатеричных чисел в приложении В. Эти таблицы составлены с помощью программы HEXTABLE, приведенной в приложении А. ### 33. Стандартные числа Вследствие того, что числа играют особую роль в работе вычис- лительной техники, нам необходимо рассмотреть все виды чисел, с которыми может оперировать компьютер. Мы начнем этот раз- дел с простых числовых форматов, которые составляют основной числовой репертуар ПК. Далее, в следующем разделе мы пого- ворим о более экзотических числах, с которыми может работать компьютер, если мы добавим ему некоторые необходимые каче- ства. Но пока мы остановимся на видах чисел, которые по своей природе являются самыми удобными для ПК. Вы можете удивиться, узнав, что исходные возможности ПК по- зволяют ему работать только с целыми числами, к тому же не с самыми большими. Существует только два основных вида чисел, с которыми компьютер может работать без предварительной под- готовки: целые числа размером в один байт и целые числа разме- ром в два байта, или в машинное слово. Персональные компьютеры модели IBM PC, как вы уже знаете, называются 16-разрядными, или 16-битовыми компьютерами. На практике это выражается в том, что принципиальная конструкция ПК (а также микропроцессора, являющегося его мозгом) основа- на на возможности одновременной обработки 16 бит (2 байт). Все "врожденные" способности ПК к вычислению ограничиваются 38
только одинарными 8-битовыми байтами или 16-битовыми (2-бай- товыми) машинными словами. С помощью умных программ ПК может работать с более крупными единицами, например путем соединения двух 16-битовых слов в одно 32-битовое. Но это мо- жет быть сделано, повторяю, только при соответствующем про- граммном обеспечении. Когда мы говорим о "врожденных" спо- собностях ПК, мы имеем в виду только его умение работать с 8- и 16-битовыми единицами. Насколько велики могут быть 8- и 16-би- товые числа? Как мы уже знаем, 8-битовый байт может иметь только 256 значений, т.е. два в восьмой степени, что и составляет 256. 16-битовое слово может иметь два в шестнадцатой степени числовых значений, т.е. 65536, что тоже не очень много. Это на- кладывает определенные ограничения на тот диапазон чисел, с ко- торыми мы можем работать при помощи байтов и слов (если вы хотите узнать более подробно о двухбайтовых словах и о более длинных форматах целых чисел, вы должны познакомиться с по- нятием внешней памяти — в подразделе "Как хранятся слова" в гл.7). Каждый из этих способов представления целых чисел может интерпретироваться двояко, что удваивает число различных число- вых форматов, которые мы имеем. Эти интерпретации зависят от того, имеем ли мы дело с отрицательными числами. Если мы ра- ботаем только с положительными числами, то в нашем распоря- жении весь диапазон значений каждого из этих представлений це- лых чисел. Для целого числа, представленного одним байтом, ди- апазон охватывает числа от 0 до 255, включая все 256 возможных комбинаций битов в байте; для 2-байтового слова диапазон целых чисел равен 0-65535. С другой стороны, если нам приходится иметь дело и с отрица- тельными числами, мы можем располагать только половиной всех числовых значений, так как другая половина отдается отрицатель- ным числам, т.е. мы можем работать только с числами, вдвое меньшими, чем в первом случае. Для байтов диапазон числовых значений будет лежать в пределах -128 до +127 включительно, для слов от -32768 через 0 до + 32767. Таблица 3.3. содержит весь диапазон чисел, входящих в че- тыре формата целых чисел. Таблица 3.3. Диапазон форматов целых чисел 1 байт 2 байта Целое число без энакаа 0 . . . 255 0 . . . 65535 Целое число со знаком -128 ... +127 -32768 ... +32767 39
Мы не можем увеличивать число положительных значений за счет отрицательных. Более полное представление о работе с отри- цательными числами вы получите ниже, в подразделе "Способ выражения отрицательных чисел". Обратите внимание на то, что диапазон отрицательных чисел на единицу больше положитель- ных: есть -128, но нет + 128; это просто особенность работы с от- рицательными числами. Как мы уже говорили, микропроцессор внутри нашего персо- нального компьютера может выполнять все арифметические дей- ствия — сложение, вычитание, умножение и деление — с этими четырьмя форматами целых чисел, но на этом и заканчиваются основные вычислительные способности ПК. Вы можете догадаться, что большинство программ не могут обойтись только этими четырьмя простыми форматами целых чи- сел. Например, Бейсик использует три вида чисел. Один из них, называемый целым числом, является одним из наших четырех форматов (2-байтовый формат слова со знаком). Два других, на- зываемые одинарная точность и двойная точность, созданы для расширения исконных возможностей ПК. Мы поговорим о них в разд. 3.4. Способ представления отрицательных чисел Отрицательные числа представлены в ПК в дополнительном коде в двоичной системе счисления. Этот чем-то похоже на ста- рый прием "занимаем и переносим", известный с детства, с той поры, когда мы получали первые навыки сложения и вычитания. Лучше всего объяснить этот прием на примере с десятичными числами, причем мы сделаем эти десятичные числа разрядными. Это соответствует фиксированной длине одно- или двухбайтовых двоичных чисел, которыми оперирует ПК. В наших цифровых десятичных числах 0 записывается как ООО, а 1 — как 001. Вычитая 001 из 001, получаем 000. А как можно еще раз вычесть 001, чтобы получить -1? Мы можем сделать это, зани- мая от воображаемой 1, стоящей на четвертом месте. Представим себе, что 000 (и все другие положительные числа) имеют впереди себя цифру 1, от которой и можно занять, т.е. (1)000 от О 001 вычитаем 1 999 получаем -1 Таким образом, -1 представляется в виде 999, -2 в виде 998 и т.д. Положительные числа начинаются с 000, затем идут 001, 002 и т.д. до 499. Отрицательные идут от 999 (т.е. -1), далее 998 (-2) и 40
т.д. до 500, что в действительности означает -500. Точно такой же прием используется и в нашем компьютере. Обратите внимание на то, что значение числа зависит от того, считаем ли мы его числом со знаком или без знака. Число 999 со знаком означает -1; число 999 без знака означает 999. 3.4. "Длинные" числа Очень часто в процессе вычисления приходится выходить за пределы целых чисел, с которыми непосредственно работает процессор ПК. Занимаемся ли мы финансовым планированием в элек-тронной таблице, выполняем ли инженерные расчеты или подводим баланс нашей чековой книжки, нам приходится сталки- ваться с более крупными числами, чем те целые , о которых мы говорили до сих пор. Даже когда речь идет о деньгах, эти целые числа не в состоянии выразить сумму, превышающую 655 долл, и 35 центов. Поэтому нам нужны числа другого порядка. Существует две возможности заставить ПК работать с гораздо большим числовым диапазоном. Давайте поговорим сначала о са- мих числах, а затем о том, как производить вычисления с этими числами. Первый способ расширения диапазона чисел, которыми может оперировать ПК, состоит в простом удлинении целых чисел. Мик- ропроцессоры умеют работать с 1- и 2-байтовыми целыми числа- ми, поэтому нас не удивит существование 3-, 4-, 5-байтовых и т.д. чисел. Наиболее удобная длина в этом случае составляет 4 байта, и это дает нам диапазон чисел свыше плюс или минус 2 000 000 ООО. Это очень много, но еще не предел. Для того чтобы оперировать дробными числами или числами очень большой длины, используется понятие плавающей запятой. Плавающая запятая действует по принципу, известному нам со школьной скамьи, — по принципу экспоненциального формата, т.е. мантиссы. По этому принципу число представляется в виде двух частей: одна часть соответствует цифрам, составляющим это число, а другая часть указывает место запятой в десятичной дро- би. Так как запятая может свободно перемещаться, числа с плава- ющей запятой могут быть бесконечно большими, астрономически- ми числами или очень малыми дробями. Неважно, насколько ве- лики или малы числа, важно, что они точные, потому что цифры, определяющие точность числового значения, не зависят от цифр, определяющих местоположение десятичного знака. В языке программирования Бейсик числа, известные как числа с одинарной и двойной точностью, являются форматом с плавающей запятой. Различие между ними заключается в том, что числа с двойной точностью имеют больше цифр, определяющих точность. В других языках программирования также используется прием с плавающей запятой. 41
Программы электронных таблиц, такие как Lotus 1-2-3, также используют плавающую запятую для выражения чисел, так как она обеспечивает большую гибкость и точность в вычислениях. Есть два пути расширения числового диапазона компьютера - более длинные целые числа и плавающая запятая. Но, как мы уже говорили, микропроцессор компьютера, его "мозг", изна- чально в состоянии оперировать только четырьмя форматами про- стых чисел, о которых рассказывалось в разд. 3.3. Как же выпол- нить вычисление с расширенными форматами? На это есть два от- вета: с помощью программого обеспечения и с помощью допол- нительной аппаратуры. Самым простым и обычным решением являются программы. Все языки программирования, включая Бейсик, и почти все вычис- лительные программы, включая Lotus 1-2-3, содержат соответст- вующие подпрограммы выполнения вычислений с числами с пла- вающей запятой или с числами больших форматов. Эти подпрог- раммы используют основные арифметические и логические спо- собности ПК для проведения более сложных вычислений с боль- шими форматами. Однако это дается не так-то легко. В то время как ПК может выполнять вычисления с доступными ему целыми числами в высоком скоростном режиме — обычно на одну опе- рацию уходит не более нескольких миллионных долей секунды, — то подпрограмма с плавающей запятой на такое же вычисление тратит в сотню раз больше времени просто потому, что подпрог- рамме требуется время для осуществления сотни элементарных шагов. Для многих видов работ скорость вычислений на основе этих подпрограмм вполне достаточна, но она могла бы быть и выше. Для более скоростных вычислений применяется дополнительная аппаратура. Как мы узнаем из последующих глав, микропроцессор внутри нашего ПК имеет надежных помощников, которые выполняют все- го одну задачу: скоростные вычисления с плавающей запятой. Эти помощники называются числовыми сопроцессорами. В различных типах ПК применяются две модели, одна известна под номером 8087, а другая 80287; для краткости их называют просто 87-ми. Многие модели оснащены такими микропроцессорами, и там, где они имеются (при условии, что программа знает, как их использо- вать, что, к сожалению, бывает не часто), скорость и точность вы- числений с плавающей запятой несравненно возрастают. Советуем иметь в виду, что многие программы просто не пре- дусматривают никаких вычислений с плавающей запятой. Програм- мы подготовки текстов, например, не нуждаются в этом, поэтому нет необходимости ни замедлять их подпрограммами с плаваю- щей запятой, ни ускорять с помощью сопроцессора. Даже многие программы, которые предусматривают выполнение вычислений с плавающей запятой, не используют все преимущества 87-го со- процессора. Например, Бейсик вообще игнорирует его преиму- 42
щества, в то время как программа Lotus 1-2-3, напротив при пер- вой же необходимости прибегает к его помощи. В отличие от форматов целых чисел, о которых мы уже гово- рили, и от набора символов ПК, о котором мы будем говорить в гл. 4, не существует никаких универсальных стандартов относи- тельно видов более длинных чисел и чисел с плавающей запятой, которые могли бы использоваться в программах. Мы не можем рассказать даже кратко обо всех расширенных форматах чисел, но постараемся упомянуть самые распространенные. Во-первых, это более длинные числа. Наши программы могут работать с любым количеством байтов в представлении числа, но гораздо чаще других употребляют 4-байтовые числа со знаком. Диапазон эти чисел охватывает чуть больше плюс-минус 2 млрд.) 87-е сопроцессоры предназначены для работы с 4-байтовыми чис- лами, но могут оперировать и 8-байтовыми, в таком случае диапа- зон возрастает до 9 квинтиллионов (9 млрд. млрд). 87-е сопро- цессоры могут оперировать десятичными форматами чисел, со- держащими 18 десятичных цифр, что также дает диапазон квинт- иллионного масштаба. Этот особый десятичный формат, которым пользуются сопроцессоры, является единственным примером де- сятичной ориентации; все остальное, что делают наши ПК, имеет двоичную, а не десятичную сущность. Во-вторых, это плавающая запятая. Два основных формата чи- сел с плавающей запятой — это 4 или 8 байт, как, например, фор- маты одинарной и двойной точности в языке Бейсик. Четырехбай- товые форматы с плавающей запятой дают нам 6 десятичных цифр точности, а 8 байтовые — 16. Числа при этом могут достигать 10 в 38-й степени. Ввиду того, что имеется несколько вариантов записи числа с плавающей запятой, существует некоторое разно- образие в значениях точности и диапазона, которые мы можем получить при одном и том же формате числа с плавающей запя- той, так что я сейчас привел только приблизительные цифры. 87-е сопроцессоры могут также работать с несколько большим форма- том, занимающим 10 байтов, что дает нам около 18 цифр точно- сти. Вид чисел, с которыми мы можем работать, зависит от исполь- зуемой нами программы. То, о чем мы здесь сейчас говорим, применимо почти ко всем языкам программирования, но специ- альные программы могут иметь свои собственные числовые фор- маты. Например, программы электронных таблиц используют свои варианты чисел с плавающей запятой. Но та информация, которую вы получили в настоящем разделе, дает четкое представление о видах "длинных" чисел, которые могут быть в вашем распоряже- нии при работе с нашими компьютерами. 43
3.5. Представление строк символов Символы текстовых данных — буквы алфавита и т.п. — очень важны в на- шей работе с вычислительной техникой. В самом деле, наши компьютеры чаще работают с текстовыми данными, чем с числовыми, что является чистой иро- нией судьбы ввиду того, что компьютер в первую очередь — это усовершенст- вованный калькулятор. Но мы уже научили эти усовершенствованные калькуля- торы делать много полезной работы, оперируя написанным текстом, подобным тому, который вы сейчас читаете (и над которым с момента его написания, ес- тественно, уже поработал компьютер). Очень важно знать основные принципы работы компьютера с текстом. Текстовые данные составлены из отдельных символов, таких как, например, буква А. Как мы уже говорили в начале этой главы, каждая буква представляет- ся в виде особой комбинации битов и занимает целый байт. Для определения того, какая комбинация битов соответствует той или иной букве в стандарте, принятом для большинства типов ЭВМ, используется система кодирования ASCII. В гл.4 мы более подробно рассмотрим все символы, с которыми работа- ют наши ПК. А сейчас давайте поговорим о том, как можно одновременно опе- рировать более чем одним символом. Сами по себе символы не выполняют никакой работы до тех пор, пока мы не соединим их в слова и предложения. В вычислительной технике применяется термин для обозначения сочетания байтов, рассматриваемого как единое це- лое, — строка. Строка — это группа следующих один за другим байтов. Все языки программирования и многие из самых распространенных видов программого обеспечения, как, например, программы электронных таблиц Lotus 1-2-3, работают со строками символов. Программы для подготовки текстов, та- кие как WordStar, VolksWriter, Multimate, MicrosoftWord, главным образом пред- назначены для работы со строками символов. Строки — это очень важная часть компьютерных данных, и чтобы вы смогли получить о них полное представле- ние, мы посвятили им настоящий раздел книги. Несмотря на большое значение, которое имеют строки, о них, в принципе, нечего сказать, кроме того, как они хранятся в памяти, да еще о некоторых ог- раничениях, иногда налагаемых на размер строки. В компьютерной памяти и на дисках строка хранится так, как подсказал бы нам здравый смысл: байты символов записываются один за другим. Здесь нет ничего особенного. Особенное начинается в том месте, где строки связываются между собой. Когда речь шла о числовых данных, мы говорили, что каждый тип данных имеет свой особый формат, обусловленный размером данных в байтах. Строки же отличаются тем, что их длина не фиксирована: одни строки короткие, другие длинные. И для того чтобы связать символы в строку, необходимо иметь средство, определяющее длину строки. Оказывается, что единого универсального средства для этого не существует. Различные программы используют свои собственные методы и правила опреде- ления того, что считается строкой и что связывает символы в строку. Мы не мо- жем предложить ни одного универсального определения строки, но можем рас- сматривать некоторые наиболее общие методы, что дает нам возможность по- нять принцип работы программ со строками и узнать, откуда взялись ограниче- ния на длину строки. Существуют два способа, которыми программы определяют длину строки и ее конец. Один из них заключается в числовом выражении длины строки, запи- санном вне самой строки. Обычно это число, обозначающее число символов в строке, помещается перед началом строки, например: 6Строка7состоит2из8символов Как видно, каждое слово в этом примере представляет отдельную строку и число символов (в байтах) в каждом слове записывается перед самым его нача- лом. Это очень употребительный прием работы со строками, хотя если вы заду- маетесь над ним, то поймете, что этот метод неизбежно накладывает свои огра- ничения на максимальный размер строки. Число, выражающее длину строки, записывается в каком-либо из числовых форматов, о которых мы с вами говори- ли. Максимальное число, допускаемое выбранным форматом, определяет мак- симальную длину строки. 44
Длина строки обычно записывается в виде одного байта без знака, что не может превышать 255. Поэтому многие программы, оперирующие строками, имеют длину, ограниченную 255 символами (а иногда и меньше из-за необходи- мости оставить один-два байта для служебного пользования). Обычные про- граммы на языке Бейсик в наших ПК работают по этому принципу, так что стро- ки в них не могут быть длиннее 255 символов. Оттранслированные программы на Бейсике могут записывать длину строки в виде 2-байтового слова, таким об- разом, длина строки в таких программах может быть больше 32 000 символов. Многие программы по подготовке текста считают целую строчку текста за от- дельную строку и применяют 1-байтовый счетчик длины строки, в связи с чем многие из них ограничивают длину строчки текста 255 символами. Существует еще один способ определения длины строки, не накладываю- щий на нее никаких ограничений. Согласно этому способу длина строки не запи- сывается, а вместо этого конец каждой строки обозначается каким-либо раз- делителем. В нашем примере таким разделителем является звездочка : СТРОКА-СОСТОИТ-ИЗ-СИМВОЛОВ- Разделитель служит для обозначения конца строки, но сам не считается ее частью. Широко используются два разделителя. Один из них — это нулевой байт, т.е. байт, состоящий из нулевых битов. (Как вы увидите в гл.4, это доволь- но удобно, так как нулевой байт обычно не используется в качестве текстового символа.) Другим распространенным разделителем является байт с числовым кодом 13. Это код символа возврата каретки, которым обычно обозначается ко- нец строки текста. Так как каждая строка текста рассматривается как отдельная строка, то логично использовать тот же битовый код для обозначения как конца строчки текста, так и конца строки. (Мы поговооим об этом подробнее в гл.9, когда речь пойдет о форматах текстового файла.) Существует один недостаток использования особого кода разделителя строк — невозможность включить в строку код значения ее длины. В большинстве случаев это не вызывает особых затруднений, но все-таки это недостаток и огра- ничение, которое мы должны иметь в виду. Задания 1. Бейсик способен легко переводить числа из шестнадцатеричной системы в десятичную и наоборот, если числа состоят из не более четырех шестнадцате- ричных цифр. Попробуйте написать программу, которая делала бы такой пере- вод для больших чисел. 2. Попробуйте свои сипы в арифметических действиях с шестнадцатеричны- ми числами. Сложите 1234 и ABuD/. Произведите вычитание 1А2В из А1В2. Ум- ножьте 2А на 2 и на 3. 3. Можете ли вы найти степень точности и диапазон чисел, с которыми мо- жет работать программа? Попробуйте написать программу на языке Бейсик, ко- торая определила бы, насколько большим может быть число и насколько точно это число представлено. 4. Подумайте о проблемах, обусловленных двумя способами определения длины строки. Придумайте практические ситуации, когда ограничение длины строки может иметь решающее значение. Можете ли вы составить схему, кото- рая не будет накладывать никаких ограничений ни на длину, ни на содержание строки? Есть ли недостатки у вашей схемы? Напишите программу на Бейсике (или на любом другом языке, например, на Lotus 1-2-3), которая могла бы найти максимально возможную длину строки. 45
Глава 4 НАБОР СИМВОЛОВ IBM PC В гл.З мы рассмотрели форматы данных внутри нашего ПК, а также различные виды данных, но лишь издалека посмотрели на набор символов ПК. Это настолько интересное явление, что мы посвятим ему целую главу, которая сейчас перед вами. Мы под- робно рассмотрим весь набор символов, узнаем, как символы ПК соотносятся с распространенным стандартом, известным как ASCII. Особое внимание будет уделено специальным символам ПК. 4.1. Знакомство с набором символов Символы ПК, как и всех современных компьютеров, занимают 8-битовый байт, поэтому их число может достигать 2 °, т.е. 256 раз- личных символов. Вначале просто посмотрим на них (рис. 4.1). ► 0 е Р P C Ё a В L JU. a = © 4 ! 1 А е а q u ae i : ± P + • Ф IV 2 в R Ь r e R 6 z = T ТГ Г > V !1 # 3 с S с s a 6 u 1 IL n < ♦ 5 $ 4 D т d t a о n L Г Г 4 § % 5 Е и е u a d Й F a J 4 & 6 F V f V & u 1 1 t U + 7 G W g w £ u fi 1 1 IL T я D t ( 8 Н X h X e У i. Ф о О ф ) 9 I У i У ё О r 1 If e • В -> * 2 J Z j z e и “4 1 г n • cf <- + 2 К [ k { I ф i 1 1Г 1 6 V ? U • < L \ 1 I 1 i £ i 1 If oo n О — = М ] m } i ¥ i j J = г Ф 2 Л А А > N n X Pb « j 1 JL 1 e ▼ / ? 0 о Q A f » n 1 £ £ n Рис.4.1. Таблица символов IBM PC Существуют два простых способа вывести на экран сразу все символы вашего ПК. Один из них — простая программа на языке Бейсик, названная ALL-CHAR, которую вы сможете найти в прило- жении А; именно с помощью этой программы был составлен рис.4.1. Другой способ — популярная программа Sidekick. Одной из многочисленных возможностей этой программы является воз- можность легко и быстро вывести на экран дисплея полный набор символов ПК. Используя ту или иную программу, вы можете уви- деть набор символов вашего компьютера. Он может немного от- личаться от нашего в зависимости от типа экрана дисплея, которым 46
вы располагаете. (А об этом мы поговорим подробно в главах, посвященных видеодисплею.) Рис.4.1 показывает набор символов в более или менее идеальном виде (распечатано на принтере Quietwriter фирмы IBM) и дает вам возможность легко и с боль- шой степенью точности увидеть, что представляет собой каждый символ и что отличает его от других символов. В качестве справочного материала нам потребуется еще один рисунок, где наряду с изображением символа дается его код в десятичной и шестнадцатеричой системах. Эту информацию вы найдете на рис.4.2, на который мы будем часто ссылаться в этой главе. Если вы хотите получить аналогичную информацию на экра- не вашего компьютера, можете воспользоваться либо програм- мой REF-CHAR, приведенной в приложении А, либо программой Sidekick. 0 00 16 10 32 20 48 30 0 64 40 @ 80 50 P 96 60 112 70 p 1 01 0 17 И л 33 21 1 49 31 1 65 41 А 81 51 Q 97 61 a 113 71 q 2 02 • 18 12 t 34 22 " 50 32 2 66 42 В 82 52 R 98 62 b 114 72 r 3 03 * 19 13 п 35 23 И 51 33 3 67 43 С 83 53 S 99 63 c 115 73 s 4 04 ♦ 20 14 и 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t 5 05 ♦ 21 15 5 37 25 Z 53 35 5 69 45 Е 85 55 U 101 65 e 117 75 и 6 06 * 22 16 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v 7 07 • 23 17 t 39 27 • 55 37 7 71 47 G 87 57 W 103 67 8 119 77 v в 08 а 24 18 ♦ 40 28 ( 56 38 8 1 72 48 Н 88 58 X 104 68 h 120 78 x 9 09 о 25 19 41 29 ) 57 39 9 । 73 49 I 89 59 Y 105 69 1 121 79 у 10 0А 26 1А 42 2А * 58 ЗА : 74 4А J 90 5A Z 106 6A J 122 7A z 11 0В tf 27 1В «- 43 2В + 59 ЗВ ; 75 4В К 91 5B I 107 6B k 123 7B { 12 ОС V 28 1С 44 2С . 60 ЗС < 76 4С L 92 5C \ 108 6C 1 124 7C : 13 0D 29 1D 45 2D - 61 3D - 77 4D М 93 5D 1 109 6D a 125 7D } 14 0Е J5 30 1Е А 46 2Е 62 ЗЕ > 78 4Е N 94 5E 110 6E n 126 7E ' 15 0F а 31 1F ▼ 47 2F / 63 3F 7 79 4F 0 95 5F _ 111 6F о 127 7FC 12В 80 С 144 90 Ё 160 АО 4 176 ВО < 1 192 СО 1 208 DO > 224 E0 a 240 FO S 129 81 и 145 91 161 А1 i 177 Bl [i j 193 Cl 209 DI ф 225 El 0 241 Fl t 130 82 6 146 92 а 162 А2 6 178 В2 | t 194 C2 T 210 D2 « 226 E2 Г 242 F2 > 131 83 1 147 93 6 163 АЗ й 179 ВЗ | 195 C3 211 D3 U 227 E3 x 243 F3 < 132 84 * 148 94 о 164 А4 А 180 В4 J 196 C4 - 212 D4 L 228 E4 E 244 F4 Г 133 85 А 149 95 6 165 А5 Я 181 85 J . 197 C5 + 213 D5 F 229 E5 о 245 F5 J 134 В6 А 150 96 U 166 А6 е 182 В6 { | 198 C6 k 214 D6 n 230 E6 M 246 F6 + 135 87 « 151 97 й 167 А7 е 183 В7 т I 199 C7 1} 215 D7 ft 231 E7 % 247 F7 = 136 88 152 9В У 168 АВ 1 184 В8 < i 200 C8 U 216 D8 4 232 E8 Ф 248 F8 * 137 89 8 153 99 0 169 А9 - 185 В9 { 201 C9 r 217 D9 J 233 E9 в 249 F9 • 138 8А * 154 9А и 170 АА - 186 ВА ] 1 202 ca a 218 DA r 234 EA Q 250 FA • 139 8В 1 155 9В С 171 АВ J 187 ВВ 5 i 203 CB 219 DB 235 EB 6 251 FB V 140 8С i 156 9С £ 172 АС I 188 ВС 1 1 204 CC If 220 DC — 236 EC - 252 FC n 141 8D 1 157 9D ¥ 173 AD I 189 BD 1 i 205 CD - 221 DD f 237 ED « 253 FD ’ 142 BE А 158 9Е А 174 АЕ « 190 BE d 1 206 CE ft 222 DE 1 238 EE c 254 FE • 143 8F А 159 9F / 175 AF » 191 BF 1 l 207 CF i 223 DF 239 EF Л 255 FF Рис.4.2.Таблица символов IBM PC с десятичными и шестнадцатеричными кодами На рис.4.2 изображены все 256 символов, даны их десятичные и шестнадцатиричные коды, имеющие одинаковые числовые зна- чения, но выраженые двумя различными способами. После кода идет обозначение самого символа. Как вы обратили внимание, рис.4.1 и 4.2 нетрудно сопоставить. Символы и их коды представ- лены в одном и том же порядке в виде вертикальных колонок. Взглянув на рис. 4.1, вы увидите, что он начинается с двух ко- лонок очень любопытных символов (первые 32 символа с десяти- 47
чными кодами от 0 до 31 включительно), за которыми следуют ; шесть колонок абсолютно знакомых символов: цифры от 0 до 9, буквы латинского алфавита верхнего и нижнего регистров, а также множество знаков препинания. Эти восемь колонок составляют по- ловину набора символов ПК и называются символами ASCII, ибо они отвечают широко распространеному стандарту, который ис- пользуется в большинстве компьютеров и носит название ASCII — Американский стандартный код для обмена информацией (American Standart Code for Information Interchange). Собственно стандарт ASCII имеет лишь 128 символов, коды ко- торых обозначаются 0-127. Набор символов нашего ПК вдвое больше. Коды 128-255 обычно называются расширенными кодами ASCII. Строго говоря, собственно кодами ASCII являются только первые 127 кодов, но вы часто можете услышать, что люди упот- ребляют термин "код ASCII", говоря о любом коде или о системе кодирования, обусловливающей определенную комбинацию битов в том или ином символе. Это не слишком грубая ошибка, но вы должны иметь в виду, что термин "код ASCII" может иметь как узко техническое, так и более широкое значение. Первая половина кодов символов ПК имеет официальный ста- тус и широко используется за пределами нашего семейства ПК. Это универсальный код, используемый многими ЭВМ и другим электронным оборудованием. Другое дело — расширенные коды ASCII. Нет универсальной договоренности относительно значений этих кодов, которые были разработаны специально для ПК. Но вследствие огромного значения, которые персональные компью- теры приобрели в наши дни, применение этой группы кодов не ограничивается только нашим ПК, а включает и многие другие компьютеры, являющиеся дальними его родственниками. Эта специальная группа сейчас находится на пути к тому, чтобы стать неофициальным стандартом. Вследствие этого вы можете обнаружить, что многие компьютеры и различное компьютерное оборудование —• особенно принтеры — совершенно не знакомы с расширенным набором символов кода ASCII. В самом деле, од- ной из причин того, что многие иллюстрации для этой книги были выполнены с помощью принтера Quietwriter фирмы IBM является его способность печатать почти весь набор символов ПК. Эта ин- формация может вам пригодиться, так как основная цель нашего столь пристального внимания, уделяемого набору символов, — научить вас пользоваться этим богатством для удовлетворения ва- ших потребностей. Но вы должны знать, что некоторые элементы этого набора не столь доступны, как другие. А сейчас пора детально рассмотреть набор символов нашего персонального компьютера. Мы сделаем это в три приема: снача- ла рассмотрим стандартные символы ASCII, далее — специальные управляющие символы, а затем исследуем расширенный набор 48
символов кода ASCII и некоторые уникальные особенности всего набора символов ПК. 4.2. Стандартные символы кода ASCII Набор символов кода ASCII, имеющий коды 0-127, можно раз- делить на две части, что легко увидеть на рис. 4.1 и 4.2. Первая часть, о которой мы поговорим отдельно в разд. 4.3, включает первые 32 символа с кодами 0-31. Эти символы называются уп- равляющими символами; порой они несколько отличаются от того, как они изображены на рис. 4.1 и 4.2. К этим символам мы еще вернемся, а пока давайте поговорим о более традиционных сим- волах с кодами 32-127. Посмотрев на колонки рис. 4.1 и 4.2, вы увидите знаки, кото- рые мы чаще других склонны считать символами ПК: это обычные буквы алфавита, цифры и знаки препинания. И хотя кажется, что эти традиционные символы не требуют серьезного объяснения, на самом деле есть довольно много мелких деталей, на которые следует обратить внимание, если вы хотите постичь все тонкости работы с этими символами. Даже такая очевидная вещь, как существование отдельных ко- дов для букв верхнего и нижнего регистра ("а" это совсем не то, что "А"), требует некоторых пояснений. При пользовании про- граммой сортировки, располагающей данные в алфавитном по- рядке, или поисковой программой это имеет большое значение, если только ваша программа не рассматривает буквы верхнего и нижнего регистра как один и тот же символ. (При этом нужно по- мнить, что таким свойством обладают не все программы, хотя не- которые предоставляют вам право выбора.) Это означает, что при поиске буквы "а" будет игнорироваться ее заглавный вариант "А", а также то, что в алфавите буква "а" идет не только после "А", но и после "Z". Следует иметь в виду также, что цифровые символы идут впереди алфавита. Теперь рассмотрим знаки пунктуации и их специальные симво- лы. Здесь тоже много тонкостей. Первая из них заключается в том, что они разбросаны по всему набору символов и идут впере- межку с буквами верхнего и нижнего регистров. Это значит, что знаки препинания как класс символов не группируются где-либо в одном месте, как буквы и цифры, и иногда это имеет определен- ное значение. Есть много интересных и полезных деталей, касаю- щихся символов знаков препинания, которые необходимо знать. Так, символ пробела имеет десятичный код 32 — наименьшее значение из всех кодов знаков препинания, поэтому этот символ стоит в начале любого алфавитного порядка. (В таблицах символов на рис. 4.1 и 4.2 вы найдете три различных символа для обозначе- ния пробела, подробнее об этом мы поговорим в подразделе 49
"Пробелы и пустые символы".) Вы увидите, что кроме круглых скобок в наборе символов есть еще две пары скобок — квадрат- ные [ ] и фигурные { }; кроме этого в качестве скобок иногда мо- гут использоваться знаки больше >, меньше < , например, вот <так>. Об эти четырех парах символов стоит помнить. Теперь о кавычках. В книжных шрифтах вы можете найти как левые, так и правые кавычки, которых нет ни на клавиатуре обыч- ной пишущей машинки, ни в наборе символов ПК. Наш ПК имеет только двойные и одинарные кавычки, которые ставятся как в на- чале, так и в конце цитаты. Но есть в наборе такой спрятанный символ, как перевернутая кавычка, которая идет перед буквой "а" нижнего регистра и имеет код 96. Но это вовсе не пара для обыч- ной одинарной кавычки, а символ для написания неанглийских букв, который используется как диакритический знак. Имеются также и другие диакритические знаки: карат *(код 94); тильда —' (код 126); одиночная кавычка Г(КОД 39); запятая г (код 44). Состав- ные символы работают только при наложении одного символа на другой, например диакритического знака на букву. Это можно сделать с помощью принтера или обычной пишущей машинки, но не на экране дисплея. Неанглийские буквы алфавита включены в расширенный набор символов ASCII, который представлен во вто- рой части таблиц символов. Подробнее об этом мы поговорим в разд. 4.4. Стоит упомянуть и еще некоторые символы. Кроме символа наклонной черты вправо / (код 47), имеется еще символ наклон- ной черты влево \ (код 92), который, насколько мне известно, имеет узко специальное применение. Например, в языке про- граммирования Бейсик наклонная черта влево обозначает деление целых чисел, а наклонная черта вправо обозначает обычное деле- ние, включающее дробный результат. В операционной системе DOS наклонная черта влево — путь доступа внутри каталога (о чем мы поговорим в последующих главах). Также будьте осто- рожны с символом дефиса - (код 45), его легко спутать с симво- лом подчеркивания _ (код 95). И, наконец, символ карата * (код 94) иногда используется для обозначения управляющих символов (см. разд. 4.3). Это может вызвать путаницу, поэтому, когда вы видите этот знак, убедитесь, что он обозначает карат, а не специ- альные управляющие символы или наоборот. # # #Технические подробности Пробелы и пустые символы В таблицах символов на рис.4.1 и 4.2 вы найдете три или четыре пробела. На самом деле только один из них является соб- ственно пробелом — символ с кодом 32. Коды 0 и 255 присвоены символам, которые называются "пустыми". Они рассматриваются 50
не как обычные символы, а как недействующие пустые места. На- пример, если мы пошлем код 32 (истинный символ пробела) в принтер ПК, он отпечатает пустое место и перейдет к следующе- му знаку. Пустые символы просто игнорируются. Принтер, полу- чив их код, не передвинется к следующей позиции. В собственном наборе символов ASCII имеется два пустых сим- вола, коды 0 и 127. В наборе символов ПК код 127 имеет реаль- ный, видимый символ, похожий на домик. Для замены пустого символа с кодом 127 в ASCII ПК пользуется символом с кодом 255 как пустым. Пустые символы обычно не используются в повседневной практике работы на ПК. Они главным образом применяются в ли- ниях связи: чтобы поддерживать связь в момент отсутствия пере- дачи реальных данных, по линии связи передаются пустые симво- лы. ### 4.3. Управляющие символы кода ASCII Первые 32 позиции в наборе ASCII занимают символы (коды 0-31), функции которых не имеют ничего общего с их графиче- ским изображением. Забудем на время про рис. 4.1 и 4.2, потому что в этом разделе мы рассмотрим эти символы в совершенно ином аспекте. Когда компьютер "разговаривает" с принтером, ему необходи- мо умение сообщить принтеру, что именно тот должен печатать и как он должен это делать, т.е указать, например, где оканчивается строчка текста и когда переходить к печатанию следующей страни- цы. Обыкновенные символы ASCII, о которых мы говорили в разд.4.2, представляют собой то, что надо печатать. А как печа- тать, за это отвечают управляющие символы кода ASCII, которым и посвящен настоящий раздел. Первые 32 кода в наборе символов резервируются для пере- дачи специальной информации принтеру или другому компьютеру по телефонной линии. Эти коды не используются для передачи са- мих данных, а обеспечивают передачу команд, форматирующих сигналов и кодов управления связью. У этих 32 кодов очень раз- нообразные функции, которые могут меняться в зависимости от обстоятельств. Мы упомянем здесь лишь основные функции, что- бы дать вам широкую картину использования этих символов. Для начала я хочу сказать вам, что эти 32 кода имеют свои осо- бые названия, когда они употребляются в качестве управляющих символов кода ASCII, а не просто как занятные картинки, приве- денные на рис. 4.1 и 4.2. Таб. 4.'1 дает полное представление об этих кодах и их названиях. 51
Прежде, чем перейти к детальному описанию управляющих символов, я хотел бы дать некоторые пояснения к табл.4.1. Пер- вые две колонки — это числовое выражение кодов в десятичной и шестнадцатеричной системах. Третья колонка содержит обозна- чения клавиш управления, использующих эти символы. Каждый из этих символов может быть набран непосредственно на клавиатуре одновременным нажатием клавиши управляющего регистра "Ctrl" и клавиши того или иного кода. Традиционная запись кодов управ- ляющего регистра осуществляется в виде знака карата * перед названием клавиши, которую нужно нажать, и именно эта запись представлена в третьей колонке таблицы. Когда мы записываем А мы не имеем в виду, что это символ карата, за которым сле- дует символ буквы А. Эта запись означает символ, который наби- рается на клавиатуре одновременным нажатием клавиш "Ctrl" и "А". Таблица 4.1. Управляющие символы кода ASCII Код шести. Код десят. Управл. клавиши Наименование Назначение 0 00 NUL Пустой СИМВОЛ 1 01 "А SOH Начало заголовка 2 02 "В STX Начало текста 3 03 ~с ЕТХ Конец текста 4 04 ~0 ЕСТ Конец передачи 5 05 ~Е ENQ Запрос 6 06 "F АСК Подтверждение приема 7 07 "G BEL Звуковой сигнал 8 08 "Н BS Возврат 9 09 "I НТ Горизонтальная табуляция 10 0А LF Перевод строки 11 ОВ ~К VT Вертикальная табуляция 12 ОС ~L FF Перевод страницы 13 00 ~М CR Возврат каретки 14 0Е "N S0 Верхний регистр 15 0F ~0 SI Нижний регистр 16 10 -р DEL Удаление 17 11 ~Q DC1 Управление устройством 1 18 12 ~R DC2 Управление устройством 2 19 13 ~S DC3 Управление устройством 3 20 14 "Т DC4 Управление устройством 4 21 15 ~и NAK Неподтверждение приема ' 22 16 -у SYN Синхронизатор 23 17 ETB Конец блока текста 24 18 ~х CAN Возврат в исходное состояние 25 19 "Y EM Конец носителя данных 26 1А "Z SUB Замена 27 1В “Z SUB Переключение кода 28 1С “/ FS Разделитель файлов 29 1D J GS Разделитель групп 30 1Е RS Разделитель записей 31 1F US Разделитель единиц Следует иметь В виду, что нотация с использованием карата применяется довольно часто. В различных программах вы сможе- те встретить символы *Z или С, которые, как мы уже знаем, 52
обозначают "Ctrl-Z" или "Ctrl-C": два особых кода, которые имеют важное значение для нашего ПК, и мы скоро это увидим. В последней колонке таб. 4.1 представлена расшифровка на- звания каждого из этих 32 специальных кодов, а в четвертой ко- лонке даны двух или трехбуквенные стандартные сокращения полного их названия. Эти сокращения широко используются в ли- тературе по вычислительной технике. Некоторые из управляющих символов кода ASCII представляют для нас особый интерес. Да- вайте не будем подробно говорить о каждом из них, а просто по- смотрим, какое значение они имеют для нашей работы с ПК. Сначала поговорим о символах, набираемых на нашей клавиа- туре. Как мы уже знаем, любой из этих символов может быть на- бран одновременным нажатием соответствующей клавиши симво- ла и клавиши Ctrl. Но некоторые из этих символов на самом деле имеют свои собственные клавиши, так что не нужно при этом на- жимать клавишу Ctrl. Это самые важные управляющие символы: BS (возврат, код 8), СН (табуляция, код 9), CR (возврат каретки или переключение кода, код 13) и специальный символ ESC (код 27). Во избежание недоразумений вследствие возможной аналогии хо- чу обратить ваше внимание на то, что клавиша DEL на вашей кла- виатуре не обозначает код удаления в системе ASCII (код 16). Целая группа этих управляющих кодов используется для обоз- начения основных способов форматирования написанного матери- ала. Эти коды функционируют как логические форматирующие коды (которые помогают нашим программам разобраться в дан- ных) и коды управления принтером (которые дают команды при- нтеру). Самыми распространенными в этой группе являются сим- волы, о которых мы уже говорили — это BS (возврат), НТ (табуля- ция) и CR (возврат каретки), а также LF (перевод строки, код 10), который используется вместе с возвратом каретки, FF (перевод страницы, код 12), указывающий момент перехода на новую стра- ницу, и VT (вертикальная табуляция, код 11). Ряд других символов имеет более широкое использование. Символ предупреждающего сигнала — BEL (код 7). Если мы по- шлем этот код на принтер или на экран дисплея, то мы услышим звуковой сигнал. Символ "Ctrl-C" (ЕТХ, код 3) известен также как символ прерывания. Нажатие клавиш "Ctrl-S" и "Ctrl-Q" (DC3, код 19 и DC1, код 17) используется как команда паузы и команда возобновления работы, обычно когда мы работаем с сервисными программами связи (такими, как The Source, CompuServe или MCiMail). Запомните, они могут вам пригодиться. Команда паузы "Ctrl-C", однако, совсем не то же самое, что клавишная команда "PAUSE" (пауза), посылаемая с клавиатурые компьютера, о чем мы узнаем из гл. 14. (Кстати, если вы не найдете клавишу "PAUSE" на вашей клавиатуре, то это не означает, что такой команды нет. Эта значит, что она реализуется иначе, нажатием комбинации клавиш "Ctrl-NumLock", так же как клавишная команда прерыва-
ния "BREAK" — "Ctrl-ScrollLock"). Клавиша "PAUSE" действительно останавливает работу всего компьютера, в то время как команда символа "Ctrl-S" останавливает только работу программы, но не ПК. Еще одной интересной комбинацией является "Ctrl-Z" (SUB, код 26). Этот управляющий символ используется для обозначения кон- ца текстового файла, занесенного на диски нашего компьютера. Из гл. 9 мы узнаем другие подробности об этом символе, так же как и о символе возврата каретки и перевода строки. Таковы наиболее важные для нас управляющие символы систе- мы ASCII. Мы закончим этот раздел рассмотрением некоторых уз- ко специализированных символов управления. Если вам неинте- ресно, просто пропустите несколько следующих абзацев. # # ^^Технические подробности Остальные управляющие символы кода ASCII выполняют раз- нообразные функции, относящиеся к связи, форматированию дан- ных, управлению принтерами и другими устойствами. Мы не бу- дем подробно останавливаться на каждом из них, но дадим представление о некоторых деталях. Коды 1-4 (SOH, STX, ЕТХ, EOT) используются в линиях связи для указания границ между специальной (описательной) информацией и собственно текстовыми данными, а также конца всей передачи данных по линиям связи. Эти коды ориентированы главным обра- зом на текстовые данные. Другие коды, такие как 28-31 (FS, GS, RS, US), используются как знаки препинания в других форматах данных для обозначения границ файлов, которые принимают раз- личные значения в зависимости от типа передаваемых данных. Другие коды используются для управления линиями связи, на- пример, код подтверждения (АСК, код 6) и неподтверждения приема (NAK, код 21) применяются для контроля за прохожденим данных по линиям связи. Коды запроса, синхронизации, конца бло- ка, отмены (ENQ, SYN, ЕТВ, CAN) и другие также используются для управления связью. Это слишком специальные коды, и мы не будем на них останавливаться. Ряд управляющих символов ASCII применяется для управленя принтером и другими устройствами. Хотя точные коды управления различны для разных принтеров, есть несколько самых употреби- тельных кодов, о которых стоит сказать несколько слов. Коды включения стандартного и дополнительного регистров (SO, код 14 и SI, код 15) широко используются для передачи принтеру коман- ды печатать вдвое более широкими символами или, наоборот, символами, сжатыми по ширине. Четыре кода управления внеш- ними устройствами (DC 1-4, коды 17-20) также применяются для управления принтерами, и многие типы принтеров используют их в > 54
качестве команды перехода с символов удвоенной ширины на стандартные символы. Однако ввиду того, что большая часть принтеров имеет больше команд форматирования и управления, чем предусматривает имеющиеся в коде ASCII управляющие^ символы, символ пере- ключения кода (ESC, код 27) используется как всеобъемлющий ко- мандный префикс. Когда принтер получает от компьютера коман- ду переключения кода, он знает, что за этим последует специаль- ная команда, и вместо того, чтобы печатать несколько следующих знаков, принтер понимает их как управляющие команды, напри- мер, команда установки местоположения остановки табуляции или команда включить подчеркивание последующих символов. Если вы хотите подробнее узнать об этих управляющих симво- лах, прочитайте книгу "Связь и сети передачи данных в IBM PC" ("Communications and Networking with the IBM PC", Brady Communications, 1983). Информацию о символах управления при- нтером можно найти в инструкции, прилагаемой к интересующему вас принтеру. ### 4.4. Набор специальных символов Настало время поговорить обо всех специальных символах на- шего ПК — это вся вторая половина набора символов: расширен- ный набор символов ASCII с кодами от 128 до 255 включительно плюс особые изображения первых 32 символов. Мы будем рас- сматривать их по группам, выделяя и комментируя наиболее инте- ресные. Но прежде всего я хочу предостеречь вас от возможной пута- ницы в связи с первыми 32 символами (коды 0-31). Существуют два совершенно разных аспекта рассмотрения этих символов. В разд. 4.3 мы рассматривали их как управляющие символы кода ASCII. В этом случае они лишены графического отображения, это просто команды. В настоящем разделе мы будем их считать обычными символами, имеющими графическое отображение (именно это отображение приведено на рис.4.1 и 4.2). Что же определяет подход к этим символам как к управляю- щим или как символам, имеющим зрительный образ? Все зависит от того, как мы пользуемся кодом. В большинстве случаев эти ло- ды рассматриваются как управляющие символы ASCII. Но если мы можем (с помощью определенных средств) вывести их на эк- ран нашего дисплея, они принимают графическое изображение как часть узкоспециального набора символов. Если вы посмотрите на первые 32 символа на рис.4.1 и 4.2, ста- нет ясно, что эти символы представляют собой крайне интересную смесь графических изображений, которые можно использовать в различных целях, впрочем не очень существенных. Так как ис- 55
пользование этих символов относительно ограничено (обычно они применяются как управляющие символы, и в этом случае мы не смогли бы их изобразить на рис.4.1), то специалисты фирмы IBM решили включить самые важные специальные символы в расши- ренный набор кодов ASCII и использовать их в качестве более за- нимательных, но необязательных символов. И все-таки среди них можно встретить несколько полезных символов, таких, например, как изображение карточных мастей (коды 3-6), значки параграфа и раздела (коды 20 и 21), группа стрелок (16-31) и неожиданное изображение веселых рожиц (1-2). Существуют реальные ситуации для использования этих большей частью легкомысленных знаков. В самом деле, приятно, что в та- ком серьезном семействе, как IBM PC, все-таки есть легкомыс- ленные элементы. Кодами 128-255 обозначены более серьезные специальные символы. Их можно объединить в три группы: иностранные, гра- фические и научные символы. Иностранные символы (коды 128-175) включают все необходи- мые знаки, позволяющие приспособить ПК для всех основных ев- ропейских языков. ASCII, американский стандарт ориентируется на нужды английского языка и американских знаков препинания. В группе иностранных символов можно выделить несколько подгрупп. Одна подгруппа, использующая коды 128-154 и 160-167, обеспечивает особые буквы неанглийских алфавитов (с диакрити- ческими знаками). Мы уже говорили, что обычный набор симво- лов ASCII содержит большую их часть, но не все, применяемые в европейских языках. Они могут использоваться для вывода на принтер только с помощью печатания их поверх соответствующих буквенных символов. На экране дисплея это получить нельзя. В этом случае иностранные буквенные символы представляют собой изящный выход из положения. Вторая подгруппа иностранных символов обеспечавает изобра- жение знаков валюты разных стран: знак цента (код 155), фунта стерлингов (код 156), японской иены (код 157), испанской пессеты (код 158) и франка (код 159). Знак доллара (код 360) включен в .основной набор символов ASCII. Третья подгруппа иностранных символов — особые знаки пунк- туации: испанские перевернутые вопросительный и восклицатель- ный знаки (коды 168 и 173), кавычки французкого типа (коды 174 и 175). На французские кавычки стоит обратить внимание, они могут быть использованы еще и как графические средства. Среди иностранных символов затерялись четыре общеупотре- бительных символа: дроби 1/2 и 1/4 (коды 171 и 172) и два угло- вых знака (коды 169 и 170). Вы найдете их, когда они вам потребу- ются. Следующей большой группой символов расширенного набора ASCII являются графические символы, предназначенные для изо- 56
бражения простых рисунков с помощью набора символов ПК. Их можно также разделить на три подгруппы. Самая интересная и широко используемая группа символов — символы псевдографики. Они позволяют рисовать точные прямо- угольные фигуры на экране дисплея. ЭМ символы достаточно разнообразны, чтобы изобразить вертикальные и горизонтальные разделительные линии в прямоугольнике, а также выполнить все изображения одинарной или двойной линией. Существует четыре типа символов для изображения прямоугольника: одинарные ли- нии и два типа смешанных линий — двойная горизонтальная и оди- нарная вертикальная, и наоборот. Рис.4.3 показывает, как пользо- ваться всеми четырьмя типами, и приводит коды используемых символов. Если вы хотите нарисовать такие же прямоугольники на экране вашего компьютера, воспользуйтесь программой BOXES, помещенной в приложении А. С ее помощью я делал эти рисун- ки. Практически любая серьезная программа для ПК широко ис- пользует символы псевдографики. Ведь они так красиво выглядят на экране дисплея! Поэтому я составил рис.4.3 и программу для него, чтобы вы увидели, из каких символов образуются эти фигу- ры, узнали коды этих символов и использовали их в своей работе. Следующая группа графических символов используется для изображения заштрихованных областей с различной степенью плотности. Так, код 176 обозначает 1/4 степень плотности, запол- няя всю площадь символа, так что два соседних символа сливают- ся. Код 177 — 1/2 степень плотности, код 178 — 3/4 и код 219 — абсолютную плотность. Вместе с символом пробела эта подгруппа образует четыре или пять "оттенков серого цвета", которые могут использоваться для построения гистограмм (столбчатых диаг- рамм). Последняя подгруппа графических символов представлена ко- дами 220-223. Каждый из них является половиной символа абсо- лютной плотности (код 219). Это может быть верхняя или нижняя правая или левая половина. Эти символы могут использоваться для изображения заполненных фигур, которые могут быть вдвое мельче, чем фигуры, изображенные с помощью символа с кодом 219. Например, они могут применяться для построения гистрог- рамм, которые детализированы до половины размера символа. С помощью стандартных символов ПК можно получить на экра- не дисплея невероятно много удивительных и разнообразных изо- бражений. Для этого можно использовать и простые символы, на- пример символы буквы "о" нижнего регистра для изображения колес поезда. Немного воображения — и вы сможете делать чу- деса на вашем дисплее. И, наконец, последняя группа символов расширенного набора ASCII состоит из научных символов, коды 224 - 254. Они включают буквы греческого алфавита, широко применяющиеся в математи- 57
Рисование асах рамок двойными линиями Рисование всех рамок одинарными линиями Вертикальные линии - двойные Горизонтальные линии двойные Рисование всех рамок Рисование всех рамок двойными линиями одинарными линиями 1г = тг = т! Г - Т ~ “1 201 205 203 205 187 II II II 218 196 194 196 191 II II II 186 186 186 1 1 1 179 179 179 1г = ПГ = 11 F ~ ~ 4 204 205 206 205 185 II 11 II 195 196 197 196 180 । । 186 186 186 179 179 179 i - Jj L — X — J 200 205 202 205 188 192 196 193 196 217 Вертикальные линии - Горизонтальные линии двойные двойные гг “ тг “ Т 214 196 210 196 183 II II II F = т = =1 213 205 209 205 184 I 1 1 186 186 186 1 1 1 179 179 179 II- - -И- - 41 1= = + = й 199 196 215 196 182 II II II 198 205 216 205 181 186 186 186 LL _ Л _ JJ 179 179 179 Ь — ± — j 211 196 208 196 189 212 205 207 205 190 Рис.4.3.Символы псевдографики для рисования рамок 58
ке и других науках, символ бесконечности (код 236), различные математические символы, в том числе два кода 244 и 245, которые используются для изображения большого знака интеграла.’ Есть даже символы возведения во вторую^степень и квадратного корня (коды 253 и 251). Хотя эти символы и не охватывают всего, что ис- пользуется в математике, других науках и в техническом проекти- ровании, все-таки среди них представлены самые необходимые. , « Задания I. Проверьте экспериментально, как реагируют принтер и дисплей вашего компьютера на первые 32 управляющих символа ASCII. Составьте программу на языке Бейсик или воспользуйтесь любым другим средством, чтобы поочередно вызывать эти символы на экран дисплея или на принтер. (Подсказка: если перед каждым управляющим символом и после него набирать "X", то вы получите яс- ное представление о реакции принтера или дисплея на эти коды.) 2. Одинаково ли отвечает принтер и дисплей на коды одних и тех же управ- ляющих символов? Попробуйте объяснить почему. 3. Прочитайте запись программ ALL-CHAR и REF-CHAR, написанных на языке Бейсик. Эти программы, показывающие на экране дисплея рис. 4.1 и 4.2, пред- ставлены в приложении А. Выясните, как они посылают на экран эти символы. Почему они не используют обычную команду PRINT? 4. Если программа сортировки данных не делает различий между буквами верхнего и нижнего регистра (что нам иногда нужно), то она рассматривает бук- вы обоих регистров как якобы принадлежащие к одному регистру. Важно ли для нас, к какому именно? Как это влияет на пунктуацию? 5. Количество графических символов ПК ограниченно имеющимися кодами. Представим себе, что у нас есть еще 50 незанятых кодов. Какие дополнитель- ные символы графики вы могли бы предложить? Попробуйте составить свое до- полнение к набору графических символов ПК. 59
Глава 5 АППАРАТНЫЕ СРЕДСТВА IBM PC Наконец пришло время заглянуть внутрь нашего ПК, исследо- вать его аппаратные средства. Мы будем рассматривать аппарату- ру с трех точек зрения: сначала мы познакомимся с принципиаль- ной схемой устройства ПК, с ее механическими и электронными модулями, каждый из которых является важной составной частью ПК. Затем мы посмотрим на эти составные части с точки зрения возможностей, которые они предлагают нам для создания различ- ных типов ПК. На более высоком техническом уровне мы погово- рим о специальных микросхемах, обеспечивающих работу персо- нального компьютера. 5.1. Принципиальная схема IBM PC Если мьгпосмотрим на внешний вид нашего ПК, то увидим три его составные части. Во-первых, это основной или системный блок. Во-вторых перед ним располагается клавиатура. И, наконец, обычно над системным блоком размещается дисплей. Так выгля- дит ПК снаружи. Заглянув внутрь, мы увидим, что ПК построен на основе модулей, что позволяет разложить его на различные элек- тронные компоненты. Логическую схему устройства ПК вы найде- Рис.5.1 Компоненты персонального компьютера 60
Штриховой линией на рис. 5.1 обозначен корпус системного блока ПК, и вы видите, что он вмещает в себя почти все компо- ненты машины. У портативных членов семейства ПК, таких как Compaq или Portable PC, экран вмонтирован в корпус, но это прак- тически не меняет принцип конструкции ПК. Чтобы постичь основы этой конструкции и понять, как составные части связаны между собой, мы более подробно рассмотрим рис.5.1. Конкретно мы будем говорить о физическом месте каж- дого компонента в системе, так как размещение компонентов практически одно и то же у всех основных типов ПК. Даже если отдельные элементы у некоторых типов персональных компьюте- ров (самых дальних родственников нашего ПК) размещены по- другому, это не меняет логической организации и функций этих компонентов, общих для всех ПК (см.рис.5.2). Вы также можете сравнить схему устройства ПК с внутренним видом самой машины, если откроете крышку вашего ПК и сами сопоставите то, о чем вы читаете, с тем, что вы видите в своем компьютере. Рис.5.2. Внутренний вид основных узлов IBM PC • В правом углу системного блока размещается блок питания. Он преобразует переменный электрический ток в постоянный, обеспечивая четыре стабилизированных напряжения: +12 В, -12 В, + 5 В и -5 В. Мощность блока питания определяет количество вспомогательных устройств, которые можно установить в компью- тер. Персональный компьютер исходной модели IBM PC имеет мощность 65 Вт, что не очень-то щедро. Последующие модели 61
имеют большую мощность. Например, у компьютера XT она со- ставляет 130 Вт, а у АТ — 200 Вт. Основной и самой важной частью ПК является системная плата, содержащая большую часть основных электронных элементов си- стемы, ключевых микросхем, обеспечивающих работу ПК. Они включают микропроцессор и вспомогательные микросхемы, по- могающие микропроцессору выполнять его работу, например, микросхема "часы", выполняющая функцию метронома, отмери- вающего темп работы всего компьютера. На системной плате раз- мещен основной комплект рабочей памяти компьютера и особые микросхемы постоянного запоминающего устройства, содержаще- го комплект встроенных программ компьютера. Системная плата иногда называется материнской платой — вы встретитесь и с этим термином. Системная плата является самой крупной неделимой составной частью всего компьютера и во много раз превосходит по размеру все остальные печатные платы внутри машины. Она занимает практически всю нижнюю часть системного блока ПК. Все осталь- ные составные части системного блока размещаются над систем- ной платой. Если вы приподнимете системный блок ПК, вы почувствуете, что правый дальний угол значительно тяжелее. Это то место, где размещается блок питания, включающий тяжелый трансформатор, который служит для понижения напряжения. В модели PCjr транс- форматорная часть блока питания помещена в отдельный корпус, что снижает массу системного блока и обеспечивает отсутствие в нем высокого напряжения. Помимо того, что блок питания передает пониженное напряже- ние к остальным частям компьютера, он еще имеет внешнюю электрическую розетку для подключения дисплея, а также содер- жит вентилятор для охлаждения всех элементов системного бло- ка. С правой передней стороны системного блока, непосредственно рядом с блоком питания, располагаются дисководы. Различные члены семейства ПК имеют дисководы разных типов, как мы уви- дим в разд.5.2. Одна из причин, по которым дисководы располо- жены именно здесь, в правом переднем углу, состоит в том, что- бы обеспечить быструю и удобную связь с блоком питания. Все остальные части системного блока получают питание не от самого блока питания, а через системную плату. Блок питания и дисководы занимают правую сторону системно- го блока, а левая его часть предназначена для подключения вспо- могательных устройств, называемых вспомогательными платами. Они подключаются к целому ряду штепсельных разъемов в левой задней части системного блока. Эти места подключения вспомога- тельных устройств называются разъемами шин£| и определяют од- но из самых важных свойств. ПК — его открытую конструкцию. 62
Конструкторы ПК наделили его способностью подключать к се- бе различные дополнительные устройства, такие, как, например, принтеры, телефонные модемы и т.д. Но, к счастью, они не пошли по пути создания специальных линии связи для каждого такого до- полнительного устройства, что значительно уменьшило бы гибкость ПК и сократило число возможных дополнительных устройств, под- ключаемых к ПК. Этот путь сделал бы ПК закрытой системой с ог- раниченным набором предопределенных возможностей. Вместо этого линии связи внутри ПК, как и многие другие аспекты общего устройства компьютера, сделаны "открытыми", т.е. возможности их использования не предопределены и не ограничены заранее. Это обеспечивается с помощью такого инженерного решения, как шина, или магистраль электрических соединений, о чем следует рассказать подробно. Различные микросхемы и другие части компьютера должны соединяться друг с другом, чтобы получать и посылать сигналы, т.е. разговаривать друг с другом. Если эти соединения будут сде- ланы с помощью отдельных проводов, связывающих два нужных устройства, то получится так, что только устройства, соединенные этими проводами, могут "переговариваться". Существует другой способ организации внутренней связи, который позволяет любой части компьютера, в частности новым устройствам, добавленным к компьютеру, связываться с любой другой его частью. Это делает- ся с помощью общего канала связи, пучка проводов, выступаю- щего в качестве общего носителя сигналов, идущих от одной части к другой. Этот канал называется шиной. Разъемы в задней части системной платы ПК связаны со всеми линиями шины, так что все, что мы подключаем, может связывать- ся с любой частью ПК, подключенной к шине, включая память и микропроцессор. Эти разъемы . шины дают возможность легко подключать любые дополнительные устройства. Таким образом мы можем подключать практически любое сочетание оборудова- ния, какое хотим и куда хотим. (Правда, необходимо знать, что по сложным техническим причинам некоторые дополнительные уст- ройства лучше подключать к определенным разъемам, хотя тео- ретически все разъемы одинаково надежно подсоединяют их к шине.) Более подробную техническую информацию о шине вы можете почерпнуть в подразделе "Что внутри шины". # # технические подробности Что внутри шины Шина, используемая в ПК, имеет всего 62 отдельные линии или провода, которые обозначены кодами от А1 до А31 и от В1 до В31. Сама нумерация соответствует расположению линий на до- 63
полнительных платах: А — с правой стороны, В — с левой, а числа расположены по порядку, начиная от задней части компьютера. По этим линиям проходят самые разнообразные сигналы. Пять линий используются для передачи сигналов четырех напряжений, причем одно из напряжений дублируется по двум линиям. Еще три используются как линии заземления. Восемь линий используются для передачи восьми битов данных в байте, так что компьютер может передавать данные целыми байтами. Двадцать линий используются для адресации, для указа- ния объекта связи в сети ПК. Адресация осуществляется в двух видах, один из них — адрес памяти, а другой - адрес порта ввода- вывода (о чем мы поговорим в гл. 6). Какой бы вид адресации не использовался, сигнал адреса передается по этим линиям, в то время как данные передаются по восьми линиям пересылки дан- ных. Остальные линии шины ПК используются в целях управления. Одна из них указывает на то, свободна ли шина в данный момент. Другая группа линий отвечает за запрос о прерывании и представ- ляет собой сигналы аппаратуры, указывающие на то, что та или иная часть компьютера требует внимания. Пара этих линий преры- вания используется специально для контроля за деятельностью первого и второго последовательных портов, известных как СОМ1 и COM2. Шина АТ использует стандартную шину исходной модели IBM PC и добавляет к ней еще 36 линий. Физическая и электрическая кон- струкция шины компьютера АТ предусматривает совместимость с шиной PC, так что машины класса АТ могут использовать сколько угодно дополнительных устройств ПК модели IBM PC. Эти 36 ли- ний обозначены С1 — С18 и D1 — D18, подобно тому, как нуме- руются линии стандартного ПК. Дополнительные линии дают нам еще 8 линий передачи данных (так как АТ оперирует одновремен- но 16 битами), восемь линий адресации для расширения адресных возможностей и пять линий запроса о прерывании. Как вы можете легко представить себе, существует еще много технических под- робностей, относящихся к шинам, но мы расскажем о самых су- щественных. ### Среди моделей ПК имеются различия в количестве и размере разъемов, а также в типах шины. Семейство ПК использует в ос- новном три шины. Основная шина, т.е. шина исходной модели, ис- пользуется в исходной PC, XT, Compaq и многих других моделях. Шина АТ является продолжением шины PC, она содержит все те же самые линии связи, но добавляет к ним дополнительные линии, необходимые для ее 286-го микропроцессора. С этим добавлени- ем шина АТ является расширением шины PC и может подключать больше дополнительных плат, чем шина PC. 64
Третья шина принадлежит исключительно модели PCjr. Это эк- вивалент шины PC с добавлением некоторых нехарактерных для IBM PC свойств, таких, как, например, звуковой канал. Физическая форма шины PCjr отличается от PC, так же как и ее расположение в машине. У компьютера PCjr она располагается снаружи, с пра- вой стороны системного блока, а не внутри, как у большинства ПК. Дополнительные платы включаются в разъемы шины и распола- гаются над системной платой. Наличие свободного места внутри системного блока определяет количество и размер отверстий разъемов. Исходная модель ПК имеет пять отверстий стандартной длины (33 см). В модели XT это число увеличено до восьми за счет более плотного их размещения, а также за счет того, что од- но отверстие размещено рядом с блоком питания. Из-за того, что часть пространства здесь занята выступающим дисководом, в это отверстие могут пройти только дополнительные платы половинной длины. Другие модели, как, например, Portable PC, также имеют некоторые отверстия, через которые не пройдет плата стандартно- го размера. Следующим шагом по логической схеме ПК будут дополни- тельные платы, о которых мы поговорим в разд. 5.2 Прежде чем посмотреть на разнообразные дополнительные устройства, устанавливаемые на наш компьютер, я хочу еще раз вернуться к нашей схеме на рис. 5.1, чтобы вы получили полное представление об устройстве ПК. Это только логическая схема, которая не является точной картиной физического устройства ПК. Но я постарался нарисовать ее так, чтобы она не сильно отлича- лась от истинной картины расположения частей ПК. Если вы срав- ните рис. 5.1 и 5.2, то легко увидите соответствие нашей логиче- ской схемы и реального расположения деталей компьютера. 5.2. Дополнительные средства и адаптеры Дополнительные платы и адаптеры, которые могут подключать- ся к ПК, позволяют создать широкое разнообразие свойств маши- ны. Это дает нам гибкость в создании того типа ПК, который нам нужен. В этом разделе мы поговорим о различных дополнитель- ных платах, которые мы можем использовать в ПК, а также со- зданной на их основе дополнительной аппаратуре, такой как раз- личные типы дисководов и дисплеев. • >- Когда мы говорим о дополнительных платах, создается впечат- ление, что речь идет о дополнительных средствах, которыми мы можем произвольно оснастить наш ПК. Но это впечатление обман- чиво. На самом деле есть два вспомогательных средства, которые обычно подключены к каждому ПК, — это адаптер дисковода и адаптер дисплея. Обычно каждый ПК имеет и то, и другое. Адап- 65 3 - 6472
тер дисковода и адаптер дисплея являются ключевыми частями ПК, и вы найдете их внутри вашего компьютера. Давайте рассмотрим каждый из них отдельно, начав с адаптера дисплея. Этот адаптер обеспечивает необходимую связь для пе- редачи дисплею команд компьютера вызвать на экран то или иное изображение. В сущности адаптер дисплея действует как трансля- тор, переводящий компьютерные сигналы в видеосигналы. Адаптер дисплея имеет два основных компонента. Один ком- понент — это специальная микросхема, называемая видеоконт- роллером, которая реагирует на команды управления экрана. Другой компонент — это память. Как мы узнаем из последующих глав, информация, появляющаяся на экране, должна быть записа- на в специально предназначенной для этого памяти. Хотя эта па- мять работает так же, как основная рабочая память компьютера, объем и адресация памяти зависят от типа адаптера дисплея, так что память дисплея становится неотъемлемой частью адаптера. В семействе ПК могут применяться различные виды дисплей- ных адаптеров. Мы кратко расскажем о пяти основных видах, ос- тавив подробности для последующих глав, которые посвящены видеоинформации. Два основных видеоадаптера были установлены еще на исход- * ную модель ПК: монохромный адаптер и адаптер цветного изо- бражения. Монохромный адаптер распространен особенно широ- ко, хотя его возможности очень ограничены. Он может показывать только текстовые символы (полный набор, о котором мы говорили в гл.4), причем только в одном цвете (хотя эти символы могут вы- глядеть на экране по-разному: быть яркими или тусклыми, под- черкнутыми или в инверсном изображении). Этот адаптер так ши- роко используется благодаря тому, что создает гораздо более от- четливые символы на экране, чем адаптер цветного изображения, но он сочетается только с одним видом дисплея, черно-белым, специально созданным для монохромного адаптера. Адаптер цветного изображения предназначен для показа как текстовых, так и графических символов, причем последние строят- ся с помощью точек. Этот адаптер может показывать 16 цветов и имеет несколько дисплейных режимов (о которых мы поговорим в последующих главах), обеспечивающих различные сочетания цвета и разрешающей способности экрана (т.е. четкости изобра- жения). Хотя у цветного адаптера больше возможностей, чем у монохромного, он может показать обычные текстовые символы так же четко, как и монохромный. Цветной адаптер может рабо- тать с целым рядом дисплеев, включая и бытовые телевизоры. Обычно же он соединен с особым цветным дисплеем, известным как RGB-монитор. Портативные ПК имеют встроенный дисплей: тут мы лишены возможности выбора адаптера и дисплея. Портативная модель IBM PC оборудована цветным графическим адаптером и одно- 66
цветным экраном. Персональный компьютер Compaq оснащен та- ким же одноцветным экраном, но его адаптер может выполнять функции как цветного, так и монохромного адаптера, пользуясь преимуществами и того, и другого. Другие три типа видеоадаптеров были разработаны позднее с целью улучшения качества, в частности повышения разрешающей способности. Наиболее распространенным является графический адаптер Hercules фирмы Hercules Computer Technologies. Он сое- диняется только с монохромным дисплеем и обеспечивает высо- кокачественное изображение текстовых символов и одноцветный графический режим с высокой разрешающей способностью. Ре- зультат такой же, как и у ПК Compaq, но графические изображе- ния более качественные. Другие два типа дисплейных адаптеров, о которых мы хотим рассказать, представляют собой более совершенные модели со- зданные, для IBM PC. Первый называется "Усовершенствованный графический адаптер". Это универсальная плата, которую можно подсоединять к монохромному дисплею, цветному дисплею или к усовершенствованному цветному дисплею. Усовершенствованный графический адаптер может действовать как монохромный адап- тер, эмулировать цветной графический адаптер и совершать свои собственные чудеса, такие как, например, монохромные графиче- ские изображения повышенного разрешения (подобные изобра- жениям адаптера Hercules) и 64-цветные текстовые и графические изображения с высокой разрешающей способностью, при исполь- зовании его с усовершенствованным цветным дисплеем. Другим особым дисплейным адаптером является высококачественный и дорогостоящий "Профессиональный графический адаптер", кото- рый соединяется с таким же дорогостоящим "Профессиональным графическим дисплеем". Такое сочетание используется для спе- циальных графических работ, требующих высокой разрешающей способности и сотен цветов. Так обстоит дело с дисплейными адаптерами семейства IBM PC, которые представляют собой наиболее сложную часть дополни- тельных устройств. Следующей частью, тоже достаточно сложной, является адаптер дисковода. Адаптеры дисководов выполняют такую же работу для диско- водов, какую дисплейные адаптеры выполняют для дисплеев. Они обеспечивают управление и являются трансляторами между дис- ководами и остальными частями компьютера. Подобно дисплей- ным адаптерам, сложная связь дисковых адаптеров основывается на одной специальной микросхеме — микросхеме дискового кон- троллера. В отличие от дисплейного адаптера у дискового адапте- ра нет встроенной памяти, и он не нуждается в таковой. Существу- ет два вида дисковых накопителей — гибкие и жесткие диски и три вида адаптеров дисковода: два адаптера для каждого вида и один, способный работать с обоими видами. В отличие от дисплей- 67
ных адаптеров о дисковых адаптерах невозможно рассказать что- нибудь интересное. Стоит остановиться только на различных видах дисководов. Насчитывается огромное количество различных дисководов, по- этому лучше рассматривать, их разделив на простые категории. Первыми идут дискетные дисководы, использующие самые рас- пространенные и стандартные 5,25-дюймовые гибкие дискеты (флоппи-диски). Есть и другие размеры гибких дискет, больше или меньше этого, но они, как правило не используются в семействе IBM PC. Это стандартные дисководы, стандартные почти для каж- дого семейства ПК. Но даже эти стандартные дисководы могут быть двух видов: устаревший односторонний дисковод, записыва- ющий информацию только на одной стороне дискеты, и двухсто- ронний дисковод. Имеются также дисководы для работы с диске- тами большой емкости, которыми оснащены компьютеры АТ, спо- собные работать либо со стандартной дискетой, либо с дискетой большой емкости, которые хранят втрое больше данных, чем обыкновенные. И последней категорией дискет является 3,25-дюй- мовая микродискета, которая одновременно и меньше, и вмести- тельнее стандартной. Эти дискеты выпускаются в жестких футля- рах для предохранения от механических повреждений. Объем памяти дискеты варьируется в широких пределах: от 160К у односторонней дискеты до 1200К у особых дискет большой емкости. Следующим важным типом диска является жесткий, или фик- сированный диск. Это твердые негнущиеся магнитные пластины в форме круга, которые могут хранить гораздо больше данных и работать гораздо быстрее, чем дискета. В отличие от гибких дис- ков, которые могут быть вставлены в дисковод и вынуты из него, жесткие диски сделаны несъемными, поэтому их называют фикси- рованными. Объем памяти жесткого диска колеблется от 5 - 10 до сотен мегабайт. Модель XT оснащена 10-Мбайтовым жестким дис- ком, а АТ — 20-Мбайтовым. Существует и третий тип диска, называемый кассетным диском. Этот диск съемный, как и дискета, но обладает объемом памяти и скоростными качествами жесткого диска, представляя собой как бы гибрид этих двух видов дисков. Все эти диски настолько важны для понимания принципов рабо- ты наших компьютеров, что мы посвятим их изучению несколько глав, углубляясь во все интересные детали. Адаптеры дисплея и дисководов, о которых мы вели речь, со- ставляют только часть дополнительных устройств, которые можно подключить к нашему ПК. Рассмотрим другие виды дополнитель- ных плат. Важным видом является дополнительная плата памяти. В то время как системная плата компьютера содержит основную па- мять машины, компьютер может использовать и дополнительную 68
память. Объем основной памяти компьютера зависит от его моде- ли и может изменяться в пределах от 64К до 512К. Дополнитель- ная память обеспечивается с помощью платы расширения памяти, которая устанавливается почти на каждом ПК. Следующим типом дополнительных \плат являются параллель- ные и последовательные порты. Параллельный порт предназначен специально для работы с принтером. Последовательный порт обычно используется для подключения к телефонной линии (с по- мощью модема) или к принтеру. Параллельный порт специально предназначен для управления принтером, а последовательный порт имеет более общее назначение, являясь универсальным (хо- тя к нему в основном подключается принтер и телефон). Все эти дополнительные устройства являются наиболее важны- ми и распространенными. Но существуют и другие дополнитель- ные устройства подключаемые к компьютеру. Среди них — свето- вое перо, адаптеры для видеоигр с использованием координатной ручки "джойстик", устройство управления курсором под названи- ем "мышь", а также модемы. Модемы заслуживают особого вни- мания. Для того чтобы наш компьютер мог работать с большинством устройств (такими, как диски, принтеры, дисплеи), нужен один вид транслирующего устройства, а чтобы подсоединить компьютер к телефонной линии, необходимо иметь два вида транслирующего устройства. Одним из них является последовательный порт, а дру- гим — модем. Функция модема заключается в превращении сиг- налов компьютера в телефонные сигналы. Наш компьютер может использовать внешний модем, подключенный к адаптеру последо- вательного порта, или иметь встроенный модем. Встроенный мо- дем, такой как известный Hayes 120В, сочетает последовательный порт и транслирующее модемное устройство на одной дополни- тельной плате, которая может быть подключена непосредственно к одному из гнезд подсоединения дополнительных устройств. И, наконец, мы должны вспомнить о еще одной дополнитель- ной плате, которая, так же как и встроенный модем, сочетающий в себе последовательный порт и модем, является универсальной платой. Универсальная плата выгоднее, чем специализированная: она гораздо дешевле и ее можно подключить к любому из воз- можных дополнительных средств. Существует много видов уни- версальных плат. Некоторые сочетают в себе дисплейный адаптер с одним параллельным портом; другие включают несколько по- следовательных и параллельных портов. Наиболее распространен- ным видом, однако, являются те, которые я называю "кухонным комбайном". Они включают в себя память, параллельные порты, последовательные порты, постоянно действующие часы, игровые адаптеры — не хватает только ершика для посуды и полотенца. Знакомство с дополнительными устройствами, которые можно подключить к шине компьютера, дает вам некоторое представле- 69
ние о диапазоне возможностей ПК, которые обеспечиваются уста- новкой дополнительного оборудования. В последующих главах мы подробно рассмотрим различные возможности компьютера и, та- ким образом, лучше поймем принципы работы этих дополнитель- ных устройств. Но прежде мы закончим наш рассказ об аппарат- ных частях ПК обсуждением некоторых технических микросхем, которые являются ключевыми рабочими частями системной платы и некоторых дополнительных плат. ## Технические подробности 5.3. Ключевые микросхемы Если вам интересно разобраться в деталях конструкции элект- ронной схемы или вы ждете от меня более увлекательного рас- сказа о внутреннем устройстве ПК, вам будет интересно узнать об основных микросхемах, которые применяются в конструкции ПК. Во-первых, необходимо знать, что в IBM PC используется толь- ко незначительное количество специально созданных микросхем. Это чрезвычайно удивило специалистов-электронщиков и знатоков микрокомпьютеров, когда IBM впервые обнародовала устройство своей первой модели ПК. Вся конструкция ПК была основана главным образом на использовании стандартных промышленных микросхем. Не только "мозг" - микропроцессор, но весь IBM PC был создан из готовых микросхем, которые применяются при со- здании другой вычислительной техники. Это был довольно крутой поворот в работе IBM, потому что обычно эта фирма разрабатыва- ла собственные детали конструкции ЭВМ. Но персональный ком- пьютер был совершенно новым видом продукции для этой фир- мы, который во многом изменил характер ее деятельности. Мы отложим эту историю до другого раза, но запомним главное: все части микрокомпьютера, о которых мы будем здесь говорить, не представляют ничего нового для конструктора микросхем. Мы сконцентрируем наше внимание на двух основных моделях семейства ПК: это исходная модель IBM PC, от которой пошло свое подсемейство, и исходная модель АТ, родоначальника всех моделей этого типа. Мы начнем с системных плат этих двух ма- шин, они изображены соответственно на рис.5.3 и 5.4. Основная микросхема является собственно микропроцессором. Это либо микропроцессор 8088 фирмы Intel в моделях PC, XT, Portable PC, Compaq и Compaq-Plus, а также почти во всех других моделях нашего семейства ПК, либо 80286 в модели АТ и в моде- лях, основанных на АТ. Микропроцессоры, применяемые в других типах персональных компьютеров, — это 8086, 80188 и 80186 фирмы Intel. Рядом с микропроцессором находится гнездо для микросхемы 87, числового сопроцессора, или процессора числовых данных, ко- 70
торый способен с высокой скоростью и сверхточностью выполнять вычисления с плавающей запятой. Числовым сопроцессором обо- рудованы только отдельные типы ПК, но у большинства из них есть гнездо для его подключения. Первая пара интересующих нас микросхем отвечает за внут- реннюю синхронизацию компьютера. Одна из них называется ге- нератором синхронизации, и ее основной функцией является фун- кция метронома, задающего темп работы компьютера. Идентифи- кационный код этой микросхемы в модели PC — 8284, а в модели АТ — 88284. В обоих случаях эта микросхема обеспечивает синх- ронизирующий сигнал, задающий темп всем основным операциям, выполняемым компьютером. Для этого генератор синхронизации использует кварцевый кристалл, такой же как в кварцевых элек- ронных часах, для точного отсчета времени. Генератор синхрони- зации преобразует сверхбыстрый отсчет времени кристаллом в простой быстрый отсчет, которым пользуются другие части элект- ронной цепи. Близким родственником генератора синхронизации является другая микросхема — программируемый таймер с номером идентификации 8253. Программируемый таймер способен произ- водить сигналы синхронизации в различных процессах. Скорость подачи сигналов может произвольно изменяться, что делает этот таймер программируемым. Если основные часы компьютера име- ют разрешающюю способность 6 млн. тактов в секунду (что явля- ется фактической скоростью модели АТ), а мы хотим, чтобы ка- кая-то операция выполнялась 6000 раз в секунду, мы программи- руем этот таймер на отсчет тысячи циклов. Это означает, что через каждые 1000 циклов основных часов программируемый таймер будет посылать свой сигнал. Эта способность таймера может ис- 71
пользоваться для отсчета времени при различных операциях, включая генерацию звуков в динамике, о чем мы узнаем в одной из следующих глав. Мы уже говорили о том, что сигналы информации передаются от одной части ПК к другой с помощью шины, и мы уже рассмот- рели основные каналы связи. Для контроля за передачей инфор- мации, для регулирования ее потока в наших компьютерах ис- пользуется микросхема контроллера шины. В модели PC установ- лена микросхема 8288, в модели АТ — 82288. Задача контролле- ра шины состоит в том, чтобы обеспечить надежную передачу сиг- налов. Как мы еще узнаем из последующих глав, некоторые части компьютера, в частности дисководы, могут обмениваться инфор- мацией непосредственно с памятью компьютера, минуя микро- процессор. Это позволяет освободить микропроцессор для его основной работы. Этот процесс называется прямым доступом в память (ПДП). За это отвечает соответствующая микросхема, на- зываемая контроллером ПДП, ее номер 8237. ввввн ашпимвиоовоЕйШ ШПШИИ О DD о о О О BBO0D дооомдддд Рис.5.4. Системная плата IBM PC модели АТ Аналогичным образом за прерыванием, одним из важных свойств ПК, о чем мы узнаем из гл.6, следит специальная микро-' схема — 8259. В компьютерах, как и в реальной жизни, прерыва- 72
ния могут быть важными и не очень важными, и одной из функ- ций контроллера прерываний является определение приоритетов прерываний и осуществление отложенных прерываний. Еще одной очень важной микросхемой является программиру- емый периферийный интерфейс (ППИ), микросхема под номером 8255. ППИ осуществляет контроль за^некоторыми самыми просты- ми периферийными устройствами, такими, например, как порт магнитной кассеты. Большинство периферийных устройств, однако, являются слишком сложными для того, чтобы управляться простой микросхемой. * К простым периферийным устройствам относятся также диско- воды, за работу которых отвечает контроллер гибкого диска PD765. Экраном дисплея управляет широко используемая микро- схема, называемая контроллером катодно-лучевой трубки 6845 CRT. Как адаптер стандартного монохромного дисплея, так и цветной графический адаптер используют 6485-й контроллер в ка- честве основного компонента. Существует еще много других важных микросхем, применяе- мых в различных компьютерах семейства IBM PC. Они использу- ются в системной и дополнительных платах, а также в самих пери- ферийных устройствах, например в дисководах. Но мы с вами об- судили самые важные из них, теб с которыми вы наверняка встре- титесь, читая техническую литературу о персональных компьюте- рах. ### Задания 1. Объясните, почему ПК делится на три части - системный блок, клавиа- тура и дисплей? Некоторые модели компьютеров имеют клавиатуру, которая встроена в системный блок. В чем преимущества и недостатки такой конструк- ции? Некоторые модели, включая переносные модели Conrtpaq и Portable PC, со- вмещают дисплей с системным блоком. В чем преимущества и недостатки этой конструкции? 2. Основные представители семейства нашего ПК имеют разъемы шины, установленные внутри корпуса компьютера. У компьютера PCjr эти разъемы расположены на внешней стороне корпуса. Если необходимо подключить не- сколько дополнительных устройств к PCjr, мы подключаем их последовательно одно к другому. Что это дает данной модели ПК? В чем преимушества и недо- статки того и другого способов подключения? 3. Некоторые из микросхем, о которых говорилось в раз.5.3, называются программируемыми. Что это означает? Что делает микросхему, или ваш теле- визор, или что угодно, программируемым? В чем могли бы быть преимущества и недостатки , если бы такой способностью обладали некоторые другие части 73
Глава 6 МОЗГ МАЩИНЫ: МИКРОПРОЦЕССОРЫ Микропроцессор является ключевым элементом ПК, можно сказать, что он им управляет. Для лучшего понимания работы ПК мы должны изучить возможности микропроцессоров. Как мы уже отмечали в гл.1, в семейство IBM PC широко используются мик- ропроцессоры семейства 8086 фирмы Intel, причем во многих ПК используется модель 8088, о ней мы и будем в основном вести речь. Однако то, что мы узнаем о микропроцессоре 8088, во многом относится ко всему семейству 8086 фирмы Intel. В разд. 6.5 мы поговорим об особых возможностях микропроцессора 286, которым оснащены персональные компьютеры типа АТ. Если вы серьезно интересуетесь устройством вашего ПК или хотите работать с набором команд внутреннего языка ассемблера, то детальное описание микропроцессора, которое содержится в этой главе, вам действительно пригодится. В противном случае, необходимость разобираться во всем этом сложном материале сомнительна. Откровенно говоря для обыкновенного пользовате- ля, который ни разу не заглянул ни в один программный код на языке ассемблера, не так уж и нужно знать то, что мы будем здесь обсуждать. Эта глава предназначена для тех, кто хочет удовлетворить свое любопытство, касающееся устройства ПК. Прочитав эту главу, по- мимо морального удовлетворения можно получить более деталь- ное представление о возможностях ПК, а также о факторах огра- ничивающих эти возможности. 6.1. Возможности микропроцессора Наилучшей отправной точкой для нас может стать изучение то- го, что может делать микропроцессор, т.е. системы основных его команд. Когда мы поручаем компьютеру выполнить какую-либо работу, с его точки зрения это сложное задание. То, что компьютер в сущности делает, состоит в выполнениии последовательности опе- раций, построенной на основе системы его команд. Набор этих основных команд называется машинным языком, или языком ас- семблера. (Когда команды представлены в той форме, в которой их пишет программист, они называются языком ассемблера, а ког- да они представлены в той форме, с которой непосредственно ра- ботает компьютер, они называются машинным языком; в любом случае речь идет об одном и том же.) Один из лучших способов 74
оценить возможности компьютера заключается в том, чтобы уз- нать возможности основных команд его машинного языка. Если бы мы попытались проникнуть в глубины этой работы, то увязли бы в многочисленных и однообразных деталях, с которыми приходится иметь дело программиста^, работающим с языком ас- семблера. У нас другая задача: получить ясное представление о возможностях компьютера. Мы начнем с простых арифметических вычислений, потому что именно они являются основным видом ра- боты компьютера. Микропроцессоры наших ПК могут выполнять четыре основных арифметических действия: сложение, вычитание, умножение и де- ление. Сложение и вычитание являются простейшими операциями и гораздо более расространенными, так как они используются для выполнения множества других видов работы помимо самых оче- видных (что мы вскоре узнаем). Мы помним, что наши компьюте- ры называются 16-битовыми; это означает, что они могут выпол- нять сложение и вычитание 16-разрядных чисел. Но они могут вы- полнять арифметические действия и с отдельными байтами. Вы можете спросить, почему наши компьютеры должны уметь вы- полнять операции как с 8-, так и с 16-разрядными числами? Если 16-разрядные операции изначально являются более мощными, то для чего нужны 8-разрядные? Имеются по крайней мере три серьезных основания для поль- зования 8-разрядными числами вместо 16-разрядных. Одно из них заключается в том, что при работе с числами, не превышающими 8 разрядов, нерационально использовать объем памяти, вдвое превышающий необходимый. Когда мы работаем с массивом чи- сел, не выходящим за пределы 8 разрядов, дополнительная эф- фективность, полученная за счет использования одинарных байтов, оказывается значительной. Другой причиной использования 8-бито- вых вычислений может быть необходимость работы с отдельными байтами. Рассмотрим следующий пример. Иногда возникает необходи- мость перевода всех буквенных символов в верхний регистр. Это случается гораздо чаще, чем вы можете себе представить, внутри используемой программы. Из гл.4, в которой мы говорили о на- боре символов ПК, вы помните, что каждый буквенный символ нижнего регистра в системе ASCII находится на 32 символа дальше, чем соответствующий буквенный символ верхнего регист- ра. Программа легко может перевести символ нижнего регистра в символ верхнего регистра путем вычитания 32 из байта, который содержит код буквенного символа нижнего регистра, и все это делается с помощью 8-битовой команды вычитания. Вы можете сами убедиться в этом, попытавшись выполнить следующую про- грамму на языке Бейсик: PRINT'a", ASC ("a"), ASC ("а") - 32, CHR$ (ASC ("а") - 32) 75
И, наконец, третья причина, по которой наши компьютеры могут выполнять арифметические действия с 8 битами помимо 16, за- ключается в том, что отдельные байты легче использовать как строительный материал для построения более сложных операций. Предположим, например, что нам нужно провести сложение или вычитание чисел, содержащих более 16 разрядов. Для этого нам придется иметь дело с 24 битами, т.е. с 3 байтами. Компьютер это делает точно так же, как это делали бы мы при сложении в стол- бик. Когда мы складываем, скажем, 123 и 456, то мы делаем это по отдельным цифрам, начиная справа. Мы складываем 3 и 6, по- лучая 9, и затем переходим к следующему разряду. Если любая пара дает число больше 10, мы переносим единицу в следующий разряд. Наши компьютеры делают то же самое с помощью 8 би- тов. При 8-разрядном сложении или вычитании наш микропроцес- сор может работать с числами любой величины, складывая или вычитая бит за битом. Переносы в следующий разряд осуществ- ляются с помощью так называемого признака переноса. (Более подробно о признаках, или флагах, мы расскажем в подразделе "Флаги ПК" в разд.6.3). Когда мы говорили о форматах данных в гл.З, мы упоминали, что наши 8- и 16-разрядные числа могут быть со знаком или без знака. Формат со знаком позволяет работать с отрицательными числами. Наши ПК могут выполнять операции сложения и вычита- ния разными способами, что дает программистам возможность выбирать между 8- и 16-битовой арифметикой, между числами со знаком и без знака, используя или игнорируя переносы из пред- ыдущих операций. Все эти операции касаются двоичной системы счисления, в основном используемой компьютерами. Существуют также дополнительные команды, позволяющие компьютеру рабо- тать с десятичными числами. В то время, как наши ПК могут осуществлять практически все возможные варианты операций сложения и вычитания, их подход к умножению и делению несколько иной. Мы можем умножать 8- и 16-разрядные числа (т.е. числа длиной 8 бит и машинное слово) и рассматривать их как числа со знаком или без знака. Для деления мы всегда используем 32 бита, т.е. делим двойное слово на 8- или 16-битовый делитель, со знаком или без знака. Таковы основные арифметические действия, которые может вы- полнять наш компьютер. Если нам нужно выполнить более слож- ные действия, например, с большими числами или с плавающей запятой, то они осуществляются с помощью особых подпрограмм. Математические сопроцессоры, так называемые "восемьдесят седьмые", также могут использоваться в особых случаях выполне- ния арифметических действий. Этому будет посвящен разд.6.2. 76
Совет для интересующихся системой команд Если вы хотите получить больше сведений о возможностях системы команд ПК, то это можно сделать несколькими путями, не прибегая к трудному и утоми- тельному программированию на языке ассемблера. Для этого потребуется не- много смекалки в расшифровке криптографических кодов, используемых в язы- ке ассемблера, но вы будете вознаграждены, получая моральное удовлетворе- ние от того, что знаете несколько интимных подробностей работы вашего ПК. Для этого нужно найти любую программу на языке ассемблера и с ее по- мощью увидеть, что можно требовать от системы команд компьютера. Лучше всего иметь программу на языке ассемблера с комментариями программиста, которые объясняют, что именно происходит на каждом шаге программы. Готовый текст встроенных программ ПЗУ базовой системы ввода-вывода с подробными комментариями вы найдете в "Техническом руководстве", которое фирма IBM выпускает дпя каждой модели своего ПК. Если вы не сможете достать "Техническое руководство IBM", не отчаивай- тесь: есть еще один способ узнать, как пишутся серьезные программы, состоя- щий в их расшифровке с помощью дисассемблера (перевод с непонятного ма- шинного языка на более понятный язык ассемблера). Довольно грубый, но прак- тичный дисассемблер есть в нашем распоряжении в составе дисковой операци- онной системы. Этот дисассемблер включен в программу DEBUG. Вы можете воспользоваться программой DEBUG для разбора любой програм- мы, к которой вы имеете доступ, включая и встроенные программы ПЗУ. При- мер такого разбора вы найдете в конце этой главы в подразделе "Изучаем пре- рывания". Микропроцессоры могут выполнять не только арифметические действия, хотя именно арифметические вычисления — это ядро компьютерных операций. Если бы возможности компьютера ограничивались только вы- полнением арифметических действий и простой обработкой дан- ных (такой, как передача данных по системе), то наши компьюте- ры были бы ни чем иным, как обычными счетными машинами. Именно разнообразие команд, т.е. компьютерная логика, делает наши компьютеры гораздо более эффективными, чем простые калькуляторы. Операции компьютерной логики приспосабливают работу маши- ны к конкретной ситуации. В репертуаре нашего компьютера есть три вида компьютерой логики: сравнение, условныий переход и повторение. Для примера я заставлю наш компьютер играть роль служащего платной автомобильной стоянки. Если место на автостоянке стоит, скажем, 1 долл, в час, и общая стоимость не может превышать 5 долл., то служащий автостоянки должен подсчитать, сколько мы должны заплатить, и проверить не превышает ли это возможную сумму. Служащий умножает 1 долл, на число часов, которые наш автомобиль стоял на стоянке, и затем сравнивает полученый результат с суммой 5 долл. В машин- ной логике это называется сравнением, и его результат записыва- ется в виде специальных знаков или флагов, как, например, знак переноса, о котором мы уже упоминали. Сравнение представляет собой одно из основных арифметических действий. Сравнение двух чисел есть не что иное, как вычитание одного числа из друго- го, для того, чтобы установить, какое из двух чисел больше, или 77
что они равны. Флаги имеют арифметическое значение: нулевой флаг показывает, что результат арифметического действия равен нулю, т.е. при сравнении оба числа оказались равными. Эти флаги, характеризующие результат любого арифметического действия, выполненного машиной, подводят нас ко второй части компьютер- ной логики — условным переходам. Условные переходы позволяют компьютеру приспособить свои операции к конкретной ситуации. Переход представляет собой из- менение порядка выполнения операций. Условный переход — это переход от одной последовательности команд к другой, обуслов- ленный значением флагов. Наш компьютер, выполняющий обя- занности служащего автостоянки, сравнив стоимости пребывания нашего автомобиля на стоянке с максимальной суммой в 5 долл., возьмет от нас только 5 долл., если стоимость окажется выше. Условные переходы используются программами компьютера двумя разными способами, хотя сама команда (условный пере- ход) может быть одной и той же. Один способ, как мы дальше увидим, это просто выбор между двумя возможными операция- ми, например между требованием заплатить истинную стоимость пребывания на стоянке или максимально допустимую сумму в 5 долл. Другой способ применения команд условного перехода за- ключается в управлении выполнением цикла, т.е. числом повторе- ния серии команд. Наш компьютер, работая на автостоянке, повто- рял бы операцию парковки автомобиля до тех пор, пока на стоян- ке имеются свободные места и пока есть клиенты, желающие ос- тавить свою машину на автостоянке. Служащий автостоянки выпол- няет цикл, т.е. повторяет процесс парковки автомобилей, до тех пор, пока команды сравнения и условного перехода не перестанут давать информацию о том, что имеются машины и свободные ме- ста для парковки. Обычная команда условного перехода может использоваться в компьютерной программе с любой из этих целей — выбор между двумя направлениями операций или управление выполнением пе- рехода, но ввиду того, что выполнение цикла является очень важ- ным элементом в работе компьютера, существуют специальные команды, созданные именно для выполнения цикла. Некоторые из них предназначены для повторения целой серии команд, другие для повторения отдельной команды. Выполняемые нашим микро- процессором команды, о которых мы рассказали, представляют собой лишь небольшую часть всей системы команд, но они дают достаточно полное представление о тех важных вещах, которые способен делать компьютер, и о тех основных блоках, из которых строятся наши компьютерые программы. Мы также узнаем, как быстро могут компьютеры выполнять эти команды. Вот пример того, с какой скоростью наши ПК могут выполнять некоторые основные команды. Стандартный ПК модели IBM PC, оснащенный 8088-м микропроцессором, может сложить два числа 78
около 1 000 000 раз за секунду, умножить два числа около 40 000 раз за секунду. Условный переход может быть выполнен около 500 000 раз за секунду. В среднем стандартный ПК этой модели может выполнять около 250 000 команд за секунду. Более скоро- стной персональный компьютер сис^мы АТ, применяющий 286-й микропроцессор, может сложить два числа 2 000 000 раз за секунду, или примерно вдвое быстрее, чем компьютер модели IBM PC. Умножение может производиться 300 000 раз за секунду, или более чем в 7 раз быстрее, чем в PC. Условный переход мо- жет быть выполнен 600 000 раз за секунду. В среднем модель АТ справляется приблизительно с 1,5 млн. команд/с, т.е. работает в 5 - 6 раз быстрее, чем модель PC. Мы видим, что скоростные качества моделей PC и АТ поистине впечатляющие. Однако нужно иметь ввиду, что даже самое про- стое задание, которое мы даем компьютеру, требует выполнения сотен и тысяч конкретных отдельных команд. Но так как он может выполнить миллионы команд за одну секунду, наше задание бу- дет выполнено довольно быстро. 6.2. Математические сопроцессоры Микропроцессоры нашего семейства ПК сконструированы та- ким образом, что их производительность может быть значительно увеличена с помощью других процессоров, причем это можно сделать двумя путями. Один из них — такого мы еще не встреча- ли в семействе ПК — позволяет соединить несколько микропро- цессоров (например, два или больше микропроцессоров 8088 фирмы Intel) для проведения совместных вычислений. Другой путь - это использование специализированных сопроцессоров, или вспомогательных процессоров, для выполнения работы, с которой не справляется главный микропроцессор. С микропроцессорами наших ПК могут использоваться два различных типа сопроцессо- ров. Один из этих типов берет на себя основную часть забот по обработке данных ввода-вывода и не применяется в наших ПК. Другой тип — предназначен для выполнения сверхскоростных и сверхточных операций с числами, представленными в форме с плавающей запятой. Этот тип микропроцессоров включает в себя микросхемы семейства "восемьдесят седьмых": 8087 для машин типа PC и 80287 для машин типа АТ, и называется процессором числовых даных, или математическим сопроцессором. Математический сопроцессор позволяет главному микропроцес- сору переложить на него соответствующее бремя работы с число- выми данными. Но это возможно только в том случае (как мы убедились в гл.З), когда ПК оснащен соответствующим сопроцес- сором, когда программное обеспечение предусматривает его ис- 79
пользование и когда требуется выполнить соответствующий вид работы. Конструкция почти всех членов семейства ПК предусматривает установку сопроцессора 87, но оснащены им только немногие ти- пы персональных компьютеров. Обычно сопроцессоры устанавли- ваются тех случаях, когда в них есть острая необходимость и когда налицо два условия: наличие большого объема вычисли- тельной работы и обеспеченность программами, которые могут пользоваться всеми преимуществами сопроцессора. Существует две категории программ, пользующихся услугами сопроцессора. Одни из них требуют обязательной установки со- процессора. К таким программам относится переработанный фир- мой IBM вариант языка программирования АПЛ. Обычно про- граммы, которые требуют применения сопроцессора, ориентиро- ваны на использование в науке и проектировании. Другая катего- рия программ может прибегать к использованию сопроцессора, если ПК оснащен им. К ним относятся программы электронных таблиц, такие как Lotus 1-2-3, и программа Framework. Ввиду того, что все больше составителей языков программирования видят вы- годы применения сопроцессоров и стараются использовать их в своих программах, мы становимся свидетелями увеличения числа программ, предусматривающих использование сопроцессора. Однако не следует ожидать, что оснащение вашего компьютера сопроцессором автоматически увеличит скорость используемых вами программ. Во-первых, многие программы просто не пре- дусматривают использование сопроцессора, как, например, про- граммы подготовки текстов. Во-вторых, даже те программы, кото- рые могут использовать сопроцессор, на самом деле этого не де- лают. Например, программа Framework знает, как использовать преимущества сопроцессора, но не применяет его в подпрограм- мах вычисления с помощью электронных таблиц, а пользуется им только для выполнения таких сложных операций, как возведение в степень. Какими преимуществами обладает математический сопроцес- сор, или процессор числовых данных? В основном он может де- лать наши вычисления более скоростными и более точными. Боль- шая скорость обусловлена тем, что сопроцессор может выдавать результаты вычислений в 50-100 раз быстрее, чем обычный ком- пьютер, использующий подпрограммы с традиционными команда- ми выполнения арифметических действий. (Это впечатляющее увеличение скорости относится только к самим вычислительным операциям. Если принять во внимание остальные операции про- граммы и некоторые затраты времени, связанные с использовани- ем сопроцессора, то выигрыш в скорости составит всего 5-10 раз. Медленнее, но все равно впечатляет.) Дополнительная точность определяется тем фактом, что все со- процессоры семейства 87 фирмы Intel выполняют вычисления с 80
10- байтовым форматом, о чем мы упоминали в гл.З. Главный микропроцессор посылает данные сопроцессору в нескольких форматах, о которых мы тоже уже говорили: это длинные и ко- роткие числа, три формата числа с пЯЬвающей запятой и даже де- сятичный формат. Сопроцессоры работают только с самым длин- ным 10-байтовым форматом с плавающей запятой, что дает са- мую высокую точность. Часто высокая точность не требуется, но в сложных сериях вычислений, где это необходимо, она достигается только с помощью сопроцессора. У сопроцессоров этого семейства есть еще одно интересное преимущество. Они обладают двумя свойствами, позволяющими выходить за обычные рамки вычислений с плавающей запятой. Одно из них заключается в том, что сопроцессоры семейства 87 фирмы Intel имеют встроенные значения семи важнейших посто- янных, как, например, числа "л", широко использующихся в науч- ных расчетах. Эти встроенные значения представляют большое удобство для программистов. Второе из важных свойств сопро- цессоров состоит в том, что помимо четырех основных арифмети- ческих действий (сложения, вычитания, умножения и деления) они могут выполнять еще пять действий, называемых трансцендентны- ми операциями. Эти операции чрезвычайно важны при выполне- нии тригонометрических и логарифмических вычислений. В науч- ных и инженерных расчетах эти специальные команды облегчают работу программиста и обеспечивают проведение этих расчетов стандартным образом. "Восемьдесят седьмые0 называются сопроцессорами, потому что они являются вспомогательными средствами для главного микропроцессора. Будет интересно узнать, как осуществляется взаимодействие главного микропроцессора и сопроцессора. Со- процессоры являются вспомогательными устройствами и включа- ются в работу тогда, когда микропроцессор посылает им специ- альный сигнал. Специальная команда, называемая ESCAPE, ис- пользуется главным микропроцессором для подачи команды со- процессору. (Кстати, не следует путать специальную команду ESCAPE с ESCAPE-символом начала управляющей последователь- ности, десятичный код 27, о котором мы говорили в гл.4 при об- суждениии набора символов ПК.) Команда ESCAPE главного1 мик- ропроцессора включает в себя код той команды, которую пред- стоит выполнить сопроцессору. Когда сопроцессор получает ко- манду, он начинает работать независимо от главного микропро- цессора (который в это время может ждать результата работы со- процессора или продолжать выполнение собственной работы). По- рядок действий подразумевает определенное сотрудничество между двумя процессорами, которое можно выразить следую- щим образом: микропроцессор при помощи команды ESCAPE вызывает к ра- боте сопроцессор; 81
сопроцессор начинает работать, освобождая главный микро- процессор; микропроцессор начинает выполнять другую работу, если она есть (например, готовит данные для следующей команды сопро- цессору); в ином случае он переходит к следующему этапу рабо- ты; когда главный микропроцессор готов получить результат от со- процессора, он выполняет команду FWAIT, которая означает, что он ждет завершения выполнения команды сопроцессором (если она еще не завершена); после выполнения команды FWAIT главный микропроцессор может воспользоваться результатами вычислений сопроцессора. Эта последовательность выглядит несколько громоздкой, но на самом деле она гораздо проще. Единственной тонкостью состав- ления подобных программ на языке ассемблера является то, что команды ESCAPE используются вместо обычных арифметических команд, а команды FWAIT добавляются перед использованием результатов вычислений. Эти детали касаются, естественно, только программиста. Для тех из нас, кто пользуется программами с при- менением сопроцессора, нет никаких забот — мы просто пользу- емся всеми преимуществами, которые дают нам сопроцессоры. # # #Технические подробности Сопроцессорные константы и специальные операции Как мы уже упоминали, сопроцессоры могут не только очень быстро выпол- нять арифметические действия с числами с плавающей запятой. Они содержат также набор значений отдельных констант и могут выполнять трансцендентные операции, которые имеют особое значение в научных и инженерных расчетах. Им и посвящен настоящий подраздел. Существуют семь специальных констант, две из которых — это обычные 0 и 1, которые, таким образом, значительно экономят время и место в наших про- граммах. Еще одна константа знакома всем: это число "тг" отношения диаметра круга к длине его окружности. Остальные четыре постоянные — это основные значения, необходимые для работы с логарифмами, либо основания 2, либо на- турального основания, которое математически обозначают буквой "е": log210; logne; log102; loge2. Специальные трансцендентные операции необходимы для вычисления функ- ций, которые нельзя определить с помощью простых арифметических действий. Трансцендентные операции обычно рассчитываются с помощью формул аппрок- симации, но эти пять встроенных функций обеспечивают основу для выполнения многих различных трансцендентных функций, не прибегая к сложным формулам аппроксимации (стандартные аппроксимации встроены в сопроцессор). Эти пять функций следующие: 1. Тангенс. 2. Арктангенс. 3. Возведение числа 2 в степень х-1, т.е.2х-1. 4. Y-log2X. 5. Y-log2(X + 1). Эти пять функций могут показаться незнакомыми для многих читателей, даже для тех, у кого еще живы в памяти уроки математики. Но я могу вас заверить, что они в самом деле обеспечивают основу того, что необходимо для проведе- ния самых обычных трансцендентных операций. 82
### 6.3. Вспомогательные средства: память, порты, регистры и стеки Итак, мы с вами уже говорили о том, какие виды операций мо- гут выполнять наши микропроцессоры, как самостоятельно, так и с помощью числовых сопроцессоров. Сейчас настало время взгля- нуть на средства, имеющиеся в распоряжении микропроцессора и помогающие ему выполнять эти команды и совершать полезную работу. В этом разделе мы с вами поговорим о том, как микро- процессор использует память и порты, регистры и стеки. Существуют только три средства, с помощью которых микро- процессор компьютера может вести диалог с внешними устройст- вами. Одно из этих средств — это специальная линия связи с со- процессором через команду ESCAPE, о которой говорилось в разд. 6.2. Другие два более обычны. Они играют ключевую роль практически во всех компьютерных операциях. Речь идет о компь- ютерной памяти и использовании портов. Из гл.2 мы узнали, что память — это рабочее место компьюте- ра. Память — это то место, где микропроцессор находит как свои программные команды, так и свои данные. И данные, и команды хранятся в памяти, откуда они и поступают в главный микропро- цессор. Память — это неотъемлемая часть компьютера, и ее су- щественной функцией является обеспечение рабочего пространст- ва для микропроцессора. Вследствие огромной важности памяти мы поговорим о ней подробнее в гл.7. Если память является важным внутренним устройством ПК, то должен быть способ связывать ее с внешним миром, т.е. с внеш- ними устройствами. Именно для этого служат порты. Порт — это нечто вроде телефонной линии связи, находящейся в распоряже- нии компьютера. Любой элемент в цепи компьютера, с которым необходимо связать микропроцессор, получает свой собственный номер порта, и микропроцессор использует этот номер точно так же, как мы пользуемся телефонным номером для связи с нуж- ным абонентом. Например, один номер порта используется для связи с клавиатурой, другой с программируемым таймером, о ко- тором говорилось в разд.5.3. Управление дисководами и пере- сылка данных тоже осуществляется с помощью портов, так же как и управление дисплеем. Но данные, появляющиеся на дисплее, проходят через память, а не через порты. Микропроцессор имеет 65 536 "телефонных" номеров портов, но многие из этих портов остаются незанятыми. Конструкторы лю- бого микрокомпьютера, включая наши ПК, решают, какие номера портов будут использоваться с теми или иными целями, и все эле- менты компьютера устроены так, чтобы реагировать на соответст- 83
вующие номера портов. Шина компьютера, о которой говорилось в гл.5, играет роль телефонного коммутатора, которым пользуют- ся все устройства компьютера с присвоенным соответствующим номером порта. Когда главному микропроцессору необходимо связаться с тем или иным устройством, он посылает в шину нуж- ный номер порта, и соответствующее устройство отвечает ему. Микропроцессор имеет д^е специальные команды на языке ас- семблера, которые используются для связи с портами: команда OUT посылает данные соответствующему номеру порта, а коман- да IN запрашивает данные у порта. Обычно, когда мы имеем дело с командами языка ассемблера, к которым принадлежат ко- манды IN и OUT, мы не имеем возможности экспериментировать с ними, если непосредственно не работаем с языком ассембле- ра. Однако в данном случае язык Бейсик предоставляет в наше распоряжение две команды, INP (не IN, a INP) и OUT, которые де- лают то же самое, что и соответствующие команды языка ассемб- лера. Мы можем использовать их в наших экспериментах с ком- пьютерными портами, хотя это очень хитрая штука. Для примера предлагаю вам короткую программу, включающую и выключаю- щую звук компьютера просто при помощи портов: 10 SOUND 500,1 20 X = (INP(97)\4)-4 30 PRINT "Нажмите любую клавишу для прекращения звучания!" 40 OUT 97, X + 3 'включение звука 50 FOR I = 1 ТО 250 : NEXT I 'подождите 60 OUT 97, X 'выключение звука 70 FOR I = 1 ТО 250 : NEXT I подождите 80 IF INKEY$ = " " THEN GOTO 40 Испытайте эту программу и вы получите собственный опыт игры с компьютерными портами! Обычно нет необходимости иметь дело непосредственно с пор- тами, если только мы не выполняем какое-нибудь очень необыч- ное программирование. Порты остаются в распоряжении внутрен- них компьютерных управляющих программ базовой системы вво- да-вывода. Для нас порты представляют интерес, постольку по- скольку они являются механизмом связи главного микропроцес- сора с остальными устройствами компьютера. А сейчас мы поговорим о регистрах и стеках, помогающих глав- ному микропроцессору в работе. Начнем с регистров. Регистры — это небольшие специальные виды памяти, имеющи- еся в распоряжении микропроцессора (рис. 6.1). Регистры в од- ном схожи с главной памятью компьютера: они представляют со- бой места хранения данных, с которыми работает микропроцес- сор. Но основная память компьютера несоизмеримо больше и располагается вне микропроцессора. Она может быть использова- 84
на практически для всех задач и к ней можно обратиться с по- мощью адресов памяти; этим она и отличается от регистров. Рис.6.1. Регистры процессора IBM PC Регистры — это 14 небольших 16-битовых элементов для хра- нения данных. Они представляют собой неотъемлемую составную часть микропроцессора. Каждый из них служит своего рода чер- новиком, в котором микропроцессор выполняет расчеты и запи- сывает промежуточные результаты. Некоторые из регистров явля- ются специальными, другие — универсальными. Мы познакомим вас со всеми регистрами, чтобы вы знали, о чем идет речь, когда столкнетесь с их упоминанием в литературе. Первую группу составляют универсальные регистры, они-то и служат черновиками вычислений. Их четыре: АХ, ВХ, СХ и DX. Каждый из них может использоваться для временного хранения данных и для промежуточных вычислений. Размер каждого 16 би- тов. Мы можем легко работать и с половиной каждого регистра, потому что они делятся на половины, которые называются соответ- ственно АН и AL, ВН и BL и т.д. Большая часть работы компьютера ведется с помощью этих универсальных регистров. Следующая группа регистров помогает микропроцессору ори- ентироваться в памяти компьютера. Они называются сегментными регистрами. Каждый из них участвует в вычислении входа в опре- деленный раздел, или сегмент памяти, объемом 64 Кбайта. Ре- гистр сегмента кода, или регистр CS, указывает место расположе- ния программы в памяти. Регистр сегмента данных, или регистр DS, указывает место хранения данных, используемых в програм- 85
ме. Регистр дополнительного сегмента, или регистр ES, дополняет сегмент данных. Регистр сегмента стека указывает место располо- жения компьютерного стека, о котором мы расскажем немного ниже. Мы более подробно рассмотрим использование этих реги- стров в гл. 7, когда будем говорить о памяти. В то время, как сегментные регистры используются для получе- ния доступа в большие 64-килобайтовые сегменты памяти, послед- няя группа регистров применяется для обеспечивания доступа к отдельным байтам памяти. Вместе с сегментными регистрами они используются для указания точного места в памяти. Таких регист- ров всего 5, каждый из них имеет особую задачу. Указатель ко- манды IP, также называемый счетчиком команд ПК, указывает микропроцессору на адрес выполняемой команды. Указатель сте- ка SP и указатель базы ВР используются для указания на место данных в стеке, о чем разговор впереди. Индекс источника SI и индекс приемника DI помогают нашим программам перемещать большое количество данных с одного места на другое. И, наконец, есть еще один регистр, называемый флаговым ре- гистром и содержащий условные флаги, о которых мы уже рас- сказывали. Различные флаги говорят нашим программам, на ка- ком этапе работы находится компьютер: готовы ли результаты арифметических вычислений, нужны ли прерывания и т. д. # # ^Технические подробности Флаги ПК Микропроцессоры наших ПК в значительной степени управляются с помощью серии однобитовых флагов, каждый из которых посылает определенный сигнал компьютеру. Флаги работают независимо друг от друга, но они для удобства объединены во флаговый регистр. Отдельные флаги можно проверить и устано- вить с помощью специальных команд, а вся группа флагов может быть считана или установлена с помощью пары команд, считывающих или устанавливающих весь флаговой регистр. Флаги используются следующим образом. Всего существует 9 стандартных флагов. Шесть из них обозначают результаты арифметических и подобных им операций. Флаг нуля ZF обозначает нулевой результат (или равенство при срав- нении); флаг знака SF обозначает отрицательный результат; флаг переноса CF обозначает перенос в следующий разряд; флаг вспомогательного переноса AF обозначает перенос из первых четырех разрядов (что необходимо для модели- рования десятичных операций); флаг переполнения OF обозначат слишком большой результат и, наконец, флаг четности PF обозначает четность или нечет- ность результата. Три других флага используются в целях управления. Флаг направления DF обозначает направление повторяемых операций (таких, как побайтовая обработ- ка данных) — справа налево или слева направо. Флаг прерывания IF указывает на необходимость осуществления прерывания или отсутствие таковой. Флаг внутреннего прерывания TF заставляет компьютер делать специальное "внутре- нее прерывание" после выполнения отдельной команды. Это обеспечивает вы- полнение программы отдельными шагами, прослеживая результат каждой от- дельной команды. В дополнение к этим девяти флагам микропроцессор 286 фирмы Intel, приме- няемый в компьютерах типа АТ, имеет еще два особых флага. Один из них на- зывается NT и применяется для выполнения отложенных заданий. Другой явля- ется двухбитовым флагом, называемым IOPL, который применяется для управ- ления уровнем привилегий ввода-вывода. 86
Вы можете вывести значения этих флагов на экран дисплея, так же как и дру; гие регистры, используя команду R программы DEBUG дисковой операционной системы. Например, чтобы ввести в действие программу DEBUG, нажми’те R и «Enter>. DEBUG покажет вам содержание регистров в данный момент и положе- ние всех флагов. ц ### У микропроцессора имеется еще одно средство, позволяющее ему успешно справляться с самыми сложными задачами, которые мы задаем компьютеру. По мере работы компьютер все глубже и глубже погружается в массивы данных, и ему время от времени необходимо осмотреться и понять, где он находится и что делает. Чтобы переключиться с одного вида работ на другой, компьютеру нужно средство, позволяющее ему постоянно следить за ходом работы. Для слежения за тем, какой этап работы выполнит в дан- ный момент компьютер, используется стек — специальное средст- во, записывающее и хранящее информацию о каждой операции, выполняемой компьютером. Когда компьютер переходит к новой подпрограмме или временно прерывает выполнение одного зада- ния, чтобы выполнить другое, стек отмечает все эти действия так, чтобы компьютер без труда мог вернуться к тому месту, на кото- ром он остановился. Когда компьютер переключается на выполне- ние нового задания, информация о нем помещается на вершину стека, указывая на то, чем в данный момент занимается компью- тер. Затем, когда компьютер возвращается к прежнему заданию, эта информация удаляется из стека и на его вершине снова появ- ляется информация о той работе, к которой наш компьютер вер- нулся. Мы рассмотрели возможности наших микропроцессоров, произ- водительность и свойства их команд, а также некоторые средства, помогающие микропроцессорам реализовывать эти возможности: память, стеки и т.д. Но мы еще практически не коснулись главной движущей силы, заставляющей работать наши компьютеры. Этой движущей силой являются прерывания, о которых мы поговорим в следующем разделе. 6.4. Прерывания: основная движущая сила Одним из принципиальных отличий компьютера от любой -дру- гой машины, созданной человеком, является то, что ПК способен реагировать на непредсказуемые события в процессе работы. Эта способность обеспечивается с помощью особого свойства компью- тера — аппарата прерываний. Прерывание позволяет компьютеру приостановить любое свое действие и переключиться на другое в зависимости от того, что вызывает это прерывание, например нажатие соответствующей клавиши на клавиатуре компьютера. Способность к прерыванию разрешает, казалось бы, сложней- шую проблему эффективности работы нашего компьютера. С од- 87
ной стороны, мы хотим, чтобы компьютер занимался той работой, которую мы ему дали. С другой стороны, нам нужно, чтобы он реагировал на любую нашу команду, подаваемую, например, с помощью клавиатуры. Если бы компьютер был способен только на то, чтобы, не отвлекаясь, выполнять то, что ему заранее было задано, он бы не смог ответить на наши запросы своевременно, не следя постоянно за деятельностью клавиатуры. Реагировать на сигналы, посылаемые клавиатурой, равно как и на другие сигналы, требующие внимания, в то время, когда компьютер занят другой работой, позволяет ему система прерываний. Микропроцессор нашего ПК имеет "врожденную" способность прерывать выполнение операций, при этом у него существует на- дежное средство откладывать на хранение работу, выполнение которой было прервано. Для этого используется, как мы увидели в разд. 6.3, стек микропроцессора. Когда происходит прерывание, запись того, что делал компьютер в этот момент, хранится в стеке, так что по завершении прерывания мы можем вернуться к тому месту, от которого нам пришлось отвлечься. Это один из несколь- ких способов применения стека, но он является самым важным. Без стека, куда мы можем положить на хранение информацию о выполняемой работе, не могла бы реализоваться сама идея пре- рывания. Каждая часть компьютера, которой может потребоваться внима- ние микропроцессора, получает свой собственый номер кода пре- рывания. У клавиатуры есть свой собственный номер, так что вся- кий раз, когда мы нажимаем клавишу (а вернее, когда мы ее от- пускаем после нажатия), микропроцессор узнает об этом благода- ря появлению прерываний. Внутренний таймер ПК также обладает способностью прерываться для того, чтобы дать возможность хро- нометрирующей программе "слышать" каждый "удар" часов-тай- мера, который повторяется 18 раз/с. Все это кажется нам сплош- ным прерыванием, особенно эти 18 прерываний за секунду, кото- рые, как может показаться, способны "до смерти" загнать наш бедный компьютер. Однако микропроцессор может выполнить десятки тысяч команд за промежуток времени между двумя уда- рами часов, так что прерывания таймера не отнимают у него мно- го времени. Дисководы и принтеры также имеют присвоенные им собственные номера прерываний. Дисководы пользуются ими, чтобы сообщить о завершении определенной работы, порученной им программой; принтеры сигнализируют о том, что у них кончи- лась бумага. Может показаться любопытным, что прерывания вначале не входили в замысел конструкции компьютера. В самом деле, ком- пьютеры использовались на протяжении нескольких десятилетий, до того как стал широко использоваться эффект прерываний. Се- годня трудно представить себе компьютер, который не обладал бы этим необходимым свойством, позволяющим ему реагировать 88
на внешние воздействия. Хотя прерывания дают компьютеру воз- можность реагировать на сигналы извне, например на сигнал при- нтера о том, что у него кончилась бумага, это не единственное, для чего применяется данный эффект. Понятие прерывания ока- залось настолько полезным, что его приспособили для внутренне- го пользования самого компьютера. Внутри наших ПК используют- ся три основных вида прерываний. Первый из них, о котором мы уже говорили, это прерывание, исходящее от любой части компь- ютера и сообщающее о чем-то, требующем немедленного внима- ния микропроцессора. Этот вид называется аппаратным прерыва- нием. Два других вида относятся к программному обеспечению. Иногда при выполнении программы может что-нибудь случить- ся или с самой программой или с содержащимися в ней данными. Это происходит примерно так же, как если бы вы, читая эти стро- ки, натолкнулись на бессмысленный набор букв, абсолютно ничего не означающий — "ксеьптръу фмуохэь ьый". То же самое может, хотя и не должно, случиться с компьютером. Микропроцессор может наткнуться на абсолютно бессмысленные для него коман- ды, или данные, от которых ему просто "стало бы плохо" (напри- мер, попытка разделить число на нуль). Когда это все-таки проис- ходит, микропроцессор осуществляет так называемое прерывание в особой ситуации. Последняя категория прерываний в отличие от других не возни- кает неожиданно. Вся идея прерываний настолько эффективна, что позволяет программам посылать сигнал о том, что им нужна по- мощь со стороны другой программы. Такой вид прерывания на- зывается программным прерыванием. Мы уже упоминали о том, что наши ПК оснащены встроенными программами ПЗУ — базо- вой системой ввода-вывода. Выполнение нашим компьютером любой программы требует возможности запросить услуги базовой системы ввода-вывода, и программное прерывание обеспечивает такую возможность. Программные прерывания функционируют точно так же, как другие виды прерываний. Единственное, что от- личает их, — это причина прерываний. В данном случае вместо неожиданной остановки программное прерывание умышленно вызывается нашими программами. В языке ассемблера существу- ет специальная команда с именем INT, которая используется в программах для реализации прерывания. (Чтобы узнать более подробно об удивительно широком разнообразии возможных применений прерывания, прочитайте подраздел "Еще один взгляд на типы прерываний".) Еще один взгляд на типы прерываний Существует гораздо больше типов прерываний,чем вы можете себе пред- ставить. В этом подразделе я выделил три категории прерываний: аппаратное, программое и прерывание в особой ситуации. Но есть еще один подход к пре- рываниям, который подводит нас ближе к пониманию всех возможностей их 89
применения • семействе ПК. Более тщательный анализ позволяет обнаружить всего шесть различных видов прерываний. Во-первых, это аппаратные прерывания микропроцессора Intel. Эта категория прерываний изначально заложена в микропроцессоры их конструкторами и включает прерывание в случае деления на нуль, о котором мы уже упоминали, прерывание в случае отключения питания и другие. Эта категория является об- щей для всех компьютеров, оснащенных микропроцессором семейства Intel 8088, независимо от того, насколько сам компьютер отличается от моделей на- шего семейства ПК. Следующая категория — это аппаратные прерывания ПК, которые сигнализи- руют микропроцессору о событиях, произошедших в аппаратуре (например, от- сутствие бумаги в принтере или завершение работы дисковода). Аппаратные прерыавния ПК Являются универсальными для всего семейства IBM PC. Существуют также программые прерывания, общие для всего нашего селдей- ства персональных компьютеров. Они используются для приведения в действие встроенных программ ROM-BIOS, например, для вывода сообщения на экран дисплея. Следующая категория — это программые прерывания DOS. В отличие от че- тырех предыдущих типов эти прерывания не встроены в компьютер, а вносятся в него с программым обеспечением, в данном случае с дисковой операционной системой. Так как мы обычно постоянно используем одну операционную систе- му, эти прерывания все время находятся в компьютере, даже при том, что они не являются основными в работе компьютера. Эти прерывания управляются подпрограммами дисковой операционной системы (или другой используемой операционной системы). Далее идут прерывания прикладных программ, которые основаны на време- нем использовании той или иной программы (включая Бейсик, который имеет довольно много собственных видов прерываний). Эти прерывания определяются характером выполняемой прикладной программы. И, наконец, шестая категория, которая на первый взгляд является довольно странной. Как мы узнаем в гл.7, часть механизма прерывания включает вектор- ную таблицу, которая содержит адреса программ обработки прерывания. В этой таблице, однако, есть некоторые адреса, которые не имеют никакого отноше- ния к прерываниям. Вместо этого адресная таблица используется как удобное место хранения некоторых важных адресов, не имеющих ничего общего с адре- сами программ обработки прерывания. Для каждого из них существует соответ- ствующий номер прерывания, который, однако, никогда не может быть исполь- зован, так как для него не существует соответствующей программы обработки прерывания. Как действует механизм прерывания? Давайте посмотрим. Каждое определеное прерывание обозначается соответствующим номером, по которому его можно идентифицировать. Например, один номер прерывания используется для дисководов (все диско- воды используют один и тот же номер). Таймер, клавиатура и при- нтер имеют каждый свои номера прерывания. Что касается базо- вой системы ввода-вывода, то ее сервисные программы подраз- деляются на разные группы; например, есть больше десятка раз- личных сервисных программ базовой системы ввода-вывода для выполнения различных операций на дисплее, но у всех у них один и тот же номер прерывания. Для каждого типа прерывания, заложенного в компьютер, су- ществует определенная программа обработки прерывания, кото- рая называется программой обработки прерывания и выполняет любую работу предусмотренную прерыванием. В самом начале компьютерной памяти находится специальная таблица, которая со- держит адреса всех программ обработки прерываний. Когда про- исходит прерывание, его номер используется для включения соот- 90
ветствующей программы обработки прерывания. Перед тем как такая программа начнет свою работу, механизм микропроцессора, отвечающий за обработку прерывания, оставляет запись в стеке о том, какая работа производилась Йо прерывания. После этого микропроцессор переключается на работу с программой обработки прерывания. Программа обработки прерывания начинает работу, приняв предохранительные меры против дальнейших возможных преры- авний, в случае если должны выполняться очень важные или сложные операции, которые нельзя прерывать. Обычно такие операции включают смену сегментного регистра, управляющего доступом в память, а также запись в стек дальнейшей информа- ции о состоянии, которую необходимо сохранить в добавление к той, которая была автоматически записана в начале прерывания. После завершения своих операций программа обработки преры- вания может снова привести в действие другие типы прерываний и выполнять остальную необходимую работу. Когда операции пре- рывания заканчиваются, программа обработки прерываний восста- навливает исходное состояние машины, в котором она находилась до прерывания, и компьютер может спокойно продолжать свою работу. Если вы хотите увидеть часть программы обработки пре- рывания, прочитайте подраздел "Изучаем программу обработки прерывания". # # #Технические подробности Изучаем программу обработки прерывания Чтобы получить представление о том, как выглядит часть программного кода программы обработки прерывания, рассмотрим следующий пример. Этот фраг- мент выделен из программы ПЗУ — базовой системы ввода-вывода ПК модели АТ. Код, который мы вам покажем, взят из начала программы, которая обраба- тывает запросы услуг видеодисплея. Мы начнем с приведения в действие программы DEBUG и сделаем это про- сто так: DEBUG Затем мы прикажем программе DEBUG "диассемблировать" некоторый про- граммный код в более удобный для нас формат языка ассемблера. Я знаю где искать подпрограмму, которую я хочу показать вам, поэтому я сразу задаю ее шестнадцатеричный адресный код: U F000:4605 В ответ DEBUG дает нам текст программы, который выглядит следующим образом (позволю себе привести его здесь полностью): FOOD: 3605 FB STI FOOO: 3606 FC CLD FOOD: 3607 06 PUSH ES F000: 3608 IE PUSH DS FOOO: 3609 52 PUSH DX FOOO: 360A 51 PUSH ex FOOO: 360B 53 PUSH BX FOOO: 360C 56 PUSH SI FOOO: 360D 57 PUSH DI 91
FOOO: 360E 55 FOOO: 360F 50 FOOO: 3610 8AC4 FOOO: 3612 32E4 FOOO: 3614 DIEO FOOO: 3616 8BF0 FOOO: 3618 3D2800 PUSH BP PUSH AX MOV AL,AH XOR AH,AH SHL AX,1 MOV SI,AX CMP AX,0028 Первая колонка (FOOO: 3605 и т.д.) — это список адресов, которым мы мо- жем пренебречь. Следующая колонка (FB, FC,06 и т.д.) — это действующий ма- шинный шестнадцатеричный код. А за ним идет то, что нас интересует: эквива- лент программого кода на языке ассемблера. Я хочу этому дать короткий ко- ментарий, так чтобы вы получили представление о том, что такое код языка ас- семблера, в частности, внутри программы обработки прерывания. Код начинается с команды STI, которая приводит в действие прерывание. Когда происходит прерывание, дальнейшие прерывания приостанавливаются на тот случай, если программе обработки прерывания придется выполнять какую- либо очень важную операцию. В даном же случае ничего важного не происхо- дит и поэтому включается механизм обработки других видов прерываний. Следующая команда CLD устанавливает флаг направления (о котором мы го- ворили в подразделе "Флаги ПК") в его нормальное положение "вперед”. Это обеспечивает продвижение "вперед", а не "назад", данным программы. Для нас это не очень важно, но интересно отметить, что программист потратил время на то, чтобы специально удостовериться, что флаг установлен в направление "впе- ред" еще до начала работы. За этим следует нечто гораздо более интересное: серия из девяти команд PUSH. Эти команды записывают данные в стек компьютера. Вы видите, что каж- дая из команд PUSH указывает на регистр (ES, DS и т.д.), который сохраняется. Эти значения регистров заносятся в стек, так что программа обработки прерыв- ания может убедиться, что они сохранены. По окончании действия программы обработки данных эти значения возвращаются из стека в регистры, таким обра- зом, независимо от того, как в это время использовались регистры, они всегда возвращаются в свое первоначальное состояния. За девятью операциями PUSH мы находим четыре команды обработки дан- ных (MOV, XOR, SHL, MOV), которые делают одну простую вещь: они берут число и готовят его для сравиния. Хотя эти команды выглядят довольно сложны- ми, все, что здесь происходит, на самом деле очень просто. Это, конечно, не самое детальное изучение кода языка ассемблера, но оно должно дать вам представление о том, как выглядит язык ассемблера и как осуществлять декодирование. Вы можете использовать эти приемы для иссле- дования других частей ПЗУ — базовой системы ввода-вывода вашего компью- тера или для изучения других программ. ### Программы обработки прерывания главным образом располо- жены во встроенном ПЗУ базовой системы ввода-вывода или как часть такой операционной системы, как DOS. Но они не ограниче- ны только системными программами. Наши прикладные програм- мы обработки текстов, электронные таблицы и т.п. — могут также иметь свои подпрограммы обработки прерывания, если в этом есть нобходимость. Любая программа может создать свою про- грамму обработки прерывания и использовать ее вместо стандар- тной (так, что прерывания обрабатывались бы особым способом) или создать новый вид прерывания. В заглавии этого раздела я назвал прерывания движущей силой ПК. Это в самом деле очень точное определение. Современные компьютеры, подобные нашим ПК, которые предназначены для использования прерываний, часто называются "компьютерами, приводящимися в движение прерываниями". Этим определением 92
они обязаны тому, что прерывания преаставляют собой механизм, который связывает компьютер с окружающим миром, в том числе и со мной, и с вами. Прерывания приводят компьютер в движе- ние, потому что, так или иначе, вся работа, которую поручают ком- пьютеру, приходит к нему в форме’прерываний. И, что более важно, вся внутреняя организация компьютера подразумевает ис- пользование прерываний в качестве факторов, определяющих, на что обратить внимание микропроцессора. Так как поток пререры- ваний направляет работу компьютера в нужном направлении, то наше определение прерываний как движущей силы абсолютно верно. Итак, познакомившись с прерываниями, мы узнали обо всем, что составляет основу работы микропроцессора. Мы узнали о са- мых важных свойствах, присущих всем членам семейства микро- процессоров Intel 8086, на использовании которых основаны наши ПК. Но, как мы уже упоменали, модели типа АТ оснащены мик- ропроцессорами Intel 286, самым современным микропроцессо- ром из всего семейства Intel 8086 и несколько отличающимся от своего собрата 8088, который установлен в моделях типа PC. Для того чтобы завершить повествование об этом славном семействе микропроцессоров, рассмотрим характерные особенности этого суперпроцессора. 6.5. Особенности микропроцессора INTEL 286 Микропроцессор Intel 286, которым оснащены все компьютеры ветви АТ нашего семейства ПК IBM, включая IBM AT, Compaq DeskPro, как говорится, "един в двух лицах", что и является клю- чом к его производительности. Одно "лицо" этого микропроцес- сора позволяет ему функционировать аналогично микропроцессо- ру Intel 8088, который устанавливается на стандартные ПК типа PC. Другое "лицо" обеспечивает ему такую большую мощность и та- кие дополнительные возможности, что его нельзя сравнить ни с каким другим микропроцессором. Этими "двумя лицами" явля- ются рабочий режим и привилегированный режим работы микро- процессора. В рабочем режиме Intel 286 функционирует в основ- ном так же, как микропроцессор Intel 8088, которым оснащена стандартная модель ПК IBM, т.е. PC. (Чтобы быть совсем точным, скажу, что Intel 286 во многом действует так же, как Intel 8086, так как он работает с шиной внешней памяти объемом в 16 бит, а не 8, что как раз и отличает 8088-й микропроцессор от 8086-го мик- ропроцессора, которым оснащена модель DeskPro. Но это для нас это не столь существенно, так как самое главное заключается в том, что микропроцессор Intel 286 обладает такими же возможно- стями и выполняет программы таким же образом, как и микро- процессор Intel 8088. В рабочем режиме особые возможности 93
286-го микропроцессора не реализуются, так что этот микропро- цессор может с успехом сочетаться с обычной моделью ПК типа PC. Не следует думать, однако, что работа этого микропроцессора в рабочем режиме нам совершенно не интересна. И в этом ре- жиме он работает гораздо производительнее, чем микропроцес- сор Intel 8088, по той простой причине, что он может выполнять программы гораздо быстрее. Intel 286 является более скоростным по двум причинам: во-первых, его конструкция усовершенствова- на так, что для выполнения команды ему требуется меньше так- тов, меньше циклов таймера. Например, обычная команда умножения выполняется микро- процессором Intel 8088 за 120 циклов таймера, а микропроцессо- ром Intel 286 — всего за 20 циклов; разница очень существенная! Микропроцессор Intel 286 по своей природе гораздо более про- изводителен. Другая причина его скоростных качеств заключается в том, что Intel 286 работает с более быстрым таймером. Стандар- тная модель ПК типа PC использует таймер с частотой колебаний 4,77 МГц, и это означает, что его метроном совершает 4,77 млн. колебаний в секунду. Intel 286 может работать с более быстрым таймером. В модели IBM АТ частота колебаний таймера составляет 6 МГц, т.е. ее таймер на 25% быстрее. Сочетание большей эф- фективности микропроцессора Intel 286 с более быстрым тайме- ром ПК дает в результате гораздо больший выигрыш в скорости выполнения операций. Исходя из собственного опыта, основанного на выполнении тестовых программ из моего набора сервисных программ, называемого набором сервисных программ Нортона, могу сказать вам, что ПК нашего семейства, оснащенный микро- процессором Intel 286, примерно в 5-8 раз эффективнее, чем стандартная ПК типа PC. Итак, мы знаем, что даже в рабочем режиме микропроцессор Intel 286 не позволяет смотреть на себя свысока. Но в этом режи- ме он не может нам предложить ничего, кроме высокой скоро- сти. Его дополнительные возможности появляются в привилегиро- ванном режиме. В привилегированном режиме этот микропроцессор обладает рядом свойств, позволяющих ему увеличить число программ, с которыми одновременно может работать компьютер. К этим свойствам относятся: защита, расширенная память, виртуальная па- мять и мультипрограммирование. Защита позволяет операционной системе (такой, как, например, DOS) предотвратить вызываемые программой помехи в действии других программ или самой операционной системы. В стандартной модели PC или при работе микропроцессора Intel 286 в рабочем режиме неверно составленная программа может вызвать сбой в работе операционной системы или другой программы или даже полностью остановить работу компьютера. Привилегированный ре- 94
жим 286-го микропроцессора обеспечивает операционной системе возможность предотвратить сбой. Когда мы используем наш ком- пьютер для ыполнения только одной программы, нас не волнует, может ли она вызвать сбой, после которого компьютер "завис- нет". Но если наш компьютер работает’^одновременно с несколь- кими программами, становится абсолютно необходимо защитить его от сбоя. Поэтому защитное свойство микропроцессора очень важно. Стандартная модель ПК — PC, как мы увидим в гл.7, может работать только с 1 млн. байт памяти (причем около 40% этого ко- личества имеет специальное применение и недоступно для обще- го пользования). Может показаться, что 1 млн. байт это очень много, но на самом деле это не так. Имея дело с компьютерами, люди всегда стремятся к большему. Привилегированный режим микропроцессора Intel 286 может обеспечивать прямую адреса- цию большего объема памяти. Такое свойство, как расширенная память, позволяет ему увеличить рабочий объем памяти до 16 млн. байт. А виртуальная память позволяет увеличить этот объем еще больше. Виртуальная память дает компьютеру возможность выделять каждой программе до биллиона байт (или, как мы гово- рим, до одного гигабайта). Это очень большой объем! И, наконец, мультипрограммирование с помощью специально- го устройства позволяет нашему микропроцессору быстро и на- дежно переключаться на выполнение той или иной программы, из работающих одновременно. Режим мультипрограммирования на- чинает действовать тогда, когда в работе находятся одновременно несколько программ. На самом деле в каждый конкретный мо- мент времени компьютер выполняет команды только одной про- граммы, но в обработке одновременно находятся все программы, подобно тому, как жонглер может держать в воздухе сразу не- сколько шаров, в каждый момент касаясь лишь одного. В принци- пе мультипрограммирование под силу любому компьютеру, но оно не может выполняться надежно без соответствующего аппа- ратного обеспечения, например без защиты памяти. Привилегиро- ванный режим микропроцессора Intel 286 обеспечивает целый ряд средств, позволяющих компьютеру осуществлять мультипрог- раммирование. Хотя все эти особенности 286-го очень важны и представляют собой большой шаг вперед в реализации возможностей ПК, их преимущества не так велики, как это может показаться. Это объ- ясняется главным образом тем, что работа в привилегированном режиме требует отлаженного взаимодействия программ. Но так как такой режим не предусматривался в исходной модели ПК, то большинство самых распространенных программ для семейства IBM PC проектировались и создавались без учета основных правил, которых требует привилегированный режим. Многие самые важ- ные программы для ПК предполагают монопольное пользование 95
компьютером и потому используют такие действия, которые со- вершенно не допускают одновременной обработки компьютером нескольких программ. Вдобавок, основная операционная система ПК IBM — дисковая операционная система (DOS) — конструирова- лась тогда, когда еще не появился микропроцессор Intel 286 со своим привилегированным режимом. Все это говорит о том, что популярные программы и операци- онные системы персонального компьютера не всегда сочетаются с привилегированным режимом микропроцессора Intel 286, и во многих случаях нелегко приспособить их к работе в новых услови- ях. До тех пор, пока самые важные программы для семейства IBM PC не смогут работать в привилегированном режиме, будет сохраняться серьезное препятствие на пути к его повсеместному эффективному использованию. Задания 1. Мы говорили о том, что микропроцессоры наших ПК могут выполнять арифметические действия как с 8, так и 16 битами. Действительно нужно уметь и то, и другое? В чем были бы преимущества и недостатки каждого, если бы микропроцессор работал только с одним из этих форматов? В чем были бы пре- имущества и недостатки, если бы к уже существующим был добавлен 24- или 32-битовый формат? 2. Говоря о выполнении компьютером арифметических действий и о суще- ствующем для этой цели наборе логических команд, мы видим некоторое дуб- лирование: несколько команд может быть заменено одной командой. В чем вы видите преимущества и недостатки (как для конструктора ЭВМ, так и для про- граммиста) создания компьютера с широким набором команд, обеспечиваю- щим разные пути выполнения одного и того же задания, или с очень небольшим набором команд, предоставляющим возможность выполнить каждое задание только одним способом? 3. Только небольшое количество моделей ПК оснащено арифметическим сопроцессором Intel 87, и далеко не все программы могут пользоваться его воз- можностями. Почему? Что могло бы сделать эти сопроцессоры более популяр- ными? 4. Используя команды INP и OUT языка Бейсик, напишите программу про- стого просмотра содержимого портов ПК IBM. Что интересного можно узнать с ее помощью? 5. В подразделе "Рассматриваем программу обработки прерывания" мы говорили о том, как пользоваться командой-дисассемблером DEBUG U. Попро- буйте применить ее для встроенного в ПК языка Бейсик, адрес памяти — F600:0. (Примечание: это можно сделать только на ПК выпуска собственно фирмы IBM, но не на их аналогах.) 96
Глава 7 ПАМЯТЬ КОМПЬЮТЕРА Наконец, настало время познакомиться с памятью компьютера. В этой главе мы узнаем, что такое память и как в ней хранятся данные. Затем мы углубимся в сложные, но интересные детали того, как наши программы получают доступ в память. Мы увидим, как конструкторы ПК разделили память в зависимости от различ- ного ее использования, и, наконец, рассмотрим два способа рас- ширения памяти ПК. Как видите, этих деталей много, но и изуче- ние их увлекательно. 7.1. Знакомство с памятью Из предыдущих глав мы уже знаем обо всех идеях, положен- ных в основу создания памяти компьютера, поэтому сейчас не бу- дем углубляться в основы компьютерной памяти, а только сумми- руем самые общие положения, которые и послужат нам отправ- ной точкой в детальном изучении памяти ПК. Память компьютера — это своего рода черновик, в котором записывается рабочая информация (включая как данные, так и ко- манды) в процессе ее обработки. Память ПК содержит в основ- ном только временную рабочую информацию, в нее не заносится ничего постоянного (за одним исключением, о чем вы узнаете в конце этой главы, когда речь пойдет о постоянном запоминающем устройстве). Память нашего компьютера основана на использовании таких единиц количества информации, как байты, в каждом из которых содержится 8 бит. Каждый байт может принимать 256 различных значений. Независимо от того, какую информацию мы храним в памяти, она кодируется определенной комбинацией битов, которая интерпретируется в зависимости от характера данных. Одна и та же комбинация битов может представлять число или букву алфа- вита, или определенную команду машинного языка в зависимости от нашей интерпретации. Одни и те же байты памяти могут соде- ржать коды команд, числовых или буквенных данных. Байты могут соединяться в более крупные сочетания для выра- жения любой более сложной совокупности информации. Одним из таких сочетаний является машинное слово, составленное из двух байтов и представляющее собой единое 16-битовое образование. (Наиболее интересные моменты такого сочетания представлены в подразделе "Как хранятся слова".) Когда мы интерпретируем по- следовательность байтов как текст, она называется строкой бук- венных символов. Существует бесчисленное количество способов 97 4 - 6472
сочетания байтов в значимые данные, но эти два — одни из самых важных. Для того чтобы иметь возможность работать с памятью компь- ютера, каждый байт в памяти имеет собственный адрес, номер, который обозначает именно этот байт. Почти вся эта глава будет посвящена тому или иному аспекту адресации в памяти. Адреса памяти нумеруются по порядку, начиная с нуля, который играет роль первого адреса. Те же самые числа, которые интерпретиру- ются как компьютерные данные, могут использоваться и для обоз- начения адреса памяти. Это позволяет компьютеру выполнять арифметические действия в поисках нужного места памяти. Это сочетание арифметических действий, данных и адресации в памяти дает нашему компьютеру удивительно компактное и гибкое сред- ство для выполнения различных заданий. Вот основные свойства компьютерной памяти. А теперь, давай- те рассмотрим некоторые подробности. Как хранятся слова Если вы планируете исследовать компьютерную память, соби- раетесь работать с языком ассемблера или, подобно мне, хотите досконально изучить свой компьютер, вам необходимо знать, что представляет собой "хранение в обратном порядке". Когда мы записываем числа или слова, мы начинаем их запись с наиболее значащей, старшей части. Позиция цифры в записи чис- ла определяет ее значение. В числе "1776" наиболее значащей цифрой является "1"; в слове "Калифорния" наиболее значащей частью является буква "К". В наших ПК не все организовано так же. В строке буквенных символов, являющейся необходимым форматом для хранения слов вроде "Калифорния", наиболее значащая часть заносится первой, в левый крайний байт (байт с наименьшим адресом), точ- но так же, как мы записываем слова. Числа же, наоборот, заносят- ся в память в обратном порядке. У чисел, занимающих более од- ного байта, таких, например, как 2-байтовое машинное слово, сна- чала заносится в память наименее значащая часть, то есть наше число "1776" будет занесено в память компьютера как "6771". (Прошу не принимать этот пример слишком буквально, ниже я вам объясню почему.) Хранение слов в обратном порядке подразумевает, что машин- ное слово (16 битов, 2 байта) заносится в память, начиная с по- следнего байта. Это относится и к более длинным форматам чи- сел, таким как 32-битовые, 4-байтовые числа, а также к сложному кодированию чисел с плавающей запятой. Хотя наш ПК может работать с любым числовым форматом, чаще всего используется 2-байтовый формат машинного слова. Это объясняется тем, что 16-битовые слова используются во всех 98
аспектах адресации в памяти ПК (как мы более подробно увидим в разд.7.2) и тем, что они являются наибольшими числами, кото- рыми может непосредственно оперировать набор команд ПК. Для того, чтобы объяснить идею хранения слов в обратном порядке, я привел пример десятичного числа "1776", занесенного в память компьютера в виде "6771". Но на сам\эм деле это не совсем так. Хранение слов в обратном порядке касается двоичных чисел, за- несенных в память в обратном порядке, байт за байтом. Когда мы видим запись двоичных чисел, мы имеем перед собой шестнадца- теричную нотацию, использующую два шестнадцатеричных числа для каждого байта. Например, наше десятичное число "1776" в шестнадцатеричной системе принимает вид 06F0. Для того чтобы записать это число в обратном порядке, нужно менять не порядок отдельных шестнадцатиричных цифр, а просто поменять местами байты (которые представлены в виде пары ше- стнадцатеричных чисел). Шестнадцатеричное число "06F0" запи- санное в обратном порядке, даст нам "F006", так как мы переста- вим две пары шестнадцатеричных цифр (06 и F0). Очень важно знать этот порядок занесения в память. Каждый раз, когда вы работаете с компьютерными данными, представлен- ными в виде шестнадцатеричных чисел, вы должны иметь в виду, что числа могут быть записаны как в прямом, так и в обратном по- рядке, т.е. так, как мы их пишем, или так, как они заносятся в па- мять машины. Обычно, когда данные формируются для представ- ления пользователю, они изображаются в прямом порядке. Когда данные выдаются как копия того, как они хранятся в памяти маши- ны, они представлены в обратном порядке. Надо быть очень вни- мательным и осторожным, чтобы не перепутать! Вот пример того, как может быть представлено одно и то же число в обоих форматах. Если мы работаем с языком ассемблера, используя либо DEBUG, либо ассемблер, и есть команда поме- стить шеснадцатеричное число "1234" в регистр АХ, мы увидим нечто подобное следующему: В8 3412 MOV АХ, 1234Н Справа мы видим число, записанное в прямом порядке (1234), слева — число в таком виде, в каком оно хранится в памяти ком- пьютера, т.е. записанное в обратном порядке. 7.2. Адресация памяти Существует одна маленькая, но неприятная проблема, имею- щая непосредственное отношение к микропроцессорам ПК IBM, проблема, затрудняющая работу наших программ с памятью ком- 99
пьютера. Эта проблема заключается в использовании 16-битовой арифметики. Как мы знаем, микропроцессор нашего ПК лучше всего рабо- тает с 16-битовыми числами, значения которых не могут превы- шать значения 65536, т.е. 64К. Так как компьютер использует чис- ловую адресацию для нахождения нужного места в памяти, это предполагает, что его память не может превышать 64 Кбайта — это до смешного мало для серьезного использования компьюте- ра; многие ПК обладают в десять раз большей памятью, т.е. 640 Кбайт. Как можно добиться доступа к большему объему памяти, используя лишь 16-битовые числа. Решение этой проблемы заключается в том, что микропроцес- соры семейства Intel 8086 используют так называемые сегменти- рованные адреса памяти. Сегментированные адреса составляются из двух 16-битовых слов, сочетания которых позволяют обозначить 1 048 576 байт памяти (округленно 1 млн. байт). Чтобы понять, как это делается, мы должны рассмотреть две вещи: как вычисляется сегментированный адрес по двум словам и способ задания этих сегментных адресов внутри микропроцессора. Вычисление сегментированного адреса основано на так называ- емом "смещенном сложении", позволяющем получить 20-битовое двоичное число (в пределах 1 048 578) из двух 16-битовых чисел. Предположим, что у нас есть два 16-битовых машинных слова, в шестнадцатеричной системе имеющих значения ABCD и 1234. Мы помним, что каждая шеснадцатеричная цифра представляет собой четыре бита, так что четыре шестнадцатиричных цифры (ABCD или 1234) представляют собой всего 16 бит. Берем одно из этих чисел и приписываем к нему справа нуль: ABCD0. Таким образом, мы перемещаем число на одну шестнадцатеричную позицию влево (или на четыре двоичных), т.е. мы умножаем значение этого числа на 16. Это число теперь состоит из пяти шестнадцатеричных цифр или из 20 бит, что и дает нам требуемый диапазон чисел в преде- лах миллиона. Но, к сожалению, это число не может служить нам полным 20-битовым адресом памяти, так как оно оканчивается ну- лем и, следовательно, может представлять только адреса, кото- рые тоже оканчиваются нулем, т.е. оно пригодно для адресации только каждого шестнадцатого байта. Чтобы получить окончательную схему сегментированной адре- сации, возмем другое 16-битовое число (в нашем примере — это 1234) и сложим его с увеличенным первым числом: ABCD0 + 1234 ACF04 100
При таком сложении двух 16-битовых чисел мы получаем 20- битовое число, которое может принимать любое значение от 0 до 1 048 577. Такова арифметика, позволяющая ПК работать с милли- оном байтов памяти, используя 16-битовые числа. Составляющие элементы этой схемы адресации называются сегментной частью и смещением. В нашем примере ABCD пред- ставляет собой сегментное значение, a J|234 — смещение значения адреса. Сегментное значение указывает на ту область адреса, ко- торая кратна 16, т.е. адрес, оканчивающийся на 0. Эти адреса па- мяти, кратные 16, называются границами параграфа, или сегмент- ными параграфами. Смещение сегментированного адреса указывает местоположе- ние конкретного байта внутри сегментного параграфа. Так как 16- битовое смещение может иметь диапазон значений от 0 до 65 535 (64К), оно позволяет адресовать память объемом 64 Кбайта, в рамках одного и того же адресного сегмента. Существует стандарт записи этих сегментированных адресов, с которым вы, несомненно, столкнетесь в литературе. Эти адреса записываются так: ABCD: 1234. Сегментная часть стоит впереди, за- тем двоеточие, после которого записывается смещение. Если вы имеете дело с языком ассемблера, или программой DEBUG, то встретитесь с большим разнообразием сегментированных адре- сов, записанных подобным образом. Посмотрев на запись про- граммы DEBUG в подразделе "Таблица векторов прерываний", вы найдете их в правой колонке. Почти всякий раз, когда речь идет об адресах в памяти компь- ютера, мы пользуемся их сегментированной формой. Но иногда возникает необходимость в вычислении истинного 20-битового ад- реса. В таких случаях я буду называть эти адреса абсолютными, чтобы вы точно знали, что они означают. В нашем примере сег- ментному адресу ABCD вычисление абсолютного адреса по сме- щению 1234 даст значение ACF04. Такова арифметика, лежащая в основе схемы сегментированной адресации. Теперь посмотрим, как эта схема используется в наших компьютерах. Сегментная часть сегментированного адреса располагается в четырех специальных сегментных регистрах, о которых мы говори- ли в гл.6. Каждый регистр предназначен для определения сег- ментного параграфа, используемого с определенной целью. Так, сегментный регистр кода CS указывает, где находится программа. Сегментный регистр данных DS используется для размещения ос- новных данных программы. Дополнительный сегментный регистр ES дополняет сегментный регистр DS, так что данные могут распо- лагаться в двух далеко отстоящих друг от друга сегментах памяти. А стековый сегментный регистр SS обеспечивает вычисление абсо- лютного адреса стека. Большую часть времени эти сегментные регистры остаются не- изменными, в то время как наши программы работают в рамках, 101
установленных этими сегментами. Детальная адресация осуществ- ляется с помощью смещения адреса. И в то время, как сегмент- ная часть адреса может использоваться только тогда, когда она помещена в один из четырех сегментных регистров, смещения адреса могут использоваться с большей гибкостью. Наши про- граммы могут получить смещение адреса из разных регистров (таких, как регистры общего назначения АХ, ВХ и т.д. или регистры индексов SI и DI). Смещение адреса может также присутствовать непосредственно в команде машинного языка или вычисляться пу- тем сложения содержимого регистров и операнда команды. То, как микропроцессор ПК использует сегментированную адресацию, дает нам достаточное представление о том, как рабо- тают наши программы. Подробнее об этом вы узнаете из под- разд. "64-Кбайтовый предел". К счастью, нам нечасто придется сталкиваться с утомительны мн деталями работы с сегментированными адресами. Мы имеем дело с ними только при работе с программированием на языке ассемблера. Однако, если мы хотим знать больше о сегментной адресации, можно воспользоваться теми возможностями, которые представляет нам Бейсик. Оператор DEF SEG позволяет нам опре- делить сегментную часть сегментированного адреса, а параметры, которые используются операторами РЕЕК и РОКЕ, дают нам воз- можность задать смещение сегментированного адреса, которое складывается с сегментной частью оператора DEF SEG. Так что, ес- ли вы хотите попробовать свои силы в работе с сегментированны- ми адресами, можете воспользоваться этими средствами языка Бейсик. В качестве примера могу предложить вам тексты некото- рых программ из приложения А, в частности программу ALL- CHAR. 64-Кбайтовый предел Нам постоянно приходится сталкиваться с тем, что называется 64-Кбайтовым пределом. Например, при программировании на языке Бейсик мы ограничены 64К памяти для размещения про- граммы и данных. Многие другие программы также не могут ра- ботать одновременно с объемом информации более 64К. Опре- деленные языки программирования не могут использоваться для составления программ величиной превышающей 64К. Мы с вами уже знаем, откуда взялось это число 64К: это мак- симальный объем памяти, внутри которого адресация осуществля- ется с помощью одного неизменяемого значения сегментного ре- гистра. Весь вопрос в том, почему мы ограничиваемся одним по- стоянным указателем сегмента и почему мы встречаемся с такими различными типами ограничений в 64К? 102
Ответ на этот вопрос мы найдем в так называемой модели па- мяти, и основан он на степени сложности работы программы с сегментными регистрами. Когда компьютер работает с какой-либо программой, он дол- жен найти путь как к определенным частям программы, так и к ее данным. Другими словами, каждая программа использует регистр кода сегмента CS для нахождения частей программы и регистр сегмента данных DS для нахождения данных. При работе про- граммы эти регистры рассматриваются как постоянные или пере- менные независимо друг от друга. Если какой-нибудь из них яв- ляется постоянным регистром, т.е. не изменяется программой при ее работе, то этот компонент (программный код или данные) не может превышать 64К, чтобы адресацию внутри него можно было бы осуществить с помощью одного (постоянного) значения сег- мента. Но если любой из этих компонентов может быть изменен в ходе работы программы, то такое ограничение снимается. Если оба компонента постоянны, мы имеем малую модель памяти, ко- торая ограничивает программу в рамках 64К кода и 64К данных. Если каждый из них можно изменять, то мы имеем большую мо- дель без ограничений. В промежутке между этими двумя моде- лями находятся еще две, у которых один из компонентов является постоянным, а другой — переменным. Преимущество изменения сегментных регистров (отсутствие ог- раничений в 64К) очевидно. Менее очевидна цена, которой дости- гается это преимущество, а она довольно существенна. Когда про- грамма использует переменные сегментные регистры, то эта до- полнительная нагрузка замедляет ее работу, существенно увели- чивается процент команд управления памятью, что усложняет ло- гику программы. Таким образом, нам приходиться выбирать меж- ду скоростью, объемом и простотой, с одной стороны, и произво- дительностью — с другой. Система команд нашего микропроцессора позволяет легко и быстро менять регистр CS, который управляет кодом программы,и достаточно неудобно управлять регистром данных DS. Поэтому довольно много программ, которые по объему превышают 64К, но одновременно работают лишь с 64К данных. К счастью, как искусство программирования, так и собственно языки программирования развиваются все быстрее, поэтому все реже приходится сталкиваться с 64-Кбайтовым пределом. А как же тогда Бейсик? Почему он имеет ограничение в 64К для программы и данных, вместе взятых? Бейсик представляет со- бой особый случай. При его использовании, программа, с которой работает компьютер, является интерпретатором языка Бейсик. Для такого интерпретатора доступ к программе и ее данным осущест- вляется с помощью одного 64-Кбайтового сегмента данных. Вот почему Бейсик накладывает такое оригинальное ограничение на объем данных. 103
7.3. Организация памяти ПК Одной из самых полезных вещей, которые мы можем узнать о внутреннем устройстве нашего ПК, является организация и исполь- зование памяти машины. Это поможет нам понять, как работает ПК, какие виды работ он может выполнять, как работает дисплей, а также разобраться в так часто упоминающемся, но мало понят- ном 640-Кбайтовом пределе памяти ПК, которая доступна пользо- вателю. Все это,а также многое другое нам станет ясно, когда мы рассмотрим организацию памяти ПК. Исследовав систему адресации памяти ПК, использующую сег- ментные регистры, мы узнали, что существует определенный пре- дел диапазона адресов памяти, с которыми может работать ПК. Это адресное пространство составляет 1 млн. байт, каждый из ко- торых имеет индивидуальный номер (адрес). Это адресное пространство компьютера является лишь потен- циальным и не вполне соответствует фактическому объему памя- ти, используемому компьютером. В чем же здесь дело? Давайте разберемся повнимательнее. Когда проектировщик компьютера разрабатывает новую конструкцию, схема использования адресно- го пространства является для него очень важным компонентом конструкции. Давайте посмотрим, как проектировщики скомпоно- вали адресное пространство нашего ПК. Легче всего начать исследование адресного пространства раз- делив 1М байт адресного пространства на 16 блоков по 64К байт каждый. Мы можем обозначить каждый из этих блоков памяти шестнадцатеричной цифрой, которая будет общей старшей циф- рой для всех адресов в этом блоке. Так, первый блок 64К байт можем называть блоком 0, так как все адреса этого блока в пя- тизначной нотации абсолютного адреса обозначаются как Охххх, а в нотации сегментированного адреса — как Оххх:хххх. Аналогично следующим будет блок 1, так как в нем все адреса начинаются с 1. Таким образом, адресное пространство объемом в 1М байт мы разделим на 16 блоков, от блока 0 до блока F. Когда мы говорим об этих блоках, необходимо отметить, что нет никакого барьера между этими блоками. Адреса памяти и данные свободно передвигаются по всему пространству памяти, легко пересекая искусственные (созданные нами для удобства рассмотрения памяти) воображаемые границы, разделяющие эти блоки. Мы считаем их отдельными блоками частично ради удобст- ва, но главным образом потому, что общая схема использования памяти нашего ПК организована в терминах этих блоков. 104
Распределение оперативной памяти Определенные области памяти имеют специальное назначение и используются отдельными командами и подпрограммами опе- рационной системы. Мы выделим в первую очередь три такие об- ласти. Первая — это область где расположены таблицы векторов прерыва- нии, которые определяют место расположения подпрограмм по обработке этих прерываний. Первые 1024 байта памяти резерви- руются для таблиц векторов прерываний, определяя тем самым 256 различных прерываний — гораздо больше, чем обычно ис- пользуется. Они занимают абсолютные адреса памяти от 0 до 400 в шестнадцатеричном счислении. (Более подробно об этом вы уз- наете из подраздела "Таблица векторов прерываний".) Вторая область памяти является рабочим местом подпрограмм базовой системы ввода-вывода. Так как система ввода-вывода контролирует основную работу компьютера и его частей, ей необ- ходимо некоторое пространство в памяти для собственных записей — для ведения учета. Это область данных BIOS одна из наиболее увлекательных страниц в памяти компьютера. Среди всей инфор- мации, хранящейся в BIOS, область данных является своего рода буферным устройством, удерживающим в памяти сигналы, посы- лаемые с клавиатуры, до тех пор, пока программа не начнет их обрабатывать. Здесь же хранятся такие сведения, как указатель объема памяти машины, характеристики основного оборудования, установленного на компьютере, индикатор режима дисплея, и т.д. (Если вы внимательно посмотрите на программу ALL-CHAR в при- ложении А, вы увидите, как она исследует и использует режим дисплея.) Область объемом в 256 байт предназначена специально для данных BIOS; абсолютные адреса памяти этой области составляют диапазон от 400 до 500 в щестнадцатеричной системе счисления. В этой области можно найти множество удивительных вещей. О них можно узнать из следующих источников: технические инструкции к ПК фирмы IBM и моей книги "Путеводитель программиста по се- мейству ПК", в которой вы найдете подробнейшую информацию буквально о каждом байте. Третья часть зоны памяти представляет собой рабочую область для дисковой операционной системы и Бейсика, которая занимает 256 байтов в диапазоне адресов от 500 до 600 в шестнадцатерич- ной системе счисления. Это такая же рабочая область для DOS и Бейсика, как и предыдущая область для базовой системы ввода- вывода. Вы найдете информацию о ней (правда, не такую подроб- ную) в тех же трех источниках. Перечисленные выше области памяти — это сущий клад для тех, кто серьезно интересуется ПК. Любому, кто хочет познать уст- ройство своего персонального компьютера, достаточно пройти 105
курс самостоятельного обучения, погрузившись в изучение этих областей (см.рис.7.1). Главная рабочая область памяти, т.е. та часть, которая исполь- зуется для наших программ и их данных, охватывает первые де- сять блоков от 0 до 9. Эта область часто называется областью па- мяти пользователя, чтобы отличить ее от остального адресного пространства, которое находится так или иначе в распоряжении са- мой компьютерной системы. Когда мы говорим об объеме памяти наших ПК, мы обычно имеем в виду как раз объем пользователь- ской памяти, размещающейся в этой области. Теоретически этот объем может колебаться от 16К (четверть первого блока 64К) до 640К (объем всех десяти блоков). Какой бы объем памяти не был установлен в компьютер физически, он составляет одно целое, на- чиная от нулевого блока и кончая последним предназначенным для него блоком. Блок 0 1-е 64К Обычная пользовательская память до 64 К Блок 1 2-е 64К Обычная пользовательская память до 128К Блок 2 3-и 64К Обычная пользовательская память до 192К Блок 3 4-е 64К Обычная пользовательская память до 256К Блок 4 5-е 64К Обычная пользовательская память до 320К Блок 5 6-е 64К Обычная пользовательская память до 384К Блок 6 7-е 64К Обычная пользовательская память ДО 448К Блок 7 8-е 64К Обычная пользовательская память ДО 512К Блок 8 9-е 64К Обычная пользовательская память до 576К Блок 9 10-е 64К Обычная пользовательская память ДО 640К Блок А Блок В Блок С 11-е 12-е 13-е 64К 64К 64К Расширенная видеопамять Стандартная видеопамять Засщирение ПЗУ (модели XT, EGA, 3270РС) Блок D 14-е 64К Другие назначения (кассеты для I PCjr) Блок Е 15-е 64К Другие назначения (кассеты для I PCjr) Блок F 16-е 64К BIOS и Бейсик в ПЗУ Рис.7.1. Блоки памяти ПК Существует несколько различных видов памяти (как мы узнаем ниже). Главная рабочая область располагается в оперативном за- поминающем устройстве (ОЗУ). Это устройство характеризуется двумя свойствами: во-первых, из него можно читать и в него можно записывать данные; во-вторых, оно является энергозависи- мым, т.е. хранит данные только во время работы компьютера. Этот вид памяти предназначен для хранения наших программ и данных в течение всего времени, пока компьютер с ними работа- ет. Объем памяти ОЗУ компьютера во многом определяет объем и масштаб работы, которую он может выполнить. Базовая конструкция нашего семейства ПК выделяет только 10 из 16 блоков адресного пространства для этой главной рабочей области памяти. Это составляет лишь немногим больше 60%. Се- годня 640К оказывается слишком малым объемом памяти для тех видов работ, которые мы поручаем компьютеру, но в те годы, когда ПК только разрабатывались, этот объем казался вполне до- 106
статочным. В то время типичные персональные компьютеры име- ли общую память всего лишь 64К или 128К, и 640К модели IBM PC казались огромным объемом. (Такая ошибка регулярно повторя- лась в истории создания вычислительной техники: недооценка не- обходимости расширения возможностей компьютера). Можно несколько расширить объем пользовательской памяти 640К, захватив некоторую часть ^ледующих за ней блоков, но это не рационально, так как эти блоки предназначены для специаль- ного использования,которое, как мы вскоре увидим, нельзя игно- рировать. Не каждый бит пользовательской памяти доступен для наших программ. Самое начало первого блока отводится для ведения необходимого учета. Некоторые технические детали вы найдете в подразделе "Распределение оперативной памяти", а технические детали — "Таблица векторов прерываний". Но кроме этой незна- чительной, но интересной части весь остальной объем области па- мяти 640К отводится для наших программ — поэтому нам нечего больше про него сказать. Остальные блоки памяти (с блока А до блока F) дают нам тему для интересной беседы. # # #Технические подробности Таблица векторов прерываний Когда мы говорили о прерываниях (гл.6), я объяснял, что механизм прерыва- ния приостанавливает действие текущей программы и включает программу об- работки прерывания. Микропроцессору нужен простой и быстрый способ найти то место, где находится программа обработки прерывания, и это делается с по- мощью таблицы векторов прерываний. Эта таблица адресов программ обработ- ки прерываний организована очень просто: "вектору" прерывания под номером О отводится адрес 0.Каждый адрес вектора состоит из четырех байт; адрес век- тора любого прерывания находится путем умножения номера прерывания на че- тыре. "Векторы" представляют собой полные адреса памяти в сегментированной форме. Это адреса программ, которые приводятся в действие при срабатыва- нии механизма прерывания. Сегментированный адрес состоит из пары 2-байто- вых машинных слов, таким образом, каждый вектор включает в себя четыре байта. Вы можете легко исследовать таблицу векторов прерывания вашего компью- тера с помощью программы DEBUG. Используя команду дисплея D, показать начало памяти : D 0:0, вы сможете увидеть первые 128 байтов, или 32 вектора, которые выглядят примерно так: 0000:0000 Е8 4Е 9А 01 00 00 00 00-СЗ Е2 00 F0 00 00 00 00 0000:0010 F0 01 70 00 54 FF 00 F0-05 18 00 F0 05 18 00 F0 0000:0020 2С 08 51 17 DO 0А 51 17-AD 08 54 08 Е8 05 01 2F 0000:0030 FA 05 01 2F 05 18 00 FO-57 EF F0 F0 00 01 70 00 0000:0040 90 13 С7 13 4D F8 00 FO-41 F8 00 F0 ЗЕ 0А 51 17 0000:0050 5С 00 В7 25 59 F8 00 F0-E2 0А 51 17 9С 00 В7 25 0000:0060 00 00 00 F6 8Е 00 DE 09-6Е FE 00 F0 F2 00 7В 09 0000:0070 27 08 51 17 А4 F0 00 F0-22 05 00 00 00 00 00 F0 Векторы хранятся в памяти в перевернутом виде, смещение предшествует сегменту. Например, первые четыре байта таблицы ЕВ 4Е 9А 01 можно предста- вить в виде сегментированного адреса 019А:4ЕЕ8. 107 J
В таблице векторов мы находим три основны! вида адресов. Это адреса, указывающие на месторасположение базовой системы ввода-вывода ПЗУ, кото- рые можно определить по числу F в начале сегментной части адреса. Следую- щая группа адресов относится к основной памяти (блоки с 0 по 9), к ним отно- сится маш пример 019А:4ЕЕ8. Адреса могут также относиться к подпрограммам дисковой операционной системы или резидентным программам, таким как Sidekick или Prokey или к DEBUG, так как DEBUG требует временного управления прерыванием. И, наконец, все векторы прерывания могут быть нулевыми, ука- зывая на то, что данный номер прерывания в этот момент не обрабатывается. Вы наверняка заметили, что второй вектор прерывания (для прерывания номер 1) представляет собой как раз одни нули. Если вы захотите, то сможете проследить за любой программой обработки прерывания путем декодирования ее вектора прерывания (так, как мы только что сделали) и затем ввести этот сегментированный адрес в команду-диассемб- лер U программы DEBUG для того, чтобы посмотреть ассемблированный код программы обработки прерывания. ### Сразу же после пользовательской области памяти находится область 128К, состоящая из блоков А и В, которая предназначена для работы дисплея. Данные, которые появляются ца экране дис- плея, должны где-то храниться, и наилучшим местом для этого, как оказалось, является адресное пространство памяти нашего компьютера. Основная причина такого размещения данных заклю- чается в том, что оно позволяет нашим программам очень быстро и легко манипулировать на дисплее данными. Именно для этого и предназначена область блоков А и В. (В гл. 11-14 мы подробно рассмотрим принципы работы дисплея и то, как он использует это пространство памяти. А пока нам достаточно знать, что все, что по- является на экране дисплея, записано в этом месте памяти). В исходной модели IBM PC только часть блока В действительно используется для данных дисплея; блок А предназначен для это- го, но не используется. Вот почему для некоторых ПК этого типа возможно увеличение объема пользовательской памяти еще на 64К за счет использования блока А. Но это было бы нерациональ- но, так как нарушало бы конструктивные особенности модели IBM PC. Первое использование блока А по прямому назначению стало возможным с появлением усовершенствованного адаптера рас- ширенной графики фирмы IBM, который требовал большей рабо- чей области памяти для дисплея, чем предыдущие дисплейные адаптеры. Память, используемая дисплеем, работает точно так же, как и обычная память ОЗУ. У нее, правда, есть одна полезная особен- ность, которая увеличивает скорость работы компьютера: к ней одновременно имеется два доступа: первый — от программ, а второй — от дисплея. Они не конфликтуют друг с другом. Следом за памятью дисплея идут блоки С, D, Е, которые имеют специальные назначения. Эта же область памяти имеет довольно туманное название "Область расширения ПЗУ" и используется в различных целях, которые возникают в процессе эволюции семей- ства ПК. Одной из этих целей, давшей название всей области, яв- ляется увеличение последнего раздела памяти — ПЗУ и базовой 108
системы ввода-вывода, которая занимает последний блок F. Когда к семейству ПК добавляется новое оборудование, требующее встроенного программного обеспечения, дополнительные про- граммы ПЗУ и базовой системы ввода-вывода размещаются именно здесь. Так, например, работает жесткий диск модели XT, использующий небольшую часть б^рока С. Другое назначение области расширения ПЗУ, с которым мы сталкиваемся только в модели PCjr, это место хранения кассетных программ. Кассеты с программами подключаются к компьютеру и должны иметь свое место в памяти. В модели PCjr для этого ис- пользуются блоки D и Е. Третьим назначением области расширения ПЗУ, которое не бы- ло задумано конструкторами IBM, является поддержка "расши- ренной памяти", о чем вы скоро узнаете из разд.7.4. Последней частью адресного пространства памяти компьютеров семейства ПК IBM является блок F, использующийся для хранения встроенных программ ПЗУ и базовой системы ввода-вывода. Этот вид памяти является особым видом, известным как неизменяемая память, доступная только для чтения, а не для записи, или ПЗУ. Память ПЗУ является постоянной, запись в такую память програм- мными средствами невозможна. Эта память не изменяется и при выключении компьютера из сети питания. Как видите, ПЗУ сущест- венно отличается от ОЗУ, о котором мы говорили ранее, хотя их названия очень похожи. ПЗУ и базовая система ввода-вывода содержат ключевой на- бор программ для обеспечения всей работы компьютера. Эти программы можно разделить на три категории: первая категория программ используется только при включении компьютера; это тестовые и инициализационные программы, необходимые для то- го,чтобы убедиться, что компьютер в порядке и готов к работе. Промежуток времени между моментом включения компьютера и его готовностью к работе занят главным образом работой этих те- стовых инициализационных программ, которые иногда называются программами самоконтроля. Вторая и самая интересная категория программ включает в се- бя программы, которые называются базовыми служебными про- граммами ввода-вывода. Эти программы обеспечивают деталь- ный контроль за различными частями компьютера, в частности за периферийными устройствами ввода-вывода, такими как .дисково- ды, которые требуют тщательного контроля (включая полную про- верку на возможность ошибки). ПЗУ в целях обеспечения всей работы компьютера, предоставляет в распоряжение как дисковой операционной системы, так и наших прикладных программ целый ряд сервистных программ, о которых речь пойдет в последующих главах. Третья категория программ имеется только у ПК производства фирмы IBM и называется встроенными программами ПЗУ-Бейсик 109
(или кассетный бейсик). Это ядро языка программирования Бей- сик, которое либо может использоваться самостоятельно, либо может (незаметно для нас) обслуживать программы Бейсик дис- ковой операционной системы. Все программы ПЗУ и базовой системы ввода-вывода очень компактно размещены в блоке F памяти компьютера. Полезный объем это блока варьируется от модели к модели внутри нашего семейства ПК, так как одни модели требуют большего количества сервисных программ, чем другие. Например, больше всего этот объем будет заполнен рабочими программами у модели PCjr, по- тому что эта модель использует простое и дешевое программное обеспечение для выполнения задач, которые решаются другими компьютерами с помощью более дорогостоящего аппаратного обеспечения. Обычно, чем сложнее модель, тем больше про- грамм помещается в область ПЗУ, так, у модели АТ их будет больше, чем у PC. Если вы захотите, то легко сможете экпериментально исследо- вать любую из этих областей памяти или все сразу. Например, я знаю, что программа ПЗУ-Бейсик расположена по сегментирован- ному адресу F600:0000 во всех ПК фирмы IBM. Зная это, можно с помощью программы DEBUG вызвать на дисплей некоторые про- граммные коды и увидеть, какие сообщения содержит в себе Бейсик. Для этого мы должны запустить программу DEBUG и дать ей команду D F600:0000. Это приведет к появлению на экране первой части кода Бейсик-интерпретатора. Если мы дадим коман- ду D (не набирая больше ничего), то DEBUG будет показывать нам один за другим все разделы Бейсика, дор тех пор, пока перед на- ми не появятся его скрытые сообщения. Можно написать короткую программу на языке Бейсик, которая сможет обнаружить для нас сообщения в блоке F. В приложении А вы найдете текст программы MSG-HUNT, которая просматрива- ет весь блок F в поисках строки из пяти букв или знаков препина- ния. Когда программа находит эту строку, она выводит ее на эк- ран дисплея и продолжает поиски следующей. Если вы хотите до- сконально узнать содержимое области памяти ПЗУ и базовой сис- темы ввода-вывода, воспользуйтесь программой MSG-HUNT. Есть еще одно интересное свойство этой области памяти, фир- ма IBM в конце блока F указывает дату создания базовой системы ввода-вывода; эта дата может представлять для нас определен- ный интерес, потому что она сообщает о времени окончания рабо- ты над ПЗУ и базовой системой ввода-вывода, а также возмож- ном усовершенствовании этой системы, которое иногда проводит фирма IBM. Вот простая программа на языке Бейсик, которая най- дет эту дату, если она проставлена, и покажет ее на экране дисп- лея: 10 ' Display ROM-BIOS date 20 DEFSEG = &HFFFF 110
30 DATE.$ = "" 40 FOR 1 = 5TO 12 50 DATE.$ = DATE.$ + CHR$ (PEEK (I) 60 NEXT л 70 IF PEEK (7) ASC("/") THEN DATE.$ = "missing" 80 PRINT "The ROM-BIOS date is ";DATE.$ В то вре>дя как все члены семейства ПК, созданные фирмой IBM, имеют эту дату, большинство других марок машин, включая Compaq, не имеют. Однако, вы можете обнаружить ее в некото- рых моделях, таких как, например, Senior Partner фирмы Pana- sonic. В добавление к дате IBM создала также идентификационный код, используемый нашими программами для распознавания типа компьютера, с которым они работают. Вот простая программа на языке Бейсик, которая выводит на дисплей байт идентификации машины: 10 Display machine id byte 20 DEF SEG = &HFFFF 30 ID = PEEK (14) 40 PRINT "The id byte is"; ID; "hex"; HEX$ (ID) У исходной модели персонального компьютера IBM PC иденти- фикационный байт выражен шестнадцатеричным числом FF. Код FE часто называется кодом модели XT, но он встречается и у дру- гих моделей, включая Portable PC. Модель PCjr имеет идентифи- кационный код FD. Так как модель PCjr существенно отличается от других моделей, то, распознав ее идентификационный код, про- граммы видоизменяются, приспосабливаясь для работы с этой моделью. В свою очередь, модель АТ имеет идентификационный код FC. Так как каждая модель компьютера имеет свои, пусть незначи- тельные, отличительные особенности, программы адаптируют свои операции, основываясь на идентификационном коде машины. С этой точки зрения представляется очень неудачным, что ПК других марок нельзя так легко распознать с помощью идентификацион- ного кода. Но что поделаешь, с этим приходится мириться. 7.4. Увеличение объема памяти В то время как обычные члены семейства IBM PC ограничены областью адресации лишь в 1 Мбайт вследствии конструктивных особенностей микропроцессоров Intel 8088, модели типа АТ, ис- пользующие микропроцессор 80286, могут работать с гораздо большим объемом памяти. 111
Как вы помните из гл.6, компьютеры, оснащенные таким мик- ропроцессором, могут иметь объем памяти до 16 Мбайт. Интерес- но, что имено такой объем памяти долгие годы был у больших стационарных компьютеров фирмы IBM стоимостью во много миллионов долларов. Удивительно, что эти могучие машины име- ли не больший объем памяти, чем наши маленькие ПК. Помимо способности непосредственно адресовать больший объем памяти микропроцессор Intel 80286 поддерживает вирту- альную память, которая позволяет системе работать с памятью, размер которой значительно больше, чем объем физической па- мяти машины. (Смотрите подраздел "Как работает виртуальная память.") Виртуальная память модели АТ может обеспечить до одного гигабайта (1024 Мбайта) виртуальной памяти для каждой программы, с которой работает компьютер (см.рис.7.2). Рис.7.2. Виртуальная память Адресное пространство, предусмотренное конструкцией мик- ропроцессора, подобного 286-му — это совсем не одно и то же, что способность конкретного компьютера использовать этот объем памяти. В то время, как микропроцессор Intel 80286 дает возож- ность работать с 16 Мбайтами памяти, модель IBM АТ имеет офи- циальный предел в 3 Мбайта физической памяти. Для того чтобы воспользоваться либо расширенной памятью АТ, либо ее виртуальной памятью, необходимо иметь соответству- ющее программное и аппаратное обеспечение, специально пред- 112
назначенное для этой цели. Так как исходная модель IBM PC и ее основная операционная система DOS разрабатывались. без учета возможности работы с расширенной и виртуальной памятью, эта возможность останется практически неиспользуемой до тех пор, пока не появится операционнаяхистема нового поколения и при- кладные программы, созданные с учетом возможностей АТ. Несмотря на это все-таки представляется возможным исполь- зовать расширенную память АТ. Для этого обычно используются встроенные сервисные программы ПЗУ и базовой системы ввода- вывода. Одна из них переводит блоки любого нужного нам объе- ма из обычной памяти в расширенную и обратно. Можно также переключать 286-й микропроцессор из рабочего режима (в кото- ром он действует так же, как и Intel 8088) в привилегированный режим. Однако для того, чтобы работать с микропроцессором в привилегированном режиме, программа должна быть более сложной. Если программа требует только расширенной памяти, то она может просто воспользоваться базовой системой ввода-выво- да для пересылки данных в памяти и избежать всех сложностей привилегированного режима. У нас есть готовый пример программы, использующей сервис- ную программу базовой системы ввода-вывода для пересылки данных с целью использования расширенной памяти АТ. Это вир- туальная дисковая утилита (программа), являющаяся частью всех дисковых операционных систем, начиная с модификации 3.0. Эта сервисная программа называется VDISK. При ее инициализации используется базовая система ввода-вывода для пересылки дан- ных из обычной в расширенную память и обратно. Для этого сер- висной программе VDISK не нужен ни привилегированный режим работы микропроцессора, ни непосредственный выход в область расширенной памяти. Если вы хотите увидеть, как программа VDISK получает доступ в расширенную память и работает с ней, вы можете познакомиться с текстом этой программы на языке ас- семблера, который прилагается к дискетам с дисковой операцион- ной системой. Как работает виртуальная память t ; * Виртуальная память — это волшебный фокус, требующий тщательно отла- женного взаимодействия между микропроцессором, служебной программой виртуальной памяти и диском компьютера. Когда программа вводится в компь- ютер, операционная система создает "виртуальное пространство памяти", кото- рое представляет собой модель объема памяти и ее адресов, находящихся в распоряжении программы. Затем часть "истинной", физической памяти компью- тера отводится для поддержки этой виртуальной памяти. Используя одно из свойств микропроцессора Intel 80286, служебная программа виртуальной памяти операционной системы посыпает команду микропроцессору сопоставить физи- ческой памяти, предназначенной для нашей программы, виртуальные адреса, которые будут использоваться программой. Такое свойство этого микропроцес- сора, как ''управление памятью", заставляет реальную память иметь рабочий ад- рес, отличающийся от истинного, физического адреса.
До сих пор это была просто перетасовка — трюк, позволяющий реальным адресам памяти работать в качестве совершенно других, виртуальных адресов. Самое важное свойство виртуальной памяти заключается в следующем этапе, когда наши программы пытаются использовать виртуальную память, превышаю- щую по объему физическую память. Программа начинает работу с отображения некоторой части большого про- странства виртуальной памяти в определенную часть меньшей по объему физи- ческой памяти компьютера. Пока программа работает лишь с частью своей вир- туальной памяти, все идет хорошо. Программа на самом деле использует дру- гие адреса памяти, но это не имеет для нее никакого значения. Что же происхо- дит дальше, когда программа пытается использовать ту большую часть вирту- альной памяти, которой не было отведено место в реальной памяти, меньшей по объему? В этом случае таблица управления памятью микропроцессора обна- руживает, что программа пытается использовать несуществующий в данный мо- мент адрес. Микропроцессор дает команду "отсутствие страницы". Получив эту команду, говорящую о том, что программа пытается использо- вать виртуальный адрес, не внесенный в истинную память, специальная служеб- ная программа виртуальной памяти начинает работать. Она временно приоста- навливает действие программы, чтобы справиться со сложившейся кризисной ситуацией. Служебная программа выбирает некоторую часть виртуальной памя- ти, которая в данный момент находится в физической памяти, и временно запи- сывает ее содержимое на диск: это называется выгрузкой, или откачкой. Осво- божденная часть реальной памяти начинает действовать как необходимая часть виртуальной памяти. Когда же возникает необходимость в выгруженной части памяти, она подкачивается назад, т.е. переписывается с диска. Как видите, диск компьютера используется в качестве склада для хранения частей виртуальной памяти, которые не используются в данный момент. В зависимости от хода выполнения программы операции по поддержке вир- туальной памяти могут проходить очень гладко или требовать значительного времени для подкачки и откачки. В этом случае происходит перегрузка, что зна- чительно снижает производительность компьютера. Операции с виртуальной памятью могут требовать чуствитепьной баланси- ровки или настройки системы. Наши компьютеры могут выиграть только при умеренном и осторожном использовании виртуальной памяти. Их возможности слишком ограничены для того, чтобы широко применять это мощное средство. 7.5. Банки памяти и расширенная память В то время как будущее в эволюции нашего семейства ПК, не- сомненно, за машинами типа АТ, оснащенными 286-ми микропро- цессорами, прошлое и настоящее принадлежит моделям типа PC, созданным на основе Intel 8088. Машины типа АТ имеют доступ к огромным объемам памяти, а PC ограничены всего миллионом байтов адресов памяти и используют лишь 640К для рабочих про- грамм и данных. При интенсивном использовании ПК это ничтожно мало. К счастью, есть оригинальное решение проблемы ограниченно- го объема памяти модели PC, основанное на идее коммутации банков памяти. Коммутация банков позволяет компьютеру иметь больший объем памяти, чем физический объем мегабайтового адресного пространства компьютера. Расширенная память физически нахо- дится в компьютере, но ей не отведено место в адресном про- странстве микропроцессора. Вместо этого она находится как бы в подвешенном состоянии, не имея адреса и находясь вне доступа для наших программ, пока она не будет подключена. 114
Специальные электрические платы для коммутации банков па- мяти позволяют произвольно включать и выключать адресацию па- мяти, а также перемещать ее по нашему желанию. Например, коммутационная плата памяти может содержать восемь "банков" памяти, по 64К каждый (всегс| 512К). Все эти блоки имеют один адресный блок 64К в памяти компьютера. В любой момент в ра- боте находится только один из восьми банков, и только его дан- ные являются доступными для процессора. Использование коммутации банков памяти позволяет компью- теру использовать больший объем памяти, причем это достигается практически без замедления. Для того чтобы подключить нужный банк, достаточно послать команду в плату памяти, говорящую о необходимости изменить адресацию банков. Коммутация происхо- дит без всякой задержки, сразу по получении команды. Однако в работе с коммутацией банков памяти есть свои слож- ности. В отличие от обычной — память с использованием коммута- ции банков требует активного управления для того, чтобы обеспе- чить доступ к нужным блокам в нужное время. Необходимость такого надежного управления памятью надолго сдерживала раз- витие и применение коммутации банков, до тех пор, пока такие могучие фирмы по производству программного обеспечения и микропроцессоров, как LOTUS и Intel не соеденили свои усилия по созданию стандартного способа работы с коммутируемыми банка- ми памяти. Официально этот способ называется "спецификация расширенной памяти Lotus/lntel/Microsoft" (плата "Above Board"). (Во избежание возможной путаницы хочу обратить ваше внима- ние на то, что память, основанную на коммутации банков, мы на- зываем расширенной, в то время как специальная память машин типа АТ, которая выходит за рамки 1 Мбайта, носит название уве- личенной. Осторожнее, не перепутайте!) Расширенная память состоит из трех частей. Одна часть — это аппаратное обеспечение (плата коммутации банков памяти); две другие — программное обеспечение (служебная программа уп- равления расширенной памятью и прикладная программа, исполь- зующая эту память). Плата коммутации банков — это плата "Above Board" фирмы Intel или аналогичная ей — обеспечивает от 64К до 8М байт памяти, разделенной на небольшие 16-Кбайтовые страницы памяти, которые могут быть переадресованы с по- мощью коммутации банков. Служебная программа управления расширенной памятью при- водится в действие при включении компьютера и обеспечивает ра- боту с расширенной памятью. Ее основная задача заключается в том, чтобы найти неиспользуемую область в пространстве памяти ПК, в которой она может разместить расширенную в результате коммутации банков память. Ей требуется рабочая область объе- мом в 64К, называемая страничным блоком, но она обладает до- статочной гибкостью относительно места расположения этого бло- 115
на. Как мы видели на общей схеме памяти компьютера (рис.7.1), блоки памяти Д и Е наилучшим образом подходят для этого, хотя служебная программа управления расширенной памятью может поместить страничный блок и в блок памяти С. Точное местополо- жение не имеет решающего значения до тех пор пока оно не пре- пятствует любому другому использованию адресного пространства памяти. Страничный блок также может свободно переходить гра- ницы блоков памяти. Например, он может начинаться с сегмент- ного адреса С400 и простираться до конца блока С, Занимая также первые 16К блока Д. После того, как служебная программа определила место раз- мещения 64-Кбайтового страничного блока, она делит его на четы- ре 16-Кбайтовых окна, после чего она готова к работе, обеспечи- вая любую прикладную программу, предназначенную для этого, откачкой данных в эти окна и подкачкой данных из окон. Для того чтобы воспользоваться расширенной памятью, при- кладная программа сообщает служебной программе управления расширенной памятью о том, что ей необходимо воспользоваться одним или несколькими из четырех имеющихся окон. Прикладная программа может запросить у супервизора служебной програм- мы необходимые ей страницы памяти и сделать их доступными путем коммутации банков в области окон. Если прикладной про- грамме необходимо работать с различными 16-Кбайтовыми стра- ницами данных, она дает служебной программе команду пере- ключить различные страницы на нужное место. Рис.7.3 иллюстри- рует эту операцию. Окна Рис.7.3. Расширенная память Хотя эта система очень производительна и работает с большой скоростью, у нее есть очевидные ограничения. Одно из них состо- ит в том, что она может быть использована только для размеще- ния данных программы,а не для кода самой программы. Диско- вая операционная система должна сама найти место в области 116
обычной памяти для размещения больших программ, но как толь- ко эти программы размещены в обычной памяти, они могут вос- пользоваться преимуществом расширенной памяти для того, что- бы работать с объемом данных большим, чем вмещает обычная память. Другим очевидным недостатком расширенной памяти яв- ляется тот факт, что для того чтобы воспользоваться этой памятью, прикладная программа должна быть приспособлена для работы со служебной программой управления расширенной памятью и уметь работать с данными, разделенными на 16-Кбайтовые стра- ницы. Несмотря на эти ограничения, применение расширенной па- мяти может значительно облегчить работу нашего компьютера с большими объемами данных. Эта расширенная память может быть добавлена к любому члену нашего семейства ПК, включая машины типа АТ. В то время как АТ имеют собственную увеличенную память, выходящую за пределы 1 Мбайт, они могут использовать расширенную память внутри стандартного 1М адресного пространства. Задания 1. Объясните, почему сегментированные адреса 1234:0005, 1230:0045, 1200:0345 и 1000:2345 относятся к одному и тому же месту в памяти. Какой их следующих адресов относится к иному месту, чем остальные два: А321:789А; А657:453А или А296:824А? Можете ли вы предложить идеальный способ разде- лить две половины сегментированного адреса? 2. Используя команду-дисассемблер U программы DEBUG, дисассемблируй- те некоторые команды ПЗУ и базовой системы ввода-вывода вашего компьюте- ра (например, U F0C0:A000 L 100); затем приведите примеры хранения машин- ных слов в обратном порядке, которые вам могут встретиться. 3. Как вы могли бы написать программу на языке Бейсик, которая экспери- ментальным путем определила бы объем памяти вашего компьютера? Может пи эта операция прервать работу компьютера? Напишите такую программу и по- смотрите, что получится. (Кстати, вы можете найти очень быстрый вариант такой проверки в программе "Системная информация", которая является частью мое- го набора служебных программ "Утилиты Нортона".) 4. Каковы, по вашему, преимущества и недостатки способа коммутации бан- ков памяти? Что должна сделать программа для того, чтобы воспользоваться этими преимуществами? Что затрудняет работу программы с окнами данных объемом в 16К ? 5. Если вы попытаетесь воспользоваться программой MSG-HUNT, которая просматривает ПЗУ и базовую систему ввода/вывода в поисках сообщений, вы обнаружите, что она дает несколько "ложных тревог". Например, на моем ком- пьютере она обнаруживает такое "сообщение": что совершенно ничего не означает. Это происходит вследствие того, что программа принимает за воз- можные сообщения любые символы от пробела до Z нижнего регистра. Это по- зволяет нам обнаружить знаки пунктуации внутри сообщения,но одновременно программа обнаруживает ложные сообщения, вроде приведенного мной приме- ра,состоящие в основном из знаков препинания. Какого рода тест мы могли бы добавить в программу, чтобы он отфильтровал эту бессмыслицу? Попробуйте добавить такой фильтр-тест в программу MSG-HUNi; попытайтесь создать соб- ственные правила ограничения приемлемых сообщений, испытайте их и посмот- рите, что из этого получится. 117
Глава 8 ДИСКИ: ОСНОВНЫЕ ПОЛОЖЕНИЯ С этой главы мы приступаем к подробному изучению работы с дисками ПК. Ввиду того, что все, что мы закладываем в компью- тер — все наши программы и все наши данные, находит свое ме- сто на дисках разобраться в тонкостях дисковой памяти компьюте- ра и важно, и интересно. Немного о том, как мы разделим тему дисковой памяти на три главы. В настоящей главе мы изложим основные положения и да- дим вам понять, что такое диск. Так как мы работаем с дисками с помощью дисковой операционной системы, в гл.9 будет расмот- рена роль этой системы в работе дисков. В гл. 10 мы рассмотрим более тонкие детали работы дисков, завершив, таким образом, изучение данного предмета. А сейчас мы начнем с основ диско- вой памяти. 8.1. Основные понятия Основу дисковой памяти наших компьютеров составляет техно- логия записи и способ организации быстрого доступа. Технология магнитной записи аналогична той, что используется что и во всех других видах переноса информации на магнитный носитель, например, на магнитофонные или видеокассеты. Принцип магнитной записи был впервые широко использован для записи звука, т.е. для аналоговой формы информации. Только позднее этот принцип был приспособлен для цифровой записи, которая теперь применяется в компьютерах. Странно, что этого не сделали с самого начала, ведь магнитная запись изначально дво- ична (намагничено-ненамагничено), т.е. имеет цифровую природу. Цифровая магнитная запись производится на поверхности маг- ниточувствительного материала, обычно это двуокись железа, ко- торая придает магнитным носителям их характерный ржаво-корич- невый цвет. Магнитное покрытие довольно тонкое, чем оно тонь- ше, тем лучше его записывающие качества. Оно наносится на ка- кую-либо основу, обычно на гибкий пластик, из которого делается магнитная лента и дискеты, или жесткие алюминиевые пластины круглой формы, для производства так называемых жестких дис- ков. Идет ли речь о магнитной ленте или о дисках, информация за- писывается на магнитную поверхность одинаково. Поверхность рассматривается как массив расположенных на ней точек, каждая из которых, в свою очередь, рассматривается как отдельный бит, которому будет придан магнитный эквивалент 0 или 1 (рис.8.1). 118
Так как расположение этих точек не предопределено заранее, схема записи предполагает использование меток, которые помога- ют записывающему устройству найти позиции записи. Необходи- мость этих синхронизирующих меток является одной из причин, по которым наши диски должны быЛ> "форматированы" перед ис- пользованием. Все это составляет сущность технологии записи, являющейся одним из двух основополагающих принципов дисковой памяти компьютера. В1Ърой принцип состоит в организации схемы быстро- го доступа. Направление вращения диска дисковода Рис.8.1. Доступ к различным областям диска Магнитная лента по своей природе линейна. Информация запи- сывается на ней с начала и до конца. Не существует простого и быстрого способа достичь середины ленты, не затратив длительно- го времени на ее перемотку. Другое дело — вращающийся диск. Быстрый доступ к любой точке поверхности диска осуществля- ется на основе двух моментов. Первый — это вращение диска. За ничтожно малый промежуток времени диск может повернуться к нужному месту нужной точкой своей окружности. Скорость вра- щения диска 300 об/мин. Это означает, что нужной точки на ок- ружности можно достичь за одну пятую долю секунды. Другой важный момент, обеспечивающий быстрый доступ, — это движение магнитной записывающей головки с внешней сторо- ны диска к его центру подобно движению тонарма электропроиг- рывателя. Для дискеты головка может передвинуться в нужное место за одну шестую секунды, а в случае жесткого диска — за одну двадцать пятую. Сочетание этих двух факторов — движения записывающей (считывающей) головки по поверхности диска и вращение диска до нужного положения относительно головки — позволяет очень быстро достичь любого места на поверхности диска. Именно поэ- тому компьютерные диски называются памятью прямого доступа, и мы получаем возможность обращаться непосредственно к лю- бой части записанных данных, без необходимости прохождения 119
через всю последовательно записанную информацию, которая возникает при записи на магнитную ленту. Если вы хотите получить самое общее представление о том, как компьютерные данные хранятся на диске, для этого подойдет аналогия с пластинкой на электропроигрывателе. Но это только са- мое общее представление, так как между этими устройствами есть довольно существенные различия. На грампластинке звук записывается на единой спиралевидной бороздке. Это делает грампластинку, подобно магнитной ленте, линейным носителем информации, хотя мы и можем произвольно перейти от одной части пластинки к другой. Наши магнитные дис- ки, со своей стороны, состоят из серии концентрических окружно- стей, не связанных друг с другом. В компьютерной терминологии каждая из таких концентриче- ских окружностей называется дорожкой. Поверхность диска раз- делена на эти дорожки-окружности, начиная с внешней стороны диска, где записана первая дорожка (рис.8.2). Число дорожек за- висит от типа диска. Обычные дискеты, которые называются диске- тами с удвоенной плотностью, содержат 40 дорожек; дискеты с учетверенной плотностью, включая дискеты машин типа АТ, со- держат 80 дорожек. Жесткие диски обычно имеют от 300 до 600 дорожек. Дорожки, сколько бы их не было, обозначаются номе- рами, начиная с нулевой дорожки на внешней стороне диска. Рис.8.2. Треки и секторы диска Вы можете подумать, что дорожки занимают почти всю ширину записывающего пространства диска. На самом деле это не так. Они занимают на удивление небольшую площадь поверхности. Для дискет как с удвоенной, так и с учетверенной плотностью рас- стояние между первой и последней дорожками составляет около 2 см (чуть больше 3/4 дюйма). В техническом смысле, дискета с удвоенной плотностью записывается с плотностью 48 дорожек на 1 120
дюйм, дискета с учетверенной плотностью — 96 дорожек на 1 дюйм. (В англоязычной литературе для этой меры используется сокращение TPI — "track per inch".) Так же, как ширина поверхности диска разделяется на отдель- ные дорожки, окружность дорожку, в свою очередь, разделяется на секторы. Количество этих секторов определяется типом диска и его форматом. У обычных дискет дорожка обычно делится на 8 или 9 секторов, у дискет с учетверенной плотностью — 15, а у же- стких дисков, применяемых в ПК нашего семейства, — 17. Все секторы на одном диске имеют фиксированный размер. Наши ПК могут работать с разными размерами секторов — от 128 до 1024 байт. Стандартом является 512 байт. Вся работа по считыванию и записи данных на дисках произво- дится только полными секторами. Как мы узнаем позже, наши данные могут быть любого размера и их приходится умещать в фиксированном размере сектора. Но операции по вводу-выводу на диск или с диска, которые осуществляет наш компьютер, ве- дутся только с полными секторами. Секторы дорожки, как и сами дорожки на каждой стороне дис- ка, обозначаются присвоенными им номерами, начиная не с нуля, а с единицы (нулевой сектор отводится для целей идентификации, а не для хранения наших данных). Имеется еще одно измерение диска, о котором мы пока не го- ворили: это число его сторон (рис.8.3). Информация может быть записана на обеих сторонах дискеты или только на одной ее сторо- не (подробнее об этом в разд.8.2). В то время как дискета, как любой плоский предмет, имеет только две стороны, жесткий диск состоит из нескольких круглых пластин, таким образом, у него имеется больше чем две стороны. Стороны диска, как вы, навер- няка, догадываетесь, тоже пронумерованы, начиная с нулевого номера для первой стороны. Сочетание всех этих измерений дает нам размер, или объем памяти диска. Умножим число сторон на число дорожек на одной стороне, а затем все это — на число секторов в одной дорожке. Полученное произведение умножим на количество байт в секторе. 121
т.е. на 512 байт, или 0,5 Кбайта, и в результате получим емкость диска. Когда мы используем диск часть общей емкости может быть занята. (Об этом мы узнаем из гл.9.) Но тот объем, который можно высчитать таким образом, по своей сути является емкостью памяти диска. Он приблизительно один и тот же и максимально близок к тому объему памяти, о котором нам сообщает сервисная программа дисковой операционной системы CHKDSK (check-disk). Если вы хотите узнать больше о размерах ваших дисков и если у вас есть nporpaMMS "Утилиты Нортона", вы можете воспользо- ваться одной из них под названием NU, которая покажет вам пол- ные размеры любого вашего диска. Обратитесь к позиции 2.2 в меню ("Техническая информация о диске") и вы увидите все четы- ре измерения вашей дисковой памяти (вместе с некоторой инфор- мацией, касающейся дисковой операционной системы, о которой вы узнаете в гл.9). Теперь нам необходимо узнать, как выглядят диски, как они за- гружаются информацией и защищаются. Но это все определяется типом диска, поэтому мы сначала расскажем об основных разно- видностях дисков. 8-2. Виды дисков Временами кажется, чтобы пересчитать все виды дисков, кото- рые можно применять в наших ПК, нам не хватит пальцев на обе- их руках. Разумеется, было бы нерационально подробно излагать сведения о каждом существующем виде дисков, но можно рас- смотреть наиболее типичные, упомянуть самые экзотические виды и поговорить подробнее о наиболее важных. Этим мы и займем- ся. Необходимо иметь в виду, что существует разная степень раз- личия между видами дисков. Некоторые из этих различий являют- ся принципиальными, а некоторые не столь существенными. Нако- нец, есть просто много мелких отличий. (Обратите внимание на то, что технология изготовления дисков развивается очень быстрыми темпами. За то время, которое пройдет с момента написания этой книги до того, как вы ее про- чтете, в семействе ПК появятся новые форматы дисков, и еще больше их появится в будущем). Мы начнем наше описание с самого первого и самого распро- страненного вида диска — 5,25-дюймовой гибкой дискеты, кото- рую вы видите на рис.8.4. Существует много разновидностей этой дискеты, но прежде чем говорить о них, рассмотрим общие характеристики этого типа дискеты. Круглая дискета делается из очень мягкого и гибкого материала, миларового пластика с магниточувствительным покры- тием из окиси железа. Покрытие одинаково с обеих сторон даже у "односторонних" дискет, которые предназначены для записи толь- \22
ко с одной стороны. Вторая сторона односторонней дискеты мо- жет не быть обработана, отполирована и проверена, но она имеет такое же покрытие, как и первая. Кстати, немногие знают о том, что первая сторона дискеты, рабочая сторона односторонней дис- кеты, находится на нижней стороне дискеты, а не на верхней, где помещена наклейка. Й Дискета имеет два отверстия. Одно из них — осевое, централь- ное отверстие, в которое входит дисковод. Это отверстие может иметь дополнительное кольцо для обеспечения надежной цент- ровки. Другое Отверстие находится на внешней стороне диска и обеспечивает определение начала дорожки. Конверт Окно для считывания и записи Рис.8.4. 5,25-дюймовая гибкая дискета (вид сверху) Круглая дискета помещена в футляр, оболочку черного цвета. На внутренней поверхности оболочки, вне нашей видимости, нахо- дится белая фетровая подкладка, специально предназначенная для обеспечения плавного хода дискеты и для ее протирки. Боль- шое овальное отверстие служит местом, где головка чтения-запи- си дисковода приходит в соприкосновение с дискетой. Два ма- леньких выреза по обеим сторонам этого отверстия называются надрезами снятия напряжения, которые служат для предохране- ния дискеты от перегибов. Рядом с осевым отверстием находится индексное отверстие, позволяющее дисководу видеть индексное отверстие самой дискеты. И, наконец, на одной стороне находится 123
вырез защиты от записи. Если закрыть этот вырез, на эту дискету нельзя производить запись. Существуют возможные вариации в расположении отверстий и вырезов в оболочке дискеты. Некоторые диски могут не иметь выреза защиты от записи. Это означает, что они постоянно защи- щены. Эти дискеты используются для оригинальных копий про- грамм, которые мы покупаем, например, дискеты с дисковой опе- рационной системой. Вы также можете встретить дискеты с двумя вырезами защиты от записи и двумя индексными отверстиями. Это двухсторонние дискеты, каждая сторона которых используется не- зависимо как односторонняя дискета. Таково физическое устройство 5,25-дюймовой дискеты. Теперь давайте рассмотрим удивительное разнообразие существенно от- личающихся друг от друга дискет, которые, однако, выглядят оди- наково. Начнем с односторонних и двухсторонних дискет. В первые годы после появления ПК дискеты записывались только с одной стороны, что позволяло иметь более простую и дешевую конструкцию дисковода, правда, за счет уменьшения по- тенциального объема памяти дискеты ровно наполовину. Сегодня вы, пожалуй, уже не встретите компьютер с односторонним дис- ководом, хотя программы обычно поступают к нам записанными на одной стороне дискеты. В чем здесь причина? Односторонний дисковод может считывать или записывать лишь дискеты одностороннего формата; в свою очередь, двухсторонний дисковод может работать и с односторонними, и с двухсторонним форматом. Дискета, которая сделана двухсторонней, может ис- пользоваться и как односторонняя, и как двухсторонняя. Дискета же, которая сделана односторонней, должна использоваться толь- ко с одной стороны, так как вторая сторона не всегда пригодна для использования. Однако на практике односторонняя дискета часто легко форматируется и используется как двухсторонняя, так что многие окончательно путаются в этих форматах. Итак, предположим, что наши дискеты и дисководы двухсто- ронние. От чего зависит то, как мы будем их использовать: как односторонние или двухсторонние? Это определяется программ- ным обеспечением. Когда дискета форматируется, программа FORMAT делает отметку на дискете, как она должна использо- ваться. И всякий раз, когда мы работаем с этой дискетой, эта по- метка говорит нам, как использовать эту дискету. Мы лучше все поймем, проведя следущую аналогию. Совер- шенно новая и чистая дискета подобна чистому листу бумаги. Представим себе, что мы не можем писать на бумаге без линеек. Когда мы форматируем дискету, мы наносим на нее что-то вроде таких линеек, которые являются рамками того, что впоследствии будет записано на дискету. Помимо этого форматирование диске- ты предусматривает и особую пометку (как бы вверху страницы), которая говорит нам о необходимости перейти на другую сторону 124
дискеты. В начале дискеты программа FORMAT делает отметку, как нужно использовать эту дискету: как одностороннюю или двухстороннюю. В отличие от листа бумаги дискета может форматироваться не- однократно. Всякий раз, когда дискета переформатируется, вся предыдущая информация стирается, причем при этом может ме- няться и формат дискеты. Познакомившись с понятием формата, мы можем теперь пе- рейти к изучению разнообразных форматов, которые может иметь стандартная t5,25-дюймовая дискета. Есть несколько разновидно- стей форматов. Во-первых, дискета может быть одно- или двух- сторонней. Во-вторых, каждая дорожка может иметь 8 или 9 сек- торов. Только эти два параметра могут дать нам 4 различных формата. Односторонний 8-секторный формат был исходным форматом модели IBM PC, и это был единственный формат, с ко- торым мог работать первый вариант дисковой операционной сис- темы, вариант 1.0. Вследствие того, что односторонний 8-сектор- ный формат был самым первым форматом, он является единст- венным универсальным форматом, который может использовать- ся на всех моделях ПК и во всех версиях DOS. Вот почему огром- ное количество программ поступает в этом формате, несмотря на то, что он уже считается устаревшим. Следующий вариант DOS, версия 1.10, работает уже и с двухсторонним 8-секторным фор- матом. Затем появилась версия DOS 2.0, которая предусматрива- ла уже 9 секторов на каждой дорожке. Таким образом, мы полу- чим еще одно- и двухсторонние 9-секторные форматы. Кроме этих четырех стандартных форматов 5,25-дюймовых ди- скет есть еще и другие. И хотя IBM устанавливает на свои ПК толь- ко дисководы для стандартных дискет удвоенной плотности (40 дорожек), некоторые другие марки ПК оснащаются дисководами для 80-дорожечных дискет учетверенной плотности. Существует также целый ряд нестандартных форматов учетверенной плотно- сти. Разработан также особый формат большей емкости специально для модели АТ. Дискеты большой емкости имеют специальное магнитное покрытие, которое позволяет дорожке вмещать целых 15 секторов вместо 8-9. В дополнение к этому дисководы этого формата имеют учетверенную плотность, т.е. способны записывать 80 дорожек на одной стороне дискеты. К счастью, есть только один формат большой емкости, поэтому нам не придется гово- рить об одно- или двухсторонних дискетах для АТ. Было бы не совсем правильно считать этот формат большой емкости всего лишь пятым стандартным форматом, дополняющим четыре формата 5,25-дюймовой дискеты, так как дискеты большой емкости имеют особое магнитное покрытие. Четыре стандартных 5,25-дюймовых формата представляют собой лишь варианты (с не- значительными изменениями) использования одного и того же ви- 125
да дискеты, в то время как формат большой емкости требует осо- бой (и более дорогой) дискеты, которая, впрочем, выглядит абсо- лютно так же, как обычная. На этом мы и закончим рассмотрение разновидностей 5,25- дюймовых дискет. Но прежде, чем перейти к рассказу о других видах дисков, я хотел бы упомянуть и другие размеры дискет, хо- тя они и редко применяются на наших ПК. Существует 8-дюймо- вый формат дискеты, который применяется в персональных ком- пьютерах и ЭВМ старого поколения для обработки текстов. Также есть малоизвестный формат 3,25-дюймовой дискеты, которая вы- глядит как миниатюрный вариант 5,25-дюймовой дискеты. Теперь давайте рассмотрим 3,25-дюймовую микродискету; ее изображение вы найдете на рис.8.5. Физическая Защитная шторка Рис.8.5. 3,25-дюймовый дискета (вид снизу) Микродискеты гораздо меньше, чем гибкие дискеты, и они по- мещены в жесткий защитный футляр. Благодаря меньшему раз- меру и жесткому футляру их гораздо удобнее и надежнее пере- сылать по почте или носить с собой (они легко помещаются в кар- мане). Они представляют собой такие же, уже знакомые нам, круглые пластины из мягкого пластика с металлическим осевым отверствием. Их жесткий футляр предохраняет дискеты от меха- нических повреждений: осевое отверстие прикрыто футляром, а отверстие для чтения-записи защищено отодвигающейся металли- ческой пластиной. Устройство защиты от записи выполнено в виде 126
отодвигающейся пластмассовой пластины, а не в виде выреза в боковой поверхности, как это сделано в дискете 5,25-дюйма. Стандартные микродискеты записываются в формате учетве- ренной плотности, так что их емкость ровно вдвое превышает ем- кость обычных дискет. Их небольшой размер, защитный футляр и большая емкость сыграли решающую роль при выборе их для ис- пользования в новых компьютерах (Macintosh фирмы Apple, мно- гочисленные ПК японского производства). Однако бремя тради- ций, проблемы совместимости, а также большие средства, вло- женные пользователями ПК в традиционные 5,25-дюймовые гиб- кие дискеты, замедлили вредрение этих усовершенствованных ди- скет в наше семейство ПК . На этом мы закончим наш разговор о дискетах и рассмотрим теперь жесткие диски. Жесткие диски получили свое название по тому, что сделанны из алюминиевого сплава. Вследствие многих факторов, таких как гораздо большая скорость вращения и более высокая плотность записи, жесткие диски должны быть надежно защищены от пыли и других загрязнений. Поэтому жесткие диски встроены в дисковод и в отличие от дискет являются несъемными. Именно поэтому фирма IBM называет их фиксированными дисками. Существует много разновидностей жестких дисков, различаю- щихся по числу пластин и рабочих сторон записи, числу цилиндров, числу секторов на одной дорожке, скорости вращения, а также по ряду других характеристик. Мы сейчас обобщим их все в один со- бирательный образ жесткого диска. В семействе ПК чаще других используются два типа таких дисков. Первый тип — это 10-Мбайтовый диск, применяемый в моде- лях XT, Compaq Plus и им подобных членах нашего семейства ПК. Диск компьютера XT имеет четыре стороны, 305 цилиндров (так называются группы дорожек у жестких дисков) и 17 секторов на каждой дорожке. Второй тип — это жесткий диск модели АТ. Он имеет четыре стороны, 615 цилиндров, 17 секторов на каждой дорожке и ем- кость 20 Мбайт. Эти два вида дисков наиболее типичны из множе- ства жестких дисков, применяемых в семействе IBM PC. Другой тип диска — кассетный диск, или дисковый пакет, пред- ставляющий собой гибрид, который сочетает в себе характеристики жесткого диска (в частности, большую емкость) и съемной диске- ты. Существует довольно много видов кассетных дисков, но, веро- ятно, наиболее известным из них является "Ящик Бернулли" “ Дискеты размером 3,5 дюйма из малоизвестных превращаются в общедо- ступные. ПК фирмы IBM нового поколения PS/2 оснащены только 3,5-дюймовы- ми дисководами. Дисковод 5,25 дюйма используется как дополнительное уст- ройство. - Прим. ред. 127
(Bernulli box), выпускаемый фирмой ЮМеда Corporation. Обычно кассетные диски имеют емкость 5-10 Мбайт и скорость вращения, как у обычного жесткого диска. Но, как и дискеты, кассетные дис- ки могут выниматься из машины, что позволяет обмениваться дан- ными, пересылая кассетные диски по почте, или просто запирать их в сейф в целях безопасности. На этом мы заканчиваем наш основной рассказ о дисках и их форматах. Надеюсь, что вы усвоили основные понятия, необходи- мые для того, чтобы разобраться в дисковой операционной систе- ме DOS. Задания 1. Для меня всегда было за> адкой, почему исходная модель ПК IBM PC име- ла односторонний дисковод вместо двухстороннего. Я не думаю, что вы знаете истинную причину этого, но попробуйте предложить одну или несколько своих теорий. Это упражнение поможет вам лучше понять основы персональной вы- числительной техники. 2. В одном из "Технических справочников" фирмы IBM говорится о том, что у обычного дисковода для 40-дорожечной дискеты движение считывающей (запи- сывающей) головки по одной дорожке занимает всего 5 млс. Дальше сказано, что среднее движение занимает 81 млс. Почему? О чем говорят вам эти цифры? 3. Существуют диски, имеющие такую же емкость, как другие, но отличаю- щиеся устройством. Например, среди типов дисков, с которыми может автома- тически работать модель АТ, имеется диск с 614 цилиндрами и 4 сторонами,но есть и другой диск, с 307 цилиндрами и 8-ю сторонами. Ёмкость обоих одинако- ва. В чем практическое различие между ними? 128
Глава 9 ДИСКИ: РАССМАТРИВАЕМ ДИСКОВУЮ ОПЕРАЦИОННУЮ СИСТЕМУ Во второй из трех глав, посвяДекных дискам, мы взглянем на диски с точки зрения дисковой операционной системы, т.е. рас- смотрим, как DOS работает с дисками. Наши диски сами по себе можно сравнить с неухоженным и нераспланированным участком земли. И только тогда, когда операционная система, такая как DOS, создает карту их использования, диски принимают полезную для нас форму. Каждая операционная система, а у ПК, теоретиче- ски их несколько, имеет свой собственный план превращения не- возделанной целины диска в плодородное поле. Так как DOS яв- ляется единственной операционной системой, с которой сталкива- ются пользователи IBM PC, мы с вами разберем организацию дис- ка на основе только этой системы. Сначала мы поговорим об основных принципах использования дисков дисковой операционной системой, затем обсудим некото- рые технические подробности этой системы, после чего исследуем ключевые элементы, их которых состоит файл данных DOS, чтобы лучше понять рабочее содержание наших дисков. Особое внима- ние мы уделим самому универсальному формату данных — тек- стовым файлам ASCII. Эта глава даст нам самые необходимые сведения о наших дис- ках. То, чего мы не успеем упомянуть в настоящей главе, будет рассмотрено в гл. 10, последней из серии глав, повященных дис- кам. 9.1. Знакомство с дисками DOS В гл.8 мы познакомились с основными положениями, касающи- мися дисков нашего компьютера, мы узнали о том, что диск имеет три или четыре измерения. Три измерения — дорожка или ци- линдр (радиальное измерение), сторона диска (вертикальное из- мерение) и сектор внутри дорожки (измерение по окружности) — определяют положение каждого сектора на диске. Размер каждо- го сектора, т. е. количество данных, которое он может вместить, — это четвертое измерение диска. Перемножив результаты пер- вых трех измерений, мы получим общее число секторов на диске, т.е. число рабочих отрезков, находящихся в расположении DOS при работе с диском. Умножение числа секторов на размер сек- тора дает нам объем данных, т.е. емкость диска, число байтов, в которых DOC размещает данные. 129 5 - 6472
Секторы диска являются его основными операционными едини- цами. Все считывания с диска и вся запись на диск осуществляются порциями данных объемом не менее полного объема сектора. Важным моментом в понимании того, как DOS оперирует диском, является тот факт, что DOS рассматривает диск как одномерный, а не трехмерный объект. Конечно, DOS не может полностью игно- рировать трехмерную форму диска. Для того, чтобы считывать ин- формацию с сектора или записывать ее на сектор, DOS должна находить и идентифицировать каждый сектор, пользуясь всеми тремя измерениями. Но пользуется она ими только для того, что- бы приспособиться к физической природе диска. А в своих собст- венных целях DOS рассматривает диск как одномерный объект. Это означает, что DOS трактует секторы диска как простую по- следовательность секторов, начиная с первого сектора и кончая последним. Диаграмма на рис. 9.1 показывает, как это делается. Расположение Рис.9.1. Соответствие между трехмерными координатами расположения сектора на диске и одномерной координатой его образа в DOS В своих собственных целях DOS последовательно нумерует секторы на диске, начиная с 0 (первый сектор на первой стороне первого цилиндра диска), затем идет 1 (второй сектор на первой стороне) и так далее до последнего сектора в последовательности (последний сектор последней стороны последнего цилиндра). Вся работа DOS с дисками и все планирование этой работы идет в тер- минах этих порядковых номеров секторов. И лишь после оконча- ния считывания или записи информации DOS транслирует свою внутреннюю нотацию (обозначение секторов с помощью порядко- вых номеров) в собственно трехмерную нотацию диска. 130
Линейное расположение секторов значительно упрощает рабо- ту DOS по организации диска, хотя и имеет определенные недо- статки. Во-первых, DOS не может воспользоваться тем преимуще- ством, что переход от одного сектора к другому на одном и том же цилиндре происходит гораздо быстрее, чем когда они распо- ложены на разных цилиндрах, так как для переключения цилинд- ров головка считывания (записи) дисковода должна переместиться в соответствующее место. Как превило, DOS не знает, какие секто- ры расположены на одном и том же цилиндре, так как она не распознает деление диска на цилиндры. Во-вторых, традиционный способ работы с дисками накладывает определенные ограничения на объем диска, пригодного для использования в наших ПК. Под- робнее об этом рассказывается далее в подразделе "32-Мбайто- вый предел". 32-Мбайтовый предел Линейное расположение секторов на диске, которые использу- ет DOS, привело к одному ограничению,которого никак не ожида- ли в первые годы после появления DOS, — это 32-Мбайтовый предел, ограничивающий объем диска, который может использо- вать дисковая операционная система. Это ограничение является естественным. Во-первых, размер сектора диска для DOS стандартный, он составляет 512 байт, и, во- вторых, DOS последовательно нумерует секторы, и представляет эти номера в формате, наиболее характерном для ПР, т.е. в виде 16-битовых целых чисел. Но целых 16-битовых чисел всего 65536, т.е. 64К; таким образом, DOS может работать только примерно с 64 тыс.различных секторов. Если секторы имеют размер 512 байт, то мы и получаем предел 32 Мбайт (512х64К примерно равно 32 млн.), ограничивающий максимально возможный размер диска, которым может оперировать DOS. На заре создания DOS и самого семейства ПР, мало кто мог себе представить, что для такой миниатюрной ЭВМ потребуется та- кой большой диск. Но история вычислительной техники характери- зуется одной банальной истиной: сколько бы ты ни имел, всегда хочется большего. Это ограничение можно обойти двумя путями: либо увеличив объем сектора (например, до 1024 байт каждый), либо использо- вать для нумерации секторов числа, состоящие из большего коли- чества битов, чем 16. Так или иначе, но 32-Мбайтовый предел можно преодолеть, и к тому времени, когда вы будете читать эти строки, это наверняка будет сделано, поскольку наше семейство ПК постоянно растет и развивается. Но исходная конструкция DOS была разработана именно с таким ограничением на возможный объем диска. 131
Таким же образом DOS подходит к хранению наших данных на диске. Как мы уже говорили, все считывание с диска и запись на него ведется только полными секторами. Но когда мы работаем с данными, то их можно считывать или записывать в любом объеме. Мы можем работать с любым отдельным байтом данных нашего диска, либо поручить DOS одновременно перенести огромное ко- личество данных. Эта возможность указывает на одну из наиболее значительных ролей операционной системы в управлении дисками: DOS выступает в качестве переводчика между тем, как диск ра- ботает с данными (512-Мбайтовый сектор за одну операцию), и тем, как мы хотим это делать (любой способ). Программы DOS по управлению дисками преобразуют необходимый нам объем дан- ных в объем данных, необходимый для хранения на диске (рис.9.2). Рис.9.2. Передача данных из памяти на диск и обратно DOS фактически выполняет работу по упаковке и распаковке наших данных,так что данные либо объединяются в определенные совокупности, необходимые нам при работе, либо разбиваются на отдельные секторы при занесении этих данных на диск. 132
# # ^^Технические подробности Физическое и логическое форматирование форматирование диска фактически состоит из двух частей, ко- торые я называю физическим и логическим форматированием и кото- рые необходимо различать для того, чтобы знать, что происходит с диском в процессе работы. Физическое форматирование^состоит в создании секторов на диске с обозначением адреса каждого сектора (что позволяет идентифицировать сектор после форматирования), в установлении области сектора, предназначенной для данных (известной нам и нашим программам), и заполнении ее фиктивными данными. Но- вая дискета, не бывшая в употреблении, обычно поступает без фи- зического форматирования, в то время как новый жесткий диск уже физически отформатирован. Логическое форматирование заключается в приспособлении диска к стандартам операционной системы. Когда диск формати- руется для DOS, создается логическая структура в стиле DOS (о чем будет говориться в разд. 9.2). Логическое форматирование является как бы дорожной картой, используемой DOS или какой- либо другой операционной системой для того, чтобы найти нужный путь к информации на диске. В терминах физического и логического форматирования коман- да DOS FORMAT действует различно на дискетах и на жестких ди- сках, поэтому нам так важно различать логическое и физическое форматирование. Так как логическое форматирование является существенным для работы DOS с диском, то его естественно, вы- полняет команда FORMAT. Отличие между дискетой и жестким диском состоит в возможности физического форматирования. При использовании дискеты команда FORMAT выполняет как логическое, так и физическое форматирование. Это объясняется тем, что дискета полностью "принадлежит" операционной системе, которая ее форматирует, в то время, как жесткий диск может быть разделен на секции, принадлежащие различным операцион- ным системам (об этом мы подробнее поговорим в гл. 10). При работе с жестким диском команда FORMAT не "осмеливается" выполнять физическое форматирование даже в той секции, кото- рая принадлежит DOS, так как это может нарушить работу осталь- ных частей диска. Хотя DOS не предоставляет нам программы физического фор- матирования жесткого диска, мы может найти такую программу на диагностической дискете "IBM Advanced Diagnostics". Иногда бывают такие необычные обстоятельства, когда нам необходимо использовать жесткий диск, как говорится, с нуля, и в этом случае программа его физического форматирования может оказаться очень полезной. Программа дисковой операционной системы FORMAT исполь- зует особую команду базовой системы ввода-вывода (смотрите 133
гл. 18) для форматирования дискеты дорожка за дорожкой. Меха- низм физического форматирования требует, чтобы форматирова- ние всех секторов на каждой дорожке осуществлялось единой скоординированной операцией. Это подорожечное форматирова- ние дискеты может использоваться в качестве основы для защиты от копирования, о чем мы вскоре узнаем из гл. 10. Когда команда FORMAT форматирует дискету,она записывает в каждый байт каждого сектора области данных шестнадцатеричное число F6. Так как команда FORMAT записывает число F6 в каждый байт на дискете, все старые данные полностью уничтожаются. Это исключает любую возможность восстановить предыдущие данные после форматирования дискеты. Однако команда FORMAT не из- меняет данные на жестком диске, тем самым позволяя восстано- вить их даже после форматирования жесткого диска. ### Для того чтобы DOS могла пользоваться диском, диск должен быть отформатирован, т.е. размечен и организован так, чтобы DOS было удобно работать с ним. Для этой цели используется служеб- ная программа дисковой операционной системы FORMAT. Коман- да FORMAT делает все необходимое, чтобы превратить диск в объект, подходящий для работы DOS. (О том, как это делается, рассказано в подразд. "Физическое и логическое форматирова- ние".) 9.2. Структура диска DOS В целях организации дисков DOS делит каждый из них на две части: небольшую системную область, используемую дисковой операционной системой для записи ключевой информации о дис- ке, и область данных, составляющую большую часть диска, в кото- рой хранятся данные наших файлов (рис.9.3). Системная область использует лишь незначительную часть диска, это максимум 2% от общего пространства (в 160-Кбайтовом формате дискеты). Для жесткого диска эта цифра еще меньше: для 20-Мбайтового жест- кого диска модели АТ системная область занимает только 0,3%. Системная область, которую использует сама DOS, подразделя- ется на три части: блок начальной загрузки, таблица размещения файлов (FAT) и корневой каталог. Блок начальной загрузки — это самая первая часть диска DOS. Он содержит очень короткую — всего в несколько сотен байтов - программу, осуществляющую начало загрузки DOS в память ком- пьютера, т.е. загрузку программ, необходимых компьютеру для выполнения своей работы. Системный диск DOS (т.е. диск, отфор- матированный с помощью опции /S) содержит точную копию DOS. Работа этой программы начальной загрузки состоит в том, чтобы начать процесс активации DOS путем считывания с диска в память 134
первой части программы DOS. Интересно, что блок начальной за- грузки не просто появляется на системно-форматированном дис- ке. Он имеется на каждом диске, и мы всегда получим сигнал с диска, который не является системно-форматированным, т.е. не содержит копию DOS. Блок начальной загрузки с|чень небольшой, он умещается в один 512-байтовый сектор и практически не занимает сколько-ни- будь существенного места на диске. Кстати, в этом блоке на неко- торых дисках записана очень интересная информация, но об этом мы поговорим в гл. 10, когда углубимся в технические. Первый Систвмква область Область данных Последний т Область длв программы запуска Корневой каталог Таблица размещеннв файлов (FAT) Рис.9.3. Распределение областей на гибком диске Следующая часть системной области диска -— таблица разме- щения файлов. Дисковой операционной системе необходимо иметь средство слежения за большой областью данных диска, что- бы знать, какая ее часть используется в данный момент, а какая свободна для записи новых данных. Таблица размещения новых файлов применяется для записи статуса каждой части диска. Для того чтобы управлять пространством данных на диске, DOS делит его на логические единицы, называемые кластерами. Когда файл записывается области данных нашего диска, дисковое простран- ство отводится файлу в виде этих кластеров. Размер кластера за- висит от формата диска; он может занимать или один сектор, или гораздо больше. На устаревшей односторонней дискете каждый сектор представляет собой один кластер; на двухсторонней диске- те один кластер занимает два сектора, т.е. 1024 байт. На 10-Мбай- товом жестком диске модели XT размер кластера обычно состав- ляет 8 секторов, 4096 байт. В этом можно увидеть закономер- ность: чем больше диск, тем больше размер кластера. Но из это- го правила есть исключения: более емкий, 20-Мбайтовый диск мо- дели АТ имеет вдвое меньшие кластеры, чем диск XT, т.е. 4 сек- тора, 2048 байт. Каким бы не был размер кластера, DOS делит всю область данных диска на эти относительно мелкие единицы и затем ис- пользует их как отдельные пространства, предназначенные для файлов диска. Это предназначение осуществляется с помощью 135
таблицы размещения файлов, которая представляет собой таблицу чисел, каждое из которых обозначает один из кластеров диска. Число, записанное в таблице, означает, что кластер или использо- ван для хранения файла, или свободен. Свободные кластеры обозначаются в таблице с помощью нуля. Любое другое число указывает на то, что кластер занят; номера кластеров связывают различные кластеры, составляющие данные одного файла. Об этом мы поговорим в гл. 10. Назначение таблицы размещения файлов состоит в том, что она является особым выделенным местом, содержащим информацию о размещении пространства данных диска. Это изолирует про- странство данных от записывающей функции, что помогает защи- тить его от возможного повреждения. Если вы задумаетесь над этим, вы поймете, почему таблица размещения файлов является самой важной частью диска, которую больше всех других надо за- щищать. На самом деле эта таблица настолько важна, что DOS обычно записывает две отдельные копии этой таблицы на каждом диске. Фактически используется только первая копия, в то время как вторая позволяет быстро восстановить поврежденный диск. Последняя часть системной области — корневой каталог, кото- рый есть на каждом диске и представляет собой основной, встро- енный каталог диска. (Диски также могут иметь подкаталоги, кото- рые создаются по мере необходимости. Корневой каталог, со своей стороны, является неотъемлемой частью диска.) В каталог заносятся все файлы, которые содержатся на диске. Для каждого файла в каталоге записывается 8-значное имя файла, трехзначное расширение имени, размер файла, а также дата и время создания файла. Все эти сведения доступны нам при ис- пользовании команды DIR. Есть также еще два вида информации о каждом файле, занесенные в каталог. Это номер начального кластера, который показывает, с какого кластера начинается наш файл, и атрибут файла, содержащий ряд других сведений о фай- ле. Например, подкаталоги включают атрибут каталога; так назы- ваемые системные файлы DOS содержат особую пару атрибутов, называемых системными и скрытыми, или невидимыми, атрибута- ми. Существует еще два вида атрибутов, которыми мы пользуем- ся непосредственно: это атрибут доступа только для считывания, который защищает файл от изменения или удаления, и архивный атрибут, позволяющий определить, какие из файлов на нашем ди- ске имеют или должны иметь резервные копии. Корневой каталог каждого диска, подобно другим элементам системной части диска, имеет определенный размер для каждого формата диска. Размер определяет количество записей в катало- ге, предназначенных для файлов. Каждая запись в каталоге зани- мает 32 байта, таким образом, в один сектор умещаются 16 запи- сей. Наименьший формат дискеты — односторонний формат 160К __ отводит для каталога четыре сектора, так что его каталог вме- 136 щает 64 файла. Двухсторонняя дискета имеет семь секторов, от- веденных под каталог, т.е. вмещает 112 файлов. У жестких дисков это число еще больше: например, на 20-Мбайтовом диске модели АТ каталог занимает 32 сектора, вмещая записи о 512 файлах. Я уже говорил о том, что таблица размещения файлов исполь- зуется для записи места хранения данных файла. Делается это следующим образом: как мы знаем, каждая запись в каталоге файлов включает номер кластера, в котором находится начало файла. Таблица размещения файлов содержит номера каждого кластера. Если мы посмотрим на содержимое записи первого кла- стера файла, мы увидим, что оно содержит номер следущего кластера файла, а содержимое записи этого нового кластера ука- жет на следущий за ним кластер,отведенный данному файлу. Та- ким образом, все записи в таблице сведены в цепочку для того, чтобы обеспечить DOS надежным маршрутом по пространству ди- ска, отведенному данному файлу. По достижении конца файла со- держимое записи в таблице уже не будет содержать номер дру- гого кластера. Вместо этого в нем будет указан признак того, что цепочка пространств размещения файлов закончена (см.рис.9.4). На этом мы заканчиваем обзор системной части диска и пере- ходим к рассмотрению оставшейся (большей) части диска — обла- сти данных. Мы уже знакомы с основными положениями, касаю- щимися этой части диска. Область данных используется для записи фактических данных, содержащихся в файлах диска. Область дан- ных, как мы видели, разделяется на отдельные единицы, называе- мые кластерами. Каждый кластер состоит из одного или более секторов, кластеры на одном диске имеют единый размер, кото- рый зависит от формата диска. Данные каждого файла записыва- ются на один или более кластеров, номера и порядок следования которых заносятся в таблицу размещения файлов. Следует отме- тить,что данные одного файла могут быть разбросаны по всему диску, будучи записаны в разрозненные кластеры, хотя DOS и пы- тается по возможности записывать их компактнее, в последова- тельные кластеры. 137
Мы с вами упоминали подкаталоги, и я хочу пояснить, что каж- дый подкаталог действует как смесь данных файла и корневого каталога диска. Поскольку каждый подкаталог записывается на диск как любой другой файл, он хранится в пространстве данных диска, а запись о месте его расположения хранится в таблице раз- мещения файлов точно так же, как записи о других файлах. Но когда дело доходит до использования содержания подкаталога, мы рассматриваем его так же, как корневой каталог диска: он со- держит записи о файлах и других подкаталогах, хранимых на дис- ке, и DOS работает с подкаталогом так же, как и с основным, кор- невым каталогом. Между подкаталогами и корневым каталогом есть два основных различия. Во-первых, на каждом диске может быть только один корневой каталог, но сколько угодно подкатало- гов. Во-вторых, каждый корневой каталог имеет определенный, постоянный размер и емкость, в то время как подкаталог, как и файлы, может иметь любые размеры в пределах емкости диска. Итак, мы получили всю основную информацию, необходимую для понимания принципиальной структуры дисков DOS. Конечно, о дисках еще можно говорить много, но технические подробности мы оставим для гл. 10. 9.3. Сведения о форматах файла Каждый файл, который хранится на нашем диске, может иметь свой уникальный формат данных — структуру данных, содержа- щихся в файле. Вы можете поэтому совершенно справедливо рассудить, что здесь практически не о чем говорить. Однако стоит сделать несколько важных замечаний относительно файлов, что позволит нам углубить наше понимание принципов работы дисков. Прежде всего необходимо отметить, что трехзначное расшире- ние имени файла предназначено для того, чтобы указывать на формат файла и способ его использования. Некоторые из этих расширений являются стандартными и должны применяться для точной идентификации типа файла; большинство расширений,одна- ко, не имеют строгого назначения. Строго определенные расширения в основном относятся к про- граммам. DOS требует, чтобы все программы были записаны в одном из двух специальных программных форматов, которые обозначаются специальными расширениями имени файла СОМ и EXE. Файлы пакетных команд должны иметь расширение ВАТ. Большая часть других расширений имен файлов является произ- вольной, но каждая система прикладных программ обычно пред- назначена для работы с файлами, имеющими расширение, стан- дартное для этой системы. Например, интерпретатор языка Бейсик ожидает, что все файлы программ Бейсика будут иметь расшире- ние BAS. То же самое свойственно и другим языкам программи- 138
роавания: файлы с программами на языке Паскаль обычно имеют расширение PAS, и т.д. Содержимое файлов данных может представить для нас боль- шой интерес, но, чтобы заглянуть внутрь файла, нам нужны такие средства, как сервистная программа DEBUG или утилиты Нортона, описанные разд.2.2. Часто трудно декодировать или просто по- нять то, что мы увидим внутри файла данных. И тем не менее там можно увидеть удивительные вещи. Есть одно очень серьезное основание для подобного разговора о форматах данных, создаваемых нашими программами: иногда возникает необходимость в "спасательных операциях" на наших дисках, таких как восстановление удаленных файлов и т.п. Если мы заранее будем знать, как выглядят наши данные, у нас будет больше шансов узнать их в критической ситуации. Как правило, файлы данных, создаваемые нашими программа- ми, имеют внутреннюю структуру, кажущуюся совершенно запу- танной для человеческого глаза. Определенные части можно уз- нать с первого взгляда: текстовые данные, такие как имена и ад- реса в адресной базе данных, всегда легко узнаваемы. Но те же части данных, которые содержат номера и форматирующую ин- формацию о расположении данных, обычно имеют зашифрован- ную форму и поддаются расшифровке только теми программами, которые работают с данными. Один из особых видов файлов, однако, имеет организацию, ко- торую очень легко узнать: это файлы данных, составленные из так называемых записей фиксированной длины, — повторяющаяся структура данных с переменным содержанием, но с одной и той же длиной каждого элемента. И мы замечаем их повторяемость даже тогда, когда не узнаем сами данные. Это тот вид данных, который Бейсик использует для своих файлов прямого доступа. Так как записи данных в файлах этого типа имеют одну и ту же длину, Бейсик может рассчитать свой путь к месту размещения любого произвольно взятого номера записи без необходимости вести поиск с самого начала файла. Сталкиваясь с любым из этих файлов, составленных из элементов фиксированной длины, мы можем указать его структуру и расшифровать некоторые его дан- ные. Исследуя данные наших файлов, мы можем узнать оченъ мно- го интересного о том, как компьютеры и программы работают с данными, записанными на дисках. 9.4. Текстовые файлы Существует один особый формат файла, о котором должен знать каждый пользователь ПК. Это текстовый формат файла Американского стандартного кода для обмена информацией, или 139
текстовый формат ASCII. Текстовый формат — это наиболее уни- версальный формат данных в семействе ПК. В то время как боль- шинство программ имеют собственный способ записи данных, тек- стовый ASCII файл представляет собой универсальный формат, ко- торый может использоваться любой программой. Текстовые ASCII файлы предназначены для того, чтобы хранить обычные текстовые данные, аналогичные тем словам, которые вы сейчас читаете. Текстовые файлы используются многими простыми программами редактирования текстов (например, программой EDLIN, которая является составной частью DOS); многие програм- мы подготовки текстов также работают непосредственно с тексто- выми ASCII файлами. Однако большинство программ, включая многие программы подготовки текстов, интерпретатор Бейсика, программы электронных таблиц и другие, используют текстовый формат ASCII файла как альтернативу своему собственному фор- мату данных. Эти программы готовы работать с текстовыми ASCII файлами просто потому, что этот формат является чем-то вроде универсального средства переноса данных из программы в про- грамму. Часто же это средство оказывается и единственным. Когда я говорил о том, что большинство программ имеют свои собственные форматы данных, отличающиеся от текстового фор- мата ASCII, я имел в виду прежде всего прикладные программы, такие как базы данных, электронные таблицы и т.д. Существует также множество программ, которые работают только с тексто- вым форматом ASCII. Ассемблеры и компиляторы языков про- граммирования читают исходный код своих программ прямо в текстовых ASCII файлах. Некоторые другие программы также предназначены для работы главным образом с текстовыми ASCII файлами, такие как разработанная IBM программа поиска опеча- ток WordProof. Среди тех программ, которые так или иначе явля- ются средством набора и редактирования текстов,существует нео- фициальное деление на простые программы,которые используют текстовые ASCII файлы (например,множество программ-редакто- ров и корректоров),и сложные программы, которые используют свои собственные форматы данных (например, большинство про- грамм для издательской деятельности). И, наконец,есть еще одно очень важное применение текстовых ASCII файлов — это файлы пакетов команд, позволяющих DOS выполнять серию команд за одну операцию. Эти пакеты команд хранятся в файлах в текстовом формате. Данные в текстовом ASCII файле состоят из двух типов симво- лов: из обычных текстовых ASCII символов (буквы алфавита и т.д.), о которых мы говорили в разд.4.2, и из управляющих ASCII символов, которым был посвящен разд.4.3. Обычные текстовые символы являются и основным данными в текстовом ASCII файле, в то время как управляющие символы говорят о том, как отфор- 140
матирован текст: они задают разделение его на строки, абзацы и т.Д. Нет четкого определения тому, как наши программы и компь- ютеры должны использовать текстовые ASCII файлы. Вместо этого все программы, работающие с |Этим форматом, используют его основные элементы; некоторые программы используют редко употребляемые форматирующие управляющие символы. Два управляющих ASCII символа используются для обозначе- ния конца каждой строки; это символы возврата каретки и пере- вода строки, CR и LF, их десятичные коды 13 и 10, или в шестнад- цатеричной системе 0D и 0А. Эти символы являются стандартным средством обозначения конца строки текста. Один управляющий ASCII символ используется для обозначе- ния конца файла текстовых данных. Это управляющий символ Control-Z, десятичный код 26, в шестнадцатеричном ислении 1А. В большинстве таблиц управляющих ASCII символов он называется конец файла и обозначается SUB, а иногода EOF. Обычно любой текстовый файл оканчивается символом конца файла. Символ табуляции имеет тот же смысл, что и на пишушей ма- шинке. Его код 9, обозначение НТ (горизонтальная табуляция). Этот символ появляется во многих файлах ASCII, хотя не сущест- вует жесткого соглашения относительно того, где находятся пози- ции табуляции. Большинство программ, но, к сожалению, далеко не все, предполагают, что при табуляции происходит "скачок" че- рез каждые восемь позиций (на 9-й, 17-й колонках и т.д.). Символ перевода страницы используется для обозначения кон- ца одной страницы и начала следующей. Его десятичный код 12, в шестнадцатеричной системе ОС, название символа FF. Этот управ- ляющий символ иногда называют выпуском страницы. Текстовый ASCII файл может содержать любой из управляю- щих символов, о которых мы говорили в разд.4.2. (все они приве- дены в табл.4.1), но чаще всего используются только пять из них, о которых я только что рассказал. Во многих случаях даже два по- следних символа порой не используются. Существует много способов обозначения деления текста на строки. Чаще всего в качестве конца строки используются симво- лы возврат каретки(перевод строки). Когда эти символы использу- ются для обозначения слов,предложений и абзацев, в конце абза- ца добавляется пустая строка (конец абзаца часто обозначается повторным использованием этой пары символов LF и CR). Иногда можно встретить текстовые файлы ASCII, в которых каждый абзац рассматривается как одна очень длинная строка, причем символы возврат каретки (перевод строки) употребляются всего один раз - в самом конце. Такие текстовые файлы часто создаются програм- мами подготовки текстов. Ввиду того, что имеются различные способы организации тек- стового файла, могут возникнуть некоторые противоречия между 141
тем, в каком виде разные программы ожидают увидеть файл. На- пример, если мы попробуем использовать текстовый ASCII файл для перевода написанного текста из одной программы подготовки текста в другую, может случиться так, что одна программа будет считывать текст отдельными строками, из которых составляются абзацы, а другая программа будет рассматривать абзацы как еди- ную длинную строку, такое несоответствие очень неприятно. Од- нако текстовые ASCII файлы являются наиболее универсальным языком, на котором могут говорить все программы. Поэтому вам придется работать с текстовыми ASCII файлами чаще, чем вы ду- маете. Обычно мы говорим о текстовых ASCII файлах как о файлах, содержащих либо слова, такие как вы читаете на этой странице, либо исходный код программы, подобно примерам, которые вам уже не раз встречались в этой книге. Любая форма данных может быть переведена в стандартный формат ASCII тем или иным обра- зом. Поэтому мы можем найти текстовые файлы, состоящие толь- ко из чисел, записанных символами ASCII. Для осуществления об- мена нетекстовыми данными между программами, эти данные переносятся из исходной программы в файл, предназначенный для обмена. Такая возможность существует, например, практиче- ски во всех программах электронных таблиц. Полученный тексто- вой файл читается другой программой электронной таблицы и пе- реводится в ее внутренний формат. Перевод данных в ASCII вид и их чтение в этом виде в программах получило название экспорта- импорта данных. Чтобы дать вам представление о том, как выглядит текстовый ASCII файл, давайте рассмотрим следующий пример. Предполо- жим, что у нас есть текстовый файл, состоящий из двух строк: Колумб вышел в открытое море В 1492 году. А теперь я запишу этот коротенький текст еще раз, но так, как он был записан в виде данных текстового файла, т.е. с использова- нием управляющих символов: Колумб вышел в открытое море <CR> <LF> В 1492 году. <CR> <LF> <EOF> Вам часто придется иметь дело с текстовыми ASCII файлами. Поэтому необходимо иметь в виду одну тонкость, о которой я хо- чу вас предупредить. Она касается способа окончания текстовых файлов ASCII и размеров файла. Я уже говорил о том, что символ окончания файла (Control-Z, код 26) обычно употребляется для обозначения конца данных тек- стового файла. Это может быть сделано по-разному. Наиболее 142
строгой и чистой формой употребления этого символа является его использование в конце последней строки текста (как я показал это на примере). Длина файла, записанная в каталоге, включает этот символ в размер файла. Иногда, однако, файл может быть больше по размеру вследствие того, что некоторые программы работают с файлами не по отдельным байтам, а сразу, скажем, по 128 байт одновременно. Когда такая программа создает файл, то символ окончания файла покажет нам фактический конец файла, а запись в каталоге даст нам размер файла, округлив его до любого ближайшего большего числа, кратного 128. В подобных случаях фактическая длина файла будет несколько меньшей, чем указано в каталоге. Есть еще одна тонкость: текстовый ASCII файл может быть записан вообще без символа Control-Z в конце файла. В та- ком случае размер файла в каталоге соответствует истинному раз- меру файла и теоретически нет необходимости в символе оконча- ния файла, так как размер файла сам говорит нам о том, где кон- чается файл. При работе с текстовыми файлами необходимо всег- да учитывать, что конец файла может быть обозначен разными способами. Задания 1. Если у вас есть служебная программа "Утилиты Нортона”, воспользуйтесь ею для определения размера ваших дисков (во всех измерениях) и размера кластеров, которые DOS создает на вашем диске. Информацию о кластерах вы найдете в меню "Утилит Нортона" под номером 2.2. 2. Почему таблица размещения файлов является самой существенной час- тью диска? Что делает ее важнее каталога? Существует служебная программа DOS по восстановлению файла, называемая RECOVER, которая может восстано- вить удаленный каталог диска, если цела таблица размещения файлов. Как это получается? Можно ли создать подобную программу восстановления таблиц раз- мещения файлов, если сохранится каталог? 3. Для того чтобы увидеть, как Бейсик может записывать свои программные файлы в двух форматах: собственном формате Бейсик и в текстовом формате ASCII, введите небольшую программу на Бейсике (буквально строку или две из любой программы на языке Бейсик) и затем запишите ее на диск в двух форма- тах, используя следующие команды: SAVE "BASFORM" и SAVE "TEXTFORM , А. Затем посмотрите на различия между этими двумя файлами: сравните их разме- ры, используя команду DIR. Посмотрите, насколько отличается содержание файлов, выведя их на экран дисплея с помощью команды TYPE. Если вы знаете, как проникнуть в файл с помощью программы DEBUG или Утилит Нортона (а ес- ли не знаете, то прочтите гл.22), исследуйте содержимое этих двух файлов. 143
Глава 10 ДИСКИ: ОСОБЕННОСТИ Это последний этап нашего путешествия по дисковой памяти се- мейства IBM PC. Здесь мы остановимся на технических деталях. Я расскжу об особенностях жестких дисков, о том, как наши ком- пьютеры с ними работают, как DOS использует диски, и подробнее объясню то, о чем говорилось в гл.9. Наконец, мы закончим свое исследование рассмотрением некоторых специальных особенно- стей дисков, включая защиту от копирования и нестандартные форматы. Как вы видите, эта книга разделена на две части. Техническая информация представлена отдельно, так, чтобы читатели, жела- ющие сконцентрироваться на понимании обших вопросов работы IBM PC могли с легкостью ее пропустить. Большая часть содержа- ния этой главы попадает под эту категорию, но в ней есть один раздел, который я бы не хотел, чтобы вы пропустили. Это обсуж- дение особенностей жестких дисков, их разделов. Если вы хотите понять наиболее важные практические моменты работы с ПК се- мейства IBM PC, вам необходимо знать эти подробности. 10.1. Разделы жестких дисков Жесткие диски создают особые трудности для создателей ком- пьютеров, не возникающие при использовании дискет. Наиболее очевидное отличие жесткого диска в том, что он обладает гораздо большей памятью, чем дискета. Почти везде в жизни наступает момент, когда количественное различие переходит в качествен- ное, когда большее уже не просто большее, а уже качественно другое. Так обстоит дело с жесткими дисками нашего компьюте- ра: их запоминающая способность настолько больше, чем у дис- кеты, что и обращаться с ними надо не так, как с дискетой. Боль- ший объем и скорость доступа жесткого диска — это то, что отли- чает его от гибкого диска, но, как ни странно это, не самое глав- ное отличие. Самое главное отличие жесткого диска в том, что он не является съемным. Я пользовался термином "жесткий диск", потому что именно так их называет большинство пользователей. Но IBM имеет для них собственный термин — "фиксированные диски" — название, кото- рое подчеркивает основной момент. В отличие от гибкого диска (фиксированный) жесткий диск встроен в машину и не может быть снят для занесения на него данных на другом компьютере. (Мы должны отметить здесь, что существуют некоторые систе- мы жестких дисков, которые имеют съемные дисковые кассеты. 144 Они так же заменяемы, как и гибкий диск (дискета). Одна из ши- роко известных систем дисковых касет — Bernoulli Box. Этот тип дисков объединяет размер и скорость обычного жесткого диска с подвижностью (со съемностью) дискеты. Наше обсуждение жест- ких дисков (или, вернее, фиксированных дисков) большей частью не относится к этим кассетным системам. Хотя большинство из нас работает исключительно в рамках опе- рационной системы DOS , она не является единственной действую- щей операционной системой для IBM PC. Для этого семейства су- ществуют другие операционные системы,такие как СР/М-86, UCSD p-System, Xenix, PC-IX (пара действующих систем, происходящих от хорошо известной системы UNIX ) и др. Здесь речь идет о том, что не существует четкой ориентации в использовании дискеты на одной операционной системой, напри- мер DOS, в том смысле, что дискета имела бы формат и логиче- скую структуру применительно только к ОС, которая работает с этим диском. Не существует серьезной проблемы в использова- нии дискет с игровыми программами, записанными в собственном особом формате (с целью защиты от копирования). Хотя необыч- ные форматы дискет могут быть для нас неудобны, нет препятст- вий для использования их в IBM PC. Эти машины не обязаны всег- да использовать один фиксированный формат, поскольку он зада- ется определенной операционной системой. С жестким диском ситуация совершенно другая. Если наш жес- ткий диск "принадлежит" одной действующей системе (например, нашей DOS), то мы не можем использовать его с другой системой (скажем, любой из систем типа UNIX, популярность которых рас- тет). Поскольку почти все, что мы делаем с нашими PC, основано на DOS, нам хочется спросить: "Ну и что из этого?" Но это очень недальновидный подход. Компьютерный мир все время меняется, и вполне возможно, что через несколько лет мы не будем ис- пользовать ту операционную систему, которую используем сегод- ня. Но и сегодня есть люди, работающие с IBM PC, которые предпочитают использовать другие системы, а не DOS. Как же можно приспособить разные операционные системы, с неподходя- щими способами структуры использования диска, к одному жест- кому диску? Ответом прост: разделить дисковое пространство на участки, ко- торые могут "принадлежать" различным операционным системам. В пределах каждого участка диску могут быть даны формат и ло- гическая структура, требуемые для данной операционной систе- мы. Такой подход дает большую гибкость в применении наших жес- тких дисков, но он основан на некоторых всеобъемлющих стандар- тах, которым должна следовать каждая система, использующая Диски. Должен существовать набор основных форматов, имею- щихся на диске, которым должны соответствовать все оперэцион- 145
ные системы. Часть этой общей основы — это физическое форма- тирование диска, устанавливающее, кроме всего прочего, размер частей, который будет соответствовать каждому разделению на диске. Это подчеркивает различие между физическим и логиче- ским форматированием (приданием физического и логического формата), которое мы обсуждали в гл 9. Но общий размер секто- ра — это не все, что касается общей основы и правил сосущество- вания, применимых к разделенному на части жесткому диску. Должен еще быть стандартный способ указания границ разделов диска; и каждая операционная система, использующая разделен- ный диск, должна оставаться в собственных рамках и не проникать на территорию другого раздела. Вот как это делается. Самый первый сектор жесткого диска от- водится для основной записи (оригинала), которая содержит табли- цу разделов, описывающую разделение записей на диске. Эта таблица показывает, каковы размеры диска, сколько на нем секто- ров и каковы размеры и расположение каждого из них. Теперь диск не обязательно должен иметь больше, чем одно деление. Сколько бы не было делений на диске — от одного до четырех — и занимают ли они целый диск или оставляют часть его для буду- щего использования, основная дисковая запись, занимающая пер- вый сектор диска, показывает их число и расположение на жест- ком диске. На рис. 10.1 показано такое деление диска. Диска Рис. 10.1. Деление жесткого диска на разделы Чаще всего владельцы IBM PC игнорируют дополнительные воз- можности и сложность, которые доставляет им разделение диска. Вместо этого большинство просто создает один раздел DOS, кото- рый заполняет целый жесткий диск и используется так, как если бы DOS занимал весь диск и если бы не было такой возможности как разделение. Фактически это самое разумное, что можно сде- лать. Пока вам не понадобилось делить жесткий диск на части, че- го может никогда не произойти ,нет смысла оставлять место на жестком диске на тот случай, что вам может понадобиться это де- ление в будущем. Мы сможем позаботиться об этом, когда при- дет время. 146
Для того чтобы оперировать разделами в нашем жестком дис- ке, DOS имеет программу FDISK, которая может создавать и из- менять деление диска на разделы. На рис. 10.2 показано типичное отображение информации о разд^Ьении для диска, который пол- ностью отведен для DOS. Может существовать до четырех разде- лений в таблице, которую отображает FDISK. Каждое будет иметь свое начальное и конечное положение и размер в дисковом паке- те. Вместе они .могут занять целый диск (как вы видите на рис. 10.2) или оставлять часть диска свободной. Display Part ion Information Partion Status Type Start End Size 1 A DOS 0 613 614 Total disk space is 614 cylinders. Press Esc to return to FDISK Options Рис. 10.2. Сообщение на экране дисплея о делении диска на разделы Программа FDISK позволяет нам манипулировать делениями диска, пока мы работаем с DOS. Если мы работаем с другими операционными системами, то они должны иметь эквивалентные программы деления. Программа FDISK позволяет нам создавать или стирать раздел, принадлежащий DOS, но она не позволяет нам трогать раздел, принадлежащий другой операционной систе- ме. Это хорошее защитное качество; но у него имеются недостат- ки: если нежелательное деление проведено из другой операцион- ной системы, мы не можем изменить его в DOS и получается, что мы застряли на бесполезном делении (такое случалось с моими знакомыми). Предположим, что мы отвели весь наш жесткий диск для DOS, а потом захотели выделить часть его пространства для другого раздела. Можем ли мы просто отдать часть места? К сожалению, нет. Способ, с помощью которого DOS конструирует разделения ди- ска, не позволяет просто уменьшить раздел. Если нам надо изме- нить размер разделов DOS (сделать их меньше или больше), мы должны разгрузить все содержимое сектора (скажем, с помощью сервисной программы DOS-BACKUP), стереть часть (с помощью FDISK), создать новое разделение и форматировать его (с по- мощью FORMAT), а затем снова восстановить спасенные данные (с помощью RESTORE). Процесс может быть трудоемким, но мы можем этого избежать, оставив место для новых разделов, когда 147
впервые начинаем пользоваться нашими жесткими дисками. Мы могли бы оставить место, но я этого делать не советую. Я думаю, что пока мы не знаем точно, что нам понадобится другая операционная система, нам лучше использовать весь жесткий диск для DOS и заняться перераспределением, когда возникнет необ- ходимость. На рис. 10.2 вы видите, что единственный раздел отмечен стату- сом "А". Это активный раздел. На любом разделенном диске один раздел всегда отмечен как активный. Это связано с процес- сом старта или запуска. Мы знаем, что каждый обычный диск имеет на своем первом секторе программу запуска, которая на- чинает процесс старта или запуска рабочей системы. То же отно- сится и к разделенному жесткому диску, но там действует допол- нительное устройство. Первый раздел разделенного жесткого ди- ска содержит основную запускающую программу наряду с табли- цей, описывающей разделы. Эта основная запускающая програм- ма читает из таблицы разделов, какой раздел активен. Затем она дает сигнал запускающей программе, приводя в действие этот раздел. Каждый раздел имеет свою программу запуска (так же, как ди- скета имеет стартовую запись), приспособленную к потребностям определенной операционной системы, которой принадлежит этот раздел. Основная стартовая запись выполняет работу по нахожде- нию запускающей записи нужного раздела и по вводу ее в дейст- вие. Мы говорили о разделах диска, когда они принадлежат опреде- ленным операционным системам, но это не всегда так. Официаль- но на жестком диске может быть только один раздел DOS, а на самом деле их бывает иногда два или больше, и для этого есть важная причина. Как мы видели в гл. 9, обычно DOS имеет 32-Ме- габайтовый предел по размеру дисков, с которыми она может ра- ботать. Что, если у нас диск больше, скажем, 70 Мбайт? Раздел DOS, который мы можем создать на таком диске, обычно не мог быть больше 32 Мбайт. Но мы можем создать другие разделы в стиле DOS на диске и добиться этого посредством специального драйвера устройства DOS. Благодаря этому "фокусу" мы можем использовать весь диск для данных DOS, хотя он и будет разбит на отдельные разделы (каждый из которых будет интерпретировать- ся операционной системой как отдельный диск). Из этого следует, что разделы — это особый ключ к тому, что- бы заставить большое запоминающее пространство жестких дис- ков работать на нас с дополнительной гибкостью, которая просто не нужна применительно к нашим дискетам. Однако с этим боль- шим размером и дополнительной гибкостью приходит дополни- тельная степень сложности, которую мы должны освоить, если хо- тим получать полную выгоду от использования жестких дисков на- ших компьютеров. 148
# # #Технические подробности 10.2. Подробная структура диска В этом разделе мы собираемся глубже вникнуть в то, как DOS конструирует диск, чтобы лучше понять, что происходит с нашими дисками. Это поможет нам оценить и использовать наши диски, когда они в полном порядке, и может помочь нам преодолеть трудности, когда что-то не так. Как мы видели в гл.9, DOS делит каждый диск на две части: си- стемную, используемую для хранения записи DOS, и данных, где хранятся наши файлы. Сама системная часть имеет три области: блок начальной загрузки, таблицу распределения файлов (FAT) и корневой каталог. Теперь мы рассмотрим поближе, что находится внутри каждой из них. Запускающая запись всегда самая первая на каждом диске. Как мы узнали ранее, она используется для то- го, чтобы хранить короткую программу, которая начинает процесс старта, "запуска" DOS. Запускающая запись присутствует на каж- дом диске, даже на тех, с которых мы не можем начать загрузку (потому что они не содержат копии файлов системы DOS). Программа запуска достаточно мала и легко размещается в од- ном секторе диска, так что нет необходимости, чтобы область за- пуска занимала больше чем один сектор. Но, если какое-то обсто- ятельство в будущем вызовет необходимость иметь большую программу запуска, метод обращения с дисками DOS допускает такую возможность. Мы можем воспользоваться программой DOS DEBUG для того, чтобы проверить содержимое программы запу- ска; для этого нужны только две простые команды DEBUG: L00 О 1, которая считывает в память программу запуска с дисковода А, и D 0 L 200, которая считывает текст программы запуска в деся- тичной системе счисления и ASCII коде. На рис. 10.3 показано, как выглядит этот текст на экране дисплея для операционной системы DOS. Глядя на эту программу, можно отметить несколько особенно- стей. Сообщения об ошибках и имена двух файлов системы DOS (IBMBIO.COM и IBMDOS.COM) дают нам представление о дв/х компонентах операционной системы, которые могут выйти из строя во время процесса запуска, а также косвенно дают нам понять, что программа запуска всегда проверяет наличие этих двух имен в каталоге диска для того, чтобы убедиться, что этот диск систем- ный. Вы также увидите близко к началу маркер версии, который читается как "IBM 3.1". Не так очевидно, но вполне интересно то, что этот маркер версии — просто-напросто первый элемент в таб- лице, описывающей характеристики диска по отношению к DOS. Таблица включает ключевую информацию, такую как число байтов на сектор, число секторов на дорожке и т.п. (физические парамет- 149
ры диска), а также размеры FAT и каталога (логические парамет- ры структуры DOS на диске). Эта таблица, а также идентифициру- ющая подпись в конце записи (hex 55 АА) включены во все диски, кроме тех, которые форматированы для вариантов DOS ранее, чем вариант (версия 2.0). 2635:0000 ЕВ 29 90 49 42 4D 20 20-33 2Е 31 00 02 02 01 00 .). IBM 3.1.... 2635:0010 02 70 00 DO 02 FD 02 00-09 00 02 00 00 00 00 00 .р. 2635:0020 00 00 00 00 OF 00 00 00-00 01 00 FA 33 CO 8E DO 3... 2635:0035 BC 00 7C 16 07 BB 78 00-36 C5 37 1E 56 16 53 BF ..|..X.6.7.V.S. 2635:0040 20 7C B9 0B 00 FC AC 26-80 3D 00 74 03 26 8A 05 |... 2B35:0050 AA 8A C4 E2 F1 06 IF 89-47 02 C7 07 20 7C FB CD G....|.. 2635:0060 13 72 67 A0 10 7C 98 F7-26 16 7C 03 06 1C 7C 03 .rg..|.|...|. 2B35:0070 06 0E 7C A3 34 7C АЗ 2C-7C B8 20 00 F7 26 11 7C ..|.4|.,|. 2635:0080 86 1E 06 7C 03 C3 48 F7-F3 01 06 2C 7C BB 00 05 .., |. .H....,|. 2635:0090 A1 34 7C E8 96 00 B8 01-02 E8 AA 00 72 19 8B FB .4| r... 2B35:00A0 B9 0B 00 BE BE 7D F3 A6-75 0D 8D 7F 20 BE C9 7D >..u } 2635:0080 B9 0B 00 F3 A6 74 18 BE-5F 7D E8 61 00 32 E4 CD t.._}.a.2.. 2B35:00C0 16 5E 1F 8F 04 8F 44 02-CD 19 BE A8 7D ЕВ ЕВ A1 .......D...>.. 2B35:00D0 1C 05 33 D2 F7 36 0B 7C-FE CO A2 31 7C A1 2C 7C ..3..6.|..11.,| 2B35:00E0 A3 32 7C BB 00 07 А1 2C-7C E8 40 00 A1 18 7C 2A .2|....,|.9...j* 2B35:00F0 06 30 7C 40 50 E8 4E 00-58 72 CF 28 06 31 7C 76 .0|9P.N.Xr.(.1|v 2635:0100 0C 01 06 2C 7C F7 26 0B-7C 03 D8 EB D9 8A 2E 15 . 2835:0110 7C 8A 16 1E 7C 86 IE 32-7C EA 00 00 70 00 AC 0A |...|..2|...p... 2B35:0120 CO 74 22 B4 0E BB 07 OO-CD 10 EB F2 33 D2 F7 36 .t'.........3..6 2635:0130 18 7C FE C2 88 16 30 7C-33 D2 F7 36 1A 7C 88 16 ,|....0|3..6.|.. 2B35:0140 1F 7C A3 2E 7C СЗ B4 02-8B 16 2E 7C B1 06 D2 E6 .|..|.........|.... 2635:0150 0A 36 30 7C 86 CA 86 E9-8b 16 1E 7C CD 13 C3 0D .60|.......j... 2835:0160 0A 4E 6F 6E 2D 53 79 73-74 65 6D 20 64 69 73 6B .Non-System disk 2835:0170 20 6F 72 20 64 69 73 66-20 65 72 72 6Fb72 0D 0A or disk error.. 2835:0180 52 65 70 6C 61 63 65 20-61 6E 64 20 73 74 72 69 Replace and stri 2B35:0190 6B 65 20 61 6E 79 20 68-65 79 20 77 68 65 6E 20 ke any key when 2835:01A0 72 65 61 64 79 0D 0A 00-0D 0A 44 69 73 6B 20 42 ready......Disk В 2835:0180 6F 6F 74 20 66 61 69 6C-75 72 65 0D 0A 00 49 42 oot failure...IB 2B35-.01C0 4D 42 49 4F 20 20 43 4F-4D 49 42 4D 44 4F 53 20 MBIO COMIBMDOS 2B35:01D0 20 43 4F 4D 00 00 00 00-00 00 00 00 00 00 00 00 COM.......... 2835:01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............... 2635:01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ................U. Рис. 10.3. Протокол программы запуска Операционная система должна идентифицировать все характе- ристики каждого диска, с которым она работает. В самых ранних вариантах DOS, когда было очень мало форматов дисков, знание этих характеристик было встроено в DOS, и все, что операционной системе требовалось от диска, это однобайтовый код ID, хра- нившийся в FAT. Однако такой подход недостаточно гибок, и те- 150
перь DOS узнает все, что ей надо о диске, из информационной таблицы в программе запуска. . Если вы хотите раскодировать программу запуска для изуче- ния, воспользуйтесь командой DEBUG U-unassemble. Чтобы уви- деть всю программу, вам придется разобрать ее по частям и про- смотреть адреса, используемые в каждой команде "перехода". При этом вы увидите, где начинаются части программы. Для про- граммы запуска, показанной на рис. 10.3, вам понадобятся следу- ющие две команды: U О L 2 и U 2В. Сразу же за программой запуска на каждом диске находится File Allocation Table или FAT, которая контролирует использование файлового пространства на диске. Как мы выяснили в гл.9, область данных диска разделена на группы сегментов, и эти группы явля- ются единицами пространства, которое отводится для файлов. Каждая группа определяется последовательным номером, начи- ная с номера 2 для первой группы на диске (группы 0 и 1 заре- зервированы для удобства DOS). Независимо от размера кластера (он может занимать единственный сектор, восемь секторов или более) он имеет отдельную запись в таблице FAT. Поскольку в содержании каждой записи таблицы FAT, соответст- вующей отдельному кластеру, указывается номер следующего кластера, отводимого файлу, общее число записей в FAT опреде- ляется общим числом кластеров. Первоначально каждой записи в FAT отводилось 12-битовое число, которое позволяло закодиро- вать 4К кластеров. Однако появление 20-Мбайтового жесткого ди- ска модели АТ требовало более 10 000 кластеров. Это, в свою очередь, требовало большего размера FAT. Таким образом, те- перь существует два формата FAT: один — для гибких дисков с записями размером 12 битов и один с записями размером 16 би- тов. Различие между ними только объеме самой FAT, а метод, по которому используется FAT, один и тот же. Если запись в FAT равна нулю, это указывает на то, что соответ- ствующий кластер не используется — он свободен для размеще- ния любого файла, которому он потребуется. Для кластеров, кото- рые содержат файловые данные, вход FAT содержит либо номер следующего кластера, либо особый код, который отмечает конец цепочки кластеров для файла. Кластеры, в которых хранится файл, "сцеплены" вместе ссылками, которые хранятся в FAT. Вход в файл в каталоге обозначает номер первого кластера, а содержание каждого кластера указывает номер следующего или обозначает конец цепи (конечный маркер — шестнадцатеричный FFF для 12-битового FAT, FFFF для 16-битового FAT). Это позволя- ет DOS проследить расположение файла, начиная с первого кла- стера и кончая последним используемым кластером. Дефектные части диска, которые не должны использоваться — так называе- мые "плохие кластеры", определяются значением записи в FAT, равной FF7 (или FFF7 для 16-битового FAT). Другие особые коды 151
FAT, от FFO до FFF или от FFF0 до FFFF зарезервированы для тех потребностей, которые могут возникнуть в будущем. Объем записи в FAT, равный 16 битам, позволяет использовать 65518 кластеров, а объем записи равный 12 битам позволяет зану- меровать и использовать 4078 кластеров. Как нам известно, число 0 используется для определения занятости кластеров,а число 1 за- резервировано по техническим причинам. Как 12-, так и 16-битовая записи в таблице FAT используется динаково, но каждая записывается по-своему, принимая во вни- мание различие в размере входов. Нет ничего особенного в том, как хранится 16-битовый FAT: 16-битовые коды — это часть естест- венной схемы IBM PC, и, таким образом, они просто хранятся как список 2-байтовых слов. Для 12-битовых FAT дело обстоит более сложно. Микропроцессоры IBM PC не имеют естественного и удобного способа записи кодов для обозначения файлов длиной 1,5 байта. Для того чтобы решить эту проблему, входы FAT связы- ваются попарно таким образом, что занимают три байта .Метод ко- дирования двух 12-битовых номеров в трех байтах представляется как наиболее удобный при работе с файлами, но нам довольно трудно разобраться в нем, если смотреть на такой FAT в шестнад- цатеричном коде. Каждая таблица FAT в действительности начинается со входа в кластер под номером 0 несмотря на то, что первый используемый кластер имеет номер 2. Первые два входа в FAT — пусковые, и они используются для того, чтобы обеспечить место для хранения байта ID, который помогает DOS определить формат диска. Самый первый байт FAT содержит этот код. Например, шестнадцатерич- ный код FE определяет оригинальный формат односторонней дис- кеты 160К фирмы IBM PC. Для того чтобы помочь защитить этот FAT, DOS может иметь больше чем одну копию FAT. Обычно диск имеет две копии FAT, хранящихся на нем. Сколько бы не было копий FAT, они хранятся одна за другой. Насколько мне известно, DOS никак не использует вторую копию FAT, хотя она изменяется точно так же, как и первая и в любой момент времени все копии FAT идентичны. Следующий и последний элемент системной части каждого дис- ка — корневой каталог, который хранится сразу же за таблицей FAT. Этот каталог действует как простая таблица 32-байтовых эле- ментов, которые описывают файлы (и другие элементы каталога, такие как метка тома) на диске. Как мы отметили в гл.9, элементы каталога содержат 8-байто- вое имя файла, 3-байтовое расширение файла, размер файла, да- ту и время создания файла,номер первого кластера файла и зна- чение атрибутов файла. В каждом элементе каталога существует также неиспользованное 10-байтовое поле, которое может приме- няться в случае необходимости в будущем. Существует много ин- тересного, что можно открыть для себя в этих элементах каталога. 152
Например, в поле файлового имени есть два специальных кода, которые используются в первом байте имени файла. Если этот байт — 0, то этот элемент каталога (любой последующий элемент в данном каталоге) никогда не использовался; это дает системе DOS способ узнать, когда она просмотрела все активные элементы в каталоге без необходимости искать до конца. Другой шестнадцатеричный код Е5 используется для того, чтобы отмечать элементы, которые были стерты. Поэтому, когда бы мы не рабо- тали со стертыми файлами (используя мою программу UnErase или любую похожую программу), мы не видим первого знака имени стертого файла; это происходит потому, что когда стирается файл, то первый символ имени файла затирается этим кодом Е5. Кстати, когда файл стерт (или подкаталог уничтожен), ничего боль- ше не меняется в элементе каталога; вся информация сохраняет- ся. Единственное, что происходит, когда стирается файл, это то, что имя файла отмечается как уничтоженное, и пространство,отведен- ное этому файлу в таблице FAT, освобождается. Существует еще одна интересная особенность, которую надо знать о полях имени и расширения файла. Для файлов и подката- логов они рассматриваются как отдельные поля. Но, когда эле- мент каталога используется как метка тома диска, оба поля рас- сматриваются как единое 11-знаковое поле. Когда на экране или принтере отображается метка тома диска (как это происходит по командам DIR и CHKDSK), они не разделяется точками как файло- вые имена. Размер каждого файла хранится в элементе файлового каталога как 4-байтовое целое число, которое может задать размер файла, гораздо больший, чем может использовать любой диск, — это га- рантирует, что все наши файлы не будут ограничены размером соответствующего поля в файловом каталоге. Кстати, размер фай- ла записывается только для истинных файлов. Другие типы эле- ментов каталога имеют в качестве размера значение нуль. Хотя подкаталоги хранятся в разделе данных диска таким же образом, как и файлы, и хотя подкаталог имеет размер, он не записывается в собственном (подкаталога) элементе каталога. Отметки даты и времени в каждом элементе каталога форматируются таким об- разом, чтобы можно было записать любую дату от 1 января 1980 г. до конца 2099 г. Время записывается с точностью до 2 с, хотя, DOS показывает это время с точностью только до 1 мин. Дата и время по отдельности записывается в двух смежных 16-битовых словах, и каждое из них кодируется по своей собственной форму- ле. Однако способ, по которому они хранятся, позволяет рассмат- ривать их вместе как одно 4-байтовое поле, которое можно срав- нить одной командой или одним оператором на языке програм- мирования с целью определения более ранней или поздней даты. Дата и время закодированы в 2-битовые номера по следующим формулам: i 153
DATE = DAY + 32-MONTH + 512-( YE AR-1980) (дата) (день) (месяц) (год) TIME = SECONDS/2 + 32-MINUTES + 1024-HOURS (время) (секунды) (минуты) (часы) Последний пункт, интересующий нас в каталоге, это байт атрибу- та файла. С этим одиночным байтом обращаются как с набором из восьми признаков (флагов), каждый из которых контролируется одним битом. Шесть из восьми постоянно задействованы, а ос- тальные два готовы для будущего использования. Два из шести атрибутных бита — специальные и используются сами по себе, другие иначе. Один показывает метку элемента каталога на диске, другой элемент подкаталога так, чтобы DOS могла обращаться с ним не как с файлом, а как с подкаталогом. Остальные четыре ат- рибута используются для отметки файлов, и они могут быть пред- ставлены в любой комбинации. Один помечает файл только для чтения, который невозможно изменить или стереть (доступный только для чтения); другой отмечает файл как измененный. Этот используется программой BACKUP ( и аналогичными программа- ми) для того, чтобы указать, каким файлам ( с каких файлов) надо сделать резервные копии. Два последних (оставшихся) атрибута называются соответственно "невидимый" и "системный"; они ис- пользуются для того, чтобы сделать файл невидимым для боль- шинства команд DOS. Между невидимым и системным статусами нет существенной разницы. Оба системных файла DOS, которые находятся на каждом загружаемом системном диске, отмечены (маркированы) как невидимый и системный. Интересно, что неви- димый и системный файлы невидимы для таких команд DOS как DIR, COPY и DEL, но видимы для команды TYPE. Вы можете сами в этом убедиться, если введете команду TYPE IBMDOS.COM. Как и другие элементы системной части диска, корневой каталог имеет определенный размер для каждого диска, так что DOS зна- ет точно, где найти начало каталога и начало области данных, кото- рая за ним следует. Это значит, что корневой каталог может вме- щать только фиксированное число элементов. Подкаталоги, напро- тив, не имеют такой проблемы. Пока подкаталоги работают в сущ- ности как корневой каталог они хранятся в области данных диска, как если бы они были обычными файлами, и могут увеличиваться до любых размеров, ограничиваемых лишь размером диска. Ис- пользование подкаталогов, которые были введены с версией 2.00 системы DOS, помогает избежать ограничения числа файлов, кото- рые может вместить диск. Как мы отметили, каждый элемент системной области диска имеет фиксированный размер для этого типа формата диска. Про- грамма запуска всегда занимает один сектор. Размер FAT варьи- руется от двух секторов на 160-Килобайтовой дискете до гораздо 154
больших размеров, таких как 82 сектора на 20-Мегабайтовом жес- тком диске АТ. Корневой каталог тоже варьируется так, что на 160-Кбайтовой дискете он имеет 64 элемента и занимает 4 секто- ра, а на 20-Мегабайтовой дискете он имеет 512 элементов и за- полняет 32 сектора. Если у вас есть моя программа NU, вы може- те посмотреть размер каждой части диска, используя пункт 1.5 меню. На рис. 10.4 показан пример такой информации для стан- дартной дискеты 160К. Menu 1.5 Select Disk Sector You may select a sector numbered from 0 through 319 Enter sector number: Press Esc or Enter to return to Top Level Menu Outline of Sector Usage on This Disk 0 Boot Area (used by DOS) 1-2 FAT Area (used by DOS) 3-6 Directory Area (used by DOS) 7 - 319 Date Area (where files are stored) Currently selected: No file or disk sector selected Drive B: Directory: root directory Рис. 10.4. Информация о размерах областей диска на экране Последняя и самая большая часть диска — то область данных. Как вы можете себе представить, здесь не так много удивитель- ных подробностей для открытия по сравнению с системной частью диска, но тоже имеется кое-что интересное. Мы знаем, что наши файловые данные могут иметь любую длину, но файл всегда за- нимает целое число 512-байтовых секторов. Таким образом, в конце большинства файлов есть некоторое свободное пространст- во, заполняющее последний сектор, которое не используется, и даже могут быть полностью неиспользованные свободные секто- ры в конце последнего кластера, отведенного файлу. Когда DOS записывает файловые данные на диск, она ничего не делает для того, чтобы очистить эти свободные площади. Любые секторы, отмеченные как свободные, не изменяются. Если после очередной операции записи нового файла на диск вы исследуете конец последнего сектора, то почти наверняка обнаружите остатки от предыдущего файла, расположенного ранее в этом секторе. 155
Если вы проанализируете свободное место в конце файла, то оп- ределенно найдете эти остатки. 10.3. Нестандартные форматы для защиты от копирования Почти все, что мы до сих пор узнали о наших дисках, связано со стандартным способом форматирования и создания структур дис- ка. Но наши компьютерные диски не связаны правилами, которым следует DOS; существует много других возможных способов об- ращения с диском. Некоторые способы, с которыми мы можем столкнуться, имеют отношение к другим операционные системам, таким как СР/М-86, p-System и др. Также есть несколько программ, которые создают собственную среду операционной системы для того, чтобы удов- летворить свои особые потребности. Чтобы узнать зачем, рассмот- рите ограничения, которые DOS накладывает на файловые имена: не более 11 символов, включая расширение. Если программа хо- чет иметь более длинные, более значимые имена для своих фай- лов данных, ей необходимо вырваться из рамок DOS. И это одна из причин, по которым мы иногда находим программы, использу- ющие свои собственные специальные дисковые форматы. Однако на самом деле мы сталкиваемся с нестандартными дис- ковыми форматами обычно только по одной причине: защиты от копирования. Если программа имеет свои собственные особенно- сти в форматировании диска, тогда у нее есть хотя бы некоторое сопротивление тому, чтобы быть скопированной. К несчастью для нас, любой нестандартный дисковый формат создает для нас спе- циальные проблемы в использовании и защите наших программ и данных, что мало связано с защитой от копирования. Обсуждение этого здесь мало даст для того, чтобы уменьшить трудности, кото- рые может создать защита от копирования. Имеет смысл осветить основную идею того, что происходит с этими нестандартными дис- ковыми форматами. Первое, что нам необходимо знать, это то, что существует две отчетливые категории нестандартных дисков: одна — это диски, которые полностью отличаются от формата DOS, и другая — дис- ки, которые мы могли бы назвать "подделкой" под DOS. Некоторые программы защиты от копирования действительно не имеют ничего общего с тем, как мы обычно используем наши компьютеры, и им незачем обмениваться данными с другими программами, которые используют систему DOS. Часто это игро- вые программы, такие как программа Flight Simulator. Обычно та- кие программы созданы как самозагружающиеся с диска: они за- пускаются так же, как DOS. Но в то время как DOS вступает в дей- ствие для того, чтобы создать условия для работы других про- грамм, эти самозагружающиеся программы запускаются строго 156
для того, чтобы работать самим. У игровых программ такого типа нет необходимости обмениваться дисковыми данными с другими программами и поэтому нет причины, которая бы их вынудила храниться на стандартных дисках DOS. Они могут храниться там, но это для них не обязательно, и то, что они хранятся в своих собст- венных уникальных самозагружающихся форматах, позволяет им защищаться от простого копирования. Напротив, существует много программ, которые защищены от копирования и которые, кроме того, вынуждены работать с DOS для того, чтобы использовать общую схему DOS и ее параметры, включая обмен файловыми данными, хранящимися стандартным для DOS способом. Наиболее известный пример программ этого типа — Lotus 1-2-3. Эти программы полностью используют стан- дартные форматы диска DOS с одним исключением, которое со- ставляет основу их защиты от копирования. Для этих программ ти- пично то, что они используют специальные ключевые дискеты, ко- торые имеют специальную отметку, предотвращающую обычное копирование. Когда мы начинаем пользоваться такой программой, она проверяет ключевой диск, чтобы убедиться, что специальная противокопирующая отметка есть, но если она не находит этой от- метки, то отказывается продолжать работу. Как же это возможно, чтобы эти нестандартные форматы были созданы, и что заставляет их сопротивляться копированию? Как мы видели в гл. 8, наши диски могут быть форматированы с разнооб- разием размеров секторов, числа секторов, приходящихся на до- рожку, и т.д., DOS использует только очень простой выбор из возможных дисковых форматов. Например, DOS использует толь- ко секторы из 512 байт, хотя наши диски могут иметь секторы раз- ных размеров. Стандартные копирующие подпрограммы в DOS, включая команды COPY и DISKCOPY, взаимодействуют только со стандартными форматами диска. Что-то необычное — сектор не- известного размера, непонятно пронумерованный сектор, отсутст- вующий сектор, лишний сектор и т.д., не позволяют правильно ис- пользовать их системе DOS. Однако интелектуальная программа может работать с этими необычными вещами, чтобы создать и поддерживать защиту от копирования. Специальные копирующие программы, которые знают об используемых схемах, могут часто преодолеть защиту от копирования, а стандартные операции систе- мы DOS не могут этого сделать. Когда мы встречаемся с дисковым форматом, который совер- шенно отличается от формата DOS — будет ли это диск с защитой от копирования или диск из другой операционной системы, про- стые операции (например, команда DIR, позволяющая увидеть список файлов на диске) просто невозможны. Не надейтесь сде- лать что-то подобное с игровой программой. С другой стороны, с такими дисками, как ключевые для Lotus 1 -2-3, которые в основ- ном имеют формат DOS, можно обращаться как с любым другим, 157
который мы используем. Мы можем получить распечатку каталога диска, можем копировать файлы (но не специальную, защищен- ную от копирования часть диска) и т.д. Существует одна дополнительная деталь, которую нам необходимо знать о защите от копирования, это то, как эта защита достигается на жестком диске. Большинство программ с защитой от копирования требуют, чтобы мы поместили их оригинальные дискеты в дисковод нашего компьютера, даже если мы можем скопировать Программы на наши жесткие диски. Для того чтобы начать рабо- тать, эти программы, расположенные на жесткогд диске, должны просмотреть свою оригинальную ключевую дискету, проверить специальные ключи защиты от несанкционированного копирования на ней. Это, конечно, большое неудобст- во, которое сводит на нет одно из наибольших преимуществ жесткого диска - избежать использования дискет. Однако существуют некоторые программы с защитой от копирования, которые способны перенести свои схемы защиты от копирования на жесткий диск так, что нам не придется возиться с ключевой ди- скетой. Как же это может быть сделано? К счастью для нас, это делается не пу- тем специального форматирования нашего жесткого диска. Схемы защиты от копирования на жестком диске основаны на необычном использовании файло- вых форматов. Это скрытые файлы (которые обычно не могут быть скопирова- ны) или специальные шифрованные данные, которые несут ключевую информа- цию о компьютере, в который они загружены. (Так, что если эта информация пе- ренесена в другой компьютер, который только чуть-чуть отличается от данного, то схема защиты от копирования может это легко установить.) Поскольку существует много различных способов защиты от ко- пирования, я не могу их все описать или предложить вам некий универсальный метод их преодоления, но надеюсь, что все, сказанное выше, поможет справиться с любыми трудностями, ко- торые могут встретиться на вашем пути и на пути вашего компью- тера. ### Задания 1. Можете ли вы объяснить, почему раздел DOS на жестком диске не может измениться в размере без изменения его формата? Возможно ли написать про- грамму преобразования, которая может изменить размер раздела? Опишите ша- ги, которые потребуются. 2. Пользуясь методами, показанными в разд. 10.2, проверьте стартовую за- пись на одном из ваших собственных дисков и сравните ее с той, которая пока- зана. Затем, пользуясь командой U-unassemble программы DEBUG, получите распечатку стартовой программы на языке ассемблера и выясните, как она ра- ботает. 3. Для каждого дискетного формата, которым оперирует ваш компьютер (од- носторонний, двухсторонний и т.д.), сформатируйте дискету, используя DOS, а затем проверьте каковы будут различия в стартовой программе и в других эле- ментах. 4. Если у вас есть моя программа NU, воспользуйтесь ею, чтобы проверить свободное место в конце ваших дисковых файлов. Выберите п.1.3 меню , затем перейдите к п.2.5 для отображения файловых данных; нажмите клавишу End, чтобы перейти к концу файла, и посмотрите, что получилось. 158
Глава 11 ВИДЕОСИСТЕМА IBM PC: ОБЗОР ТЕХНИЧЕСКИХ И ПРОГРАММНЫХ ВОЗМОЖНОСТЕЙ В некотором смысле, я думаю, мы могли бы сказать, что един- ственная часть нашего компьютера, которая действительно имеет значение для пользователя — это экран дисплея. Во всяком слу- чае так может показаться, поскольку результаты, которые мы ожидаем, появляются именно на экране. В этой главе и в двух последующих мы увидим, как работает экран дисплея нашего компьютера и узнаем, что он может де- лать, а также каковы пределы его возможностей. После этого подробно разберем два основных режима использования экрана: алфавитно-цифровой и графический. Итак, начнем с основ. 11.1. Как работает экран Первое, что мы должны отметить, глядя на экран дисплея на- шего компьютера, это то, что он отображает информацию, которая должна где-то храниться. Для того чтобы получить максимальную гибкость и скорость при обработке данных, IBM PC держит их в памяти самого компьютера, а в не памяти дисплея. Это отличается от того, как работают многие компьютерные терминалы, например используемые коммивояжерами. Экран такого терминала может находится на расстоянии многих миль от компьютера. Терминал должен иметь свою собственную копию данных, отображаемых на экране, и обращаться к далекому компьютеру только в том слу- чае, когда требуются новые данные. Это приводит к крайне мед- ленной работе. Наоборот, экран дисплея в наших IBM PC находится так близко, что экран и компьютер могут работать практически синхронно. Это достигается простым способом: память, содержащая дан- ные, появляющиеся на экране дисплея, помещается внутрь ком- пьютера. Память находится внутри компьютера физически, в виде микросхем памяти, расположенных внутри компьютерного сис- темного блока (системы блока), но она там находится и в логиче- ском смысле, потому что данные экрана дисплея записаны в оп- ределенной части пространства компьютерной памяти (дисплейная память). В гл.7 мы говорили о том, что наши IBM PC имеют адрес- ное пространство памяти в 1 Мбайт, с которым они могут работать. Дисплейная память является частью адресного пространства IBM PC, так что она естественным образом используется программами, выполняемыми ПК. Дисплейная память очень тесно связана с 159
компьютером, так как она расположена близко и удобно. Это де- лает наши компьютеры IBM PC очень "чуткими", т.е. обладающи- ми быстрой реакцией. Дисплейная память отличается от остальной компьютерной па- мяти, так как она должна служить двум хозяевам. С одной сторо- ны, она должна быть доступна для микропроцессора и программ IBM PC, точно так же как любая другая часть памяти. С другой стороны, дисплейная память также должна быть доступна для эк- рана дисплея так, чтобы экран мог сканировать информацию, ко- торую он должен отображать. Дисплейная память, используемая нашим IBM PC, имеет специ- альную схему применения. В сущности, дисплейная память анало- гична комнате с двумя входами. Остальная же компьютерная па- мять имеет только одну "дверь" (вход) и используется лишь са- мим микропроцессором С дисплейной памятью же работают две компоненты компьютера: микропроцессор помещает данные в дисплейную память, чтобы сделать их видимыми, а экран дисплея просматривает эти данные, чтобы узнать, что показать на экране. Обе компоненты имеют доступ к дисплейной памяти и каждая из них имеет свой собственный "вход" в память, что позволяет им не мешать друг другу. Программы,выполняемые микропроцессором нашего компью- тера, должны иметь возможность воспользоваться дисплейной па- мятью, когда существует необходимость изменить то, что отобра- жено на экране. Экран дисплея постоянно просматривает дисп- лейную память и создает ее экранный образ, отражающий содер- жание дисплейной памяти. Приблизительно 50 раз в секунду элек- тронная схема экрана дисплея сканирует дисплейную память и ри- сует новое изображение на экране, чтобы отразить, что записано в памяти. Поскольку экран так быстро меняет изображение, изме- нения могут появляться почти мгновенно. Все, что должна сделать программа для того, чтобы на экране появилась новая информа- ция, это поместить данные в дисплейную память, и они немедлен- но появятся на экране. Электронная работа по выполнению всего этого проходит в той части нашего компьютера, которая называется дисплейный адап- тер. Для того чтобы семья компьютеров IBM PC могла работать как можно более разнообразно, дисплейный адаптер IBM PC уст- роен как заменяемая часть, которая вставляется в свободный слот компьютера внутри системного устройства. Это позволяет нам ме- нять дисплейный адаптер, чтобы он соответствовал нашим пот- ребностям. Мы даже можем иметь больше, чем один адаптер, установленный в нашем компьютере для того, чтобы иметь воз- можность использовать больше, чем один тип дисплейного экрана одновременно. В разд. 11.2 мы рассмотрим различные виды дис- плейных адаптеров для компьютеров семейства IBM PC и узнаем их особенности. 160
IBM PC имеет многочисленные видеорежимы или способы изо- бражения данных на экране дисплея. Каждый дисплейный адаптер имеет свой набор видеорежимов, которые он может использо- вать. Видеорежимы определяют, какого сорта (и качества) инфор- мацию мы можем изобразить на экране. Мы выбираем такой дис- плейный адаптер для нашего IBM PC, чтобы получить необходи- мые видеорежимы, нужные при работе. Хотя, выбирая аппарату- ру для наших IBM PC, мы можем об этом не задумываться, но в сущности это то, что мы реально делаем. В разд. 11.2 будет представлен обзор различных видеорежимов, а последующие две главы посвящены выяснению того, как работают эти видеорежимы и что они могут сделать для нас. Поскольку каждый дисплейный адаптер использует свои видео- режимы и каждый режим имеет свои особые требования к памя- ти, дисплейная память, которой пользуются наши компьютеры, расположена физически на самой плате дисплейного адаптера, так что если мы меняем один адаптер на другой, то мы меняем так- же и память. Таким путем мы автоматически получаем необходи- мый объем и тип дисплейной памяти, когда устанавливаем тот или иной дисплейный адаптер в наших компьютерах. Экраны дисплеев наших компьютеров сами по себе работают аналогично телевизору. Схема работы та, которая известна под на- званием растровый поиск, и работает она таким образом: на эк- ране дисплея постоянно "рисует" движущийся электронный луч, который следует через весь экран приблизительно со скоростью нашего чтения; он начинает с левого верхнего угла, "сканирует” (развертывает) первую строчку изображения слева направо, вы- свечивая активные части экрана, а затем перескакивает назад на- лево, чтобы провести новую строку. Так повторяется сверху дони- зу, в результате чего рисуется целое изображение. В то время как электронный луч "сканирует" экран, схема дисплейного адаптера постоянно считывает данные из дисплейной памяти и переводит биты данных в сигналы, которые управляют электронным лучом. Чтобы свести к минимуму нежелательное мерцание на экране, изображение в действительности рисуется в двух дополняющих друг друга половинах: сначала каждая вторая строка рисуется сверху вниз, а затем оставшиеся нечетные строки рисуются вто- рым сканированием; после этих двух быстрых сканирований изо- бражение становится полным (законченным). Телевизоры исполь- зуют то же самое двухступенчатое сканирование. Экран и его граница На экранах дисплея наших компьютеров существует пограничная зона, кото- рая окружает рабочую часть экрана, где изображены данные. Эта граница явля- ется бездействующей частью экрана, и наши программы не могут изобразить на ней никакую информацию. Но это не означает, что граница обязательно пустая. 161 $ - 6472
Электронный луч, который оставляет след в рабочей части экрана, проходит и в той части, которая называется пограничной или бордюром экрана (overscan). Хотя мы не можем выводить данные в эту пограничную область, существует возможность установить цвет этой границы. Результаты, которые мы можем по- лучить, варьируются в зависимости от вида дисплейных адаптеров и самих дисп- леев, которые мы используем. Монохромный адаптер не позволяет изменять границы. Цветной графический адаптер позволяет изменять цвет границы, так же, впрочем, как и адаптер Compaq (хотя иногда и гораздо хуже). Усовершенствованный графический адап- тер в одних случаях позволяет изменять цвет бордюра, а иногда нет, даже в том случае, когда он используется в режиме цветного графического адаптера. Программное обеспечение ROM-BIOS компьютеров IBM PC обеспечивает ус- тановку цвета бордюра, естественно, когда это возможно. Бейсик позволяет это сделать с помощью оператора COLOR. Эта маленькая программа демонстрирует пограничные цвета, если они активны: 10 SCREEN 0,1 : WIDTH 80 : CLS 20 FOR BORDER.COLOR = 0 TO 15 30 COLOR „ BORDER.COLOR 40 PRINT "Цвет рамки BORDER.COLOR 50 PRINT "Нажмите клавишу..." 60 WHILE INKEYS = "" : WEND 70 NEXT Главная причина необходимости программной установки пограничного цвета в том,чтобы он соответствовал используемому в каждый момент времени фоно- вому цвету. Очевидно, мы испытываем неудобство, когда программа использу- ет фоновый цвет, который отличается от цвета бордюра. Вот базовые принципы, на которых основаны экраны дисплеев нашего компьютера. Основные идеи очень просты, а интересные * моменты заключены в деталях (подробностях) того, что могут для нас сделать экраны дисплея. Мы изучим эти детали, начав с об- зора различных видеорежимов, в которых наши IBM PC могут ра- ботать. 11.2. Обзор видеорежимов Едва ли не самое главное, что мы должны знать об экране дисплея нашего компьютера, так это то, в каких режимах он мо- жет работать. Мы должны изучить различные операции, которые позволяют изменять вид изображения на наших экранах, а это не- возможно без понимания видеорежимов, в которых могут рабо- тать дисплеи. Следует иметь в виду два момента. Во-первых, мы должны представлять, какой набор режимов у дисплея нашего компьюте- ра. Во-вторых, мы должны знать, какие режимы могут нам потре- боваться. Мы начнем с анализа основных отличий между дисплейными режимами, с обзора диапазона возможностей каждого из них. За- тем наведем порядок, перечисляя все режимы и выясняя, какие из них какими видами адаптеров поддерживаются. Первое и самое большое различие между видеорежимами — это различие между текстовым и графическим режимами. В тек- стовом режиме (их существует несколько) все, что может пока- 162
зать экран дисплея, это базовый набор символов, который мы рас- смотрели в гл.4. Только эти символы могут быть изображены на экране. Здесь надо снова отметить, что этот набор очень богат, и обеспечивает гибкие возможности для тоф>, чтобы показать на эк- ране больше, чем просто написанный текст. Символы, рисующие рамку, и другие специфические знаки, которые мы видели в гл.4, делают возможным создать впечатляющие рисунки на экране. Но все-таки в текстовом режиме единственное, что может быть пока- зано, это те самые 256 символов. В текстовых режимах экран IBM PC разделен на специфические знаковые позиции — обычно 80 колонок (столбцов) знаков по ширине экрана и 25 строк знаков сверху вниз. Тому, как наши компьютеры работают в текстовом режиме, посвящена гл. 12. Графический режим является альтернативой текстовому. В гра- фических режимах экран представляет собой набор маленьких то- чек, называемых пикселами (сокращение от английского термина "элемент изображения"), и все, что появляется на экране, постро- ено из этих точек. Различные графические режимы отличаются тем, сколько точек может быть изображено на экране. Это назы- вается разрешающей способностью. Типичный режим с высокой разрешающей способностью имеет 640 колонок (столбцов) поло- жений точек по всему экрану и 200 строк точек. Любой вид точеч- ного рисунка может быть построен из этих точек, включая изобра- жение символов в текстовом режиме. Встроенные програмы ROM-BIOS выполняют именно такую работу в текстовом режиме, рисуя знаки поточечно. Программы же, оперирующие в графиче- ском режиме, не делают этого, если нет необходимости (иногда они делают это для того, чтобы нарисовать знаки особым образом, например курсивом). Гл. 13 посвящена подробному описанию ра- боты наших компьютеров в графическом режиме. Текст или графика — первый параметр видеорежима; цвет — другой параметр. Есть режимы, которые совсем не имеют цвето- вого диапазона. Это черно-белые и двухцветные режимы. Есть цветовые режимы, обеспечивающие нам от 4 как минимум до 64 как максимум цветов на выбор. Наконец, есть монохромные ре- жимы, которые не имеют цвета в обычном понимании, но имеют атрибуты элемента изображения (качества изображения), которые являются эквивалентом разнообразия цветов. Монохромные изо- бражения включают нормальное и яркое, высокоинтенсивное, ин- версное (темные знаки на освещенном фоне), подчеркнутые зна- ки и т.д. Существуют цветные и черно-белые видеорежимы как для текстовых, так и для графических режимов. Наряду с четырьмя основными описанными возможностями, которые задаются этими двумя параметрами — текст или графи- ка, цветное изображение или монохромное, — существует мно- жество дополнительных параметров, определяющих диапазон ви- Деовозможностей. Эти варианты включают разрешающую способ- 163
ность (сколько точек или знаков находится на экране дисплея), цветовой диапазон и т.д. Мы с ними познакомимся по мере изу- чения деталей видеорежимов. Следующий наш шаг — аппаратная реализация видеорежимов. Различные дисплейные адаптеры (и Экраны дисплеев, которые с ними соединены) определяют, какие из возможных видеорежи- мов могут быть использованы нашим компьютером. Мы рассмот- рим четыре главных дисплейных адаптера, которые использует се- мейство IBM PC, а также коснемся некоторых других. Первые два дисплейных адаптера, которые появились для се- мейства IBM PC и являются наиболее важными, — это монохром- ный и цветной графический адаптеры. Монохромный адаптер предполагался как стандартный профессиональный дисплейный адаптер для "серьезной" работы. Это текстовый дисплейный адап- тер, который генерирует очень четкие, легкочитаемые знаки (сим- волы). Будучи "монохромным", он показывает только один цвет, но видеорежим для этого дисплейного адаптера и экрана позво- ляет изображать символы специальным образом: с подчеркива- , нием, яркой интенсивности и т.д. Монохромный адаптер работает только с монохромным дисплейным экраном IBM или с его экви- валентами и имеет мягкое зеленое свечение, но есть подобные экраны и оранжевого цвета. Он имеет только один видеорежим. Второй из двух оригинальных дисплейных адаптеров IBM PC — цветной графический адаптер, работает как в текстовом, так и в графических режимах (их семь) с различной разрешающей спо- собностью. Он также работает с четырьмя различными типами дисплейных экранов в отличие от монохромного адаптера, кото- рый может использовать лишь один тип. Из этих простых описаний следует, что цветной графический адаптер превосходит моно- хромный адаптер и на первый взгляд так оно и есть. Все, что мо- жет делать монохромный адаптер, может делать и цветной, но с добавлением цвета и графики. Однако цветной графический адап- тер имеет серьезные недостатки, которые привели к тому, что большинство компьютеров IBM PC первоначально были оснащены монохромным адаптером. Основная проблема цветного графи- ческого адаптера (CGA) в его относительно плохом качестве изо- бражения текста. Его экранные образы совсем не такие четкие и ясные, как у монохромного адаптера. В действительности многие люди, включая меня, думают, что цветной графический адаптер слишком вреден для глаз, чтобы работать с ним продолжительное время. Хорош он или нет, но CGA дает нам цветную графику, вы- бор разрешающей способности и выбор дисплейного экрана, да- леко превосходящий монохромный адаптер. Как я уже отмечал, цветной графический адаптер способен ра- ботать с четырьмя различными видами дисплейных экранов. Один из них, используемый нечасто, — обычный телевизор. Качество изображения у телевизора плохое, и, чтобы с ним работать, нужно 164
еще одно устройство, модулятор низких частот, который перево- дит сигнал цветного графического адаптера в телевизионные сиг- налы. Лучше всего использовать RGB-монитор. Он назван так по- тому, что принимает красно-зелено-синие сигналы изображения дисплейного адаптера и дает самое лучшее их изображение. Между телевизором и RGB-монитором существует еще два вида, известные как композитные мониторы. Они работают с сигналом образа, который исходит от цветного графического адаптера и от- личается более низким качеством, а потому они дают не такое хо- рошее изображение, как RGB-монитор. Существует два вида ком- позитных мониторов — цветной и монохромный. Монохромные композитные мониторы принимают цветовые сигналы, но они изо- бражают цвета в виде оттенков одного цвета. Есть особая разновидность цветного графического адаптера, о которой нам необходимо знать. Это дисплейный адаптер, который прилагается к каждому из компьютеров типа Compaq. Этот адап- тер действует точно также как цветной графический адаптер, с полным набором его видеорежимов, но имеет особое свойство, которое решает главную проблему, существующую в цветном графическом адаптере, — четкость изображения символов. Когда дисплейный адаптер Compaq работает в стандартном текстовом режиме, он способен изображать текстовые символы (знаки) с той же ясностью и четкостью рисунка, что и монохромный адаптер. Дисплейный адаптер Compaq эффективно соединяет достоинства и цветного графического и монохромного адаптеров. Однако адап- тер Compaq может быть использован только для членов Compaq- семейства IBM PC. Некоторые видят в этом причину того, чтобы предпочесть эти модули другим членам семейства IBM PC. Адап- тер Compaq может работать с теми же типами дисплейного экра- на, что и цветной графический адаптер. В сущности, все, что мож- но сказать о цветном графическом адаптере, относится также к адаптеру Compaq. Если вы пользуетесь компьютером Compaq, то можете думать, что это особый и немного улучшенный вариант цветного графического адаптера. Следущий дисплейный адаптер, который мы рассмотрим, это графический адаптер Геркулес, часто называемый Here card, и его эквиваленты. Существует много похожего в адаптерах Here card и Compaq. В то время как адаптер Compaq в сущности является цветным графическим адаптером со всеми положительными ос- обенностями монохромного адаптера (ясные текстовые знаки), Here card — монохромным адаптером со всеми преимуществами цветного графического адаптера (графики). Адаптер Here card действует так же, как монохромный адаптер, но имеет дополни- тельный режим, который обеспечивает режим большой разреша- ющей способности, очень удобный для большинства приложений. Графический режим адаптера Here card является, по мнению специалистов фирмы IBM, очень нестандартным дисплейным фор- 165 i
матом, который мы могли бы не принимать всерьез. Однако представители семейства IBM PC так удачно используют возмож- ности адаптера Here card, что я считаю его ключевой частью обо- рудования семейства IBM PC и одним из четырех главных (основ- ных) дисплейных адаптеров, о которых мы расскажем в этой главе и в двух следующих. Адаптер Here card, как и монохромный адаптер, работает только с монохромным дисплеем или его экви- валентом. Хотя графический режим Here card не является стан- дартным дисплейным режимом (по стандартам IBM), он был ши- роко принят теми, кто разрабатывает программное обеспечение, так что важнейшие графически ориентированные программы ра- ботают с Here card. Последний из наших четырех основных дисплейных адаптеров для семейства IBM PC — это усовершенствованный графический адаптер (EGA). Это попытка фирмы IBM унифицировать разнооб- разные дисплейные адаптеры и расширить возможности семейства IBM PC в соответствии с новой технологией. В сущности, усовер- шенствованный графический адаптер соединяет в себе все черты монохромного, цветного графического и адаптера Here card вме- сте с новыми видеорежимами, которые могут быть использованы в высококачественных цветных мониторах. Этот адаптер смог бы полность заменить оба оригинальных дисплейных адаптера IBM, если бы он не был в два раза дороже, чем каждый из них. В то время как эти четыре адаптера я считаю основными из дисплейных адаптеров семейства IBM PC, существуют и другие; с одним мы уже познакомились, это дисплейный адаптер Compaq. Вы также должны знать о встроенном дисплейном адаптере PCjr, который действует аналогично CGA, но обладает некоторыми до- полнительными графическими режимами. Существует также со- вершенно профессиональный графический адаптер IBM, который предназначен для особого использования. Профессиональный гра- фический адаптер настолько специфичен, что имеет свой собст- венный встроенный микропроцессор, более мощный, чем находя- щийся в IBM PC, с которым он используется. В этом случае умест- на следующая аналогия: вспомогательный элемент имеет больше лошадиных сил, чем прибор, для которого он предназначен. По- скольку модель PCjr и ПК с профессиональным графическим адаптером так далеки от основных членов семейства IBM PC, мы не будем рассматривать их подробно. Большинство компьютеров IBM PC имеют единственный дисп- лейный адаптер, но существует возможность установить и исполь- зовать два дисплейных адаптера в одной машине. Прежде чем перейти к краткому описанию всех дисплейных режимов, давайте посмотрим, какие комбинации дисплейных адаптеров и мониторов мы можем использовать, а какие нет. Монохромный адаптер и цветной графический адаптер могут использоваться вместе, и каждый из них может использоваться со- 166
вместно с усовершенствованным графическим адаптером. Таким образом, любые два из этих трех адаптеров могут быть вместе.в одной и той же машине. Как же нам разобраться во всех возможностях, которые дают нам эти разнообразные дисплейные адаптеры? Лучший способ сделать это >— описать их в той форме, как они представлены в технических руководствах IBM, т.е. по номерам видеорежимов, которые они поддерживают. Мы сделаем несколько замечаний, прежде чем перейти к следующим главам; здесь мы рассмотрим основные аспекты каждого режима. После того как мы поговорим об этих режимах, я покажу, как вы можете определить, в каком режиме находится ваш компьютер. Первые семь режимов, пронумерованные от 0 до 6, примени- мы к CGA или любому ему эквивалентному. Режим Тип Цвет Ширина Вид 0 Текстовый Нет 40 Текст в 40 колонок, нет цвета 1 Текстовый 16 40 Текст в 40 колонок, есть цвет 2 Текстовый Нет 80 Текст в 80 колонок, нет цвета 3 Текстовый 16 80 Текст в 80 колонок, есть цвет 4 Графический 4 320 Среднее разрешение, есть цвет 5 Графический Нет 320 Среднее разрешение, нет цвета 6 Графический 2 640 Высокое разрешение, нет цвета В этих семи режимах есть несколько хорошо различимых об- разцов. Вы заметите, что первые шесть режимов — парные, один режим с цветом, другой — без. Для одноцветных режимов цвета проявляются в виде оттенков серого цвета. Вы также заметите не- согласованность в порядке цветных и одноцветных режимов для видеорежимов 4 и 5. Для всех этих режимов, которые имеют бо- лее дваух цветов, одноцветный режим имеет смысл. Режим 6 имеет вариант только два цвета (черный и белый) для начала, поэ- тому в этом режиме не будет различия между цветным и одно- цветным вариантами. В последующих режимах возможны два ва- рианта (40 и 80 знаков в строке). 40-столбцовый режим был сде- лан для случая, когда в качестве дисплейного экрана используется телевизор, но компьютеры IBM PC телевизоры практически не ис- пользуют. Большинство основных программ для семейства IBM PC не предназначены для того, чтобы работать в 40-столбцовом режи- ме. Все текстовые режимы имеют 25 текстовых строк на экране. В графических режимах поддерживается два варианта разрешаю- щей способности. Режим с высокой разрешающей способностью 167
640 точек по горизонтали, а режимы со средним разрешением — 320 точек по горизонтали. Все три эти графических режима — 200 точек по вертикали. Вы также заметите увеличение цветовых возможностей: 16 цветов — в текстовых режимах, 4 — в графиче- ских со средним разрешением и 2 — в графических с высокой разрешающей способностью. Все эти семь режимов используются CGA и другими аналогич- ными адаптерами, включая усовершенствованный. С другой сто- роны, монохромный адаптер имеет один видеорежим, использую- щий специальные возможности при работе в текстовых приклад- ных программах. Вот он: Режим Тип Цвет Ширина Вид 7 Текстовый Специальный 80 Монохромный Этот монохромный текстовый режим (7) похож на 80-столбцо- вые текстовые режимы, которые поддерживает CGA с 80 знаками в строке и 25 строками. Но имеется два важных отличия. Одно отличие в том, что сами знаки более отчетливы и легкочитаемы (подробности мы узнаем из гл. 12). Другое — в том, что моно- хромный адаптер имеет специальную концепцию "цвета", которая представляет знаки различными способами: подчеркнутыми, в ин- версном виде и т.д. Монохромный адаптер работает только с мо- нохромным дисплеем, который специально для него и предназна- чен. Следующие три видеорежима были введены в PCjr и примени- мы только к нему. Возможно, мы увидим также, что они исполь- зуются какими-нибудь будущими дисплейными адаптерами, но я думаю, это не очень вероятно, так как они не были включены в усовершенствованный графический адаптер для IBM PC. Все эти три режима являются специальными графическими режимами, которые расширили диапазоны графических возможностей, обес- печиваемые CGA: Режил? 1 Тип Цвет Ширина Вид 8 Графический 16 160 Низкое разрешение 9 Графический 16 320 Среднее разрешение 10 Графический 16 640 Высокое разрешение Каждый из этих трех режимов — естественное расширение тех, которые мы видели до сих пор. Режим 8 вводит низкую разреша- ющую способность (160 точек по горизонтали). 9 и 10 добавляют 168
больше цветов в существующие режимы со средней и высокой разрешающей способностью. Встроенный дисплейный адаптер PCjr работает в этих трех особых режимах, плюс все восемь тра- диционных для CGA. После этих видеорежимов идет пропущенная пара — 11 и 12. О них мало что можно сказать, кроме того, что они, возможно, могли бы появиться в более поздних моделях IBM PC. EGA работает во всех первых девяти стандартных режимах (за исключением трех специальных режимов PCjr). Кроме того он до- бавляет еще четыре режима: Режим Тип Цвет Ширина Вид 13 Графический 16 320 Среднее разрешение, сильный цвет 14 Графический 16 640 Высокое разрешение, слабый цвет 15 Графический Нет 640 Монохромная графика, 350 линий 16 Графический 64 640 Высокое разрешение, 350 линий Эти четыре новых режима имеют больше особенностей, чем сразу может показаться из этой короткой обзорной таблицы. К ка- ким дисплейным экранам они подходят? Первые два (13 и 14) ра- ботают с четырьмя стандартными типами дисплеев. Эти режимы подобны режимам PCjr со средней и высокой разрешающей спо- собностью (9 и 10), а режим 14 с высокой разрешающей способ- ностью использует все 16 цветов IBM PC, а не просто 4. Оба этих новых графических режима, как и все, которые мы видели до сих пор, имеют разрешающую способность 200 точек по вертикали, а два следующих режима, 15 и 16, имеют почти в два раза больше, 350 точек. Монохромный графический режим 15 используется только с монохромным дисплеем. Специальный графический ре- жим 16 с большим количеством цветов и высоким разрешением может использоваться только со специальным усовершенствован- ным цветным дисплеем, разработанным специально для работы с EGA. Видеорежим 16 может обеспечить самое высокое разреше- ние из всех, которые мы до сих пор видели (640 точек — по гори- зонтали, 350 — по вертикали) и гораздо больше цветов — 64. Наконец, нам надо рассмотреть еще один режим, которым пользуется монохромный графический адаптер Here card. По- скольку этот режим не является частью собственных разработок, он не имеет номера видеорежима IBM; мы назовем его режим 169
Неге. Он подобен монохромному графическому режиму (15), но имеет другие параметры и чуть более высокое разрешение: Режим Тип Цвет Ширина Вид Неге Графический Нет 720 Монохромная графика, 348 точек Стоит отметить, что два монохромных графических режима, ко- торые мы видели, режим IBM 640x350 и режим Геркулес 720x348, грубо говоря, эквивалентны. Преимущество режима IBM в том, что он является "стандартным" и имеет встроенное обеспечение в ROM-BIOS машины. Преимущество Here card в том, что он имеет на 17% более высокое горизонтальное разрешение, широко ис- пользуется и имеет программную поддержку. В конечном итоге я ожидаю, что оба режима будут иметь равную программную под- держку. 11.3. Изучение видеорежимов Изучить и работать с большинством видеорежимов сравнитель- но просто. Для начала давайте посмотрим, как мы можем обна- ружить тот видеорежим, в котором в настоящее время находится наш компьютер. В гл.7 была показана область памяти, где распо- ложены программы ROM-BIOS IBM PC (начало в ячейке с щестнадцатеричным адресом 400). Часть этой памяти занимает ин- формация о состоянии дисплейного экрана, включая действующий видеорежим. Режим записывается в единственном байте, распо- ложенном в шестнадцатеричном адресе 449. Любая программа, которая позволяет нам просмотреть данные в памяти, может по- мочь прочитать этот видеорежим. Это легко можно сделать либо с помощью простой программы на Бейсике, либо с помощью про- граммы-отладчика DEBUG. В программе на Бейсике нужно использовать две простые ко- манды. Первая устанавливает необходимый сегмент памяти — DEF SEG = 0; вторая команда извлекает тот байт, где находится код видеорежима и изображает его на экране — PRINT РЕЕК (&Н449). Попытайтесь проделать это самостоятельно, выполнив на вашем компьютере два оператора на Бейсике и определить теку- щий видеорежим. Чтобы сделать то же самое с помощью отладчика, активизируй- те программу DEBUG и дайте ей следующую команду: D0:449 L 1. Это предписывает DEBUG изобразить (D) один байт (L1), находя- щийся по адресу, который нас интересует. На экране будет напе- чатан код видеорежима, например, в таком виде: 170
0000:0440 07 Это указывает на 7-й видеорежим, т.е. на стандартный режим монохромного адаптера. Если вы проделаете любой из этих двух экспериментов, вы уви- дите, в каком режиме находится сейчас ваш компьютер. Возмож- но также поменять режим, а затем проверить его. Мы можем ви- деть только некоторые из возможных режимов, потому что инст- рументы, которыми мы будем пользоваться — DOS, Бейсик и DEBUG, оперируют только в определенных видеорежимах. Пока программа (например Lotus 1-2-3) выполняется, она может изме- нить режим на любой из допустимых; но программы, с которыми мы будем экспериментировать, работают только в определенных режимах. И, конечно, вы можете увидеть только те режимы, ко- торые могут быть использованы на вашем компьютере. Если ваш компьютер имеет только стандартный монохромный адаптер, то единственный режим, который вы можете увидеть, это режим 7. Даже если мы не сможем увидеть каждый режим, примеры, ко- торые я здесь привожу, позволят вам немного потренироваться и почувствовать, что значит контролировать разные режимы дисп- лейных экранов. Существует два способа изменения режима, так же как суще- ствует два способа определения, в каком режиме мы находимся. Один использует команду DOS-MODE для установки режима; мы можем это использовать вместе с DEBUG для изображения режи- ма. Другой метод использует Бейсик для того, чтобы установить режим и показать его. Начнем с первого способа. Чтобы проделать этот эксперимент, введем команду MODE для установки режима, а затем использу- ем программу-отладчик DEBUG так, как это было показано ранее, чтобы установить, в каком режиме мы находимся. Идея состоит в том, что мы пытаемся переключиться в новый режим с помощью команды MODE, а затем используем DEBUG, чтобы посмотреть, удалось ли это сделать. Мы устанавливаем режим MODE X, где за X можно принимать значения MONO, СО80, BW80, СО40, BW40, 40 или 80. После того как мы это сделали, используем DEBUG, чтобы посмотреть, в каком режиме мы действительно находимся. Если мы воспользуемся Бейсиком, то можем проделать такой же эксперимент, но другим способом, который в частности, позво- лит нам попробовать и графические режимы. Вот пример, кото- рый показывает нам, как переключиться в графические режимы среднего разрешения (если компьютер готов для этого): 10 SCREEN 1* 20 DEF SEG = 0 30 PRINT PEEK (&H449) 171
Вы можете поработать с этой программой, меняя строку 10 на любую из экранных режимов, которые допустимы для Бейсика ва- шего компьютера. (Между прочим, пусть вас не смущают номера режимов, которыми пользуется Бейсик в команде SCREEN; они не те же, что основные номера видеорежимов, которыми мы поль- зовались в этой главе.) Если Бейсик сообщает об ошибке, когда он пытается исполнить команду SCREEN, то это означает, что режим не может быть использован для вашего компьютера. Вы увидите более тщательный вариант этой программы под на- званием VID-MODE в приложении А. Попробуйте запустить эту программу, чтобы узнать больше о видеорежимах или о том, как Бейсик взаимодействует с видеорежимами семейства IBM PC. Теперь, когда мы описали основы использования видеорежимов дисплейных экранов наших компьютеров, самое время перейти к выяснению специфических деталей. В гл. 12 мы начнем с тексто- вых режимов. Задания 1. Попробуйте все команды MODE, предложенные в разд. 11.3. Проверьте по вашему справочнику DOS, есть ли какие-либо другие команды MODE, которые применимы к вашему дисплейному экрану. Возможно, к списку добавились но- вые. 2. Проверьте по справочнику Бейсика вашего компьютера, не были ли до- бавлены какие-либо новые дисплейные режимы к тем, которые мы рассмотре- ли здесь. Вы можете это выяснить, сравнив описание выбора команды SCREEN с командами SCREEN, которые появляются в листинге VID-MODE в приложении А.
Глава 12 ТЕКСТОВЫЕ ВИДЕОРЕЖИМЫ В этой главе мы собираемся изучит! внутреннюю работу дисп- леев IBM PC при текстовых режимах. Хотя наблюдается большой сдвиг в использовании компьютеров в сторону дополнительных преимуществ и положительных качеств графических режимов, большая часть работы, которая проделывается на наших IBM PC, делается целиком в текстовом режиме. На экране не появляется ничего, кроме набора текстовых знаков, фактически, большинство компьютеров IBM PC оборудованы адаптером, который может по- казывать только текстовые знаки и больше ничего. Мы начнем с описания того, как организованы текстовые режи- мы, и с основ того, как они работают, ознакомимся с техническими подробностями, лежащими в основе текстовых режимов, и закон- чим исследованием некоторых операций, которыми могут быть полезны. 12.1. Обзор текстовых режимов В основе текстовых режимов семейства лежит деление дисп- лейного экрана на индивидуальные знаковые позиции, располо- женные по строкам и столбцам. Каждая знаковая позиция имеет две независимые компоненты: код, который определяет, какая литера появится на экране, и атрибут, который определяет, как должна выглядеть эта литера (цвет и т.д.). В текстовых режимах наши программы управляют кодом и ат- рибутами литер, появляющихся на экране. Однако наши програм- мы не управляют, например, тем, как рисуются литеры. Все это строго определено свойствами дисплейного адаптера и экрана. (Напротив, как мы увидим в гл.13, когда знаки рисуются в графи- ческих режимах, этот процесс в значительной мере определяется нашими программами). Короче говоря, в текстовых режимах наши программы работают в жестких рамках того, что может быть показано на экране. Одна- ко эти предопределенные рамки освобождают наши программы от большой дополнительной работы, которую иначе бы им при- шлось проделать прямо или косвенно. Литеры на экране расположены в 25 рядах и в 80 столбцах но, как мы видели в гл.11, существуют два текстовых видеорежима, которые имеют только 40 знаков в строке. Эти 40-столбцовые ре- жимы были созданы для того, чтобы сделать более практичным использование телевизора в качестве дисплейного экрана для IBM PC, поскольку разрешение и качество изображения на телеэкране 173
не достаточно хороши для вывода 80 знаков. 40-столбцовые режи- мы кассетные ленты были использованы в компьютерах, в пред- положении что многие люди захотят иметь дешевые, минимально оснащенные ПК. Как выяснилось, 40-столбцовые режимы исполь- зуются редко, и многие программы их игнорируют. На рис. 12.1 показано, как дисплейный экран организован в стол- бцы и строки для 40- и 80-столбцовых вариантов. Строка 2 возврат в новую позицию. Если какие-либо из этих управляющих символов вывести на экран при помощи команды PRINT, они мо- гут действовать как управляющие символы, но могут и просто быть напечатаны, как обычные литеры IBM PC. Результаты варьи- руются в зависимости от того, какие знаковые коды пишутся, а так- же в зависимости от того, какой программный язык используется. Кроме этих управляющих символов ASCII весь набор текстовых знаков семейства IBM PC может быть легко показан на дисплей- ном экране и помещен в любые его позиции. Литера, которая по- является в каждой позиции, определяется кодом данных. Видом знака управляет атрибут. Атрибут символа является управляющим кодом, который определяет, как этот символ должен быть изо- бражен. Каждая позиция может иметь свой собственный атрибут, который независим от всех остальных. Существует два главных различных набора атрибутных кодов, один из которых предназна- чен для монохромного адаптера, а другой — для CGA. Сначала давайте рассмотрим атрибуты CGA (см.рис. 12.2). Код Цвет Строка 25 Рис. 12.1. Строки и столбцы экрана (в текстовом режиме) Мы и наши программы могут работать с экраном, изображаю- щим либо строки, либо одну непрерывную нить знаков длиной 2000 (или 1000 для 40-столбцового режима). Текстовой режим се- мейства IBM PC приспособлен, чтобы работать в обоих вариантах просто и аккуратно. Если программа требует, чтобы символ был помещен в определенную позицию, то он там и появится. Но, если программа просто выводит данные на экран, то они будут запол- нять до конца одну строку и продолжаться с начала другой. Экран ПК будет работать при любом способе одинаково легко и гибко. Наши дисплейные экраны способны изобразить весь набор зна- ков IBM PC, о котором мы узнали в гл.4 и который был проде- монстрирован в программах ALL-CHAR и REF-CHAR (см.приложе- ние А). Но для того, чтобы некоторые литеры появились на экра- не, может понадобиться специальная техника, такая как оператор РОКЕ, используемый в этих двух программах. Это связано с тем, что управляющие символы ASCII (коды в интервале 0-31) имеют специальные назначения, например переход к новой строке или 174 О Черный 1 Голубой 2 Зеленый 3 Сиреневый (голубой + зеленый) 4 Красный 5 Пурпурный (голубой + красный) 6 Светложелтый или коричневый (зеленый + красный) 7 Белый (голубой + зеленый + красный) 8 Серый (яркий) 9 Яркоголубой (голубой, яркий) 10 Яркозеленый (зеленый, яркий) 11 Яркосиреневый (сиреневый, яркий) 12 Яркокрасный (красный, яркий) 13 Яркопурпурный (голубой + красный, яркий) 14 Яркожелтый (голубой + зеленый + красный + яркий) 15 Яркобелый (голубой + зеленый + красный + яркий) Рис. 12.2. Атрибуты цветного режима Каждый такой атрибут состоит из трех частей: одна определяет цвет символа; вторая — цвет фона; и третья, управляет режимом мерцания знака. Есть 16 цветов символа, пронумерованные от 0 175
до 15. Цвета составлены из трех основных — красного, зеленого и синего. Различные их комбинации дают нам 8 главных и 8 фоно- вых (с пониженой яркостью) цветов. Третий атрибут имеет харак- тер переключателя, который позволяет сделать отображаемый знак либо мигающим, либо неподвижным. То, что я только что описал, — нормальная форма цветовых ат- рибутов, но некоторые из более совершенных дисплейных адапте- ров могут создавать варианты к этой схеме. Например, встроен- ный адаптер PCjr способен поменять свойство мигания на яркие фоновые цвета, позволяя воспроизвести все 16 фоновых цветов. И адаптер PCjr и EGA способны переделать цветовую палитру так, что, когда мы будем использовать код для одного цвета (скажем, 1 — для синего), в действительности появится другой. Это особен- ности имеют применение, но они не являются частью стандартного набора. Монохромный адаптер тоже использует атрибуты для того, чтобы контролировать то, как появляются символы на экране, но иначе. Монохромный адаптер не имеет в своем распоряжении цвета, но он может сделать так, чтобы знаки появились с яркой или нор- мальной интенсивностью, мигающими, подчеркнутыми или в ин- версном виде (черные знаки на освещенном фоне). Атрибуты монохромного режима преаставлены на рис. 12.3. Не все комби- нации видов возможны, например не бывает инверсного подчерк- нутого. Код Вид 0 Невидимый 1 Подчеркнутый 7 Нормальный 9 (8 + 1) Яркий,подчеркнутый 15 (8 + 7) Яркий,нормальный 112 Инверсный 129 (128 + 1) Мигающий, подчеркнутый 135 (128 + 7) Мигающий, нормальный 137 (128 +8 +1) Мигающий, яркий, подчеркнутый 143 (128 +8 +7) Мигающий, яркий, нормальный 240 (128 + 112) Мигающий инверсный Рис. 12.3. Атрибуты монохромного режима В этом состоит особенность текстовых дисплейных режимов IBM PC. Нам осталось узнать о них только технические детали того, как дисплейные данные кодируются в памяти, как кодируются ат- рибуты и другие удивительные подробности. # # #Технические подробности 12.2. Особенности текстовых режимов Каждый дисплейный адаптер содержит свои собственные мик- росхемы памяти,в которые записывак|тся данные, изображаемые на экране. Специальная часть адресного пространства IBM PC от- ведена под эту дисплейную память. Под дисплейную память отво- дится 128К, расположенных в блоках А и В адресного пространст- ва (см. разд. 7.3). Блок В является стандартной областью дисплейной памяти, для монохромного адаптера и CGA. Монохромный адаптер занимает память в начале блока В, начиная с адреса В000. Цветной графи- ческой адаптер занимает память в середине блока В,начиная с ад- реса В800. (Вы увидите содержание этих адресов в некоторых рас- печатках в приложении А.) Каждый из этих двух дисплейных адаптеров использует только часть из 32К памяти. Монохромный адаптер использует лишь 4К памяти, a CGA — 16К. Каждый адаптер получает ровно столько памяти, сколько необходимо для информации, которая изобража- ется на экране. Монохромному адаптеру необходимо 4К, потому что дисплей- ный экран имеет 2000 знаковых позиций (25 строк и 80 столбцов), а каждая позиция требует 2 байта памяти для хранения информа- ции: один для того, чтобы хранить код символа, и один — для ат- рибутов изображения этого символа. Итак, 4000 байт, используе- мых для дисплейных данных, и оставшиеся неиспользованными 96 байт составляют общее круглое двоичное число 4096 или, точнее, 4К. Цветному графическому адаптеру тоже необходимо 4000 бай- тов для его текстового режима, но для графических режимов нужно больше, так что адаптер использует 16К памяти. В раз. 12.3 мы увидим, как эта дополнительная память используется. Другие дисплейные адаптеры подобны этим двум. Адаптер Compaq работает точно так же, как CGA, а адаптер Here ca»-d в текстовом режиме, работает точно также, как и уонохремный адаптер. Оба имеют одинаковый объем памяти. Встроенный дисп- лейный адаптер PCjr действует так, как если бы он был CGA, и его дисплейная память оказывается расположенной, начиная с адреса памяти В800. Фактически PCjr использует часть своей стандартной памяти в качестве дисплейной памяти, а специальные схемы адре- сации делают так, что это обычная память оказывается как бы рас- положенной с адреса В800. Усовершенствованный графический адаптер может иметь боль- ше памяти на своей плате. Поскольку он способен действовать ли- бо как монохромный, либо как цветной графический (или исполь- зовать свои собственные специальные видеорежимы), то он имеет достаточную свободу в отношении адресов памяти, которые ис- пользует. Обычно он заставляет свою память располагаться в од- 176
ной из двух стандартных областей: B00D или В800. Когда адаптер переключается в какой-либо из своих специальных режимов, он также использует A-блок адресов памяти. Когда он функциониру- ет в обычном видеорежиме, дисплейная память EGA не использу- ет адресов в А-блоке. Хотя для дисплейной памяти монохромного и цветного графиче- ского адаптеров используются различные стартовые адреса, метод размещения текстовой информации один и тот же. Память исполь- зуется парами байтов — два байта для каждой текстовой позиции на экране. Самый первый байт дисплейной памяти содержит код символа, расположенного в первой знаковой позиции экрана, а следующий байт содержит дисплейный атрибут для изображения этого символа в данной позиции.Следующая пара байтов предназ- начена для символа второго столбца первой строки, и так далее непрерывно без промежутков, пока мы не достигнем последней позиции на экране (см.рис. 12.4). Рис. 12.4. Вид дисплейной памяти и экрана в текстовом режиме В этой дисплейной памяти экран рассматривается как непрерыв- ная последовательность из 2000 пар байтов, и ничто не указывает на деление изображения на строки. Таким образом, информация появляется на экране, автоматически переходя от одной строки к другой по мере заполнения их позиций. В дисплейной памяти строки информации расположены последовательно. По располо- жению и позиции на экране (номер столбца и строки) вычисляется пара байтов в дисплейной памяти, где хранятся код символа и его атрибут. Мы можем вычислить относительное расположение в памяти любой позиции экрана, используя простые и очевидные формулы. 178
Если мы пронумеруем строки и столбцы на экране, начиная с 0 (а не с 1), тогда следующая формула даст местонахождение байта данных: МЕСТОРАСПОЛОЖЕНИЕ = (СТРОКА-80 + СТОЛБЕЦ)-2 Это местонахождение относительно начала дисплейной памяти, и эта формула подходит для 80-столбцового режима; для 40- столбцового режима в CGA необходимо в формуле заменить 80 на 40. Месторасположение атрибутного байта для экранной пози- ции на единицу больше. Единственный способ изобразить информацию на дисплейном экране — это поместить ее в дисплейную память тем или иным способом. Это может быть сделано либо прямо программами, которые мы выполняем, либо встроенными подпрограммами компьютера, расположенными в ROM-BIOS. Если программа по- мещает свои данные прямо в дисплейную память, то этот процесс происходит эффективнее и быстрее. Большинство работающих программ, которые вы используете, работают таким образом. При этом необходимо знать адреса дисплейной памяти и технику рабо- ты с адаптером. Такие программы не смогут работать с другим адаптером, использующим иное расположение дисплейной памя- ти. С другой стороны, если наши программы обрашаются к под- программам ROM-BIOS для того, чтобы поместить данные в дисп- лейную память, то задача определения нового места расположе- ния в дисплейной памяти возлагается на эти подпрограммы. Ис- пользование функций ROM-BIOS уменьшает зависимость наших программ от технических особенностей экрана и памяти дисплея, а также от особенностей компьютера. Если смотреть с этой точки зрения, то все наши программы дол- жны пользоваться функциями системы ROM-BIOS для изображе- ния экранных данных. Но при этом есть один существенный недо- статок: их работа занимает удивительно много времени. Если у вас есть мой программный набор "Утилиты Нортона", вы можете сами в этом убедиться, потому что программа NU использует оба мето- да создания экранных изображений. Попробуйте программу в ва- рианте с "/DO", чтобы увидеть, как быстро она работает с пря- мым выводом данных на экран, а потом попробуйте вариант *'/D1", и увидите, насколько медленнее все будет происходить, когда используется обращение к функциям ROM-BIOS. Именно из-за этого большого недостатка так много программ производят свой собственный вывод на экран, направляя данные прямо в эк- ранный буфер. Ясно, что сначала фирма IBM хотела, чтобы все наши програм- мы выводили свои дисплейные данные через функции ROM-BIOS, но этого не получилось. Поэтому многие программы делают свой собственный вывод данных на экран, используя два ключевых, ад- 179
реса памяти дисплейного адаптера: В000 и В800. Для IBM стало невозможным рассматривать какое-либо радикальное изменение в работе дисплейной памяти, по крайней мере для текстовых ре- жимов. Поэтому фирма объявила, что любые будущие дисплей- ные адаптеры для семейства IBM PC должны быть совместимыми с двумя оригинальными адаптерами и использовать эти два адре- са. Мы можем убедиться, что это соглашение соблюдаетсяв в усовершенствованном графическом адаптере. Когда люди пользуются своими компьютерами, они часто дума- ют, что существует тесная связь между курсором и информацией, которая появляется на экране, как будто информация может поя- виться только тогда, когда она нарисована там курсором. Но мы знаем, что это совсем не так. Всякая информация, которая поме- щена в дисплейную память, появится на экране совершенно неза- висимо от курсора. Курсор является средством координации между экраном, системой ROM-BIOS и программой, которая ге- нерирует информацию. Курсор позволяет и программе, и ROM- BIOS иметь единственный способ указания на позицию, где появит- ся информация. Для более полной информации о курсоре смот- рите следующий подраздел. Курсор Мигающий курсор, который мы привыкли видеть на нашем эк- ране, — это аппаратный элемент дисплейных адаптеров IBM PC. Он используется только в текстовых режимах, о которых мы здесь говорим. Мигающий курсор генерируется самим дисплейным адаптером, который контролирует, кроме всего прочего, частоту, с которой курсор мигает на экране. Частоту мигания нельзя изменить, а по- ложение курсора и его размер могут быть изменены. В IBM PC используются специальные функции системы ROM-BIOS, которые управляют курсором. Обычно курсор мигает в нижней части знака на двух последних строках развертки. Но строки, на которых появляется курсор, мо- гут быть изменены с помощью аппаратной команды, которая пе- редается через систему ROM-BIOS. Мы можем экспериментиро- вать с изменением размера курсора, используя оператор Бейсика — LOCATE. Мы можем изменить курсор так, чтобы он располо- жился между любой парой строк развертки, которые устанавлива- ют позицию знака (строки 0-13 для монохромного адаптера, 0-7 — для цветного графического адаптера). Интересно, что если мы поместим начало курсора в строку с большим номером, чем та, в которой он оканчивается, то получим новый курсор, состоящий из двух раздельных частей. Вы можете попробовать проделать это с помощью следующего оператора языка Бейсик: 180
LOCATE , , , , 6,1 Мигающий курсор, который мы описывали, — это аппаратный курсор, который является встроенной частью каждого дисплейного алаптера. Многие программы находят, что аппаратный курсор не соответствует их целям, поэтому они ^создают свой собственный логический курсор. Одна из главных причин, по которым програм- мы создают свой собственный курсор, необходимость его расши- рения более чем на одну знаковую позицию на экране (например, курсор электронной таблицы выделяет всю ширину клетки). Тех- нически такой курсор — это нечто совершенно отличное от аппа- ратного, но функции всех видов курсоров одни и те же: показать нам, где находится активная позиция экрана. Когда программы создают свои собственные логические курсо- ры, они обычно заставляют аппаратный курсор исчезнуть, либо от- ключая его, либо перемещая в позицию за пределами экрана. Далее мы хотим рассмотреть, как задается кодирование для ат- рибутных байтов, которые управляют тем, как изображать тексто- вые символы на дисплейном экране. Хотя атрибуты для цветного графическогои для монохромного адаптеров совершенно разные, существует общая схема. Давайте начнем с того, что рассмотрим общую часть, а затем займемся особенностями как цветного, так и монохромного адаптеров. Восемь бит каждого атрибута разделены на четыре поля таким образом: 7 6 5 4 3 2 1 О В......... .RGB.... . . . . I . . . ......RGB - Мигание символа - Цвет фона - Интенсивность символа - Цвет символа Правые 4 бита контролируют цвет символа: 3 бита (RGB) описы- вают основные красно-зелено-синие компоненты цвета, а бит ин- тенсивности (1) делает цвет ярким или тусклым. Другие четыре бита таким же образом контролируют фоновый цвет, но бит, кото- рый, как мы могли бы ожидать, должен контролировать фоновую интенсивность, вместо этого служит для контроля мигания символа (как мы видели в разд. 12.1, PCjr использует его, чтобы создать 16 фоновых цветов). Все возможные комбинации битов добросовест- но воспроизводятся по этой схеме. Вы можете все их продемонст- рировать с помощью программы COLORTXT (см. приложение А). Некоторые цветовые комбинации очень приятны, такие, как, на- пример, ярко-желтый на синем (одно из моих любимых сочета- ний). Другие удивительны, как, например, мигающий ярко-синий на красном, атрибут С9 в шестнадцатеричной системе или 11001001 181
в двоичной. Если у вас имеется цветной дисплей, то вы можете попытаться увидеть это, выполнив в Бейсике: COLOR 25,4 Цветной графический адаптер использует атрибутные биты именно так, как описано в таблице. Монохромный адаптер соот- ветствует табличной схеме в той степени, в какой это возможно в разумных пределах. Нормальный дисплейный режим (белые сим- волы на черном фоне) кодируется как 07 (шестнадцатиричное) или 00000111 (двоичное). Инверсное изображение имеет код 70 (шест- надцатеричное), эквивалент черного на белом. Код для подчерки- вания 01 (шестнадцатеричное), делает монохромный подчеркну- тый атрибут эквивалентным синему цвету символа. Невидимый режим монохромного адаптера имеет код 00 (шестнадцатерич- ное), эквивалент черного на черном. Мы могли бы ожидать, что код белое на белом, 77 (шестнадцатеричное), дает нам другой не- видимый режим, когда освещена вся знаковая область, но это не так. Монохромный адаптер имеет лишь небольшое количество ат- рибутных режимов, только те, которые перечислены на рис. 12.3. Мы не получаем всех комбинаций атрибутов монохромного адап- тера, которые мы могли бы ожидать. Вот почему нет, например, инверсного подчеркнутого режима. Монохромный адаптер пока- зывает только те комбинации, которые указаны на рис. 12.3. Несмотря на то, что монохромный адаптер имеет ограниченное количество четких дисплейных атрибутов, он работает правильно независимо от того, как установлены атрибутные биты. В большин- стве случаев он использует атрибут 07 (шестнадцатеричное). Если у вас в компьютере есть Монохромный адаптер, вы можете ви- деть, как он изображает все возможные комбинации атрибутных битов, выполняя программу COLORTXT, ту же программу, кото- рой мы пользуемся для демонстрации цветов CGA. Атрибуты, которые мы обсуждали, управляют изображением символов на экране: цвет, мигание, и т.д. Чем они не управляют, так это собственно символами, изображаемыми дисплейным адап- тером. Чтобы узнать об этом подробнее, прочитайте следующий подраздел. Изображение символов В текстовых режимах символы, которые мы видим на экране нашего компью- тера, нарисованы дисплейным адаптером, а не программными средствами IBM PC (как они рисуются в графических режимах, мы узнаем в гл. 13). Качество символов, изображение которых мы видим, варьируется в зависимости от дисп- лейного адаптера ц силу различий в позиции символа. Позиция символа — это некая рамка, в которую он вписан. Символы изобра- жаются точками в квадратной матрице, хотя это непросто увидеть, глядя на эк- ран. Для монохромного адаптера, позиция символа состоит из 9 точек по гори- зонтали и 14 — по вертикали, что позволяет иметь хорошее качество изображения. Для цветного графического адаптера позиция символа состоит из 182
матрицы 8x8 точек, что дает более грубое изображение. Для некоторых специ- альных режимов усовершенствованного графического адаптера размеры этой матрицы 8x14, что позволяет получить качество изображения', как у монохром- ного адаптера. Сравнительно просто наблюдать вертикальные размеры позиции символа, изменяя яркость на дисплейных экранах. Горизонтальное разрешение увидеть труднее: точки перекрываются и сливаются так, что мы не можем уви- деть никакого разрыва между ними. Только тщательно рассматривая и сравни- вая символы мы можем судить о том, сколько точек по горизонтали они состав- ляют. Позиция символа определяет только рамки, в которые он вписывается. Не вся позиция используется для самого символа — часть ее оставлена для про- межутка между символами. Вы помните, что позиция символа при использовании монохромного адапте- ра состоит из матрицы 9x14 точек. Из 9 столбцов точек первый и последний ос- тавлены для межсимвольного пространства, так что сами символы в действи- тельности нарисованы с помощью 7 колонок точек. По горизонтали два верхние и один нижний ряды точек также используются для пространства между строка- ми символов, так что символ занимает лишь 11 рядов, состоящих из точек. Два из этих рядов используются для подстрочных деталей символов в таких буквах как р, g или у. Это оставляет 9 рядов для основной части символов. Таким обра- зом, монохромный адаптер использует матрицу 7x9 точек, для части, которую заполнит прописная буква X. А вся рабочая часть позиции символа, включая подстрочный ряд, 9x11 точек. Отведенные для пробелов части позиции (один столбец с каждой стороны, два ряда сверху и один ряд снизу) относятся только к обычным символам. Спе- циальные графические символы, которые мы демонстрировали в программе BOXES, используют эти части позиции символов так, что они могут касаться друг друга без всякого промежутка между ними. Чем больше матрица позиции символа, тем более детальным может быть ри- сунок символа. Вот, пожалуй, и все о технических подробностях текстовых режимов работы ПК. ### 12.3. Примеры текстовых режимов Существуют особые приемы, которые могут быть использованы для того, чтобы усовершенствовать действие программ в тексто- вых режимах и произвести некоторые специальные эффекты. Ко- нечно, полный диапазон трюков ограничен только нашим вообра- жением и умом и я не могу исследовать и объяснить все, что мо- жет быть сделано. Но существуют некоторые основные приемы, которые помогут нам понять работу текстового режима и которые мы рассмотрим в этом разделе. Начнем с избыточной дисплейной памяти. В то время как монохромный адаптер использует ровно столько дисплейной памяти, сколько необходимо для того, чтобы хранить^ всю появляющуюся на экране информацию, CGA и EGA исполь- зуют больше памяти, чем необходимо для одного текстового эк- ранного образа. Это происходит потому, что графические режимы, которые также поддерживают эти адаптеры, требуют больше дис- плейной памяти, чем текстовые режимы. Чтобы эта память не пропала впустую, она используется для хранения нескольких неза- висимых экранных страниц информации. Эти отдельные экранные страницы называются дисплейными страницами. 183
** V На рис. 12.5 показано, как это происходит для цветного графи- ческого адаптера, когда он находится в 80-столбцовом текстовом режиме. 16К Память 4К Страница 0 4К Страница 1 4К Страница 2 4К Страница 3 Пассивная Активная Пассивная Активная Рис. 12.5. Четыре дисплейные страницы Для хранения 80-столбцового текста необходимо только 4000 байт дисплейной памяти. Это как раз и составляет объем памяти в монохромном адаптере. Но цветной графический адаптер имеет уже 16К байт памяти, что достаточно для хранения четырех набо- ров по 4000 байтов. Память цветного графического адаптера может быть разделена на четыре независимые дисплейные страницы. Любая из этих дис- плейных страниц может быть активизирована, и ее информация появляется на дисплейном экране. Дисплейный адаптер способен немедленно переключиться с одной страницы на другую так, что- бы то, что появляется на экране, могло измениться немедленно. В то время как на экране изображена только одна страница, наши программы всегда имеют доступ ко всем страницам, расположен- ным в дисплейной памяти. В этом состоит основная идея использования нескольких страниц дисплейной памяти. Создание изображения страницы дисплейной памяти какой-либо программой может потребовать много време- ни, изобразить же ее на экране можно очень быстро, переключа- ясь с одной страницы на другую. Пока мы смотрим на один экран, программа может незаметно создавать автономный экранный об- раз другой страницы. Когда он будет готов, то. сможет появиться на экране мгновенно. 184
Число возможных экранных страниц варьируется в зависимости от дисплейного адаптера и видеорежима, которые используются. Как мы уже видели, монохромный адаптер и.меет всего одну страницу, так что переключение невозможно. Стандартный CGA может использовать 4 страницы для 80-сфлбцового и 8 страниц для 40-столбцового текстов. EGA, в завимсимости от числа микро- схем памяти, способен использовать большее число страниц. Эти многочисленные дисплейные страницы могут быть исполь- зованы как угодно. Они могли бы использоваться для совершенно новой информации или содержать чуть измененные данные. Если мы построили 4 или 8 версий рисунка, основанного на одном сю- жете, то можно быстро пролистать их, заставляя появляться пооче- редно и тем самым создавая эффект мультипликации. Программы переключаются по страницам с помощью простой команды дисплейному адаптеру, которая заставляет его нарисо- вать экранный образ из другой части дисплейной памяти. В систе- ме Бейсик присутствуют средства, которые позволяют нам рабо- тать с каждой из дисплейных страниц. Вы можете это обнаружить в различных вариантах оператора SCREEN и даже можете с ними поэкспериментировать, если ваш компьютер имеет CGA или его эквивалент. Третий параметр оператора Бейсика SCREEN (пара- метр активной страницы) определяет страницу, с которой про- грамма работает (какая именно экранная страница изменяется программой). Четвертый параметр оператора SCREEN (параметр видимой страницы) определяет страницу, которая в данный мо- мент отображается на экране. В то вемя как Бейсик обеспечивает нас инструментом, который выполняет основные задачи управления экранными страницами, программам, написанным на других языках, приходится делать это самим с помощью некоторых функций ROM-BIOS. Но пользуются ли наши программы операторами Бейсика, используют функции ROM-BIOS или управляют экранными страницами самостоятельно — всегда существуют возможности работать с несколькими стра- ницами. Не всегда удобно пользоваться переключением страниц. Этими возможностями, как было сказано ранее, не обладают монохром- ные адаптеры. Но существует прием, позволяющий компьютерам, оснащенным такими адаптерами, работать с несколькими страницами. Это делается путем сохранения в обычной программ- ной памяти импровизированной дисплейной страницы, где конст- руируется полный экранный образ. Когда данные готовы, они пе- ресылаются в дисплейную память одной с помощью быстрой опе- рации на языке ассемблера. По сравнению с тем, что делается с действительными дисплейными страницами, здесь механика дру- гая. При переключении настоящих дисплейных страниц данные не перемещаются. Вместо этого дисплейный адаптер переключается с одной страницы памяти на другую, в то время как при псевдо- 185
страничной операции данные в действительности пересылаются из другого места оперативной памяти в дисплейную память. Переме- щение этих данных занимает такую ничтожно малую часть секун- ды, что кажется это происходит так же быстро, как и переключе- ние настоящих страниц. Если какие-либо из программ, с которыми вы работаете, необы- чайно быстро меняют экранные отображения, то весьма вероятно, что они используют эту технику псевдостраниц, которую я описал. Моя собственная программа NU делает то же самое. С дисплейным экраном можно сделать больше, чем просто пе- реслать данные в или из него. Возможно также с помощью опе- раторов языка ассемблера уничтожить данные, находящиеся на экране, или изменить их дисплейные атрибуты. Изменение данных на экране — это долгое и трудоемкое занятие. Делается это отдельно для каждого символа. Но существуют более быстрые и эффективные способы. Например, если мы хотим очистить весь экран, то делается это с помощью лишь нескольких команд на языке ассемблера. Для то- го чтобы очистить экран полностью, нам потребуется переслать в каждый байт код пробела (32-десятичное или 20-шестнадцатерич- ное), а в каждый атрибутный байт — код "нормального" цвета (который обычно равен шестнадцатеричной 7). Мы можем пере- слать в первую экранную позицию этот пробел, пользуясь коман- дой на языке ассемблера, которая помещает двухбайтовое слово в любое место памяти. Шестнадцатеричное слово 2007 соединяет символ пробела (20) с нормальным цветовым атрибутом (07). По- втор команды, пересылающей одно слово в память, может быть использован для записи в последующие слова дисплейной памяти тех же самых данных. В итоге они очищают весь экран, т.е. во все его позиции записывается символ пробел, имеющий цвет фона эк- рана. Вариант этого же приема может быть использован для измене- ния только цветовых атрибутов, символы при этом остаются неиз- менными или наоборот. Это делается с данными с помощью опе- раторов ассемблера AND и OR, так что мы можем просто "вклю- чить" или "выключить" те биты, которые хотим. Используя эти при- емы, всего две команды могут изменить цвет на всем экране практически мгновенно. В дополнение к приемам, которые могут использовать наши программы сами по себе, система ROM-BIOS компьютеров IBM PC содержит служебные подпрограммы, которые будут делать боль- шую часть того, что нам будет нужно, включая некоторые особен- ные операции, которые редко можно увидеть в действии. Одна из этих подпрограмм позволяет нам выделить квадратное окно где- нибудь на экране, и внутри этого окна мы можем отображать ин- формацию и просматривать ее, не изменяя никаких данных вне 186
этого окна. Эта подпрограмма одна из тех, которые мы рассмот- рим в гл.17. Но прежде чем перейти к новым темам, нам еще надо кое-что выяснить о видеовозможностях нашего компьютера. Далее мы рассмотрим графические режимы. Эта особая категория видеоре- жимов, требует специального внимания. ’ Задания 1. На языке Бейсик или на любом другом языке программирования, которым вы пользуетесь, напишите программу, которая печатает 32 управляющих симво- ла ASCII (коды 0-31) на экране дисплея. Посмотрите, что происходит с каждым и отметьте, какие из них работают как управляющие символы. Сравните свои ре- зультаты с информацией об этих управляющих символах в гл. 4. 2. Вычислите, какими будут адреса памяти для 4 различных дисплейных страниц, которые использует цветной графический адаптер, когда он работает в 80-столбцовом режиме, и для 8 страниц — в 40-столбцовом режиме. 3. Почему монохромный адаптер имеет 4096 байтов дисплейной памяти, ког- да нужны ему только 4000? Почему могло бы быть рискованным для программы пытаться использовать в дисплейной памяти оставшиеся 96 байтов? 4. Если ваш компьютер имеет цветной графический адаптер (или любой дру- гой адаптер, включая PCjr или Compaq, который имеет больше чем одну виде- остраницу), проведите эксперимент с текстовыми страницами, пользуясь коман- дой Бейсика SCREEN для того, чтобы переключить страницы, и командой PRINT для того, чтобы поместить некоторую информацию в каждую из страниц.
Глава 13 ГРАФИЧЕСКИЕ ВИДЕОРЕЖИМЫ В этой главе мы рассмотрим особенности графических режи- мов. Начнем с основных черт, сопоставим их с текстовыми режи- мы, выявим отличия. Затем рассмотрим многообразие графиче- ские режимы, используемых в семействе IBM PC. Закончим обсуждением некоторых технических деталей, которые лежат в основе использования графических режимов. 13.1 Обзор графических режимов В каждом из графических режимов дисплейный экран нашего IBM PC представляет собой совокупность точек, называемых пик- селами. Пикселы составляют решетку строк и столбцов. Каждый из них может быть индивидуально высвечен на экране тем цве- том, который может быть использован в данном графическом ре- жиме. В этом аспекте графические режимы не очень отличаются от текстовых. И хотя в графических режимах намного больше пик- селов (320 по горизонтали и 200 по вертикали), чем символов (80 ‘ по горизонтали и 25 по вертикали) в текстовых режимах, это раз- личие в основном заключается в количестве, а не в качестве. Чем действительно отличаются графические режимы от тексто- вых, так это тем, что каждый пиксел на экране является просто маленькой светящейся точкой, не имеющей формы. В текстовых режимах каждая позиция на экране представляет собой универ- сальную заготовку, в которую помещается символ, имеющий свою собственную уникальную форму. Очертания символов становятся видимыми вследствие различия между двумя цветами, которые составляют фон и цвет самого символа. А пиксел в графических режимах представляет собой лишь светящуюся точку без уникаль- ной формы и без деления на задний и передний планы. В текстовых режимах каждая экранная позиция имеет три эле- мента. Во-первых, код символа (какой символ должен быть пока- зан), во-вторых, атрибут изображения символа (как должен быть показан символ). Атрибут разделен на две части: цвет символа и цвет фона. Так что получается всего три отдельных элемента у каждой позиции текстового экрана. В противоположность этому, в графических режимах каждый пиксел имеет только один элемент — цвет, которым он высвечиваеся. В графических режимах нет данных (в смысле текстового режима) и нет фонового цвета, а есть только цвет каждого отдельного пиксела. Если мы хотим понять графические режимы, то важно опреде- лить понятие "цвет фона". В текстовых режимах действительно 188
есть что-то, что называется цветом фона; каждая позиция символа его имеет. А в графических режимах каждый пиксел просто име- ет свой цвет: не рабочий и не фоновый. То что мы принимаем за цвет фона в графических режимах — это просто цвет, который мы даем всем пикселам. Цвет фона в графических режимах — это цвет, на который мы настраиваем все пикселы так, чтобы они от- личались от цвета, с помощью которого мы рисуем. Есть еще одна возможность, которая отсутствует в графических режимах в сравнении с текстовыми — мигание. В текстовых режи- мах мы привыкли видеть мигание в двух случаях: 1) мигает кур- сор, 2) мигают символы. Графические режимы не имеют ни того, ни другого. В графических режимах нет мигающего курсора и, более того, фактически в техническом смысле курсора нет вовсе (об этом см. в следующем подразделе). Кроме того, одно из свойств цвета в текстовых режимов — мигание. Конечн,о мигание не является цветом в действительном смысле слова, но в тексто- вых режимах, как мы выдели в гл.12, символы можно заставить появляться и исчезать и миганием можно управлять точно так же как и цветом. Для текстовых режимов мигание можно рассматри- вать как особый вид цвета. В нормальных графических режимах нет мигания ни в какой форме. (Однако, есть одно исключение, о котором мы узнаем позже, в графическом режиме 15). Графический курсор Если мы запустим систему Бейсик на нашем компьютереб то увидим на экране мигающий курсор в том виде, к которому боль- ше всего привыкли. Если же переключиться в графический ре- жим, скажем, с помощью SCREEN 1, мы опять увидим курсор на экране. Но этот курсор появляется как сплошной блок, а не в при- вычном мигающем виде. Что же происходит? Это программистская уловка, специальный прием, трюк! В техническом (аппаратном) смысле в графическом режиме нет понятия "курсор". Стандартный мигающий курсор, как мы видели в гл. 12, это запрограммированный технически элемент дисплейных адаптеров, который относится только к текстовым режимам. Этот аппаратный курсор мигает и появляется в каждый момент време- ни на площади, занимаемой только одним знаком. Обычно он просто подчеркивает настоящую позицию на экране и реализуется специальной аппаратной схемой дисплейного адаптера. Его появ- ление не требует специального усилия от нашего программного обеспечения. Такой аппаратный курсор просто не существует в графических режимах. Что мы видим в качестве курсора в графических режимах, так это созданный программой эффект, который выполняет роль кур- сора (указывая на то, где расположена активная зона на экране). 189
Функционально он не отличается от аппаратного курсора, но тех- нически создается абсолютно другим способом. Когда программа, например, на Бейсике, работающая в графи- ческом режиме, хочет создать курсор на экране, она просто дела- ет все, что необходимо для того, чтобы произвести нужный визуальный эффект. Обычно просто изменяется цвет фона, на ко- тором будет показан курсор. То же самое может быть сделано в текстовом режиме для того, чтобы дополнить или полностью вос- становить мигающий аппаратный курсор. Мы привыкли видеть курсор такого вида в программах электронных таблиц, которые помещают его в текущую ячейку (клетку) таблицы, заставляя эту ячейку высвечиваться в инверсном виде. В текстовом режиме программы имеют выбор — либо исполь- зовать аппаратный курсор, либо создать собственный программ- ный курсор. В графическом режиме нет выбора, потому что в нем нет аппаратного курсора. Вы можете столкнуться с двумя основными приемами показа курсора в графическом режиме. Один, который использует Бей- сик, состоит в указании месторасположения курсора и изменения цвета фона. Другой, популяризируемый компьютером Macintosh фирмы Apple и используемый все чаще в программных средст- вах для семейства IBM PC. Здесь курсор показан как тонкая вер- тикальная линия, которая может мигать (эффект, порождаемый программными средствами). За этой линией-курсором может быть труднее следить, но она имеет то преимущество, что появля- ется где угодно, даже между символами. Независимо от внешнего вида, все, что действует как курсор в одном из графи- ческих режимов, является просто визуальным эффектом, со- здаваемым нашим программным обеспечением для тех же це- лей, что и аппаратный курсор в текстовых режимах. Вместо этого в графическом режиме просто имеется палитра цветов, на которую может быть настроен каждый пиксел на экра- не. В каждом графическом режиме имеется свой собственный на- бор цветов. Этот набор, а также разрешающая способность и от- личают их друг от друга. Общие черты графических режимов — это матрица точек во весь экран и способность высветить каждую точку любым цветом из выбранной палитры. Если это кажется вам удивительно простым и понятным, то вы понимаете основную суть графических режимов. Они одновре- менно и более грубые (примитивные), но и более мощные, чем текстовые режимы. Грубые, потому, что все, что они могут пока- зывать, — это цветные точки. Более мощные, потому что из этих точек можно конструировать сложные рисунки, которые невоз- можно строить с помощью текстовых режимов. . Графические ре- жимы обеспечивают нас более "сырым" материалом для работы, но предлагают большее разнообразие операций, чем текстовые режимы. Реализация графических режимов сложнее, потому что 190
на экране все должно быть нарисовано нашими программами, точка за точкой, жестким образом. И этот процесс рисования включает, между прочим, и любые текстовые символы, которые мы бы хотели видеть. Их придется также рисовать точка за точкой на экране (см.следующий подраздел). Изображение текста в графических режимах Программы ROM-BIOS, которые управляют графическими ре- жимами, обеспечивают рисование текстовых символов на экране, точно так же как они это делают для текстовых режимов. Причина достаточно проста: если система ROM-BIOS обеспечивает опера- цию рисования символов для одного режима, она обязана обеспе- чивать ее и для всех других режимов. Есть важное добавление к этой причине: любая часть любой программы должна быть спо- собной выдать сообщение об ошибке на экран. Наличие универ- сального набора подпрограмм вывода текста в ROM-BIOS, кото- рые работают в каждом режиме, тексте или графике, обеспечива- ет обычный способ для любой программы послать аварийное со- общение. В текстовых режимах программы, включая ROM-BIOS, посылают сообщения на экран в виде последовательности символов в кодах ASCII. А аппаратура дисплейного адаптера берет на себя работу по изображению этих символов. В графических режимах символы могут появиться на экране, только если, они нарисованы непос- редственно программой как, впрочем, и любое другое изображе- ние. Программы ROM-BIOS изображают символы стандартным спо- собом на базе набора рисовальных шаблонов для каждого из них. Таблица рисунков символов хранится в специальной области памя- ти ROM-BIOS. Однако некоторые из новых графических режимов, которыми снабжен усовершенствованный графический адаптер, могут, требовать свои собственные специфические таблицы рисун- ков. Стандартная таблица, основанная на шаблоне символа 8x8 пикселов и используемая в графических режимах цветного графи- ческого адаптера, расположена в памяти в области F000:FA6E. Би- ты в этой таблице рисунков используются для того, чтобы указать расположение включенных или выключенных пикселов, использу- емых для рисования каждого символа: биты первого байта опре- деляют необходимость засветки 8 пикселов первой строки развер- тки и т.д. В приложении А вы найдете программу, которая назы- вается GRAPHTXT, раскодирующую эту таблицу и отображающую рисунок каждого символа в увеличенной форме так, что вы смо- жете проверить, как нарисован каждый символ. Вы можете ис- пользовать программу GRAPHTXT с любым дисплейным адапте- ром, потому что она воссоздает увеличенные рисунки с символа- ми в текстовом режиме, так что вам не надо иметь графического 191
экрана для того, чтобы, пользуясь GRAPHTXT, посмотреть, как ри- суются символы. Когда наши программы обращаются к услугам ROM-BIOS для отображения символов в графическом режиме, подпрограммы ROM-BIOS просматривают, как нарисованы символы в таблице, и используют биты этой таблицы в качестве кода для пересылки в дисплейную память. Таким образом рисунок символа появляется на экране. В оригинальной разработке IBM PC в таблице кодов ASCII были указаны только первые 128 символов. В них входят наиболее важ- ные символы, в частности буквы алфавита, но это не обеспечивает полного набора символов IBM PC. Отображение этих 128 символов обеспечивается нашими программами. Система ROM-BIOS будет использовать их в случае, если мы сообщим о них, поместив ад- рес начала этой таблицы в вектор прерывания для выполнения прерывания 31. Игровые и другие несложные программы, которые используют графику, обычно обращаются к подпрограммам ROM-BIOS для вывода любой текстовой информации, которая должна быть пока- зана на экране. Но сложные программы, такие как Lotus 1-2-3 или Framework, обычно используют свои собственные символы, когда ‘ они работают в графическом режиме. Это происходит потому, что эти программы предъявляют свои собственные требования к тому, в каком виде должны появляться символы, и сами заботятся об их изображении. Эти системы могут контролировать размер, гарниту- ру и другие признаки (полужирное или курсивное начертание) символа. То же самое относится и к программам подготовки тек- стов, которые могут работать в графическом режиме. Любые по- являющиеся при этом текстовые символы, в графическом режиме рисуются на экране с помощью пикселов специальными програм- мами, а не аппаратными средствами, как это происходит в тексто- вом режиме. Теперь рассмотрим различные графические режимы, а также, характеристики и возможности каждого из них. 13.2. Путешествие по графическим режимам Существует не менее 11 графических режимов, которые были упомянуты в гл.11. Для упрощения, дадим краткое повторение сведений из гл.11. Номера графических режимов в первом столб- це таблицы используются системой ROM-BIOS компьютера IBM PC для идентификации каждого режима. Это 11 основных режимов, используемых семейством IBM PC. Есть и другие, например, режимы повышенного качества, поддер- живаемые очень дорогим, специализированным профессиональ- ным графическим адаптером. 192 Режим Тип Цвет Ширин. а Вид 4 Графический 4 320 Среднее разрешение, цвет есть 5 Графический Нет 320 Среднее разрешение, цвета нет 6 Графический 2 640 Высокое разрещение, цвета нет 8 Графический 16 160 Слабое разрешение 9 Графический 16 320 Среднее разрешение 10 Графический 4 640 Высокое разрешение 13 Графический 16 320 Среднее разрешение, сильный цвет 14 Графический 16 640 Высокое разрешение, слабый цвет 15 Графический Нет 640 Монохромный, 350 линий 16 Графический 64 640 Высокое разрешение, 350 линий Неге Графический Нет 720 Монохромный, 348 линий С чего мы должны начать, так это с выяснения того, какие ре- жимы какими адаптерами поддерживаются. Цветной графический адаптер — один из двух оригинальных дисплейных адаптеров семейства IBM PC — поддерживает первые три графических режима: 4-6. Они наиболее часто используются и являются базовыми. Эти режимы, как мы увидим, не являются единственными для CGA. Специальный встроенный дисплейный адаптер в PCjr эмулирует CGA и тем самым поддерживает первые три графических режи- ма. Кроме них для PCjr были специально созданы три режима под номерами 8-10. Эти режимы PCjr не используются никакими другими адаптерами; они уникальны для PCjr. Усовершенствованный графический адаптер IBM, так же как и PCjr, поддерживает три стандартных графических режима CGA. Дополнительно к этому он обеспечивает свои собственные уни- кальные режимы под номерами 13,14,15,16. Важно отметить, что два из этих четырех, как и все остальные режимы, о которых мы до сих пор говорили, используются с композитными или стандарт- ными RGB-мониторами. Для остальных режимов необходимы специальные мониторы: один режим используется с монохром- ным дисплеем, а другой — со специальным усовершенствован- ным цветным дисплеем. 7 - 6472 193
Наконец, адаптер Here card обеспечивает один специальный графический режим, но только с монохромным дисплеем. Тогда как другие графические адаптеры, о которых щла речь, поддер- живают целое разнообразие графических режимов. (Он также обеспечивает стандартный монохромный текстовой режим.) Теперь, когда мы знаем, какие режимы и какими дисплейными адаптерами поддерживаются, давайте рассмотрим особенности каждого. Видеорежим 4 — это четырехцветный режим со средним раз- решением. Он использует 320 точек по горизонтали и 200 точек по вертикали. Все стандартные графические режимы поддерживают 200 точек по вертикали. Вариации в разрешении проявляются только по горизонтали: 160 точек по горизонтали — это низкое разрешение; 320 — среднее; 640 — высокое. Вы можете поду- мать, что будет неудобно использовать одно и то же вертикальное разрешение с тремя различными горизонтальными, но обычно это не вызывает серьезных затруднений. В любом случае использова- ние 200 точек по вертикали в значительной степени обусловлено техническими ограничениями. Поскольку видеорежим 4 использу- ет четыре цвета, он работает только с частью стандартного 16- цветного набора цветов семейства IBM PC. Цвета, которые можно получить, являются любопытной комбинацией свободного выбора и предварительного отбора. Один из четырех цветов может быть свободно выбран и быть любым из 16 основных. Три другие цвета при этом предопреде- лены. Выбор может быть сделан из двух различных трех- элементных наборов. Набор, известный как палитра 0, включает цвета: зеленый, красный и коричневый (или темно-желтый). Палит- ра 1: сиреневый, пурпурно-красный и белый. Мы можем смеши- вать или сочетать эти палитры, точнее программы могут переклю- чаться с одной палитры на другую. Когда программа использует четыре цвета, она дает каждому из них номер от 0 до 3. Цвет с номером 0 выбирается свободно (каким бы он ни оказался), тогда как 1, 2 и 3 определяют зеленый, красный и коричневый для палитры 0 и сиреневый, пурпурно- красный и белый для палитры 1. Важно отметить, что этот выбор относителен. Если программа рисует картину, используя цвет с номером 0, а затем меняет вы- бор того, какой цвет определяется номером 0, то все, что было нарисовано, немедленно и автоматически меняется на новый цвет. То же самое происходит, если мы меняем выбор палитры. Этот прием может быть использован для различных графических эф- фектов. Например, рисунок можно заставить появиться и исчез- нуть, меняя его цвет на контрастный или на цвет фона. Мы можем заставить экран сильно мерцать просто от того, что быстро меня- ются палитры. 194
Вы увидите демонстрацию того, что может быть сделано с цве- том в видеорежиме 4 в программе COLOR-4, представлено в приложениии А. । Для быстрого знакомства с цветовыми возможностями видео- режима 4 попробуйте следующие команды на языке Бейсик: SCREEN 1 — переключит на видеорежим 4; COLORfO — установит палитру 0; COLOR, 1 — установит палитру 1. Вот программа, которая демонстрирует, что происходит, когда мы меняем один свободно выбираемый цвет: 10 FOR CHOICE = О ТО 15 20 COLOR CHOICE 30 PRINT "Номер цвета равен"; CHOICE 40 NEXT CHOICE Цветовые палитры, о которых мы говорили, предопределены и фиксированы. Однако два из наших дисплейных адаптеров, PCjr и усовершенствованный графический, способны перекроить выбор цветов так, что, когда программа в действительности запрашивает один цвет, скажем красный, может появиться другой цвет, скажем синий. Это делается с помощью аппаратного регистра, который по- зволяет нам изменить значение номеров, используемых для обоз- начения цветов. Таким образом мы можем сделать свой собст- венный свободный выбор четырех цветов в видеорежиме 4. В каждой из двух стандартный палитр мы можем произвольно из- менять номера цветов, получая произвольные сочетания в рамках каждой из них. Однако этот прием действует только с указанными выше двумя специальными дисплейными адаптерами — он не применим к стандартному CGA. Режим 4 обспечивает 200 строк по 320 точек или всего 64000 пиксел. При этом нам необходимы два бита памяти для кодирова- ния четырех возможных цветов. Это значит, что этот видеорежим требует 128000 битов или 16000 байтов памяти для своей поддер- жки. Дисплейная память цветного графического адаптера сос- тавляет 16К. Этого как раз хватает для данного видеорежима. (В разд. 13.3, где описаны технические подробности, мы увидим как используется эта память.) Теперь мы готовы двигаться дальше и рассмотреть некоторые другие графические режимы. Большая часть того, что мы выясни- ли для режима 4, относится также и к другим режимам, так что мы описали большую часть того, что необходимо знать о стандарт- ных графических режимах. Режим 5 — это специальная разновидность режима 4 с ограни- чением числа цветов. Он аналогичен текстовым режимам 0 и 22. В режиме 5 все идентично режиму 4, но четыре цвета передаются как оттенки серого. Это относится только к композитному видео- 195
терминалу. Сигналы на выходе RGB-адаптера по-прежнему соответствуют многоцветное™ на экране. Требования к памяти в этом режиме те же, что и в 4. Режим 6 — двухцветный режим с высоким разрешением. Он имеет разрешение 640 точек по горизонтали (и стандартные 200 точек по вертикали). В режиме 6 имеется два цвета; они предоп- ределены и фиксированы как черный и белый. Конечно, спорно, можем ли мы сказать, что этот режим имеет цвета. Технически есть два цвета для выбора (так же как в режиме 4 есть 4 цвета для выбора) и они являются частью стандартного 16-цветного диа- пазона IBM PC. С другой стороны, большинство из нас могут ска- зать, что черный и белый это есть "черный и белый", а не два цве- та на выбор. Называйте это как хотите, главное, чтобы вы помнили, что в этом видеорежиме двойное разрешение и половина цветов режима 4. Черный и белый цвета, используемые режимом 6, могут быть изменены точно так же, как изменяются цвета в режиме 4, когда мы используем PCjr или усовершенствованный графический адап- тер. Эта переделка не увеличивает количество цветов, которые появляются одновременно и зафиксированы для режима 6. Она позволяет использовать "реальный цвет" вместо белого. Режим 6 имеет в два раза больше пиксел, чем режим 4, а именно 640x200, т.е. всего 128 000. Но при этом для кодирова- k ния цвета каждого пиксела нужен лишь один бит. Таким образом, необходимый объем памяти для этого режима остается прежним, как и для режимов 4 и 5 — 16К. Режимы 4-6 основные, обычные графические режимы для се- мейства IBM PC, потому что они поддерживаются в том или ином виде каждым стандартным графическим дисплейным адаптером (за исключением адаптера Here card). Как правило, мы видим, что режим 4 используется для простых программ, таких как игровые и обучающие, в то время как режим 6 используется серьезными деловыми программами, такими как Lotus 1-2-3. Игры пользуются режимом 4, чтобы получить цвет, жертвуя детальным разрешени- ем картины; деловые программы пользуются режимом 6 для то- го, чтобы получить высокое разрешение, жертвуя цветом. Следующие три режима, 8-10, являются специальными для адаптеров PCjr и обеспечивают некоторые естественные и ожида- емые расширения основных графических режимов. Режим 8 — это 16-цветный режим с низким разрешением. Это "мост" от режима 4, но не к режиму 6, а в противоположном на- правлении. В этом режиме с низким разрешением всего 160 точек по горизонтали. В нем можно использовать одновременно все 16 цветов, поэтому здесь нет раздражающих ограничений в выборе палитры. В режиме 4, где существует выбор цветов, есть смысл воспользоваться этим свойством, чтобы увеличить выбор исполь- зуемых цветов. Но в этом режиме (и в следующем режиме 9) из- 196
менение цветов имеет менее очевидное преимущество. Однако это может быть использовано для специальных эффектов — таких как появление и исчезновение части рисунка (когда он сливается с фоном того же цвета). I Хотя этот режим обеспечивает больше цветов, чем любой из предыдущих графических режимов, качество изобржения в этом режиме с низким разрешением такое плохое, что он мало где применяется. Если вы имеете адаптер PCjr, то можете увидеть сами, какое здесь низкое разрешение, воспользовавшись командой SCREEN 3 языка Бейсик. Для этого режима требуется 16К памяти (как и для режима 4). Матрица пикселов — 160x200 (всего 32 000). Требуется четыре би- та (в два раза больше) для того, чтобы установить цвет для каж- дого пиксела. Четыре бита дают 16 вариантов. Здесь мы получаем в четыре раза больший выбор цветов при только в два раза боль- шей памяти. Это было бы реальным преимуществом, если бы этот режим был действительно полезным. Режим 9 — второй из специальных режимов адаптера PCjr. У него среднее разрешение, но он обеспечивает все 16 цветов. Этот режим требует больщего объема памяти. Это один из самых удобных графических режимов, потому что он сочетает среднее разрешение, 320 точек по горизонтали, с полным использованием цветового набора IBM PC. Для этого режима нужны 32К дисплей- ной памяти, и любая программа, пользующаяся этим режимом, должна выполнять некоторые специальные, присущие PCjr при- емы представления информации в дисплейной памяти. Это делается с помощью команд на языке Бейсик. Сначала, чтобы ос- вободить память — CLEAR ,„32768, а затем — SCREEN 5, чтобы включить этот видеорежим. Режим 10 — третий и последний из специфических режимов адаптера PCjr. Он похож на режим 9. Он четырехцветный, с вы- соким разрешением, требует 32К памяти, в два раза больше стан- дартного графического (16К). Бейсик устанавливает этот режим, используя команду SCREEN 6 после CLEAR ,„32768, чтобы освобо- дить достаточный объем памяти. Четыре цвета определяются также как для палитры 1 в режиме 4: первый цвет выбирается свободно, а другие цвета настроены на сиреневый, пурпурный и белый. Но поскольку это режим PCjr, то здесь может быть ис- пользовано переназначение цветов для изменения палитры. Сле- дующий набор графических режимов реализован в усовершенст- вованном графическом адаптере. Эти режимы обеспечивают раз- нообразный набор графических возможностей, которые перекры- вают большую часть того, что мы находим полезного в других специализированных адаптерах. Режим 13 — это 16-цветный режим со средним разрешением. Это в сущности то же, что и режим 9 адаптера PCjr. Как и режиму 197
9, ему нужны 32К дисплейной памяти. (Бейсик не поддерживает эти режимы усовершенствованного графического адаптера, поэто- му не существует простого способа демонстрации этих режимов даже на компьютере, оборудованномсоответствующим диспле- ем.) Цвета могут быть изменены также, как это уже делалось раньше для других адаптеров. Кроме того если этот или другой режим усовершенствованного графического адаптера использует- ся со специальным усовершенствованным цветным дисплеем, то можно использовать не только базовые 16 цветов IBM PC, но и расширенный 64-цветный набор усовершенствованного дисплея. Режим 14 —это 16-цветный режим с высоким разрешением. Он подобен режиму 10 адаптера PCjr, но обеспечивает все 16 цветов, а не четыре, как при высоком разрешении. Для тогочтобы это сделать, необходимо дополнительно в 64К дисплейной памяти. Пока все режимы, которые мы рассмотрели, были предназна- чены для стандартных типов цветных графических дисплейных эк- ранов, используемых в семействе IBM PC: монитора RGB, цветно- го композитного экрана, телевизора и т.п. А следующий специаль- ный режим усовершенствованного графического адаптера пред- назначен для использования только с монохромным дисплеем, эк- раном, который обычно используется с монохромным адаптером. Это режим 15, вариант монохромного графического режима. Он обеспечивает разрешение 640x350. Общее число строк соответст- вует общему числу строк развертки, используемых в обычном монохромном режиме, в котором имеется 25 строк символов, и каждый символ рисуется 14 строками развертки; 14 раз по 25 дает как раз 350 — число графических строк в этом режиме. У этого режима есть одна особенность: он обеспечивает мигание очень интересным способом. Каждый пиксел в этом режиме имеет че- тыре возможных атрибута: выключенный (черный), включенный, мигающий и яркий. Основная причина наличия этой необычной комбинации атрибу- тов у пикселов в том, что она позволяет монохромному графиче- скому режиму совмещать возможности стандартного монохром- ного текстового режима (который включает признаки мигания и яркости) и графические возможности. Поскольку для каждой точ- ки на экране имеется четыре возможных атрибута, то для каждого пиксела необходимо два бита, в итоге требуется 448 000 бит, т.е. 56 000 байт памяти. Следующий и последний режим усовершенствованного графи- ческого адаптера также требует использования специального дис- плея, но на этот раз это усовершенствованный цветной дисплей, который может изображать все 64 цвета. Это режим с номером 26. Как и режим 15, он имеет такое же сверхвысокое разреше- ние: 640x350. Каждый пиксел может быть высвечен любым из 64 цветов, для чего требуется 6 бит для хранения информации о каждом пикселе. В этом режиме используется рекордный объем 198
дисплейной памяти 1 344 000 бит, т.е. 168 000 байт. Это многовато. Но если мы хотим иметь все 64 цвета для всех пикселов, то за это приходится платить. Последний видеорежим, который мы| рассмотрим, это режим, поддерживаемый популярным графическим адаптером Here card, не принадлежащим фирме IBM. Адаптер Here card был первым графическим адаптером для монохромного дисплея, поддержи- вающим режим, который аналогичен режиму 15 усовершенство- ванного графического адаптера. Для этого режима нет номера в таблице режимов IBM PC. Поэтому для удобства описания, я назо- ву его просто режим Неге. Хотя он и похож на режим 15, отличия всеже есть. Режим имеет небольшое, но заметное увеличение го- ризонтального разрешения, 720 пиксел, а не 640. По вертикали — 348, а не 350, что практически незаметно. Этот дисплейный режим требует 250 560 бит (один для каждого пиксела) или 31 320 байт памяти. Это чуть меньше 32К. На этом мы окончим обзор 11 основных графических режимов. Осталось лишь выяснить некоторые подробности того, как графи- ческие режимы используют свою память, что достаточно интерес- но. Об этом мы узнаем в раз. 13.3. # # #Технические подробности 13.3. Особенности графических режимов Пора выяснить детали того, как графические режимы использу- ют дисплейную память. Этот механизм значительно сложнее, чем в текстовых режимах. Дисплейная память большинства графических режимов разме- щена в той же области, что и для текстовых режимов, но методы ее использования значительно сложнее: увеличивается объем ра- боты, которую должна выполнить программа, для того чтобы по- местить данные в дисплейную память. Основная сложность состоит в том, что, если в текстовых режи- мах дисплейные данные размещены одним единым отрезком, в графических режимах данные разбиты на два или даже четыре банка (с промежутками). Например, в видеорежиме 4 (со средним разрешением, четы- рехцветном) 200 строк пиксел разделены на два банка, содержа- щих информацию о четных и нечетных строках соответственно. Первый банк содержит данные для строки под номером 0 (пер- вой строки), за которой следуют данные о строках 2, 4 и т.д. до строки 298, последней из четно-пронумерованных строк. Отдель- ный банк памяти содержит данные о нечетно-пронумерованных строках — 1, 3, 5 и т.д. до самой последней строки с номером 299. На рис. 13.1 показано, как это выглядит. 199
Существует два варианта разбиения на банки. В первом гори- зонтальные строки пикселов делятся на два банка, во втором — на четыре. Четный банк Нечетный банк 199 197 2 3 4 5 О 1 2 3 4 5 197 -е— 198 199 ----- Рис. 13.1. Банки памяти для графической информации Три оригинальных графических режима, режимы 4-6, работают с двумя банками; так же работают видеорежим 8 и режим адап- тера PCjr с низким разрешением. Другие два режима адаптера PCjr, 9 и 10, и режим адаптера Here card делят свои строки на че- тыре банка. На рис. 13.2 обобщено деление строк на банки. 1-й вариант: Банк 0: 0, 2, 4, 6, 8, Банк 1: 1, 3, 5, 7, 9, 2-й вариант: Банк 0: 0, 4, 8, ... Банк 1: 1, 5, 9, Банк 2: 2, 6, ... Банк 3: 3, 7, Рис.13.2. Деление строк на банки Внутри каждого банка графические данные расположены в пря- мой и компактной форме, точно так же, как и в текстовых режи- мах. Данные для первой строки в каждом банке заполняют после- довательные байты с начала банка, а вторая строка в каждом бан- ке непосредственно следует за первой без всякого промежутка. Однако существует маленький промежуток между банками, такой же как между отдельными дисплейными страницами в текстовых режимах. Каждый банк занимает примерно 8 Кбайт памяти, и каж- дый банк начинается с адресной границы кратной 8К с небольшим промежутком неиспользованного свободного пространства памяти между банками. 200
Такое расположение графических данных в банках делается в основном для удобства аппаратных средств. Поскольку картинка дисплейного экрана рисуется за два прохода, то строки каждого прохода перемежаются. Это сокращает расход средств, которые нужны для рисования графической картиЛ»! на экране. Обратная сторона медали в том, что работа программы по со- зданию графической картинки значительно усложняется, потому что адресные расчеты, необходимые для определения месторас- положения каждой точки, более сложные. Тогда как размещение графической дисплейной памяти в сущ- ности одинаково для всех режимов, о которых мы говорили, то кодирование данных о пикселах существенно различается для раз- ных режимов. Это происходит потому, что разные режимы нуж- даются в разном объеме данных для каждого пиксела. Существу- ет также специфическая особенность для одного из режимов адаптера PCjr, что мы сейчас увидим. Для двухцветных режимов 6 и Неге на каждый пиксел прихо- дится только один бит памяти. Схема хранения данных здесь пре- дельно проста. Каждый байт в дисплейной памяти содержит дан- ные о восьми пикселах. Старший бит (номер 7) — о первом пик- селе, следующий (номер 6) — о втором, и т.д. Для стандартных четырехцветных режимов 4 и 5 требуется два бита информации о каждом пикселе. Следовательно каждый байт содержит данные о четырех пикселах. Первые два бита каждого байта (биты 7 и 6), содержат данные о первом из четырех пиксе- лов, и т.д. А для другого четырехцветного режима, режима 10 для адап- тера PCjr, биты закодированы совсем не так. Дисплейная память в этом случае используется парами байтов, причем каждая пара со- держит информацию о восьми пикселах сразу. О первом из вось- ми пикселов информация содержится в двух старших битах каж- дого из используемых байтов. Информация о следующем пикселе — в двух следующих битах каждого из используемых байтов и, т.д. Эта интересная схема была разработана для того, чтобы уве- личить скорость работы с экраном в этом видеорежиме. Это до- стигается за счет того, что адаптер PCjr имеет специальную схему работы с памятью. Данные выделяются и обрабатываются сразу из пары байтов, что позволяет PCjr работать с памятью в два раза быстрее. Наконец, 16-цветные режимы 8 и 9 для адаптера PCjr, исполь- зуют четыре бита на каждый пиксел. Для этих режимов каждый байт дисплейной памяти содержит информацию о двух пикселах; четыре старших бита содержат информацию о первом из двух пикселов, а четыре младших бита — о втором. Когда наша программа начинает работать, изображая графиче- скую картину, она должна не только рассчитать адреса памяти, где хранится информация о пикселах, но и правильно выбрать нужные 201
биты. Если программа рисует картину на всем экране, она может заносить данные группами для 2, 4 или 8 пиксел одновременно, так как пересылка полных байтов — это сравнительно быстрая операция. Но если программа управляет высвечиванием лишь от- дельных пикселов, то данные для остальных пиксел должны при этом не изменяться. Для этого используются поразрядные опера- ции AND, OR и т.д. Если операции необходимо произвести для большего числа отдельных битов, то процесс может оказаться длительным, что является одной из главных причин медленной ра- боты графически-ориентированных программ по сравнению с по- добными программами, использующими текстовый режим. Встро- енная система программ ROM-BIOS обеспечивает сервисные про- граммы для манипулирования отдельными пикселами, но это ни- сколько не ускоряет операцию, а просто избавляет программистов от более кропотливой работы. Специальные режимы, поддерживаемые усовершенствованным графическим адаптером представляют собой особый мир, который настолько сложен, что, ка- жется, не поддается описанию или объяснению. Если бы я попытался объяснить понятно,это заняло бы около двух глав. Но когда я закончил бы объяснение, то меня, вероятно, надо было бы забрать в сумасшедший дом: настолько сложны и изощренны специальные режимы этого адаптера. Для того чтобы поберечь свой рассудок, да и ваш тоже, я просто кратко расскажу, что делает эти режи- мы такими запутанными. Специальные режимы EGA требуют огромный объем памяти. Эта память нс может быть размещена в отведенной для этого области адресного пространства IBM PC. (Напомним, что всего под дисплейную память отведено 128К. В-блок используется EGA для эмуляции действий всех остальных адаптеров. Для своих специальных режимов он вынужден использовать и A-блок объемом 64К.) Адаптер проделывает удивительный фокус со своей памятью, приспосабли- ваясь к объему используемой памяти и типу видеорежима IBM PC. Любые про- граммы, которые используют специальные режимы, должны быть способны вы- полнять действия, отвечающие особенностям этих режимов. Если вы почувствовали, что для программ, использующих стандартные графи- ческие режимы, сложно выработать адресацию для двух (или четырех) банков строк графических данных, вы можете себе представить, насколько сложно ра- ботать со специальными режимами EGA. ### Задания 1. Поэкспериментируйте с программой GRAPHTXT, показанной в приложении А. Программа останавливается с помощью ASCII-символа с кодом 12/. Что про- изойдет, если она будет работать дальше? Эта программа предполагает, что таблица, которую она отображает, находится в определенном месте памяти (F0000:FA6E). Можете ли вы найти разумный способ, для обнаружения такой таб- лицы, если нам придется ее искать? 2. Чтобы сделать что-то более изысканное, попробуйте использовать про- грамму GRAPHTXT в качестве первого этапа при написании программы, позволя- ющей вам создавать свои собственные рисунки символов в большем масштабе. 3. Представьте себе, что вам понадобилось использовать курсор и признак мигания в цветных графических режимах. Как вы это сделаете* Можете ли вы найти причины того, почему графические режимы не имеют мигания или курсо- ра? Можете ли вы придумать способы, чтобы решить эти проблемы? 202
Глава 14 КЛАВИАТУРА Мы только что кончили разбираться с Типами дисплеев семей- ства IBM PC, разумно будет, если следующей нашей темой станет клавиатура. Поскольку мы взаимодействуем с нашими компьюте- рами чаще всего с помощью клавиатуры и дисплея, то весьма по- лезно разобраться в тонкостях работы этого устройства. Для всех нас очевидно, что дисплей весьма сложная тема, и мы в этом убедились в последних трех главах. Напротив, клавиа- тура нашего компьютера кажется достаточно простой, и это дей- ствительно так. Но внутри клавиатуры ПК существуют свои особен- ности и сложности, которые делают ее более гибкой и интересной для исследования, чем можно было бы себе представить. В этой главе вы увидите, почему это так, и поймете, как некото- рые программы могут работать с клавиатурой весьма необычны- ми способами. 14.1. Основные операции Для того чтобы разобраться в прцессах, происходитящих в кла- виатуре нашего компьютера надо помнить, во-первых, что она ра- ботает совсем не так, как кажется, и, во-вторых, что информация, набираемная на клавиатуре, испытывает несколько преобразова- ний, прежде чем приобрести вид, который она имеет на экране дисплея. Чтобы разобраться в этом, я начну с объяснения того, по- чему работа с клавиатурой происходит именно таким образом, а затем мы рассмотрим особенности этой работы. Мы скорее всего были бы готовы к тому, что клавиатура наше- го компьютера работает аналогично клавиатуре пишущей машин- ки: нажимаем на клавишу А и компьютер "понимает" это как ввод литеры А. На самом деле это не так. Назначение аппаратных средств клавиатуры ПК не в том, чтобы придавать строго опре- деленный смысл каждому нажатию клавиши, быть непосредствен- ным связующим звеном между нашими пальцами и компьюте- ром. Клавиатура работатает под управлением программ, которые и определяют какую информацию получает ПК в результате на- жатия клавиши. Итак, предположение, что нажатие клавиши А оз- начает ввод в компьютер литеры А — ошибочно. Компьютер должен быть как можно более гибким и универ- сальным в работе. Поэтому его аппаратная часть не должна вно- сить никакого заранее определенного значения в операцию нажа- тия клавиши. А вот что происходит на самом деле может показаться весьма 203
любопытным и составляет суть взаимодействия между клавиату- рой и нашим компьютером (и встроенными компьютерными про- граммами ROM-BIOS). Если вы или я нажимаем клавишу, то это действие фиксируется компьютером на клавиатуре ПК. (Клавиши имеют различные но- мера, называемые кодом клавиши, и именно эта информация фиксируется аппаратурой. На рис. 14.1 вы видите, какие коды кла- виш используются в стандартной клавиатуре IBM PC.) После того как клавиатура отметила тот факт, что мы нажали клавишу, она сообщает компьютеру, что что-то произошло, даже не уточняя* что именно. Это делается в форме аппаратного пре- рывания. Аппаратура клавиатуры посылает микропроцессору сиг- нал прерывания, пользуясь определенным кодом прерывания, присвоенным клавиатуре. Это прерывание просто сообщает ком- пьютеру, что произошла манипуляция с клавиатурой. Прерывание, как мы узнали в гл.6, заставляет микропроцессор приостановить то, что он делает и переключиться на программу, обработки пре- рывания; в нашем случае, программу, которая является частью программного обеспечения встроенной системы ROM-BIOS ком- пьютера. Программа обработки прерывания клавиатуры вступает в дей- ствие и выясняет, что же произошло на клавиатуре. Клавиатура от- вечает, что была нажата определенная клавиша. (Команда и ответ дсуществляются через порты IBM PC, что мы уже обсуждали в гл.6. Программа системы ROM-BIOS выдает свою команду, посы- лая ее код в адрес соответствующего порта, через который отве- чает клавиатура. Клавиатура отвечает, посылая код клавиши в ад- рес другого порта. Код читается программой обработки прерыва- ния.) Клавиатура, конечно, должна помнить, какая клавиша была на- жата, ожидая пока программа ROM-BIOS не спросит ее об этом. (Ждать недолго — обычно около одной десятитысячной доли се- кунды, нои все-таки для компьютера это ожидание.) Для того что- бы это сделать, у клавиатуры есть специальная память, которая достаточно велика, для того чтобы записать 20 отдельных кодов клавиш в случае, если микропроцессор не успеет ответить на пре- рывание до того, как будут нажаты другие клавиши. Это бывает редко, но устройство клавиатуры предусматривает и такое. После того, как клавиатура сообщает код клавиши микропроцессору, эта информация исчезает из специальной маленькой памяти клавиату- ры, освобождая место для кодов новых нажатых клавиш. Есть еще две подробности, которые нам необходимо знать о клавиатуре. Первая очень важная. Клавиатура не просто замечает, когда мы нажимаем на клавишу, она также фиксирует, когда мы клавишу отпускаем. Клавиатурой отмечается как нажатие, так и от- жатие любой клавиши, и каждое такое отдельное действие, пре- вращается в прерывание и передается программой ROM-BIOS. 204
Есть вполне определенные, отличающиеся друг от друга коды для нажатия и отжатия каждой клавиши (коды нажатия показаны на рис. 14.1; коды отжатия те же самые плюс 128 в десятеричной или 80 в шестнадцатеричной системе счисления). Это означает, что программа обработки!прерывания клавиату- ры ROM-BIOS прерывается для того, чтобы узнать о действиях клавиши, в два раза чаще, чем мы могли предположить. Это так- же означает, что легко определить, держат ли еще клавишу или она уже отпущена. Это позволяет, например, узнать, хотим ли мы использовать прописные буквы, потому что клавиша переключения регистра при этом должна быть нажата. Именно аппаратные средства клавиатуры позволяют повторить клавишную операцию, если клавиша не отпущена. Клавиатура сле- дит за тем, как долго нажата клавиша, и если она проходит "порог повтора” (около полсекунды), генерирует повторные коды нажа- той клавиши через регулярные интервалы так, как если бы мы (каким-то образом) повторно нажимали клавишу. До сих пор я описывал, как работает стандартная клавиатура IBM PC. Клавиатуры PCjr и АТ работают несколько иным образом. Для того чтобы узнать, каковы между ними различия смотрите следующий подраздел. Далее нам необходимо выяснить, как ра- ботает программа системы ROM-BIOS с кодами клавиш клавиату- ры и как эти коды превращаются в осмысленные значения. Отличия клавиатур ПК Мы описывали здесь стандартную клавиатуру, которая состав- ляет основу всех клавиатур для семейства IBM PC. Некоторые мо- дели клавиатур отличаются от стандартной, но стараются обойти эти различия, чтобы установить полное соответствие IBM PC. Это стано- вится возможным в силу наличия отдельных этапов, через кото- рые проходят данные от клавиатуры до компьютера. В случае с PCjr клавиатура имеет меньше клавиш и в ней нет буфера (памяти) для хранения кодов нажатых клавиш. Клавиатура PCjr передает свои действия с помощью уникальных клавишных кодов PCjr и через прерывание, которое отличается от стандартно- го клавиатурного прерывания 9. Поскольку PCjr не может ждать, он сигнализирует о клавишном действии немаскируемым преры- ванием 2. Программа обработки этого прерывания быстро считы- вает клавиатурные данные по мере того, как они передаются, а затем переводит коды PCjr в эквивалентные стандартные коды стандартной клавиатуры IBM PC. Затем в качестве последнего приема заставляет прерывание 9 передать их в обычные програм- мы ROM-BIOS (или в любую программу, которая вклинилась и ожидает для приема стандартные коды IBM PC, а не коды PCjr). Компьютер PCjr проделывает большую работу для того, чтобы 205
Рис.14.1. Клавиатура ПК 206
внешне казалось, что его нестандартная клавиатура и коды клавиа- туры работают идентично стандарту IBM PC, предпринимая слож- ный и умный набор программных приемов. Другие клавиатуры, которые отличаются от оригинального IBM PC, такие как клавиату- ры АТ, используют те же методы, хотя им не требуется для этого так много 'усилий. ) В стандартной клавиатуре IBM PC фиксированы два фактора, контролирующи! действия повтора клавиш: промежутки времени до начала повтора и временной интервал между генерируемыми нажатиями клавиши. В АТ действие повтора клавиши является ап- паратным, как и для IBM PC; но аппаратные средства клавиатуры АТ программируемы, так что мы можем изменить задержку по- втора клавиши и интервал. В PCjr действие повтора клавиши по- буждается программным обеспечением ROM-BIOS. Оно может быть изменено или вовсе отменено. Когда программа обработки прерывания клавиатуры ROM-BIOS начинает действовать, она получает один из кодов с клавиатуры и должна решить, что этот код означает. Программа ROM-BIOS быс- тро проходит через несколько стадий анализа для того, чтобы вы- яснить, как необходимо интерпретировать и что нужно делать в соответствии с нажатой клавишей. Во-первых, проверяется, не от- носится ли действие клавиши к одному из регистровых типов (та- кие регистровые клавиши находятся на левой и правой сторонах клавиатуры, а также ALT или CTRL). Если это так, то программа ROM-BIOS устанавливает состояние сдвига, которое воздействует на значение последующих нажатых клавиш. Затем ROM-BIOS про- веряет, не является ли действие клавиши переключателем (таким, например, как клавиша CAPSLOCK, NUMLOCK, SCROLLOCK или INS). Клавиши переключения, так же как и клавиши регистра, вли- яют на значение других клавиш, но несколько иным образом. Кла- виши регистра действуют только если они нажаты, а клавиши пе- реключения используются в режимах "включено" и "выключено". Как для регистровых клавиш, так и для клавиш переключения система ROM-BIOS должна вести запись текущего состояния, что- бы знать что к чему. Эта запись ведется в двух младших байтах шестнадцатеричных адресов 417 и 418. Каждый из битов в этих двух байтах отдельно фиксирует одну часть состояния клавиатуры, записывая либо, что одна из клавиш нажата, либо, что одно из со- стояний переключателя включено или выключено. Вы можете проверить это состояние, пользуясь программой KEY-BITS, описан- ной в приложении А. Эта программа демонстрирует, как записы- вается состояние клавиатуры, а также некоторые удивительные свойства той информации, за которой следит ROM-BIOS (рис. 14.2). Экспериментируя с программой KEY-BITS, вы можете узнть нема- ло о том, как работает ROM-BIOS с клавиатурой. (Для того чтобы помочь вам извлечь максимум из программы KEY-BITS, два совета. У программы отнимает много времени ко- 207
дирование и декодирование битов и отображение их на экране. Дайте ей несколько секунд для того, чтобы показать результаты ваших действий с клавишами. Помните также, что клавиши взаимо- действуют. Если переключатель NUMLOCK находится в положении "включено", то нажатие клавиши INS интерпретируется как нуль.) После того, как программа системы ROM-BIOS разобралась с регистровой клавишей и клавишей переключения ей необходимо проверить некоторые специальные комбинации клавиш, такие как комбинация CTRL-ALT-DEL, которые перезапускает компьютер. Другой специальной комбинацией является комбинация CTRL- NUMLOCK, которая заставляет компьютер сделать паузу. Разряды, содержимое которых управляет состоянием клавиатуры. Для останова выполнения программы нажмите клавишу Enter. Чтобы увидеть изменения в действиях, нажмите эти клавиши: обе клавиши Shift, Ctrl, Alt, CapsLock, NumLock, ScroIlLock, Ins. 01 10 00 10 00 1100 00 LI—He используется (off) He используется (off) Состояние клавиши (PCjr):» щелкают при нажатии (off) Состояние захвата активно (off) *-► Клавиша ScroIlLock нажата (оп) Клавиша NumLock нажата (on) Клавиша CapsLock нажата (off) Клавиша Ins нажата (off) Правая клавиша Shift нажата (off) Левая клавиша Shift нажата (ол) Клавиша Ctrl нажата (off) Клавиша АН нажата (off) ** Состояние клавиши ScroIlLock (off) Состояние клавиши NumLock (on) *“► Состояние клавиши CapsLock (ол) *-* Состояние клавиши Ins (off) Рис. 14.2 Информация, выдаваемая программой KEY-BITS О комбинации клавиш CTRL-NUMLOCK Программы обработки сигналов от клавиатуры ROM-BIOS делают больше, чем просто следят за входными данными клавиатуры и переводят их в значи- мые символы. Они также наблюдают за некоторыми встроенными особенности семейства IBM PC. Три наиболее известных комбинации нажатия клавиш: перезапуск системы (CTRL-ALT-DEL), печать копии экрана (SHIFT(left)-asterisk) и пауза (CTRL- NUMLOCK). Возможность перезапуска и печать копии экрана существует всегда и до- ступна из любой программы. Печать копии экрана вызывается просто прерыва- нием с номером 5. В этих двух случаях подпрограммы клавиатуры обеспечивают 208 пользователей возможностью получения при нажатии клавиш того действия, ко- торое обычно может быть выполнено только программой. Однако CTRL-NUMLOCK или пауза — особое свойство, необычное для клави- атуры. Когда подпрограммы ROM-BIOS обнаруживают эту клавишную комбина- цию, делается отметка и запускается бесконечный цикл пустых действий. Нахо- дясь в этом цикле, машина продолжает реагировать на любые аппаратные пре- рывания, которые могут происходить, наг.ример, от диска или таймера. Однако, когда любое из этих перерываний закончено, управление переходит назад к программе клавиатуры, а она отказывается возвращать управление программе, которая была приостановлена. Только когда мы нажимаем на одну из клавишей IBM PC, программы ROM-BIOS сбрасывают бит паузы и возвращают микропро- цессор к активной деятельности, если вы запустите программу KEY-BITS, то уви- дите бит паузы, которым пользуется ROM-BIOS, чтобы следить за этим состоя- нием. Но KEY-BITS не может показать набор битов паузы, поскольку когда он ус- тановлен, ни одна программа, включая и KEY-BITS, не выполняется. У некоторых членов семейства IBM PC имеются другие специальные функции, которыми управляет клавиатура. В модели Compaq специальные ком- бинации клавиш управляют дисплейным режимом и громкостью щелчка клавиш. В режимах Compaq-286 другая комбинация клавиш также контролирует скорость работы. А в PCjr щелканье клавиатуры тоже управляется клавишной комбина- цией. Итак, если какая-либо клавиша нажата, то происходят все те специальные действия, о которых говорилось выше, если только ей не предписано специальное действие. Обычное отпускание клавиш ничего не значит, если это не одна из специальных клавиш (смены регистра или переключения). Когда мы нажимаем обыч- ную клавишу, программа ROM-BIOS может узнать, какая клавиша нажата, например, клавиша А. Однако, чтобы придать обычной клавише А смысл буквы A, ROM-B1OS приходится переводить код клавиши в ее знаковый код. Вот тот момент, когда клавиша А ста- новится буквой А. В этом процессе перевода принимается во внимание состояние регистра для того, чтобы отличить букву а от А и т.д. Когда код нажатой клавиши переводится в ее значение, суще- ствуют два набора значений для двух типов символов клавиатуры. Первый — обычные символы кодов ASCII, такие как А или Control-А (ASCII код 1), и еще что угодно. Второй тип — для спе- циальных клавиш IBM PC, таких как функциональные клавиши и клавиши управления курсором. Клавиши малой числовой клавиа- туры, расположенью справа, имеют специальные коды, отличаю- щиеся от кодов ASCII обычных знаковых клавиш. Прием использования клавиши ALT Существует еще одни специальный прием, который выполняют для нас про- граммы системы ROM-BIOS и о котором знают не все. Большая часть символов, которые мы набираем на компьютере, расположена прямо на клавиатуре: буквы алфавита, цифры и т.п. Большую часть управляющих кодов можно ввести, ком- бинируя нажатие клавиши CTRL с нажатием других клавиш, например CTRL-Z в (табл. ASCII код 26 используется как маркер конца файла для текстовых фай- лов). Но таким образом можно ввести далеко не каждый символ из набора IBM PC. Например, если бы мы хотели напечатать символы, рисующие рамку (сим- волы псевдографики), которые мы рассмотрим в гл.4, мы не смогли бы этого сделать. Для того чтобы сделать возможным ввод практически всех ASCII символов, 209
программы системы ROM-BIOS используют специальный прием. Мы проделаем эти действия следующим образом: держа нажатой клавишу регистра ALT, печа- таем ASCII-код того символа, который нам нужен. Этот десятичный код набира- ется клавишами на правой стороне клавиатуры, а не цифровыми клавишами в верхнем ряду. Попробуйте ввести прописную букву А, имеющую код 65. Держите нажатой клавишу ALT, нажмите и отпустите сначала клавишу 6, а затем 5 на правой сто- роне клавиатуры. Отпустите клавишу ALT. Буква А должна появиться на вашем экране так, как если бы вы просто нажали клавишу с буквой А. Эта схема действует в большинстве случаев, но не всегда. Бейсик так меня- ет работу клавиатуры, что описанный выше прием не работает. А программы, переопределяющие работу клавиатуры, такие как Prokey, могут модифицировать схему так, что она будет работать совсем по-другому. Тем не менее в большин- стве случаев мы имеем в своем распоряжении этот специальный прием, обеспеченный программами ROM-BIOS, чтобы совершенствовать нашу работу с клавиатурой. Для того чтобы разместить обычные коды ASCII и специальные коды IBM PC, программа системы ROM-BIOS записывает их коды как пару байтов. Если набран символ ASCII, то первый из двух байтов ненулевой и он сам содержит код ASCII. (В этом случае второй символ игнорируется. Он обычно содержит код клавиши, которую мы нажали.) Специальные символы IBM PC определяют- ся нулем в первом байте. Когда первый байт нулевой, второй байт содержит код, определяющий, какой из специальных клавишных знаков присутствует. Бейсик дает нам доступ к этим двухбайтовым кодам клавиату- ры с помощью функции INKEYJ, позволяющей проверить коды. Маленькая программа на языке Бейсик, приведенная ниже, пока- жет вам как это делатся. После ввода программ начнинайте нажи- мать на клавиши. (Для останова нажмите Enter.) 100 FOR I = 1 ТО 10 : KEY I, "" : NEXT 110 K$ = INKEY$ 120 L = LENjfK$) 130 IF L = 1 TEN PRINT "символы ASCII"; ASC(LEFT$(K$,1)) 140 IF L = 2 TEN PRINT "специальные символы"; ASC(RIGHT$(K$,1)) 150 IF K$ = CHR$(13) THEN SYSTEM ELSE 110 После того как "реальное" нажатие клавиши было обнаружено и переведено в двухбайтовое значение, оно хранится в специаль- ном буфере ROM-BIOS. Но прежде чем попасть в память ROM- BIOS, эта информация запоминается в собственном внутреннем буфере клавиатуры. ROM-BIOS имеет достаточно большой буфер, позволяющий хранить 15 символов. Если буфер переполняется, то ROM-BIOS выдает через динамик специальный звуковой сигнал, к которому привыкли опытные владельцы IBM PC, а затем послед- ние введенные символы отбрасывает. Когда наши клавишные операции переведены системой ROM- BIOS в символы, они пригодны для использования программами. Наши программы могут взять их коды непосредственно из бу- ферной памяти ROM-BIOS, пользуясь клавиатурными программа- ми ROM-BIOS, либо получить их с помощью DOS, пользуясь кла- 210
виатурными подпрограммами DOS, которые косвенно используют информацию ROM-BIOS. В любом случае наши программы в ко- нечном итоге воспользуются теми символами клавиатуры, кото- рые были введены в буфер ROM-BIOS в результате наших дейст- вий. | Это обычный способ работы с клавиатурой, когда все происхо- дит непосредственно. Но вся эта сложная схема по переработке информации о нажатии клавиши, которую мы проследили, пред- назначена в основном для того, чтобы позволить программам обойти обычные клавиатурные операции и начать творить различ- ные фокусы. Далее мы увидим как это делается. 14.2. Способы работы с клавиатурой Устройство IBM PC позволяет нашим программам работать с клавиатурой разными способами. Даже когда наши программы не делают ничего необычного, у них есть два способа для полу- чения данных с клавиатуры: либо непосредственно из буфера ROM-BIOS или через DOS. Но это не исчерпывает все возможные способы. Я, конечно, не могу дать вам здесь исчерпывающий отчет о всех приемах работы с клавиатурой по многим причинам. Одна из них состоит в том, что изобретательные программисты все время создают что-то новое. Но главное заключается в том, что многие приемы слишком сложны для нас. Они нужны высококвалифици- рованному программисту, а наша цель понять основы. Но заме- тим, что все больше и больше мы пользуемся программами, ос- нованными на клавиатурных приемах, и для нас очень полезно по- нимать, как они работают, свободно ими пользоваться и не думать о том, что в этом есть какая-то магия. Существует много способов управления клавиатурой. Один из них — косвенно продемонстрирован в программе KEY-BITS. Лю- бые наши программы могут управлять байтами состояния клавиа- туры. Вот простой пример того, как это делается: 10 DEFSEG = 0 20 PRINT " Пожалуйста нажмите клавишу Shift " 30 IF PEEK (&Н417) MOD 4 О 3 THEN 30 40 PRINT " Спасибо!" Я Это позволяет программе относиться к клавишам регистрового типа особым образом. Поскольку обычные программы не делают что-то подобное, мы говорим не об обычном использовании кла- виатуры, а об особом. Часто дизайнеры игровых программ хотят сделать что-то особенное с клавишами регистра. Например, про- грамма-игра "Китайский бильярд"("Ы!дЫ Mission Pinball"), создан- ная Б.Артвиком (волшебником, который создал также имитатор полета самолета фирмы Microsoft), использует клавиши регистра 211
клавиатуры для управления. Когда какая-либо из регистровых клавиш нажимается, программа должна получить об этом информацию. Это делается просто путем слежения за битами со- стояния клавиатуры. Один из самых интересных типов программ, которыми мы пользуемся на наших IBM PC, это резидентные программы, подо- бные популярной программе "Sidekick". Эти программы находят- ся в оперативной памяти в пассивном состоянии и активизируются нажатием специальной комбинации клавиш. Давайте рассмотрим некоторые способы, которыми это мож- но сделать. Вспомните из гл.6, что IBM PC имеет внутренние часы, которые "тикают" 16 раз в секунду. Тикание часов слышно благо- даря специальному прерыванию номер 8. Обычно программа ROM-BIOS получает это прерывание и использует его только для того, чтобы изменить свою запись времени дня. Но ROM-BIOS де- лает тикание часов полезным для наших программ, порож- дающим другое прерывание номер 28, которое не активизирова- но до тех пор, пока одна из программ не установит вектор преры- вания. Затем программа будет специально активизироваться с частотой 18 раз в секунду. Давайте рассмотрим, как программа "Sidekick" могла бы ис- пользовать это. Нормальный сигнал, с которого начанается работа программы, это одновременное нажатие клавиш CTRL и ALT. "Sidekick" может это сделать, например, используя прерывание от таймера, чтобы иметь возможность часто проверять биты состоя- ния клавиатуры, фиксируя нажатие этих клавиш. (Это похоже на способ, которым программа, описанная выше, проверяет нажатие регистровых клавиш.) Если "Sidekick" не находит соответствующе- го набора битов, то она просто возвращает управление, при этом тратится очень мало времени. Но если "Sidekick" все-таки фикси- рует нужный набор битов, то начинается собственная работа этой программы. В этом примере прерывание от таймера не мешает нормаль- ной обработке данных, поступающих с клавиатуры. Использование прерывания от таймера позволяет нашим программам просматри- вать состояние клавиатуры, но это далеко не единственный способ, с помощью которого программа может вклиниваться в середину потока клавиатурных данных, чтобы внимательно следить и, воз- можно, изменять информацию. Вот что делают программы пред- определения клавиатуры, такие как "Prokey" и "Superkey". Если в программе необходимо полностью управлять клавиату- рой, то можно вклинитьсяв ход аппаратного прерывания от клавиа- туры, просто помещая в вектор прерывания указание на специаль- ную программу вместо стандартной программы ROM-BIOS обра- ботки прерывания от клавиатуры. Затем, когда клавиатура вызы- вает аппаратное прерывание, наша новая программа обрабатывает это прерывание вместо программы ROM-BIOS. 212
Существует две возможности, которые предоставляет такая программа. Одна — это полное управление данными, поступаю- щими с клавиатуры. Большинство программ, которые вклинивают- ся в процесс обработки данных, поступающих с клавиатуры, не должны нарушать поток информации с клавиатуры в ROM-BIOS, они просто хотят контролировать ее, и когда это возможно, видо- изменять, но не приостанавливать сам процесс. Такая программа проверяет данные клавиатуры по мере их прохождения, но обыч- но не прерывает поток информации, проходящий нормальные операционные стадии. Вот как работает большинство программ, включая "Prokey". Они используются для того, чтобы следить за данными клавиатуры и модифицировать их. Для выполнения этой работы им может быть даже придется заменить обрабатывающие программы ROM-BIOS на свои собственные, но они не останавли- вают переработку клавиатурных данных так, как это обычно дела- ется ROM-BIOS. Если посмотреть на большое разнообразие программ, разра- ботанных для нашего семейства IBM PC, то можно увидеть много случаев, когда программы работают с клавиатурой по-особому. То, что мы обсуждали, рассматривая такие программы как "Side- kick" и "Prokey", представляет собой частный случай. Существует, однако, много менее радикальных способов работы с клавиату- рой. Чтобы узнать, как это делается, давайте рассмотрим пример программы "Framework". Она особо использует клавиши "боль- шой плюс " и "большой минус", которые расположены в правом углу клавиатуры IBM PC. Для обычной программы не существует различия между значениями этих клавиш и клавиш " + " и рас- положенных на верхнем ряду клавиатуры. Однако программа использует эти клавиши для того, чтобы выполнить особую опера- цию перехода вверх или вниз по логическим уровням внутри "Framework". Чтобы это сделать, программа должна иметь воз- можность обнаружить разницу между клавишами "большой плюс" и " + ". "Framework" обнаруживает это различие специаль- ным образом. Как мы видели ранее, когда программа системы ROM-BIOS пе- редает данные клавиатуры нашим программам, она представляет их в виде двухбайтового кода, где первый байт указывает ASCII- символ. Если мы нажмем клавишу "большой плюс" или клавишу " + ", то этот байт информации будет одним и тем же — ASCII-символ с кодом 43. Второй байт, который программа ROM-BIOS передает нашим программам, содержит код клавиши, которая была нажата, и тогда программе, такой как "Framework" становится очень про- сто отличить, когда мы нажимаем "большой плюс", а когда " + ". Аналогично она может легко отличить, когда мы генерируем код клавиши плюс и минус, пользуясь приемом исполльзования кла- 213
виши ALT, который мы рассматривали в предыдущей главе. Программа "Framework" способна полностью использовать до- ступную стандартную информацию, не вмешиваясь в действие программы ROM-BIOS, обрабатывающей поток информации от клавиатуры. Это важная деталь, которую мы должны знать, потому что многие часто считают, что необходимо использовать специальные и потенциально разрушительные приемы для достижения особых целей в программах. Этот пример с программой "Framework" ил- люстрирует тот факт, что порой возможно получить все, что необ- ходимо, не пытаясь вырваться из стандартных правил. Задание 1. Для клавиш переключения, таких как CAPSLOCK, программа ROM-BIOS следит не только за текущим состоянием переключения, но также за тем, нажа- та ли клавиша. Даже хотя наши программы обычно не используют эту информа- цию, существует простая логическая причинатого, почему ROM-BIOS ее записы- вает. Можете ли вы сказать почему? 2. Схема, используемая для того, чтобы отделить специальные знаковые ко- ды IBM PC от ASCII-кодов работает вполне хорошо, но у нее есть один техниче- ский недостаток. Можете пи вы его указать? Как можно его исправить? 3. Можете ли вы придумать, как сделать, чтобы программа обнаружила со- стояние клавиатурной паузы, которую мы обсуждали в приложении о работе с клавишами CTRL-NUMLOCK? 214
Глава 15 ПРОЧИЕ АППАРАТНЫЕ СРЕДСТВА^ В этой главе мы собираемся закончить наш обзор аппаратных средств семейства IBM PC. Мы рассмотрим параллельные и по- следовательные порты ПК, которые используются для принтеров и для отдаленных коммуникационных связей. Затем мы пойдем дальше, изучая способность ПК, генерировать звуки, работать с манипулятором типа "мышь", использовать запись на магнитную кассету и т.д. 15.1. Принтеры: параллельный порт Одна из стандартных компонент наших компьютеров — это па- раллельный порт. Трудно найти ПК, который его не имеет, и боль- шинство дополнительных адаптеров, прилагаемые к нашим компь- ютерам (включая монохромный адаптер), платы расширения па- мяти и почти каждая многофункциональная плата имеют парал- лельный порт. Для дополнительных плат, которые мы устанавли- ваем в наших компьютерах наличие параллельного порта настоль- ко типично, что многие ПК имеют их два или даже три, хотя реаль- но нельзя использовать больше, чем один. Параллельный порт — это канал для вывода данных, предназ- наченный только для одной цели: обеспечить связь с принтером. Строго говоря, существует два пути присоединения принтера к компьютеру: через параллельный или через последовательный порты. Параллельный порт предназначен исключительно для при- нтеров. Последовательный порт (подробности см. в разд. 15.2) может использоваться для разных целей, и связь с принтером — только одна из них. То, что я называю параллельным портом, иногда называют иначе. Следует это знать, чтобы избежать путаницы. Фирма IBM обычно называет этот порт параллельным адаптером принтера. Он называется параллельным из-за способа передачи данных (об этом ниже). Он называется адаптером принтера, потому что единствен- ное для чего он используется — для передачи данных принтеру. Мы можем называть его адаптером или платой, или средством, как нам нравится. Обычно говорят порт (как делал и я), вкладывая В это слово смысл — "накопитель данных". Здесь, однако, слово порт означает не совсем то, о чем мы говорили в гл.6. Те порты — особенность микропроцессора IBM PC. Они используются для связи и обмена информацией между микропроцессором и други- ми частями ПК (включая параллельные адаптеры принтера). Кстати, вы можете иногда встретить упоминание параллельного 215
порта как интерфейса фирмы Centronix, которая установила этот стандартный способ связи между компьютером и принтером. Этот интерфейс считается параллельным, потому что при передаче од- ного байта все его восемь битов передаются принтеру одновре- менно. Возможности такого интерфейса невелики. В основном компьютер может послать только данные для печати и специаль- ные управляющие сигналы, которые могут быть закодированы в самих данных. Большинство принтеров имеют детально разрабо- танный набор управляющих кодов, перёдаваемых в потоке дан- ных. Но эти управляющие коды специфичны для каждого принте- ра, они предназначены исключительно для форматирования печа- таемых данных. В устройстве самого параллельного интерфейса имеется только один специальный сигнал, который компьютер мо- жет послать в принтер — сигнал инициализации. Существуют также и сигналы, которые принтер может передать компьютеру. Во-первых, простое подтверждение принтером того, что данные получены правильно. Во-вторых, сигнал ожидания, ис- пользуемый принтером для передачи компьютеру сообщения о задержке передачи до тех пор, пока принтер не сможет начать обработку данных снова. Втретьих, это единственный действитель- но особый сигнал принтера (поскольку все остальные могли бы • подойти к любой передаче данных), сигнал отсутствия бумаги. Все стандартные компьютерные принтеры имеют сенсор, определяю- щий, когда в принтере кончается бумага. Параллельный интер- фейс принтера обеспечивает передачу специального сигнала в компьютер. Этот сигнал отсутствия бумаги особенный для парал- лельного интерфейса принтера и он не пригоден для принтеров, использующих последовательный порт, который мы будем рас- сматривать в разд. 15.2. Устройство и возможности параллельного интерфейса принтера жестко не связаны с нашим семейством IBM PC, потому что они могут быть использованы широким спектром устройств обработки информацию. Однако, имеется одна особенность ПК, о которой мы должны знать. Архитектура базовой платы и адаптеров IBM PC, а также программ ROM-BIOS, которые их поддерживают, позво- ляют иметь до трех совершенно независимых параллельных пор- тов в одном компьютере. Это значит, что к компьютеру можно присоединять до трех принтеров одновременно. Обладая соответствующим программ- ным обеспечением ПК могут использовать для печати два и даже три принтера одновременно,. Мы могли бы это сделать, если бы использовали свои компьютеры как печатные машины или как центральный пункт по выдаче большого количества печатных ма- териалов. Но это было бы очень узким применением ПК. Поэтому большинство программных средств, включая и DOS, не использу- ют этой возможности. Обычное решение для любого ПК, к ко-то- рому подключено больше чем один принтер, это выбор, но такой, 216
что одновременно используется только один из них. Это делается для того, чтобы использовать один дешевый принтер для печати черновиков, а другой дорогой и качественный для печати чистовых копий. Поскольку мы подошли к теме использЬвания принтера, ^тоит отметить здесь — хотя это не имеет отношения к нашему разгово- ру об аппаратуре IBM PC, — что DOS обеспечивает некоторые способы переключения вывода с одного принтера на другой. От- части этому служит команда MODE, а команда буферизации PRINT может направлять данные для печати в разные устройства. Большинство принтеров настроены, на использование парал- лельного интерфейса. Некоторые имеют две модификации — одна для параллельного, а другая для последовательного интер- фейсов. Но есть и такие, например лазерный принтер фирмы Hewlett Packard LaserJet, которые работают только с последова- тельным интерфейсом. Если параллельный порт, о котором мы говорили, предназна- чен для использования только с принтером, то последовательный может быть служит для разнообразных целей (см. разд. 15.2). 15.2. Линии связи: последовательный порт Еще один путь, по которому передаются данные из компьюте- ра, — последовательный порт (последовательный интерфейс). Фирма IBM называет его более сложно асинхронный коммуника- ционный адаптер по причинам, которые мы скоро узнаем. Параллельный порт, который мы обсуждали в разд. 15.1 в ос- нове своей является односторонним. Данные передаются лишь от компьютера в принтер. Как мы видели, само соединение не одно- стороннее, потому что отдельные сигналы (подтверждения при- ема, занятости линии и отсутствия бумаги) могут быть переданы назад. Но в смысле передачи именно данных, но не сигналов, па- раллельный порт является односторонним. Последовательный же порт — полностью двухсторонний, и это ключ к основному его ис- пользованию. То, что мы называем последовательным портом или последо- вательным интерфейсом нашего компьютера, основано на стан- дарте, который широко используется в информационной индуст- рии и называется RS-232 (это стандартное устройство для передачи двухсторонних, асинхронных последовательных данных). Доступ Двухсторонний, поэтому данные могут посылаться туда и прини- маться обратно. Передача происходит асинхронно. Это означает, что передача данных не основана на определенном согласовании по времени. Данные посылаются в произвольные моменты вре- мени по принципу "берите, если можете" для того, чтобы обе стороны были готовы использовать эту асинхронность. Существуют 217
другие формы связи, не часто используемые на персональных компьютерах: синхронные, основанные на стандартном сигнале синхронизации. При последовательной передаче данные переда- ются побитно. (Мы обсудим возникающие при этом сложности чуть позже.) В то время как параллельный интерфейс предназначен для од- ного простого и достаточно хорошо контролируемого использова- ния, последовательный интерфейс предназначен для необычайно широкого употребления. Эта гибкость в использовании последова- тельного интерфейса обеспечивается наличием специальных пара- метров. Они называются коммуникационными параметрами свя- зей и являются порой источником значительной путаницы, когда мы пробуем работать с последовательными портами. Параметры связи — это набор спецификаций, которые устанав- ливают, как будет работать последовательный порт. Любой интер- фейс, включая и последовательный, соединяет оборудование, ко- торое должно быть согласовано по параметрам связи так, чтобы передаваемые сигналы передавались правильно. Поскольку наши ПК могут приспособиться к любому сочетанию параметров, а очень часто то оборудование, которое находится на другом конце последовательного интерфейса имеет фиксированные параметры связи, то работа по согласованию параметров обычно производит- ся самим компьютером или, более точно, пользователем. В прин- ципе это сделать нетрудно, но предполагается в первую очередь, что мы знаем, какими должны быть параметры и как их задавать. Это не представляет технической трудности для опытного и знаю- щего пользователя ПК, но многие, кто относительно недавно поль- зуется компьютером, могут испытывать трудности при решении этой задачи. Кроме того, мы обычно не должны "говорить" элект- ронным устройствам, как работать: мы обычно просто соединяем их вместе а уж они сами "знают", как сделать эту работу. С по- следовательным интерфейсом дело часто обстоит иначе, что мо- жет привести к значительному рассогласованию работы компонен- тов компьютера. Теперь мы должны хоть немного узнать о том, каковы пара- метры последовательного интерфейса. Не будем вдаваться в под- робности, нам важно знать основы. Главная характеристика последовательного интерфейса — ско- рость передачи информации, измеряемая в бодах. Один бод это один бит информации, передаваемый в секунду. Скорость пере- дачи данных в ПК изменяется в диапазоне от 110 до 9600 бод. Для медленной телефонной связи эта скорость около 300 бод, а при использовании быстрых модемов — 1200. Для лазерного при- нтера фирмы Hewlett Packard, данные передаются со скоростью 9600 бод. Для того, чтобы единица скорости передачи данных через ин- терфейс стала более ясной, зачеркните последнюю десятичную 218 цифру и получите число байтов (символов), передаваемых в се- кунду. Это действительно так, потому что для передачи одного байта требуется, в действительности передать 10 бит. Следующий параметр передачи определяет число бит, кодиру- ющих один символ. Существуют варианты: )7 или 8 бит. Поскольку символы наших ПК кодируются восемью битами, для того, чтобы передать весь набор символов ASCII, используемых в семействе IBM РС6 нам придется работать с 8-битовым кодом. Но большин- ство последовательных интерфейсов осуществляет передачу лишь основных символов таблицы кодов ASCII, которые имеют длину семь бит. Вот почему многие последовательные интерфейсы пе- редают 7-битовые коды. Следующий параметр последовательного интерфейса — конт- роль четности, или код обнаружения ошибки. Связь RS-232 пред- полагает три различных варианта: контроль по четности, нечетности или без контроля. Тип контроля 'обычно отмечается своей начальной буквой. Мы будем указывать его буквами: Е для контроля по четности, О для контроля по нечетности и N без контроля. Наконец определяется число бит для промежутка между символами. Каждый символ передаваемых данных окружен битами "начало" и "конец" подо- бно своеобразным скобкам. Мы можем управлять числом этих бит задержки, выделяя для этого один или два из них. В действительности, как вы могли бы предположить, полный набор параметров связи, включая типы четности, более сложён, чем тот, о котором я здесь рассказал. Мы остановились лишь на основных моментах. Главное, что необходимо понять — парамет- ры связей довольно сложны и запутаны, но тем не менее они должны быть установлены правильно, т.е. так, чтобы оба устройства на концах последовательной связи могли понимать друг друга. Иногда установкой этих параметров должны занимать- ся пользователи, и поэтому необходимо знать хотя бы их названия и общие характеристики. Существует два основных применения последовательного пор- та в наших ПК. Первое — то, что мы уже рассматривали, — связь с принтером. Но только с теми, которые приспособлены для ра- боты с последовательным интерфейсом. А это сравнительно не- большое число принтеров. Другое, наиболее частое применение последовательного ин- терфейса — связь компьютера с телефонной сетью. Но чтобы это осуществить, необходимо иметь еще ряд устройств. Мы должны иметь модем, который переводит сигналы компьютера в телефон- ные сигналы, т.е. биты в звуковые эквиваленты, и, наоборот, зву- ковые волны демодулирует в биты информации для компьютера. Мы также должны иметь телефонную линию, к которой можно подсоединиться, и еще программы, способные понять язык ком- пьютера на другом конце телефонной линии. 219
Принтеры и телефонные линии наиболее типичны из того, к че- му мы можем присоединить наш ПК через последовательный порт. С помощью него можно подключить также графопостроите- ли, рисующие на бумаге. Устройства ввода, использующие после- довательный порт, мы будем кратко рассматривать в разд. 15.4. Если ПК соединен с научным прибором с целью получения дан- ных или управления, то последовательный порт представляется наиболее естественным соединением, базирующийся на общем стандарте передачи данных и для прибора и для компьютера. Как мы видели в разд. 15.1, базовая конфигурация IBM PC по- зволяет нам присоединять до трех параллельных интерфейсов . принтера. Для последовательных портов связи мы можем исполь- зовать не более двух. Это плохо, потому что последовательные порты более гибки и могут быть использованы с большей пользой для широкого спектра применений. В результате мы больше нуж- даемся в последовательных портах, чем в параллельных. На прак- тике, однако, почти все пользователи IBM PC могут подсоединить к своему компьютеру именно столько периферийного оборудова- ния, сколько им требуется. 153. Звук Одна из наиболее интересных операций, которые могут делать наши ПК, — это воспроизведение звуков (удивительно широкий диапазон). Вот очень простой пример того, как ПК может играть гаммы: 10 FREQ = 130.81 20 FOR OCTAVE = 1 to 4 30 FOR NOTE = 1 to 7 40 SOUND FREQ,3 50 DIFF = 1.1225 60 IF NOTE = 3 or note = 7 THEN DIFF = 1.0595 70 FREQ = FREQ “ DIFF 80 NEXT NOTE 90 NEXT OCTAVE Опробовав эту простую программу на вашем ПК, вы быстро получите представление о его способности проигрывать почти каждую желаемую музыкальную ноту. Это также даст вам пред- ставление о качестве звука маленького встроенного динамика. Большинство из нас думает, что использование звука в ПК отно- сится лищь к игровым программам. "Серьезные" программы не пользуются звуком, разве что иногда издают сигнал, если что-то неправильно. Но "серьезные" программы умеют использовать звук и более серьезно. Один из лучших примеров, о котором я знаю, это программа Top View. Программа Top View специаль- ным образом использует клавишу Ctrl для переключения между двумя режимами работы клавиатуры. Чтобы помочь нам заметить 220
эту разницу программа Top View издает два различных звука при переключении режимов: один звук — что-то вроде "буп-бип", а другой, наоборот — "бип-буп". Эффект поразительный и дает нам простую для восприятия обратную связь. Эко отличный пример то- го, как наши программы могут извлечь пользу из довольно при- митивных сигналов. Использование звука Звуки, издаваемые динамиком ПК, могут быть использованы с большей пользой, нежели просто производить шумы. Часто они сопровождают работу аппаратуры. Один пример этого — щелчок клавиатуры. Стандартные клави- атуры ПК, поставляемые фирмой IBM, производят щелчок, когда мы нажимаем и отпускаем клавиши, для одних звук приятный, для других — раздражающий. Этот щелчок - не что иное, как об- ратная связь, звук, помогающий нам определить, что клавиши ра- ботают. Это щелканье может быть ценным помощником, придаю- щим конкретную чувственную реальность работе, которая иначе кажется очень абстрактной. Однако щелканье устраивает далеко не всех. Мы ничего не можем сделать для того, чтобы изменить такое механическое щелканье клавиши на компьютерах ПК, имеющих оригинальную клавиатуру. Но многие представители семейства IBM PC не имеют подобных клавиатур. Модель PCjr и все представители семейства IBM PC, созданные фирмой Compaq, имеют бесшумные клавиатуры, которые не из- дают никаких механических звуков. Вместо этого они обеспечива- ют свою слышимую обратную связьб производя щелкающий звук через динамик. Это не такой хороший звук как механический щел- чок стандартной клавиатуры IBM, но у него есть преимущество - его можно изменить. Клавиатурный щелчок PCjr может быть включен и выключен нажатием комбинации клавиш Ctrl-Alt-CapsLock. Это действие ус- танавливает и убирает бит управления воспроизведением щелчка, который мы видели, рассматривая биты состояния клавиатуры в гл. 14. Модели фирмы Compaq более удобные средства для управления звуком клавиатуры: мы можем установить громкость звука, пользуясь клавишами Ctrl-Alt-GreyPlus (большой плюс с правой стороны клавиатуры). Если вы очень требовательны к зву- кам, то эта возможность может быть реальным преимуществом. Динамик наших компьютеров служит также другим аппаратным Целям. Например, во время начального тестирования аппаратуры при включении компьютера, динамик сообщает о любых найден- ных ошибках, что оказывает существенную помощь, если не рабо- тает дисплей. В модели Compaq-286 один или два быстрых сигнала используются для сообщения компьютеру о переходе в медлен- 221
ный или быстрый режим. Наши компьютеры способны очень просто издавать звуки. Внутри компьютера находится маленький динамик, присоединен- ный к основной плате ПК. Динамик издает звук, когда в него по- ступает электрический сигнал, который меняется (или модулирует- ся) в соответствии с тем звуком, который должен быть воспроиз- веден. Динамик преобразует электрические сигналы в звуки, ко- торые мы слышим. В звуковоспроизводящих системах записанные звуки преобразуются в электрические сигналы. В наших компьюте- рах эти электрические сигналы генерируются под управлением выполняемых программ. В ПК нет управления уровнем звукового сигнала, поскольку он не предназначен для того, чтобы воспроизводить изощренные звуки. Вы заметите, что громкость динамика варьируется в зависи- мости от того, какую частоту звука мы посылаем. Вы можете ус- лышать это сами, пробуя вышеупомянутую программу музыкаль- ных гамм или используя вот эту, которая проходит через больший диапазон частот: 10 PLAY "MF" 20 FOR FREQ = 100 to 10000 STEP 100 30 PRINT "частота", INT(FREQ) 40 SOUND FREQ,5 50 NEXT FREQ Наши программы управляют динамиком компьютера через один из портов микропроцессора. Мы с этим кратко ознакомились в гл.6, когда мы рассматривали порты. Давайте еще раз взглянем на эту программу: 10 SOUND 500,1 20 X = (INP (97) MOD 4) « 4 30 PRINT " Нажмите любую клавишу для останова!" 40 OUT 97, X + 3 ' включение звука 50 FOR I = 1 ТО 250 : NEXT I ' задержка 60 OUT 97, X ' выключение звука 70 FOR I = 1 ТО 250 : NEXT I ' задержка 80 IF INKEY$ = "" THEN GOTO 40 Динамик управляется двумя битами младшего разряда порта 97 (шестнадцатеричное 61). В программе, приведенной выше, вы можете увидеть операцию чтения данных, которые в этот момент хранятся в порте 97 (используется оператор INP). При считывании в наше распоряжение попадают и другие биты этого порта, предназ- наченные для других целей, и которые мы не должны изменять. Для того чтобы включить звук, мы устанавливаем два младших бита (делаем их равными 1) порта 97. Для выключения звука мы сбрасываем эти биты (делаем их равными 0). Чтобы удостовериться, что эти биты еще. не установлены, ис- пользуется арифметическая операция MOD 4-4 для их сброса. Два бита этого порта управляют воспроизведением звуков. Старший бит (для его установки необходимо в порт заслать значе- 222
ние 2) просто включает динамик. Следующий бит управляет восп- роизведением звука. Он устанавливается, если поступил сигнал от программируемого генератора ПК. Программируемый генератор ПК (микросхема 8253, которую мы рассматривали в гл.5) может быть запрограммирован для ге- нерации постоянно звучащего сигнала. В действительности Йук за- дается двумя видами сигналов. Один из них используется для осу- ществления прерывания от внутренних часов 18,2 раз/с. Другой используется для генерации электрического тока в динамике. Для произведения общего звука мы сначала программируем микро- схему генератора для задания нужной частоты. Вы можете увидеть этом в маленькой программе выше. Вы- полнение оператора 10 SOUND 500,1 заставляет программу на языке Бейсик установить частоту генератора. Когда определена частота, можно сделать звук слышимым, установив биты порта. Ес- ли мы установили только старший бит (значением 2), то услышали всего лишь тихий щелчок, так как динамику передан только оди- нокий импульс. Но если установлены оба бита, импульсы генера- тора будут подаваться в динамик постоянно, и заставят его мем- брану колебаться с той частотой, на которую запрограммирован генератор. Программе не обязательно использовать программируемый таймер для того, чтобы производить звуки. Она может генериро- вать их устанавливая и сбрасывая бит, активизирующий динамик. Работая таким образом, программа может производить очень сложные звуки просто меняя временной интервал между сигна- лами динамику. Но это требует постоянного управления дина- миком со стороны программы, выполняемой микропроцессором. Если мы воспользуемся таймером, то программа сможет воспро- извести звук, который будет продолжаться без какой-либо заботы об управлении со стороны программы; это позволяет микропро- цессору в этот момент времени перейти к другой работе. Затем когда программе необходимо сделать так, чтобы звук прекратил- ся, ей достаточно сбросить соответствующие биты порта или поме- нять частоту таймера для воспроизведения нового звука. Таким образом программа на языке Бейсик способна воспроизводить музыкальный фон при выполнении вычислений. Звуковые возможности модели PCjr Звуковые возможности, о которых мы говорили в этой главе, свойственны всем представителям семейства IBM PC. Однако модель PCjr имеет некоторые особенности, которые выходят далеко за пределы обычных. Поскольку модель PCjr была предназначена для широкого применения дома и в школе, где нали- чие звука очень важно, она обладает расширенными звуковыми возможностя- ми. Особенность модели PCjr — это микросхема особого назначения, разрабо- танная и созданная фирмой Texas Instruments. Звуковая микросхема TI способна генерировать звуки большей чистоты и широкого диапазона, чем простые схемы 223
таймера IBM PC. Основная черта звуковой микросхемы TI состоит в том, что она имеет три независимых ’'голоса", что позволяет ей генерировать три отдельных тона одновременно, создавая более богатый полифонический звук. Для того чтобы сделать его еще лучше, звуковая микросхема TI имеет управление диапа- зоном громкости, который устанавливается для каждого голоса отдельно. Да- лее, звуковая микросхема TI может "шуметь", производить много видов нему- зыкальных звуков, т.е. как раз то, что нужно в игровых программах, чтобы вос- производить шум мотора, взрывы и т.п. Звуковая микросхема TI не единственное специальное звуковое свойство модели PCjr. Кроме этого она обладает способностью объединять свои собст- венные издаваемые звуки со звуковыми сигналами из других источников, таких как аудиокассетный магнитофон. Это свойство может быть использовано для сочетания записанных на магнитофон звуков и обучающих программ. Например, при обучении иностранным языкам можно получить выигрыш от комбинации магнитной записи разговорного языка и способности компьютера управлять про- цессом обучения. 15.4. Дополнительные устройства ПК Итак, мы обсудили основные компоненты IBM PC и имеем ос- новные сведения об его аппаратных средствах. Но существует еще много компонент в наборе аппаратных средств семейства IBM PC, которые мы и не затрагивали. Рассказом о некоторых из них мы и закончим эту главу. Инженеры, которые решают какими компонентами небходимо оснастить ПК должны предвидеть будущее и заранее обдумывать как эти устройства будут использоваться. Это, конечно, трудновы- полнимая задача, и потому случаются и неудачи. Устройство, по мнению инженеров, должен быть очень полезным, а на самом деле едва используются. Существуют устройства, которые инже- неры не предусмотрели сразу и которые появились в ПК значи- тельно позже. В этой книги я сделал несколько беглых замечаний о компо- нентах, встроенных в IBM PC, которые не использовались так, как предполагали их создатели. Мы обсудим некоторые из них в этом разделе. Один из наиболее поразительных, но используемых редко, элементов ПК это интерфейс кассетной ленты. Изобретатели не сознавали того, насколько серьезно будет восприниматься ПК и думали, что может существовать много моделей, используемых без дисководов (как не удивительно это кажется нам теперь). Не- которые из ранних, дешевых домашних компьютеров не имели никаких дисководов. Они просто использовали кассетные ленты для записи своих программ и данных. Специалисты фирмы IBM думали, что некоторые пользователи ПК тоже захотят использо- вать свои компьютеры таким же образом, поэтому он и был осна- щен кассетным адаптером. Для практических целей кассетный интерфейс никогда не ис- пользовался, и его адаптер даже был удален с основной платы более поздних моделей IBM PC, таких как XT и АТ. Он был остав- лен в модели PCjr, просто на случай, если возникнет необходи- 224
мость в вводе-выводе на магнитную ленту. Через кассетный интерфейс можно читать и писать данные (очень медленно) с аудиоленточного кассетного магнитофона, ес- ли он подключен к компьютеру с помощью специального адап- тера. Компьютер может читать и писать данные, включать и вы- ключать мотор магнитофона, но он не способен делать перемотку пленки. По этой причине большинство дешевых кассетных магни- тофонов используют автономную перемотку пленки. В то время как интерфейс кассетного магнитофона почти пол- ностью игнорировался, два других устройства, которые были включены в оригинальную модель IBM PC нашли свое примене- ние, хотя и они не слишком распространены. Большинство пользо- вателей ПК даже не знают о них, так же впрочем, как и о кассет- ном интерфейсе. Это джойстик (координатная ручка) и световое перо. Джойстик это специальное устройство для ввода информации в ПК, представляющее собой свободно передвигаемый стержень (ручку) и две кнопки-переключателя (рис. 15.1). Рис. 15.1. Джойстик Джойстик в большинстве случаев используется как манипуля- тор в игровых программах, поэтому далеко не каждый ПК снаб- жен им. Использование джойстика со стандартным IBM PC требует установки специальной дополнительной адаптерной платы, впро- чем, как и подсоединение самого джойстика. Поскольку модель PCjr была ориентирована на использование дома, для игры, она имела встроенный адаптер для джойстика, а задняя панель PCj» содержала два разъема для того, чтобы подключать джойстик. Стержень джойстика способен передвигаться в двух измерени- ях, а наши программы могут считывать информацию о его поло- жении в виде координат X и У. Нажатие кнопок-переключателей может быть также зафиксировано и считано программой. При программировании на Бейсике элементов работы с джойстиком обычно используются операторы STICK и STRIG. Другое малоиспользуемое устройство IBM PC — это световое 225 8 - 6472
перо (рис. 15.2). Им можно прикасаться к дисплейному экрану. Специальная аппаратура и соответствующие программы системы ROM-BIOS позволяют компьютеру считывать координаты тех точек экрана, к которым прикасается световое перо. Название этого устройства позволяет предположить, что перо что-то пишет, но в действительности это не так. Оно используется только для считывания информации, а именно координат точки эк- рана, к которой оно прикасается. Конечно, если мы используем перо совместно с какой-нибудь рисующей программой, которая считывает координаты точек при передвижении пера через экран и засвечивает эти точки, то покажется, что перо рисует на экране. Но световое перо в действительности просто сенсорное устройст- во. Рис. 15.2. Световое перо Световые перья могут быть использованы для многих целей, но чаще всего их внедряют в системы автоматизированного проекти- рования. Пользуясь световым пером, программа может позволить нам рисовать на экране, производить выбор из меню, прикасаясь пером к элементу данных, "брать" и передвигать части рисунка по экрану и т.д. Аппаратура и программные средства IBM PC могут определять ту позицию, где световое перо прикасается к экрану, при этом лю- минофорное покрытие в этом месте, должно очень быстро засве- чиваться и гаснуть. Люминофоры, используемые в монохромном дисплее обладают длительным послесвечением, что делает их удобней для глаз, но они слишком инерционны, для того чтобы работать со световым пером. (Если вы используете монохромный дисплей, то, вероятно, заметили, что требуется несколько мгнове- ний для того, чтобы точка исчезла с экрана. Это происходит в силу инерционности послесвечения.) Как и джойстики, световые перья требуют установки специаль- ного адаптера, за исключением модели PCjr, которая имеет встро- енное световое перо. Оператор PEN в языке Бейсик поддержива- ет управление световым пером. Если вы изучите его более де- тально, то узнаете технику использования светового пера. Как джойстик, так и световое перо — это встроенные устройст- ва специального назначения, которые позволяют нам передавать в 226
компьютер графическую информацию через указание позиции точки. (Ввод текстовой информации обеспечивает клавиатура.) Есть термин для этого типа устройств: они называются позиционнными манипуляторами. Джойстик и световое перо — это два таких уст- ройства. Инженеры фирмы IBM создали их для компьютера, предвидя, что они могут стать популярными. Вместо этого, самое широкое применение нашло совсем другое устройство: манипуля- тор типа "мышь" (рис. 15.3). Манипулятор этого типа (далее будем использовать более ко- роткий термин "мышь") ничем принципиально не отличается от светового пера или джойстика, фактически существует огромное сходство между джойстиком и мышью, поскольку оба имеют сво- бодное двумерное движение и кнопки переключателя для указа- ния действия. Но это все равно, что сказать, что нет разницы меж- ду той клавиатурой, клавиши которой расположены в нормальном порядке (так называемая структура QWERTY), и той, где клавиши расположены в алфавитном порядке АВС. Функционально они эк- вивалентны, но разница в том, что клавиатура типа QWERTY — по- пулярный стандарт. Рис. 15.3.Манипулятор типа "мышь" Итак, мышь. Несмотря на тот факт, что существуют другие по- добные устройства и на то, что фирма IBM разработала программ- ную поддержку для светового пера и джойстика, именно мышь стала широко распространенным манипулятором используемым нашими программами. Типы этого манипуляторов весьма разнообразны. Есть с двумя или тремя кнопками; использующие в работе механические или оптические принципы и требующие специальной вспомогательной поверхности, по которой движутся; со своими собственными адап- терными платами, а некоторые могут быть связаны с ПК через стандартный последовательный интерфейс. Несмотря на такое обилие разновидностей, которое могло на- строить и против широкого применения "мыши", она стала очень популярной. (Я написал текст этой книги с помощью программы Microsoft Word, используя мышь. После долгого сопротивления я обнаружил, что работать с этим манипулятором действительно 227
очень удобно). Для того чтобы пользоваться мышью, мы должны иметь про- граммную поддержку BIOS, подобную поддержке для других ус- тройств. В некоторых случаях (например, система Top View IBM) программа, работает с мышью, используя непосредственно BIOS. В других случаях (программы фирмы Microsoft) мышь использует свою собственную резидентную программу, взаимодействующую с BIOS. Второй подход больше соответствует общей тенденции — программная поддержка устройства через BIOS должна быть свя- зана с конкретным устройством и, кроме этого, отделена от лю- бых прикладных программ, которые ее используют. На этом заканчивается наш обзор различных дополнительных компонент аппаратуры IBM PC. Теперь мы готовы перейти к сле- дующей важной теме, о которой мы неоднократно упоминали: встроенное программное обеспечение системы ROM-BIOS компь- ютера фирмы IBM. Задания 1. Как вы думаете, существуют пи важные преимущества или недостатки в использовании параллельных или последовательных интерфейсов для принтера? 2. Сколько еще применений, кроме тех, которые были здесь описаны, вы можете найти для последовательных портов? 3. Напишите программу для эксперимента с двумя битами порта, которые управляют динамиком компьютера. Вы можете использовать маленькие про- граммы этой главы в качестве исходного пункта. Попытайтесь включить и вы- ключить динамик без использования бита таймера. Посмотрите, насколько быс- тро вы подаете импульсы динамику с помощью операторов на языке Бейсик, чтобы получить как можно более высокий звук. Глава 16. I ROM-BIOS: ОСНОВНЫЕ ПОЛОЖЕНИЯ В этой главе мы собираемся начать исследование программно- го "сердца" IBM PC, его встроенной системы ROM-BIOS. Наша за- дача — понять основные идеи, лежащие в основе ROM-BIOS, фи- лософию того, как она организована и для чего предназначена. Это составляет основу материала для гл. 17, в который мы будем изучать функции, выполняемые системой ROM-BIOS. Чтобы в дальнейшем избежать путаницы, давайте разберемся. В нашем компьютере есть два понятия, называемые BIOS. Во-пер- вых, ROM-BIOS — встроенное в ПЗУ программное обеспечение нашего компьютера; это и есть тема данной и следующей глав. Во-вторых, DOS-BIOS — часть DOS, которая выполняет сходные функции для дисковой операционной системы. 16.1-Что стоит за термином BIOS? ROM-BIOS — это сокращение от английского Read-Only Memo- ry Basic Input/Output System. He концентрируйтесь на названии и постарайтесь понять то, что она делает. Система ROM-BIOS — это набор программ, встроенных в ПЗУ компьютера, которые выпол- няют основные функции управления самого низкого уровня и ор- ганизуют выполнение команд компьютера. Программное обеспечение лучше всего работает, когда оно разделено на уровни, причем каждый уровень выполняет какое- то задание и освобождает другие более высокие уровни от заботы о деталях в рамках своего уровня. Следуя этой философии, ROM- BIOS является самым низким уровнем, находящимся ниже всех других программ и операций в компьютере. Задача ROM-BIOS — заботиться о сиюминутных потребностях аппаратуры компьютера и избавить все другие программы от знания деталей того, как это делается. В основе своей ROM-BIOS — это интерфейс между ап- паратными средствами компьютера и программами, которые вы- полняются на наших компьютерах. ROM-BIOS является програм- мой, хотя и довольно сложной. Но если мы хотим понять ROM- BIOS, то должны представлять ее не просто обычной программой, а своеобразным гибридом, чем-то средним между аппаратурой и программой, функционально это именно так: ROM-BIOS является своеобразным мостом между аппаратурой компьютера и нашими программами. Что делает ROM-BIOS такой особенной? Чем она занимается, чтобы казаться чем-то средним между аппаратурой и програм- мой? 228 229
Ответ надо искать в том, что приходится делать ROM-BIOS и как она это делает, как ROM-BIOS управляет непосредственно ап- паратурой и как обрабатывает соответствующие действия аппара- туры. Делает она это, в основном используя порты, о которых мы узнали в гл.6. Все компоненты IBM PC управляются большей час- тью посредством команд или набора параметров, передаваемых через порты. Например, адреса памяти, которые используются для управления дисплеем. Большинство программ, работающих с устройством непосред- ственно (или, как говорят, напрямую), управляют аппаратурой че- рез порты. Я не хочу, чтобы у вас складывалось впечатление, что ROM- BIOS занимается только портами: это не так. Но работа с портами лучше всего демонстрирует особенности системы ROM-BIOS. Именно программы этой системы наиболее тесно работают с ап- паратурой компьютера и именно они "знают" детали работы аппа- ратуры, которые приходится использовать остальным нашим про- граммам. Дополнительные сведения о BIOS Особенность системы ROM-BIOS в том, что она работает непосредственно с аппаратурой компьютера, используя много практических знаний о том, как эта аппаратура функционирует. И не всегда просто понять и освоить эти знания. Ес- ли мы изучим распечатки ROM-BIOS, которые публикует фирма IBM для PC, то мы сможем увидеть одну особенность в программах BIOS — это использование необходимых портов для того, чтобы посылать нужные команды в компоненты IBM PC. Не все, что требуется для того, чтобы заставить аппаратуру компьютера ра- ботать правильно, становится ясным из их базовых спецификаций. Кроме того, есть много "темных моментов", например вопросы внешних условий или как ошибки влияют на действительные процессы. Например, некоторые компоненты аппаратуры могут принимать команды в любой момент времени, но им нужен короткий промежуток между командами. В других случаях это делается за два отдельных шага с возможно более малым промежутком времени между ними. Мы могли бы проследить за последовательностью команд, которые возникают и выполняются, но этот процесс скрыт от нас, так же как и процесс успешного со- гласования по времени. Это как раз то, что делает использование системы BIOS таким специальным, что многие программисты думают о ней как о чем-то из области магического искусства — искусства, включающего не просто логиче- ские шаги, из которых построены все программы, а также переплетение про- граммам и аппаратуры компьютера. 16.2. Как работает ROM-BIOS Хотя исчерпывающие подробности того, как работает ROM-BIOS, действительно интересуют только опытных специалистов, основы того, как она организована и как работает, интересны и нам. Вот о чем мы и поговорим в этом разделе. Для начала нам надо отметить, что ROM-BIOS грубо разделена на три функциональные части, диаграмма которых представлена на рис.16.1. 230
Первая функциональная часть ROM-BIOS — начальные про- граммы, которые запускают наш компьютер, когда мы включаем электропитание. В свою очередь стартовоя программа может быть разделена на две основные части. । Рис. 16.1. Структура системы ROM-BIOS Первая — подпрограмма самотестирования аппаратуры (POST), которая проверяет работоспособность компонентов компьютера. Тестируется оперативная память с целью обнаружения дефектов, делаются другие проверки, чтобы убедиться, что компьютер ра- ботает без сбоев. Вторая — подпрограмма инициализации. Инициализация состоит в установке вектора прерывания. Когда случается прерывание, компьютер переключается на ту программу, которая обрабатыва- ет это прерывание. Инициализация также включает настройку ком- пьютерного оборудования. Многие компоненты нуждаются в том, чтобы соответствующие значения регистров были установлены, па- раметры помещены в определенные места памяти, было проде- лано еще несколько действий, чтобы привести их в состояние го- товности. В систему ROM-BIOS внесены сведения о всех компонентах стандартного оборудования, которое может иметь IBM PC, и она 231
выполняет инициализацию, которую требует каждая из них. При инициализации определяется конфигурация компьютера и эти све- дения передаются в ROM-BIOS. Что-то определяется при провер- ке расположения переключателей внутри компьютера (в ориги- нальной модели IBM PC) или при считывании постоянной памяти,в которой записана конфигурация оборудования, имеющегося у компьютера (в модели АТ). В некоторых случаях ROM-BIOS мо- жет выяснить, установлено ли оборудование, путем его опроса ус- тройства и проверки ответа (модель PCjr именно так выясняет на- личие своих необязательных компонент). В итоге ROM-BIOS прове- ряет и инициализирует все оборудование, которое она способна распознать. Конечно, мы можем добавлять новое оборудование в наши IBM PC; люди делают это постоянно. Часть этого оборудования - стандартное (как, например, увеличение оперативной памяти или добавление последовательного и параллельного интерфейсов), но не всегда. Существует и специальное оборудование, которое не предусмотрено в стандартных программах ROM-BIOS и которое требует своей собственной специальной программной поддержки ROM-BIOS. Чтобы справиться с этой проблемой, система ROM- BIOS может быть расширена за счет добавления к BIOS дополни- тельных программ. Как добавить новые программы в систему ROM-BIOS ROM-BIOS в наших IBM PC — это система программ, располо- женных в ПЗУ, т.е. фиксированная часть оборудования компьюте- ра. Это приводит к сложной проблеме: как добавить новые про- граммы в ROM-BIOS для поддержки новых компонент оборудо- вания. Ответ состоит в использовании автоматического признака, который позволяет добавлять к системе ROM-BIOS новые про- граммы, называемые расширением ROM-BIOS. Схема проста: дополнения к ROM-BIOS, специальным образом отмеченные так, что стандартный ROM-BIOS может их распознать и объединить с необходимыми программами. Так же как и основ- ная система ROM-BIOS, расположенная в специальной области па- мяти (блок F объемом 64К), дополнительные программы распола- гаются тоже в специальных областях памяти, отведенных для них — это блоки C,D и Е оперативной памяти. Любое новое устройство, требующее программной поддержки ROM-BIOS, использует следующий прием, позволяющий подклю- чить новые программы в BIOS. Программы расширения BIOS по- мещаются в соответствующий блок оперативной памяти (блоки C,D,E), причем в первые два байта области памяти, занимаемые этим расширением, записывается шестнадцатеричный код 55АА. Местоположение в оперативной памяти стандартной системы ROM-BIOS строго фиксировано, что дает возможность ей не конф- 232
ликтовать с другими расширениями. Стандартная (или основная) система ROM-BIOS в самом начале просматривает области памяти для расширений с целью найти шестнадцатеричный код 55АА. Ес- ли такой код найден, то управление передается на начало расши- рения ROM-BIOS. Это управление позволяет программе расшире- ния системы ROM-BIOS провести инициацию дополнительного обо- рудования и произвести настройку на совместное функционирова- ние с основной системой ROM-BIOS. Например, расширение ROM-BIOS для работы нового дисплей- ного адаптера (такого как Усовершенствованный графический адаптер) меняет вектор прерывания для функций, обслуживаю- щих видеосистему. Это изменение позволяет переадресовать уп- равление программе расширения ROM-BIOS, а не подпрограмме основной системы ROM-BIOS, обслуживающей видеосистему. Любые действия программы расширения ROM-BIOS выполня- ются только после того, как основная программа расширения ROM-BIOS передает ей управление. Когда программа расширения ROM-BIOS провела инициализацию, она передает управление на- зад основной системе ROM-BIOS, и компьютер продолжает рабо- тать как обычно. Но теперь уже инициализировано новое дополни- тельное оборудование и новая дополнительная программная под- держка системы ROM-BIOS для этого оборудования. Все это ста- новится возможным за счет механизма, который позволяет основ- ной системе ROM-BIOS найти и распознать программу расшире- ния. Между прочим, дополнительное обеспечение в кетриджах (электроннных схемах) модели PCjr подключается как, программ- ное расширение BIOS. Они добавляются как любое другое расши- рение BIOS, и имеет ту же идентифицирующую метку в первых двух байтах, которая используется основной BIOS для их обнару- жения. Единственная особенность состоит в том, что они предназ- начены для подсоединения и отсоединения, в то время как другие расширения BIOS обычно поддерживают устройства, установлен- ные в специальные (стационарные) места компьютера. Последнюю часть системы BIOS составляет программа boot (на- чальная загрузка), которая пытается загрузить DOS или любую другую операционную систему, которая может быть использована в нашем компьютере. Процесс начальной загрузки начинается с попытки системы ROM-BIOS считать программу загрузки с начала магнитного диска. Система BIOS вначале пытается обнаружить эту программу на диске в дисководе А, и если это не удается, а компьютер имеет жесткий диск, то эта попытка повторяется, но уже с жестким дис- ком. Если ни с одного диска нельзя прочитать программу загруз- ки, то ROM-BIOS входит в свой "недисковый режим" (в оригиналь- ных моделях IBM это означает активизацию встроенного Бейсика, в других моделях, таких как компьютеры фирмы Compaq, это при- 233
водит к печати сообщения, говорящего, что компьютер нуждается в диске с программой начальной загрузки). Обычно система ROM-BIOS считывает программу начальной за- грузки с диска и передает ей управление. Как мы обсуждали в гл.9 и 10, программа начальной загрузки проводит загрузку DOS (или другой операционной системы) в наш компьютер. После того как стартовые программы выполнены, наш компьютер готов на- чать работу с пользователем. Две другие части ROM-BIOS имеют ключевое значение в функционировании компьютера. Это системы аппаратных прерываний и обслуживающих функций. Они функци- онируют как два отдельных, но тесно сотрудничающих вида про- грамм. Система обслуживающих функций существует исключи- тельно для того, чтобы выполнять работу для наших программ (и для DOS), исполняя всевозможные действия, в которых нуждается программа. Мы увидим более детально, что это за функции, в гл. 17. Примерами таких функций могут быть: запрос очистить дис- плей или переключить экран из текстового режима в графический или задание на считывание информации с диска или на вывод ин- формации на принтер. Большая часть функций ROM-BIOS позволяет работать с аппа- ратурой компьютера — экраном, клавиатурой, дисками, принтера- ми и т.п. Это основные функции ввода-вывода, дающие BIOS ее имя. Но существуют и другие функции, которые также выполняет ROM-BIOS и которые не относятся к устройствам ввода-вывода. Например, ROM-BIOS следит за временем и одна из его функ- ций сообщает его нашим программам. Для того чтобы выполнить запросы наших программ, система ROM-BIOS должна непосредст- венно работать с устройствами ввода-вывода. В этом основная сложность работы программ этой системы, так как при этом необ- ходимо использовать технику взаимодействия с портами для пере- дачи информации непосредственно устройствам: дискам, принте- ру и т.д. Основное назначение системы ROM-BIOS и состоит в том, что- бы освобождать наши программы от деталей этого процесса. На- ши программы не должны знать, какой порт используется, чтобы послать данные в принтер. Вместо этого они просто дают задание ROM-BIOS послать данные в принтер, а уже система сама заботит- ся о всех деталях. Это освобождает наши программы не только от необходимости знать детали работы принтера, а даже, что более важно, от очень сложных и запутанных проблем восстановления при ошибках. Часть работы ROM-BIOS — это проверка ошибок, повторение операции, чтобы убедиться, что трудность является временной (как это часто бывает), и только в случае многократной неудачи сообщать об ошибке нашим программам. Некоторые части аппаратуры нашего компьютера требуют вни- мания только тогда, когда к ним происходит обращение (т.е. когда наши программы запрашивают BIOS о некоторой услуге), другие 234
части могут требовать постоянного внимания, которое полностью независимо от того, что делают в этот момент наши программы. Мы уже знаем о некоторых примерах этого: при нажатии клавиши на клавиатуре порождается прерывание, которое требует внима- ния от системы ROM-BIOS. Таким же образом внутренние часы IBM PC создают прерывание по времени 18 раз/с. Существуют также другие аппаратные прерывания, например прерывание от дисков, которое используется для того, чтобы обратиться к систе- ме ROM-BIOS. Часть обработки прерывания от аппаратуры заботится об обслу- живании аппаратуры IBM PC. Она работает отдельно, но в сотруд- ничестве с частью обслуживания функций. В гл. 14, где мы обсуж- дали, как действует клавиатура, был продемонстрирован хороший пример того, как это делается. Программы работы с клавиатурой разделены на две отдельные, но связанные части, которые рабо- тают вместе. Определенные аппаратные прерывания от клавиату- ры реагируют на наши действия с ней, запоминая, что мы делали, и сохраняя полученные символы для использования. Функции системы ROM-BIOS для обслуживания клавиатуры по- зволяют нашим программам запрашивать данные, введенные при нажатии клавиш клавиатуры и сохраненные при обработке соответ- ствующих прерываний от клавиатуры. Это две составляющих одно- го процесса (одна связана с аппаратурой, а другая с програм- мами), обслуживаемые различными частями системы ROM-BIOS. Вместе они обеспечивают использование клавиатуры пользовате- лем и его программами. В этом состоит суть системы программ ROM-BIOS и того, что она делает для наших компьютеров. Познакомившись с основой, мы готовы перейти к гл. 17 и более подробно рассмотреть функ- ции ROM-BIOS, которые используются нашими программами. Задания 1. Если у вас имеется моя программа "Утилиты Нортона", вы можете вос- пользоваться программой Sl-Sysfem Information для того, чтобы найти в BIOS от- метку, которая указывает на наличие расширения основной системы. Попробуй- те использовать эту программу в вашем компьютере и посмотреть, что получит- ся. 2. Проанализируйте, как работают аппаратные прерывания от клавиатуры и функции клавиатуры ROM-BIOS и как они совместно обеспечивают работу с кла- виатурой. 3. Как вы думаете, каковы требования к инициализации расширения ROM- BIOS? Как расширение естественно интегрируется с основной программой BIOS, не вызывая никаких противоречий? 235
Глава 17 ROM-BIOS: ПОДРОБНОСТИ В этой главе мы собираемся более детально рассмотреть, что делает для программ встроенная система ROM-BIOS семейства IBM PC. Нашей основной темой будет список стандартных функ- ций, которые обеспечивает BIOS. Однако этот список не будет ис- черпывающим — его бы было скучно читать. Попытаемся дать пу- теводитель по возможностям, которые BIOS предоставляет в наше распоряжение. Наша цель — осветить основные возможности сис- темы BIOS в контексте общей цели этой книги — понять IBM PC в целом. Однако перед тем, как мы начнем путешествие по системе BIOS, обсудим некоторые принципы и проблемы, которые лежат в основе ее функций. 17.1 Принципы работы Если освоить действие ROM-BIOS, а также список функций BIOS и комментариев, которые следуют в разд. 17.2, то это поможет понять некоторые принципы, которые лежат в основе ее работы и организации, а также понять суть некоторых проблем, которые присущи программному обеспечению таких компонент, как ROM- BIOS для наших IBM PC. Программа BIOS работает таким образом, чтобы обеспечить максимум гибкости, максимально освободить от технических забот наши программы, поддержать надежную и безошибочную работу компьютера. Мы уже рассмотрели определенные способы работы BIOS в этом направлении, когда анализировали одну из программ обработки прерывания в гл.6. Одно из соображений, с которым подпрограммы системы BIOS должны считаться, это возможное уменьшение числа случаев, когда прерывание блокируется. Важно не закрыть и даже не сдержать прерывания, поскольку они являются движущей силой, поддерживающей работу компью- тера. Чтобы избежать вмешательства в эту силу, BIOS должна как можно меньше блокировать прерывания. После обработки пре- рывания, которую мы рассмотрели в гл.6, возможность новых прерываний должна быть немедленно восстановлена. Иногда это- го нельзя сделать — необходимо предпринять несколько решаю- щих шагов, блокируя возможность очередного прерывания, но BIOS попытаеться сделать эти периоды возможно более коротки- ми. Поскольку BIOS осуществляет большую часть своей работы в режиме активности прерываний, это означает, что вызовы функций 236
BIOS, инициируемые прерываниями, могут быть активизированы даже тогда, когда BIOS находится в процессе выполнения предыдущей функции. Чтобы избежать путаницы в обработке вы- зова одной функции и от обработки вызова другой функции, про- граммы системы BIOS должны .быть реентерабельными, т.е. с возможностью повторного вызова. В реентерабельных програм- мах (таких как ROM-BIOS) все рабочие данные и рабочая инфор- мация о состоянии, относящиеся к одному вызову, четко отделены от тех же параметров, относящихся к другому вызову. Это дела- ется путем хранения всех данных либо в стеке, либо в регистрах, которые (по соглашению) будут сохранятся в стеке, если произой- дет следующее прерывание. Хотя реализовать реентерабельную программу не слишком сложно, это требует осторожности и договоренности об ограниче- ниях на способы передачи информации между BIOS и другой про- граммой, использующей функции, предоставляемые системой BIOS. Реентерабельность позволяет системе BIOS решать многие подобные проблемы и использовать все вытекающие из этого свойства преимущества. Отдельный, но близкий вопрос — модульная организация фун- кций системы BIOS. Как мы увидим в разд. 17.2, где будет гово- риться о деталях базовых функций BIOS, они организованы в груп- пы. Например, все различные функции для обслуживания дисплея сгруппированы вместе под одним номером прерывания. Эта модульная организация по группам имеет два явных пре- имущества. Во-первых, для программ, которые пользуются функ- циями BIOS, эта особенность помогает легче справиться со слож- ностями функций. Во-вторых, если необходимо модифицировать действие какого-нибудь определенного вида функций BIOS (на- пример, модифицировать видеофункции для поддержки нового дисплейного адаптера, такого как Усовершенствованный графиче- ский адаптер), то это может быть сделано сравнительно просто - заменой одной из программ обработки прерывания. Существует одна трудность, с которой не очень хорошо спра- вились в ROM-BIOS, — проблемы, связанные с особенностями различных моделей IBM PC (особенно наиболее экзотических, та- ких как PCjr, PC-АТ и 3270-РС), а также связанные с различными конфигурациями IBM PC (такими как, например, возможность ис- пользования комбинации дисплейных адаптеров). Каждая базовая модель семейства IBM PC имеет свой собственный вариант систе- мы функций ROM-BIOS. Однако нет простого, ясного и надежного способа для нас как пользователей IBM PC, или для наших про- грамм, как программного обеспечения IBM PC, проспосабливаться ко множеству возможных вариантов системы BIOS, которые сопут- ствуют всем этим моделям и оборудованию. Дело осложняется еще и тем фактом, что IBM держит в тайне генеральный план будущих дополнений к семейству IBM PC — и 237
то, что они создадут в будущем, потребует большой и продолжи- тельной работы со стороны программистов. Собственные Техниче- ские руководства IBM для различных моделей семейства добавля- ют путаницу, так как каждое написано как для уникальной маши- ны. Программист, изучающий одно Техническое руководство, не может сказать, относятся ли функции, описанные в этом пособии, к каждой модели IBM PC или только к данной. Приходится просмат- ривать все справочники для того, чтобы узнать, что между ними общего. Отчасти по этой причине, а отчасти для того, чтобы не уто- нуть в особенностях различных моделей, в этой главе мы опишем только универсальные функции ROM-BIOS. Надо отметить, что большая проблема: рассказать об архитектуре и о работе системы ROM-BIOS, осветив при этом все наиболее важные части. В разд. 17.2 мы опишем все функции ROM-BIOS, универсаль- ные для целого семейства IBM PC, т.е. основной набор функций IBM PC. Это в какой-то мере техническое описание, которое неко- торые читатели захотят пропустить, но существуют два реальных преимущества от его изучения. Во-первых, вы узнаете, какие фун- кции ROM-BIOS дает в распоряжение нашим программам. Это по- может вам понять, как наши программы выполняют работу, и вы- яснить, что ваша собственная программа может получить от этих функций. Во-вторых, список функций BIOS даст вам возможность почувствовать их уровень, — т.е. понять, где они находятся в спектре программного обеспечения. # # #Технические подробности 17.2. Функции BIOS Теперь мы готовы просмотреть список функций системы BIOS семейства IBM PC. Как вы можете видеть из заголовка "Техниче- ские подробности", здесь представлен материал, который читате- ли, заинтересованные только в знакомстве и основных сведениях об IBM PC, могут пропустить. Но это не значит, что то, о чем мы будем здесь говорить, сугубо технические детали или трудно для применения. Функции ROM-BIOS организованы в группы, и каждая группа имеет свое собственное закрепленное за ней прерывание. На рис. 17.1 вы найдете краткую таблицу этих групп. Мы опишем их одну за другой, начиная с самой сложной и самой интересной: с группы видеофункций. Существует 16 отдельных видеофункций в основном наборе функций ROM-BIOS семейства IBM PC. Это довольно большое ко- личество, но даже оно не включает значительных добавлений, ко- торые были сделаны для специализированных моделей (PCjr,АТ) или специальных дисплейных адаптеров, таких как Усовершенство- ванный графический адаптер. Эти 16 функций являются оригиналь- 238
ным набором, используемым в самой первой модели IBM PC, и они представляют основу для видеофункций каждого члена се- мейства IBM PC. Функции пронумерованы от 0 до 15. Мы рас- смотрим весь список так, чтобы вы смогли увидеть непосредст- венно все функции, которые предоставляет BIOS. Первая функция с номером и используется для изменения ви- деорежима. Для компьютеров IBM PC со стандартным Монохром- ным адаптером не существует выбора. Монохромный режим (обозначенный, как мы видели в предыдущих главах, как режим с номером 7) как раз такой. Для компьютеров IBM PC с Цветным графическим адаптером или его эквивалентом существует выбор из 7 режимов: четыре текстовых режима и три графических режи- ма, детально рассмотренных в гл.11. Эта функция используется нашими программами для переключения дисплея в любой нуж- ный режим. Как мы узнаем позже, существует дополнительная функция, которая позволяет нашим программам выяснить, какой режим установлен в текущий момент. Прерывание Группа функций 5 16 17 18 19 20 Печать графической копии экрана Видеофункции Запрос присоединенного оборудования Запрос объема физической памяти Функции управления дисплеем Функции управления последовательным портом (RS-232) 21 Функции управления кассетным магнитофоном 22 23 Функции управления клавиатурой Функции управления параллельным портом (порт принтера) 24 функции обращения к встроенной системе Бейсик-ПЗУ 25 26 Перезапуск системы Запрос/установка текущей даты Рис. 17.1. Таблицы прерываний групп функций ROM-BIOS Видеофункция 1 используется для управления размером и формой курсора. Она определяет строки развертки, на которых появляется курсор, что мы тоже обсуждали в гл.11. Эта функция ROM-BIOS лежит в основе оператора LOCATE,,,X,Y языка Бейсик. Видеофункция 2 устанавливает местонахождение курсора на экране (соответствует оператору LOCATE X,Y языка Бейсик). Видеофункция 3 сообщает нашим программам, где находится 239
курсор, а также форму курсора. Эта функция, обратна функциям 1 и 2, объединенным вместе. Она позволяет нашим программам запомнить текущее положение курсора, чтобы восстановить его впоследствии. Мы увидим пример полезного использования этой функции, когда будем обсуждать функцию "печать-экрана". Видеофункция 4 — единственная функция, поддерживающая мало используемое устройство IBM PC — световое перо. Когда программа обращается к этой функции, BIOS сообщает, "включе- но" ли перо и где оно прикасается к экрану. Интересно, что функ- ция сообщает положение пера двумя различными способами: ме- стонахождение среди символов в текстовом режиме и местона- хождение среди пикселов в графическом режиме, чтобы облег- чить нашим программам интерпретацию любого из положений светового пера. Менее интересен тот факт, что световые перья ни- когда не были популярными для семейства IBM PC. Видеофункция 5 определяет, какая страница дисплея активна (высвечена на экране) для видеорежимов, которые имеют более одной дисплейной страницы в памяти (см. гл. 11 для более под- робных сведений об этом). Видеофункции 6 и 7 — пара функций, выполняющих прокрутку (скроллинг) "окна" на экране и просматривающих данные внутри окна снизу вверх (функция 6) или сверху вниз (функция 7). Когда окно просмотрено полностью снизу (или сверху), вставляются но- вые пустые строки. Цель этих функций — позволить нашим про- граммам удобно выводить информацию только на часть экрана и оставлять нетронутым при этом весь остальной экран. Следующие три видеофункции используются, только чтобы ра- ботать с текстовыми символами на экране. Видеофункция 8 считы- вает текущий символ (и его атрибут) с экрана ( или, вернее, из па- мяти экрана). Эта функция достаточно удобна, чтобы в графиче- ском режиме декодировать рисунок символа (пикселами) в его ASCII код. Видеофункция 9 — явное дополнение к функции 8: она выво- дит символ на экран с тем дисплейным атрибутом, который мы определим. Функция 10 тоже выводит символ, но использует тот дисплей- ный атрибут, который в настоящий момент определен для этой по- зиции экрана. Следующие три функции обеспечивают операции в графиче- ских режимах. Видеофункция 11 устанавливает цветовую палитру. Функция 12 выводит точку на экран, а функция 13 считывает точку с экрана. Видеофункция 14 — удобная разновидность функции вывода символов с номером 8. Эта функция выводит символ на экран и передвигает курсор в следующую позицию на экране. (Другие функции требуют, чтобы наши программы передвигали курсор специальной операцией.) Это удобная функция, которая облегчает 240
нашим программам вывод информации на экран, называтся "те- летайпный вывод". Заключительная функция с номером 15 обратна самой первой. Она сообщает текущий видеорежим, чтобы наши программы мог- ли приспособить свои операцир к этому видеорежиму или запом- нить текущий режим, чтобы можно было вернуться к нему в дальнейшем. Эта функция позволяет программам определять, используется ли Монохромный адаптер или Цветной графический адаптер. Даже те программы, которые сами делают всю работу по выводу данных на экран, пользуются этой функцией для того, чтобы узнать, какой дисплейный адаптер используется и в какие адреса дисплейной памяти необходимо поместить выводимые данные. Все эти читающие и пишущие видеофункции — официально ре- комендуемый способ для вывода информации на экран. В их ис- пользовании есть то преимущество, что вывод данных на экран производится стандартным способом, который может быть авто- матически приспособлен к новой аппаратуре (такой как Усовер- шенствованный графический адаптер и другие новые типы виде- оадаптеров). Но многие программы не пользуются этими функци- ями, просто потому, что с ними связаны очень большие затраты. Экранный вывод данных может быть осуществлен гораздо быст- рее, когда наши программы делают это сами, а не используют эти функции ROM-BIOS. В действительности функций гораздо больше, но остальные специальные и используются для различных моде- лей IBM PC. На этом список основных видеофункций завершается. Следующее, что мы рассмотрим, это совсем особая функция, функция печати копии экрана. Эта функция отличается от всех ос- тальных. Большинство функций ROM-BIOS используются для того, чтобы работать с внешним устройством, таким как дисплей или клавиатура. Оставшиеся функции — в основном информативные, используемые с целью получить время дня или показывающие об'ем памяти, установленный в компьютере. Но эта функция печа- ти копии экрана — особенное явление. Функция печати копии эк- рана считывает содержимое экрана и выводит его на принтер. Мы все знакомы с этой функцией, потому что она легко доступна (для этого необходимо нажать клавишу PRTSC на клавиатуре). Что де- лает эту функцию особенно интересной, так это то, что она полно- стью построена на основе других функций ROM-BIOS и сама по себе ничего уникального не представляет. Она просто объединяет отдельные функции, которые мы уже имеем, чтобы создать но- вую и полезную функцию. Функция печати копии экрана начинает работу, используя видеофункции 3 и 15, чтобы узнать параметры экрана. Она сохраняет положение курсора, чтобы позже восстано- вить его в первоначальном положении, а затем продолжает пере- двигать курсор через каждое положение на экране сверху вниз. Каждый раз она использует видеофункцию 8, чтобы считать сим- 241
вол с экрана, и функцию вывода на принтер, которую мы рас- смотрим позже, чтобы скопировать этот символ на принтер. Когда эта функция выполнена, она восстанавливает курсор там, где он был, а затем возвращает управление программе, которая ее ини- циализировала. И это интересно само по себе. Мы можем подумать, что пе- чать копии экрана происходит в результате нажатия на клавиатуре клавиши PRTSCR. Но это не так! Печать копии экрана — это стан- дартная функция ROM-BIOS, которая может быть использована любой программой так же, как и любая другая функция: с помо- щью команды инициялизации прерывания INT (в нашем случае для прерывания с номером 5). Что заставляет клавишу PRTSC ра- ботать — так это то, что подпрограммы работы с клавиатурой ROM-BIOS определяют, что эта клавиша была нажата. Когда это зафиксировано, ROM-BIOS пользуется прерыванием 5, чтобы вы- полнить функцию печати копии экрана. Любая другая программа могла бы сделать то же самое. Эта функция может быть пред- оставлена в распоряжение любой программе для использования любым удобным способом. Теперь перейдем к другим функциям. Сначала мы просмот- рим функции для работы с другими устройствами, а затем опи- шем информационные. Дисковые функции порождаются прерыванием с номером 19. Существует 6 основных функций соответствующих этому прерыва- нию с номерами от 0 до 5. Первая функция с номером 0 исполь- зуется для перезапуска дисковода и его контроллера. Это функ- ция инициализации и восстановления при ошибках, которая очища- ет область для нового запуска следующей дисковой операции. Близка ей следующая функция, дисковая функция 1, которая со- общает о состоянии дисковода, таким образом, чтобы программы обработки ошибок и управления могли во всем разобраться. Дисковая функция 2 — первая из активных дисковых функций. Она считывает секторы диска в память. Секторы не должны обя- зательно считываться по одному. Эта функция читает столько сек- торов, сколько мы хотим, если они все находятся на одной дорож- ке. Дисковая функция 3 делает обратное: вместо чтения пишет секторы из памяти на диск. Дисковая функция 4 "проверяет" данные, записанные на диск, на правильность записи. Эта функция лежит в основе команды DOS "VERIFY ON". Обычно не понимают, что делает эта функция проверки. Она не проверяет данные, хранящиеся на диске, для того, чтобы убедиться, что они правильно записаны и совпадают с данными из памяти. Вместо этого функция проверки просто сле- дит, чтобы совпал контоль четности, и проверяет другие возмож- ные дефекты записи. Как правило, это убеждает нас в том, что на- ши данные правильные, но это не всегда так. Если мы получим неправильные данные при записи, но они удовлетворяют провер- 242
кам этой функции, то она сообщит, что все в порядке. Дисковая функция 5, последняя из всех, используется для форматирования дорожки диска. Это физическое форматирование, которое лежит в основе логического форматирования DOS диска (смотри прило- жение в гл.9). Функция форматирования определяет для каждой дорожки: сколько будет секторов, какие номера будут им даны, порядок, в котором секторы будут использоваться, и размер каж- дого сектора. Обычно все секторы, расположенные на дорожке, одного размера (512 байтов), они пронумерованы последователь- но, начиная с 1 (на гибких дисках), и физически следуют подряд (на жестких дисках не так). Изменение некоторых из этих стандарт- ных характеристик лежит в основе многих схем защиты (от копи- рования). Даже просто изменение порядка, в котором записаны секторы, может быть использовано для защиты, потому что стан- дартные команды DOS COPY и DISKCOPY не станут копировать не- обычный порядок секторов, а защищенная программа может кон- трцлировать разницу синхронизации и вводить порядок секторов. Функции последовательного порта (RS-232, линия связи) вызы- ваются прерыванием с номером 20. Использование последова- тельного порта достаточно просто — (проще работы с экранами и дисководами) и осуществляется всего четырьмя функциями. Фун- кция с номером 0 инициализирует порт связи, устанавливая основ- ные параметры, о которых мы узнали в гл. 15, скорость передачи и Т-Д. Функция 1 используется для того, чтобы записать байт в порт; функция 2 считывает байт. Функция 3 последняя, используется для получения сообщения состоянии, которое указывает, например, на готовность данных. Далее следует набор функций для интерфейса кассетной лен- ты, характерный только для IBM PC, который используется мало и убран из более поздних моделей семейства. Есть 4 парные функ- ции, активизируемые прерыванием 21. Функции 0 и 1 включают и выключают мотор кассетного магнитофона. Функции 2 и 3 читают и пишут 256-байтовыми блоками данных. Функции клавиатуры активизируются прерыванием 22. Их всего три. Функция 0 читает очередной символ из буфера ввода. Сим- волы передаются в их полной двухбайтовой форме, как мы об- суждали в гл. 14. Когда символ прочитан функцией 0, он удаляется из буфера ввода клавиатуры. Иначе дело обстоит с функцией 1. Функция также считывает символ из буфера клавиатуры, но при этом он не удаляется из буфера. Символ остается в буфере кла- виатуры, пока он не прочитан функцией 0. Последняя функция с номером 2 сообщает биты состояния. Это мы обсуждали в гл. 14 и видели в действии в программе KEY-BITS в приложении А. Хотя эту информацию можно получить непосредственно из памяти, где хранит ее BIOS, функция 2 — стандартный и удобный способ для программы узнать о состоянии клавиатуры. 243
Последние из функций поддержки устройств — это функции для обеспечения работы параллельного порта принтера, использу- ющие прерывание 23. Существует три простые функции: 0 — вы- дает единственный байт принтеру, 1 — инициализирует принтер, а 2 — сообщает состояние принтера. Это завершает обзор функций ROM-BIOS, которые прямо ис- пользуются для поддержки периферийного оборудования ввода- вывода IBM PC. Важно отметить, что есть два других устройства вввода вывода в стандартной конфигурации IBM PC, которые не имеют поддержки в BIOS: динамик и джойстик. Джойстик, как и световое перо, оказался не популярным, и любопытно, что это уст- ройство и динамик не имеют поддержки от функций BIOS. Оставшаяся коллекция функций BIOS используется для управ- ления информацией или для выполнения серьезных изменений в IBM PC. Прерывание с номером 17 необходимо для получения офици- альной (а теперь довольно устарелой) информации о списке обо- рудования. Список оборудования был разработан для конфигура- ции оригинальной модели IBM PC и не расширялся для включения нового оборудования, которое добавлялось к семейству, в основ- ном, я думаю, из-за того, что это не казалось необходимым. В списке оборудования сообщается, сколько дисководов имеет ма- шина (0-4), но ничего не говорится о жестких или других типах ди- сков. В нем указано число параллельных (до трех) и последова- тельных (до двух) портов, отмечено наличие игрового адаптера, но ничего не говорится об использовании светового пера. (Это смеш- но, поскольку существуют функции BIOS для светового пера и от- сутствуют для игрового адаптера). Функция, выдающая список оборудования, сообщает об об'еме памяти, которым обладает компьютер. Формально, это делается с помощью прерывания с номером 28. Объем памяти сообщается в килобайтах. Последние из чисто информационных функций — это функции для определения времени дня, использующие прерывание с но- мером 26. Существуют две такие функции: 0 — для считывания текущего времени и 1 — для установки времени в часах. Время хранится в виде длинного 4-байтового целого числа. Аппаратные часы IBM PC "идут", генерируя прерывание 18.2 раза/с, а после обработки этого прерывания к времени добавля- ется один квант. Отсчет времени начинается от полуночи. Компью- терные часы показывают правильное время только в том случае, если они были предварительно правильно установлены, например с помощью команды TIME операционной системы DOS. Либо ход часов поддерживается аппаратно, как, например, в моделе АТ. Когда мы включаем компьютер, часы начинают отсчитывать время с нуля, как если бы это была полночь, пока каким-либо образом не будет установлен правильный отсчет времени. DOS переводит отсчет часов компьютера во время дня в часах, минутах, секундах 244 и сотых долях секунд. Подпрограммы BIOS, которые используют текущее время, проверяют, чтобы оно не превышало 24 часов. После того как этот рубеж пройден, часы снова устанавливаются в О и выдается сигнал "полночь". В следующий раз, когда DOS об- ратится за временем к BIOS, будет получен этот сигнал "полночь", и текущая дата исправлена. ' И наконец, две довольно интересные и необычные функции прерывания BIOS.Они используются для передачи управления в каждую из двух специальных подпрограмм, встроенных в BIOS. Одна — это ROM-Бейсик (то, что в IBM называется "Кассетный BASIC"), а другая — подпрограмма начальной загрузки. (Имейте в виду, между прочим, что только оригинальные модели семейства IBM PC обладают встроенным Бейсиком; другие члены семейства, такие как компьютеры фирмы Compaq, его не имеют.) Существует два простых пути активизации этих специальных подпрограмм. Во-первых, можно перезагрузить машину, нажимая комбинацию клавиш Ctrl-Alt-Del. Мы попадем в ROM-Бейсик, ес- ли попытаемся загрузиться не вставив магнитный диск в дисковод. Но можно, конечно, активизировать любую из этих подпрограмм, просто выполнив соответствующие прерывания. Существует осо- бенность в работе этих подпрограмм в отличие от других. Эти подпрограммы не возвращают управление программе, которая их активизировала. Они подобны "улице с односторонним движени- ем". Управление попадая в эти подпрограммы, никогда не воз- вращается программе, которая их вызвала. На этом завершается обзор ROM-BIOS, самого низкого уровня программной поддержки IBM PC. Теперь мы готовы двигаться дальше к следующему базовому уровню программного обеспе- чения, к самой DOS. Мы посвятим следующие три главы изучению DOS. ### Задание 1. Каков будет эффект от объединения всех функций ROM-BIOS под одним прерыванием? Или, наоборот, от выделения каждой функции своего собствен- ного отдельного прерывания? 2. Можете ли вы объяснить, по каким причинам начальный загрузчик и встро- енная программа ROM-Бейсик могут быть инициированы прерываниями? Как вы думаете, причина в том, чтобы сделать их доступными для использования лю- бой программой, или в том, чтобы использовать их в собственных системных программах IBM? 3. В конце разд. 17.1 я отметил, что одна из причин изучения функций BIOS в том, чтобы понять их уровень. Подумайте, как этот уровень мог бы усложниться или упроститься. Возьмите пример одной из функций и посмотрите, как бы вы могли изменить ее определение, чтобы оно стало более простым или более сложным. Проанализируйте видеофункции и определите сложность их уровня. 245
г Глава 18 РОЛЬ DOS В этой главе мы начинием путешествие по DOS, последней ос- новной части IBM PC, которую нам еще осталось изучить. В следу- щих двух главах рассказано, как DOS может быть использована нашими программами или непосредственно. Но прежде чем на- чать нам нужно познакомиться с некоторой первоначальной информацией о DOS, этому и посвящена эта глава. Мы начнем с назначения операционной системы. Затем проследим историю, ко- торая повлияла на "характер" DOS, и узнаем идеи лежащие в ос- нове ее разработки. Затем увидим, как DOS устроена и как может быть расширена с помощью внутренних (драйверы устройств) и внешними (командные процессоры) средств. 18.1 Общие сведения о DOS DOS, которую мы используем на наших IBM PC — это всего один пример из класса компьютерных программ, известных как супервизоры, управляющие программы или операционные систе- мы. Операционные системы, подобные DOS, вероятно наиболее сложные и запутанные компьютерные программы, из всех созда- ваемых для машин программ. Задача операционной системы со- стоит в планировании и распределении операций при работе компьютера. Надо отдать должное мощи и гибкости компьютеров за то, что они способны не только производить вычисления, но и брать на себя сложную работу по наблюдению за своими собственными операциями. Интересно, что эти наиболее сложные программы созданы не для того, чтобы справляться с работой, которую надо сделать для нас, а для того, чтобы заботиться о работе самого компьютера. Компьютеры — это наиболее мощный инструмент из всех, которые когда-либо создавал человек. Мощность их такова, что нам чрезвычайно сложно пользоваться ими напрямую. Мы ис- пользуем посредничество операционной системы , чтобы управ- лять компьютером. Мы даем нашим компьютерам довольно се- рьезное задание по управлению самим собой, так чтобы нам не пришлось заботиться об огромных проблемах, возникающих при его работе. Когда мы говорили о прерываниях в гл.6, то лишь бегло броси- ли взгляд на сложные задачи управления. Любая физическая часть компьютерного оборудования требует определенного уп- равления, а некоторые и весьма серьезного. Например, часы IBM PC, используемые для слежения за временем дня, требуют обра- 246 ботки ро прерыванию 18 раз/с. Клавиатура, как мы видели в гл. 14, требует реакции каждый раз, когда нажимается клавиша, и повторно, когда клавиша отпускается. Когда я печатаю слово "кла- виатура", я заставляю компьютер прерываться 20 раз для того, чтобы обработать мои нажатия клавиш. Огромная дополнительная работа проделывается для того, чтобы нажатия клавиши были за- помнены. Задача синхронизации, координации и управления огромной массой событий, которые происходят внутри компьютеров, падает на операционную систему. Так что же делает наша операционная система DOS? В сущно- сти, она выполняет три операции: управляет устройствами, управ- ляет программами и выполняет команды. Работа DOS по управлению устройствами — принтером, диска- ми, дисплеем, клавиатурой и т.д. — включает все, что необходи- мо для правильного функционирования этих компонент компью- тера. На самом низком уровне это означает выдавать команды ус- тройствам и следить за любыми ошибками, о которых они сообща- ют. Это в точности аналогично работе, которую выполняет система ROM-BIOS IBM PC. В самом широком смысле любая операцион- ная система, которая работает в наших IBM PC, использует ROM- BIOS как один из своих ключевых компонентов. На более высоком уровне операционная система играет организующую роль для уст- ройств компьютера. Это особенно очевидно для дисков. Ключе- вая, даже доминирующая часть работы операционной системы со- стоит в организации записи данных на наши диски: распределение дискового пространства, эффективное хранение данных и их быст- рый и надежный поиск. Вторая обширная работа, которую проделывает DOS, это уп- равление программами. Она включает загрузку программ с дис- ка, их выполнение, а также предоставление в распоряжение этих программ специальных функций (что мы обсудим в гл. 20). В бо- лее сложных компьютерных системах, чем наше семейство IBM PC, управление программами, осуществляемое операционной сис- темой, включает операции, которые невозможны на наших маши- нах. Например, такие как установка ограничений на то, какие части оперативной и дисковой памяти доступны для программы. Из-за относительной простоты наших IBM PC каждая прэграмма имеет доступ к любой части памяти и ко всей дисковой памяти, а на больших компьютерах это невозможно, и одна из задач управле- ния на таких компьютерах — управление распределением ресур- сов. Третья основная работа DOS — это выполнение команд т.е. прямое взаимодействие DOS с нами, пользователями компьютера. Каждый раз, когда мы что-то печатаем в ответ на приглашение к вводу, мы работаем с процессором команд DOS. Наши команды операционной системы в сущности все являются указаниями на 247
выполнение программ. В более сложных операционных системах наши команды могут, кроме этого, управлять работой самой опе- рационной системы. Каким бы ни был диапазон команд, выполня- емых операционной системой, ее основная задача — принимать и выполнять команды пользователя. Это суть любой операционной системы и нашей DOS в частности. Сейчас же мы обратимся к ис- тории возникновения DOS и поговорим о некоторых идеях, лежа- щих в основе ее работы. 18.2. История и концепция DOS История возникновения нашей DOS начинается с ранних вариан- тов операционных систем, которые использовались с предшеству- ющим нашему IBM PC поколением персональных компьютеров. IBM PC проектировался и создавался в то время, когда персо- нальные компьютеры использовали 8-разрядный микропроцессор и основная операционная система для тех машин называлась СР/М (Control Program/Microcomputer) или программа управляю- щая микрокомпьютером. Даже при разработке персонального компьютера, основанного на 16-разрядном микропроцессоре, фирма IBM ориентировалась на уже зарекомендовавшую себя и популярную среди пользователей операционную систему СР/М. Несмотря на то, что IBM PC должен был удовлетворять совершен- но другим целям и программы, написанные для 8-разрядной опе- рационной системы СР/М, непосредственно не могли быть на нем выполнены, операционная система для этого компьютера, во многом сходная с СР/М, существенно облегчила бы адаптацию к новой машине уже существующих программ. Вероятно, фирма IBM намеревалась использовать модернизи- рованный вариант СР/М для своего 16-разрядного компьютера как основную операционную систему. Эта операционная система получила название СР/М-86. Правда, эти ожидания не оправда- лись. В следующем разделе опишем один из вариантов истории, почему этого не произошло. По определенным причинам фирма IBM решила не концентрировать усилия на разработке варианта операционной системы СР/М, а использовать новую, специально созданную для этого компьютера фирмой Microsoft. Этой опера- ционной системой и была DOS. Конец господства СР/М Существует интересная история, в которой делается попытка объяснить, по- чему IBM PC появился со своей собственной операционной системой DOS, а не с 16-разрядной версией уже существующей и популярной системы СР/М. Прав- да это или нет, но существует такая легенда. Рассказывают, что, когда фирма IBM пришла покупать СР/М, Гарри Килдалл, человек, который создал СР/М, намеренно заставил ждать представителей IBM, которые кипели от злости пока, он часами летал на своем самолете над их го- 248
ловами. Говорят, Килдалл "оставил фирму IBM "с носом" как клиента, в то вре- мя как Билл Гейтс, глава фирмы Microsoft, буквально стелился перед IBM, как красный ковер. Гейтс на встречах с IBM надевал свои деловые костюмы, кото- рые обычно носил редко, чтобы продемонстрировать, что он серьезно относит- ся к их взаимным контактам. В 8-битовом компьютерном мире компания Гейтса Microsoft доминировала в создании трансляторов с языков программирования, а компания Кипдалла Digital Research — в операционный системах. IBM была готова так это и оставить, пла- нируя использовать каждую из них по ее специализации. Но с Килдаллом ока- залось трудно наладить контакт даже после того, как IBM заставила Гейтса по- просить от их лица Кипдалла о сотрудничестве. В конце концов фирма IBM обратилась к фирме Microsoft и за операцион- ной системой так же, как и за трансляторами языков программирования, и фир- ме Microsoft пришлось очень быстро согласиться. Microsoft выполнила заказ, вы- брав существующую, но малоизвестную операционную систему, похожую на СР/М, и навела лоск на нее, чтобы удовлетворить требованиям IBM. Эта опера- ционная система стала той DOS, с которой сейчас работает почти каждый поль- зователь IBM PC. С появлением операционной системы DOS фирмы Microsoft для семейства IBM PC дела СР/М пошли плохо. Полет Гарри Кипдалла привел к краху его опе- рационной системы, для 16-разрядных персональных компьютеров. Несмотря на то, что DOS была предпочтительной с самого на- чала, она была не единственной операционной системой, которую использовала фирма IBM в IBM PC. Две другие операционные си- стемы, имеющие своих сторонников, были также внедрены и по- лучили официальную поддержку IBM: СР/М-86, которую мы уже упоминали и UCSD p-System, — операционная система, ориентиро- ванная на требования языка программирования Pascal. Однако никто не хочет пользоваться более чем одной операционной сис- темой, поскольку очень неудобно переключаться с одной на дру- гую и почти невозможно делить данные и программы между опе- рационными системами. По практическим соображениям мог быть только один победитель в борьбе операционнных систем за паль- му первенства, и этим победителем стала DOS. Несмотря на то, что DOS была соперником СР/М для IBM PC — и соперником, который победил, — возможности и действие DOS были основаны на реализованных в СР/М идеях. Система DOS в первом своем варианте имела большое влияние СР/М по одной причине: сде- лать как можно более удобным для пользователей компьютера, знакомых с СР/М, обучение использованию DOS и упростить су- ществующим 8-биточым программам СР/М адаптацию к IBM PC. Влияние СР/М ощущается с первых шагов работы с операцион- ной системой DOS, когда на экране появляется приглашение к вводу в виде А>. СР/М оказывает влияние на DOS не только в виде приглашения к вводу команд и других деталях, но даже в стиле работы с нами и нашими программами. Тогда как опытный глаз сможет уловить аналогию в DOS и ее предшественнице СР/М, она остается довольно скрытой в силу то- го, что похожи лишь используемые идеи. Главная из них — это на- значение и использование DOS. Эти операционные системы созда- вались на основе довольно простой концепции персональных вы- числений. Эта концепция предполагала, что компьютер ислользу- 249
ется одним человеком, который выполняет в каждый момент вре- мени лишь одну какую-то работу (например, не печатает доку- мент на принтере, в то время как компьютер выполняет какие-то вычисления, короче говоря, не делает две работы одновременно). DOS была предназначена для работы одного пользователя и с единственным заданием. Естественно, что DOS была создана именно так, поскольку она выросла из операционной системы се- мейства 8-битовых машин, которые не были приспособлены к то- му, чтобы предпринимать что-либо более серьезно. Однако наше семейство IBM PC было создано для далеко иду- щих целей, и ограничения СР/М могли бы сильно ограничить спо- собность DOS развиваться вместе с развитием IBM PC. С другой стороны, существовала операционная система, называемая UNIX, которой повсеместно восхищались за ее широкие возможности, и фирма Microsoft, создатель DOS, имела большой опыт в работе с системой UNIX при создании XENIX, вариант UNIX для IBM PC. Ког- да пришло время делать крупную ревизию возможностей и внут- ренней структуры DOS, многие концепции UNIX/XENIX были до- бавлены в DOS. Результатом стали версия DOS 2.0 и все последу- ющие версии, которые появились с тех пор. Влияние UNIX видно каждому пользователю DOS при организации каталогов для размещения информации на дисках. Это просматривается еще лучше во внутренней структуре DOS и функциях, которые DOS предоставляет нашим программам. Мы увидим очень важный пример этого в гл. 20, когда рассмотрим два способа, которые DOS предоставляет нашим программам для работы с файлами: старый метод СР/М и новый метод UNIX. Система DOS, которую мы знаем и используем сегодня, - это комбинация стилей и особенностей операционных систем СР/М и UNIX. Хотя DOS содержит многие из обширных и далеко идущих признаков UNIX, она все же страдает от ограничений ее ранней версии. Поскольку изначально DOS дала каждой программе, кото- рую мы выполняем, возможность полностью управлять компьюте- ром и всей оперативной памятью, то более поздним вариантам DOS трудно следовать этим ограничениям для реализации режи- ма одновременного активного выполнения двух программ. DOS смогла выйти далеко за пределы того, чем она была в первые го- ды своего существования, и все же она чувствует сдерживающее влияние своего начального периода. В разд. 18.4 мы увидим некоторые попытки преодолеть эти ограничения, но прежде всего нам надо понять, как DOS стала гибким инструментом. 250
18.3. Драйверы внешних устройств В своих ранних версиях DOS была жестко определенной, при этом фиксировались йЬе устройства, дисковые форматы и прочее, с чем она могла работать. Это была версия DOS с номером 1, версия, которая была основана исключительно на идеях СР/М. Этот вариант DOS был не в состоянии приспособиться к меняю- щейся конфигурации IBM PC, подключить новые устройства, ис- пользовать новые дисковые форматы. Но с расширением семейства IBM PC стало важно иметь воз- можность приспосабливать DOS к определенным потребностям каждого компьютера и пользователя, а также стало важным иметь возможность заставить DOS использовать новые периферийные устройства, в особенности множество различных видов дисков, ко- торые использовались в IBM PC. Часть основных изменений была сделана во второй версии DOS, версии 2.0, которая включила мно- гие концепции UNIX. DOS стала более приспосабливаемой с вве- дением файла конфигурации. Файл конфигурации — это ключ к гибкости и приспосабливае- мое™ DOS. Когда DOS начинает свою работу, она в первую оче- редь ищет файл на стартовом диске с названием CONFIG.SYS. Ес- ли этот файл найден, то считываются и выполняются команды ко- торые определяют, с каким устройством и как DOS должна рабо- тать. Вы можете увидеть пример файла конфигурации на рис. 18.1; это реальный CONFIG.SYS, используемый на моем собствен- ном компьютере. BREAK = ON BUFFERS = 64 FILES = 20 LASTDRIVE = E COUNTRY = 001 DEVICE = MOUSE.SYS DEVICE = ANSI.SYS DEVICE = VDISK.SYS Рис. 18.1. Файл конфигурации Существуют два типа команд, с помощью которых DOS может быть переконфигурирована. Я отметил их, поделив собственный файл CONFIG.SYS, на две части, как вы видите на рис. 18.1. Пер- вая часть изменяет параметры, уже известные DOS. Например, вторая строка на рис. 18.1 говорит DOS, сколько использовать сек- торных буферов. Выбор числа дисковых буферов определяется простым правилом: чем больше буферов, тем менее часто DOS придется ждать информации, которую надо считать с диска, но 251
1 тем меньше памяти будет использоваться нашими программами. По умолчанию DOS будет использовать постоянное число диско- вых буферов: два или три. После нескольких экспериментов я об- наружил, что мой компьютер работал гораздо лучше, когда я за- дал для DOS больше буферов: 64. Это отличный пример гибкости средств, предназначенных для DOS. Можно управлять и некото- рыми другими параметрами. Другая часть файла конфигурации DOS включает описание про- граммного обеспечения, которое подключается к DOS. Это про- граммное обеспечение называется устанавливаемыми драйверами устройств. DOS может включить в себя, и вполне естественно, поддержку программ, обеспечивающих работу стандартных типов периферийных устройств, которые использует семейство IBM PC. Но мы можем захотеть добавить другие, более экзотические ком- поненты к DOS, и г то позволяют нам сделать устанавливаемые драйверы устройств. Такие драйверы представляют собой программы, расширяю- щие возможности DOS в работе с внешними устройствами компь- ютера. Самим драйверам устройств предписано следовать строго- му набору указаний, позволяющих им работать в тесном сотруд- ничестве с DOS, не нарушая ее работы. Вы видите три примера подключения драйверов на рис. 18.1. Они обозначены строками, на которых написано DEVICE = , Для каждой из этих команд DOS находит имя файла, которое дано в команде DEVICE = и добавля- ет программу, хранящуюся там, в DOS. Вы увидите, что у меня их три. Две добавляются как необязательные части, которые допол- няют DOS: драйвер ANSI.SYS, обеспечивающий особое управление экраном и клавиатурой, и драйвер VDISK.SYS, создающий "вирту- альный" или RAM диск в определенной части оперативной памяти. Третий драйвер, который Вы видите в моем файле конфигурации, MOUSE.SYS, используется для поддержки действительно нового для моего компьютера устройства — манипулятора типа "мышь". Драйвер манипулятора "мышь” — это классический пример, по- зволяющего работать с аппаратурой, не запроектированной для базовой конфигурации DOS. Для каких бы целей не использовались устанавливаемые драй- веры, они обеспечивают нам способ модифицировать и расширять возможности DOS в рамках базовой конфигурации. Однако су- ществуют и другие способы, с помощью которых DOS может быть расширена или изменена. 18.4. Визуальные командные процессоры DOS содержит характеристики, определяющие внешность — своего рода лицо, которое она представляет пользователю. Как 252 мы знаем из опыта работы с DOS, ее интерфейс с пользователем базируется на простом приглашении к вводу команд в виде А> и на способе их ввода, заключающемся в том, что они печатаются на клавиатуре. Мы также знаем, что одновременно DOS способна выполнять для нас только cfauy команду (программу). DOS не да- ет нам возможности проделывать больше одной операции одно- временно (кроме некоторых простых исключений, таких как ко- манда PRINT, которая будет работать одновременно с другими программами) или приостанавливать программу в середине опе- рации (в сущности приостановить выполнение, пока выполняется другая программа, а затем возобновить свое выполнение). Однако тот факт, что DOS не обеспечивает нас этими возмож- ностями, не означает, что они не нужны или не могут быть реали- зованы. Много талантливых людей при разработке IBM PC стара- лись создать программы, которые расширяют возможности DOS. Мы можем изменить действие DOS, используя любую про- грамму из класса, который обычно называется классом визуаль- ных командных процессоров (хотя это характеризует только одну сторону осуществляемых этим классом программ действий). Визуальные командные процессоры — это программы, кото- рые по сути дела надстраиваются над DOS и обеспечивают те или иные действия, которые она не может выполнить. Существует большое число функций, которые такая программа может выпол- нить, но из числа пользующихся наибольшим вниманием выделя- ’ ются две из них. Одна — это обеспечение более привлекательной и полезной "внешности", более удобный ввод и выполнение ко- манды. Другая — это мультипрограммирование, позволяющее нам выполнять одновременно более чем одну программу. Лучшими из рекламируемых программ этого типа были про- граммы IBM TOP View и Microsoft's Windows. Я кратко расскажу о них, чтобы дать вам представление о том, почему этому виду программ уделяется так много внимания, а также почему появил- ся целый класс командных процессоров. Одной из причин того, почему к идее визуальных командных процессоров был такой большой интерес, является то, что командный интерфейс DOS ока- зался слишком бедным. Чтобы выполнять программу в DOS, мы должны помнить название программы и напечатать его, задав и другие необходимые параметры. Визуальные командные процес- соры, такие как Top View и Windows, способны показать нам спи- сок всех команд, которые мы можем использовать, позволяют нам просто выбирать из списка команды и выполнять их без необ- ходимости печатать название команды. Пользуясь клавишами уп- равления курсором или "мышью", мы можем указывать на ко- манду, которую надо выполнить, и запустить ее одним нажатием клавиши "Enter" (вход) или кнопки "мыши". Командный интерфейс может быть обогащен от вербального к визуальному, заменой имен команд на экране рисунками, называ- 253
РаММа*И .(:COnS) и илпюстРирующими функцию, вы- "°™ ую команд°и- Некоторые из наиболее популярных про- грамм визуальных командных процессоров работают именно так. но более простой и привлекательный ввод команд не являет- ся главной причиной популярности визуальных командных про- цессоров. Не менее важна возможность некоторых из них рабо- тать одновременно с более чем одной программой. Это может оыть сделано многими способами, каждый из которых имеет свои уникальные технические преимущества. Некоторые действительно поддерживают одновременно выполнение нескольких программ, как это делает Top View, тогда как другие требуют, чтобы одна программа была приостановлена, пока выполняются другие зада- ния, а затем возобновлена именно с этого места, не начиная вы- полняться заново.. Хотя и наблюдался большой интерес к разнообразию приемов применяемых программами, чтобы обойти многие ограничения присущие самой DOS, мне кажется, что время для активного ис- пользования этих программ еще не пришло. Основная причина в том, что главный микропроцессор IBM PC (8088) не обеспечивает средств для защиты DOS от прерываний прикладными программа- огАРУГоп->оТ/°РОНЫ' более М°ЩНЬ1Й микропроцессор семейства юм НС — 8U286, который используется в модели АТ, имеет аппа- ратные средства защиты, позволяющие таким программам, как lop View, выполнять любое количество программ так, что бы ни одна из них не мешала другой. Пока не появились командные ХГ°РЫ' использУюи4ие особенности защиты микропроцессора 80286, я не ожидаю, что эти программы или любые подобные рас- ширения, которые могут быть добавлены в DOS, будут широко распространены в семействе IBM PC. Со временем, однако, мы можем ожидать, что подобные расширения станут обычным окру- жением операционной системы DOS, с которой мы все работаем. Задания н.т?еГ»7«е^ГгП„а^'г(1МИК?О1?₽ОЧеССОр 18М РС <8088> нв можвт надежно еыпоп- "”\'р®много пР°гРа“м? Как может такая программа, как Top View, пытаться преодолеть некоторые из этих проблем? 2г Если бы вы разрабатывали "визуальный командный процессор" для DOS новый способ удобного ввода и выполнения команд для пользователя IBM PC* как бы вы его сконструировали? Выработайте свой подход и определите, на ка- кие компромиссы вам придется пойти, чтобы преодолеть возникшие трудности. V Глава 19 РАБОТА С DOS После путешествия в историю появления DOS в гл. 18 мы готовы приступить к изучению ее функций. В этой главе мы узнаем, что делает DOS при взаимодействии с пользователем (в гл.20 мы уви- дим, что DOS делает для наших программ, обеспечивая выполне- ние функций, которые могут использовать наши программы). Мы начнем с того, что рассмотрим, как работает командный процессор DOS. 19.1. Выполнение команд Из всех работ, выполняемых DOS при управлении IBM PC, вы- деляется работа по выполнению команд, состоящая в приеме и исполнении команд, вводимых пользователем. Эту работу выпол- няет один из компонентов DOS, расположенных в файле с именем COMMAND.COM. Этот файл единственный доступный компонент DOS (его имя высвечивается на экране при выполнении команды просмотра каталога файлов). Именно COMMAND.COM выдает приглашение к вводу коман- ды, которое мы привыкли видеть и которое обычно появляется в виде А>. (Для пользователей жестких дисков это обычно С>.) Когда мы видим приглашение к вводу команды, DOS (или, точнее, командный процессор COMMAND.COM) ждет, чтобы мы ввели команду для исполнения. Что представляет из себя команда? Это., в действительности не что иное, как приказ выполнить программу. Команда, которую мы вводим, — первое слово, которое мы печатаем, — это просто имя программы, которую DOS должна выполнить. Например, если мы вводим команду FORMAT А : /S /V, то это нечто иное, как при- каз DOS найти программу под названием FORMAT и выполнить ее Все остальное, что мы печатаем в строке после имени коман- ды (в данном случае A: /S /V) просто параметры для програм- мы, говорящие ей, что делать. Эти параметры, которые мы ввели, DOS просто передает в программу. Командный процессор не обращает на них никакого ^Программы, которые может выполнять для нас командный процессор, делятся на четыре категории. Важно, чтобы мы пони- мали, что они собой представляют и как работают, потому что эф- фективное использование компьютера в большой степени основы- вается на этом понимании. Четыре категории команд составляют: внутренние команды и три вида внешних команд: программы, 255 254
расположенные в файлах с расширениями ,СОМ, и .EXE, и коман дные файлы с типом .ВАТ. В основном наши программы хранятся на дискете или диске в виде отдельных файлов и содержат команды, выполняемые DOS. Однако не все команды, которые выполняет для нас DOS, нахо- дятся в своих собственных дисковых файлах. Командный процес- сор COMMAND.COM включает в себя некоторые из наиболее важных и часто используемых командных программ, так что нет необходимости загружать программный файл с диска для того, чтобы выполнить эти команды. Эти команды называются внутренн- ими, потому что программы, которые реализуют их работу, нахо- дятся внутри самого COMMAND.COM. Список внутренних команд меняется от одной версии DOS к другой. Вот список наиболее часто употребляемых внутренних ко- манд: SLS' COPY' DATE' del/erase, DIR, REN/RENAME, TIME и TYPE и более экзотических: BREAK, CD/CHDIR, ECHO, MD/MKDIR PROMPT, RD/RMDIR, SET, VER, VERIFY и VOL. Командный процессор содержит внутри таблицу этих внутрен- них команд и программный код для их выполнения. Когда мы да- ем команду DOS, первое, что делает COMMAND.COM, - это смот- рит название команды в своей таблице, чтобы распознать внутрен- нюю команду. Если оно там есть, то COMMAND.COM может вы- полнить команду немедленно. Если нет, то COMMAND.COM дол- жен найти на наших дисках файл, который содержит программу, реализующую внешнюю команду. Командный процессор определяет файлы, которые содержат внешние команды по двум признакам: во-первых, имя дискового файла совпадает с именем команды; во-вторых, расширение име- ни файла должно быть одним из трех типов : .COM, .EXE или ко- мандный файл .ВАТ. Поскольку имя программного файла определяет имя команды, которая будет выполняться, мы имеем большую свободу в выбо- ре имен для наших команд. Это можно сделать, просто переиме- новывая файлы (сохраняя обязательно при этом имя расширения и изменяя частью имени файла) или создавая другой экземпляр ко- мандного файла под другим именем так, чтобы эта команда была доступна для нас под другим именем, которое мы хотим ей дать. Я делаю это все время и нахожу, что это один из самых удобных приемов DOS. Я использую его в основном для сокращения имен команд, которыми я чаще всего пользуюсь. Например, я могу вы- звать редактор текстов, с помощью которого я написал эту книгу, либо по его обычному имени — WORD, либо по имени, состоя- щему из одной буквы — W. Мы можем это делать с любой из внешних команд, которые у нас есть, просто потому что внешние команды имеют имена, сов- падающие с именами реализующих их программ. Мы не можем этого сделать, однако, с внутренними командами командного про- 256 цессора (если только мы не проделаем радикальную операцию с таблицей командных имен внутри COMMAND.COM). Из трех типов внешних команд два — файлы .СОМ и .EXE — аналогичны, а третий тиру файла .ВАТ имеет специальное назначе- ние. файлы с расширением .СОМ и .EXE — обычные программ- ные файлы, которые командный процессор загружает и выполня- ет для нас. С точки зрения пользователя, который выполняет программы через командный процессор, различия между программными файлами с типами .СОМ и .EXE нет, но нам все же интересно знать, чем они различаются. Основное различие в том, что файлы .СОМ имеют простой, быстрозагружающийся формат, тогда как файлы .EXE более сложны для загрузки в память. Файл типа .СОМ часто называют файлом "загрузочного модуля". Это означа- ет, что на диске хранится точный образ программы, загруженной и исполняемой в оперативной памяти компьютера. Файл типа .СОМ не требует дальнейшей обработки или преобразования системой DOS для своего выполнения. Вы можете подумать, что все программные файлы таковы, но это не так. Многие программы требуют небольшой подготовки, прежде чем они смогут начать работу. Суть этой подготовки со- стоит в выяснении адреса оперативной памяти, начиная с которого программа будет располагаться, т.е. того, что не может быть из- вестно заранее. Обычно разные части программы тесно взаимо- связаны. Отдельные выполняемые операции знают, где находится каждая из них, а программа знает расположение в памяти всех данных, которые поступают с ней. При этом любая программа мо- жет знать относительное месторасположение своих частей, но ни одна программа не может знать заранее абсолютные адреса па- мяти, где будут находиться эти части. Между прочим, то, куда программа загружается в память, зависит от объема памяти, ис- пользуемой DOS и резидентными программами (такими как Sidekick или Prokey). Программа может автоматически самонастраиваться, чтобы приспособиться к тому, куда она окажется помещенной в памяти. И это в точности то, что делают программы типа .СОМ. Используя сегментные регистры и соглашения о связях, программы типа •СОМ не нуждаются в приспособлении к тому месту, где они рас- положены а памяти. Но не все программы способны работать та- ким образом. При нормальных обстоятельствах файл типа .СОМ не может превышать 64К, а этого часто недостаточно для того, чтобы разместить сложные программы. Поэтому существует фор- мат .EXE для того, чтобы управлять программами, которые не мо- гут быть прямо загружены, а требуют специальной настройки. Когда DOS загружает программу типа .EXE в память, она про- ходит предварительную обработку, которая нужна, чтобы подгото- вить программу к выполнению. Основной частью этой подготовки 257 9 - 6472
является определение адреса памяти, начиная с которого про- грамма загружается, и тех частей программы, которым нужна эта информация. Для того чтобы это сделать, в файлы формата .EXE включается таблица, в которой отмечено, какие части программы должны быть изменены и как это должно быть сделано. Это не единственная работа, которая должна быть проделана для про- грамм типа .EXE. Например, необходимо установить начало стека для программы (программы типа СОМ сами заботятся об этом). Существует разница и в способе загрузки программ типа .СОМ и .EXE, а также в способе их записи. Также существуют различия при создании этих программ (как мы увидим в описании в гл. 21). Все это, однако, технические подробности, которые касаются раз- работчиков программ. С точки зрения пользователя компьютера нет различия между программами типа .СОМ и .EXE. Когда DOS выполняет программу, интерпретатор команд нахо- дит файл с этой программой на диске, загружает ее в память, а затем передает управление этой программе. Когда выполнение этой программы закончено, она передает управление назад в DOS и DOS снова активизирует командный процессор COMMAND.COM. В то время как основные части DOS постоянно находятся в начале оперативной памяти, большая часть интерпретатора команд распо- лагается в области памяти, которую программам пользователей разрешено использовать для данных. Это дает возможность не держать интерпретатор команд постоянно в памяти. Если про- грамме надо использовать память, в которой находится интерпре- татор, она делает это так, как будто эта память свободна (даже не зная о том, что там располагался интерпретатор команд). Когда программа оканчивается и передает управление снова DOS, DOS проверяет, не был ли затерт интерпретатор команд. Если не был, то DOS просто начинает использовать его снова; если был, то DOS загружает новую копию с диска. Вот почему для компьютеров IBM PC, которые не имеют жесткого диска, мы иногда должны иметь копию файла COMMAND.COM на наших рабочих дискетах, кроме копии, находящейся на системной дискете DOS. Это суть того, как DOS выполняет собственные внутренние ко- манды и команды, реализуемые программами типа .СОМ или .EXE, хранящимися на диске. Но есть еще один тип команд, кото- рые может выполнять для нас DOS, — это команды, реализуемые командными файлами. Они будут рассмотрены в разд. 19.2. 19.2. Выполнение командных файлов Командные файлы представляют собой мощное средство для расширения возможности DOS при выполнении команд. Они являются последней из четырех категорий команд, которые, как я сказал, выполняет для нас DOS. Но, строго го- воря, командные файлы не являются особым видом программ. Командные фай- лы являются сценариями выполнения обычных программных команд, которые может для нас выполнить DOS. Их использование дает возможность обращаться 258
ко геем шагам в сценарии как к единому целому, передавая интерпретатору ко- манд DOS лишь одну команду. Командные файлы обозначаются расширением файлового имени .ВАТ. Внут- ри командного файла находятся данные в нормальном формате текстового ASCII файла. Каждая строка текстового файла — это команда, которую команд- ный интерпретатор попыт|1втся выполнить. Простейший вид командного — файла это просто последовательность обыч- ных программных команд (одна за другой), которые были собраны в командный файл для того, чтобы нам было удобно выполнять их как одно целое. Но обра- ботка командного файла заключается не только в этом. При выполнении командных файлов и их заданий могут использоваться пара- метры. Интерпретатор команд может воспринимать эти параметры и передавать их командному файлу для использования в командах, из которых он состоит. В действительности DOS представляет специальный язык для создания сложных командных файлов, представляющих собой целые программы на языке команд DOS. В этот язык включены логические операции, условные операторы, циклы и т.д. Существует возможность использования переменных, но в специальных случаях. Хотя это не место для того, чтобы вдаваться во все сложности языка DOS обработки командых файлов, нам стоит кратко отметить, что он существует и является одним из наиболее мощных инструментов для эффективного использо- вания DOS. Опытные пользователи стараются делать практически все в своих компьютерах с помощью командных файлов просто потому, что это позволяет избежать рутинной работы по повторному выполнению серии команд. Чтобы дать вам представление о том, как часто используются командные файлы, я просто посчитал число различных командных файлов, которые созданы для ис- пользования в моем собственном компьютере, — их оказалось удивительно много: 145! Это может быть намного больше, чем вам реально нужно (я подо- зреваю, что это больше, чем нужно и мне), но тем не менее дает представле- ние о том, как важны командные файлы в использовании IBM PC. Если вы еще не постигли способы использования командного файла, я очень рекомендую вам потратить на это время. Предложу совет: существуют сложные части командного языка, которые могут быть очень запутанными, когда вы впервые пытаетесь изучить их и прикинуть, в каких случаях их хорошо использо- вать. Я бы рекомендовал вам попробовать изучить и использовать командные файлы способом погружения, сначала используя простейшие возможности, за- тем, когда вы к ним привыкните, продвинуться вперед, чтобы увидеть, есть ли какая-либо необходимость в более сложных их вариантах. Задания 1. Пользуясь любым доступным для вас программным инструментом (таким как DEBUG или мои "Утилиты Нортона"), просмотрите текст файла COMMAND.COM на вашем компьютере и найдите таблицу имен внутренних ко- манд. Нашли ли вы что-то необычное? Что еще кроме командных имен, должна содержать COMMAND.COM таблица? (Для информации о том, как использовать DEBUG или мои "Утилиты Нортона" см.гл. 22). 2. Как вы думаете, каким образом программа типа .СОМ может адаптиро- ватьмя к тому месту памяти, куда ее DOS загрузит? Каковы проблемы, которые, может быть, придется решать, и как они решаются? 3. Если вы знакомы с командным языком DOS, проанализируйте его, чтобы увидеть, каковы, по вашему мнению, сильные и слабые его стороны; особенно поищите части, неудобные для использования. Попытайтесь придумать собст- венный командный язык. Как вы думаете, какие его свойства будут наиболее полезными и наиболее сильными? 259
Глава 20 DOS И ПРОГРАММЫ После того как мы рассмотрели основные принципы построения DOS и увидели, какие возможности она предоставляет для пользова- теля, пора узнать, какие возможности она предоставляет для наших программ. Эта глава аналогична гл. 17, в которой мы описали функ- ции, которые предоставляет нашим программам система ROM-BIOS. Здесь мы сделаем то же самое, но для DOS. Прежде чем мы погрузимся в этот предмет, необходимо отметить два основных различия: одно — в том, что, как мы видели в гл. 19, DOS предоставляет много возможностей непосредственно пользова- телям, чего не делает система ROM-BIOS; другое — в том, что фун- кции ROM-BIOS выполняются на низком (машинном) уровне, в то время как большинство функций DOS сложнее и выполняются на бо- лее высоком уровне. 20.1 Назначение функции DOS Функции DOS подвержены воздействию большого числа конфлик- тующих между собой условий. В то время как функции ROM-BIOS, которые мы изучали в гл. 17, были в целом разработаны в лучшем варианте, на который были способны авторы, создание функций DOS не подчинялось единой цели. Четыре основных аспекта повлияли на формирование функций DOS в том виде, в каком они существуют сегодня. Два из четырех — это другие операционные системы, по образу которых была сформи- рована DOS. Первой, как мы узнали из гл. 18, была СР/М — основная для 8- битового поколения компьютеров, предшественников семейства IBM PC. Поскольку было много полезных программ, основанных на использовании СР/М, DOS была ориентирована на то, чтобы сделать относительно доступным использование этих старых программ. Ключом к этому была разработка новых программ внешне очень похожими на те, что использовались в СР/М. Этот внешний вид дол- жен был включать и почти идентичные функции операционной систе- мы, и похожий подход в разработке архитектуры диска. Итак, пер- воначально была попытка максимально имитировать СР/М. Вторым фактором, оказавшим большое влияние на DOS, была операционная система UNIX. Вскоре после появления DOS и IBM PC стало ясно, что рамки СР/М очень узки для того, чтобы обеспечить будущее развитие IBM PC. UNIX ценилась очень высоко, а создатель DOS фирма Microsoft имела большой опыт разработки своего собст- венного варианта UNIX, названного XENIX. Когда пришло время пре- 260
образовывать DOS во что-то более прогрессивное, многие черты UNIX были добавлены в DOS. Большую роль^ характере эволюции DOS сыграло желание сде- лать DOS как можно более независимой от компьютера и перифе- рийных устройств. Некоторые из внутренних рабочих частей DOS дол- жны быть специально приспособлены к особенностям аппаратурной реализации компьютера и изолированы в специальную машинозави- симую часть, которая называется DOS-BIOS (подобно ROM-BIOS са- мой машины). Вне DOS-BIOS вариант операционной системы в основ- ном не связан с особенностями компьютера. Это полезно, поскольку программы, использующие функции DOS, становятся независимыми от машины. Но есть и недостатки. Самый горький пример касается использова- ния дисплея компьютера. Функции, реализуемые DOS, не дают на- шим программам способа расположить информацию в фиксирован- ном месте экрана. Перед нами встает выбор: либо использовать эк- ран как телетайп, последовательно выводя на него информацию, ли- бо потерять машинную независимость, которая обеспечивается ис- пользованием только функций DOS. Это не дает нам возможности создавать широкий диапазон мощных программ, которые автомати- чески работали бы на любом компьютере, использующем .DOS, и да- же на компьютерах, которые полностью совместимы с IBM PC. Отсут- ствие у DOS возможности гибкого вывода на экран очень повлияло на ее эволюцию. Наконец, последний фактор, под влиянием которого сформирова- лась DOS, — незапланированное добавление новых возможностей, необходимое для поддержки новых направлений, по которым фирма IBM развивала свое семейство персональных компьютеров. В общем, мы можем сказать, что DOS не была разработана в еди- ном стиле, а к ней добавлялись возможности по мере необходимо- сти, так что отдельные ее части не были согласованы друг с другом оптимальным способом. Этот подход принес нам такие варианты DOS, которые поначалу вовсе не имели функции распределения па- мяти. То же самое было с функциями распределения ресурсов для работы в локальной сети, для обеспечения многопрограммного и многозадачного режимов. Когда все эти четыре фактора перемешались, то получилась та DOS, которую мы знаем и используем в наших IBM PC. Из этой сме- си функций DOS мы выберем те, которые она предоставляет для ис- пользования нашим программам, и рассмотрим их в разд. 20.2. # # Технические подробности 20.2. Обзор функций DOS Теперь мы готовы изучить список функций, которые DOS предо- ставляет нашим программам. Как и в гл. 17, этот раздел имеет заго- 261
ловок "Техническое подробности", который обозначает более техни- ческие разделы книги. Однако прочтите его, если вы хотите получить хорошее представление о том, что может делать DOS для наших программ, а тем самым и для нас. Вы найдете некоторые подробно- сти удивительно интересными. Мы не будем долго останавливаться на каждой функции, потому что это бы сделало главу невозможно длинной. Вместо этого, мы сделаем их краткий обзор, в котором расскажем о назначении каждой функции . Все функции DOS активизируются простым пре-рыванием с номе- ром 33 (шестнадцатеричное 21). Специфические функции выполняют- ся с помощью процесса загрузки номера функции в один из регист- ров микропроцессора — таким же образом, как выполняются функ- ции системы ROM-BIOS. Функции DOS также организованы в группы родственных функций более простым и менее строго определенным способом. Мы будем рассматривать их по номерам. Единственное, что надо запомнить, - это то, что в отличие от функций ROM-BIOS, которые сравнительно постоянны список функций DOS все время пополняется новыми ее версиями. Это и хорошо, и плохо. Хорошо, что добавляются новые возможности, а плохо, потому что только часть пользователей IBM PC может угнаться за новейшими версиями DOS. Это создает проблемы для программ, которые хотят воспользоваться новейшими возможно- стями DOS, поскольку многие IBM PC будут использовать более ста- рые ее варианты. По ходу нашей дискуссии мы выделим основные особенности в различных версиях DOS. Мы начинаем с наиболее элементарной группы функций DOS, ко- торые разработаны для ее взаимодействия с нами — пользователя- ми. Функции ввода читают информацию, поступающую с клавиатуры, а функции вывода отображают информацию на экране последова- тельно, символ за символом, строка за строкой, подобно принтеру. Эти функции перенесены из операционной системы СР/М , предше- ствующей DOS. Они грубы потому, что они задуманы совершенно слепыми по отношению к машине, и должны работать единообразно без всякого представления о свойствах определенного дисплея (вот почему функции вывода на экран не способны расположить инфор- мацию в произвольном его месте). Как часть наследства от СР/М, эти функции представляют собой странную "смесь". Например, несмотря на существование функции ввода с клавиатуры и простой функции вывода на экран, есть также и другая функция, которая действует как для ввода, так и для вывода либо как их комбинация в зависимости От того, как вы ее используе- те. Все эти функции в стиле СР/М были созданы для того, чтобы сде- лать сравнительно простым перевод программ из СР/М в DOS с ми- нимумом трудностей. Это было частью усилий по поддержке IBM PC в его первые дни, когда существовало много программ для СР/М и мало программ для IBM PC. Теперь такой цели давно нет, а функции продолжают "жить". 262
* Частью одной и той же группы элементарных функций DOS явля- ются функции вывода информации на принтер и передача данных по линиям связи (последовательный порт). Все функции DOS, относящиеся к этой группе, — парные, а в не- которых случаях даже Идентичны функциям, которые обеспечивает ROM-BIOS. Почему DOS понадобилось дублировать функции, кото- рые обеспечивает BIOS? Ответ на этот вопрос может быть таким: программы должны обращаться к DOS за всеми необходимыми функциями, так как в этом случае они не привязаны к определенным особенностям конкретной машины. Использование функций DOS в принципе делает наши программы более мобильными для выполне- ния на других машинах. Это также позволяет более гибко управлять вводом-выводом, переназначая, например, вывод данных. Вот что делает, например, команда MODE системы DOS. Она позволяет пе- реназначить вывод, направив его не на принтер, а в последователь- ный порт. Если бы наши программы использовали функции вывода на принтер ROM-BIOS, это бы было невозможно. К сожалению, этот принцип хорошо работает только для простых операций ввода и вывода с принтером, последовательным портом, клавиатурой и экраном, когда мы не заботимся о том, в какую пози- цию выводятся наши данные. Большинство программ.требует более сложных действий, в особенности при выводе на экран. В этом отно- шении DOS нас подводит, так как в основном наборе функций DOS нет таких, которые занимаются выводом в произвольную позицию эк- рана. В то время как первая группа функций DOS обеспечивает в сущ- ности те же возможности, что мы уже имели в ROM-BIOS, следую- щая группа "отваживается" вступить в те области, которые являются естественными областями именно для DOS — это дисковые функции высокого уровня, в частности файловый ввод и вывод. Эта группа функций называется, в терминологии DOS, "традицион- ными файловыми функциями", и они базируются на использовании системы, называемой Управление блоками файлов или FCB. Этой си- стемой обеспечивается поддержка имен файлов и данных при рабо- те наших программ с ними. FCB также поддерживает информацию о статусе файла. При использовании нашими программами традицион- ных файловых функций DOS ведет свой учет всего того, что исполь- зуется внутри FCB, и это делает их уязвимыми к воздействию со сто- роны наших программ. (Новейшие файловые функции, которые мы скоро увидим, держат управляющую информацию DOS вне наших программ, что обеспечивает более надежную работу.) Давайте рассмотрим те возможности, которые предоставляют нам эти ориентированные на FCB традиционные файловые функции. Для слежения за файлами есть две функции , которые используются при определении местонахождения файлов, имена которых соответствуют шаблону, который может включать символы "?" и Одна из этой пары функций начинает процесс поиска, а другая используется, чтобы 263
поиск продолжить. Наши программы могут их использовать либо для того, чтобы просто найти первое подходящее файловое имя, либо для нахождения полного списка файлов, имена которых соответству- ют заданному шаблону. Другие традиционные файловые функции "открывают" файл (го- товят все для считывания и записи данных), а позже "закрывают" его. Затем существуют функции для чтения или записи файла как после- довательно от начала до конца, так и произвольным образом, пере- скакивая на любую позицию в файле. Функции для управления клавиатурой, которые мы впервые упо- мянули, и традиционные файловые функции составляют большинство универсальных функций DOS, тех, которые были введены в употреб- ление в давно забытой первой версии DOS, версии 1.00. Существует еще несколько дополнительных функций в этой универсальной груп- пе, которые читают или устанавливают текущие дату и время, одна - чтобы закончить программу, другая — чтобы включить и выключить режим проверки при работе с диском, и еще несколько, которые менее интересны, но которые выполняют ту или иную техническую роль. Поскольку эти универсальные функции существовали с самого на- чала, они могут быть использованы в каждой версии DOS. Функции DOS, которые мы будем обсуждать далее, были добавлены в более поздние варианты DOS — в основном начиная с версии 2.00, — так что они могут быть использованы нашими программами, работающи- ми под управлением соответствующего варианта DOS. Первая из них — это важная функция сообщающая номер версии DOS, под управление которой выполняется программа. Это позволя- ет нашим программам выяснить, есть ли в этой версии необходимые функции. Если нет, то программа может попытаться адаптироваться к используемой версии DOS или по меньшей мере "красиво" удалить- ся, сообщая, что она нуждается в другом варианте DOS. Поскольку эта функция была введена в DOS 2.00, может показаться, что она возникла слишком поздно. К счастью, более ранние варианты DOS работают так, что если программа пользуется этой функцией, то в ко- нечном итоге ей сообщаются версии DOS с номером 0; это не со- всем верно, но по крайней мере это правильно указывает версию, предшествующую 2.00. DOS 2.00 и все более поздние версии операционной системы име- ют набор файловых функций, альтернативных ориентированным FCB традиционным файловым функциям. Эти новые файловые функции работают с указателем, который представляет собой просто двухбай- товый номер, уникально определяющий каждый файл, используемый программой. Когда программа открывает файл, действуя через эти новые файловые функции, DOS передает программе указатель, ко- торый используется для доступа к файлу во всех последующих фай- ловых операциях до тех пор, пока файл не будет закрыт. Использо- вание указателя позволяет DOS держать всю необходимую инфор- 264
мацию по управлению файлами отдельно от наших программ, что за- щищает файлы от повреждения. Эти функции, обеспечивают все воз- можности аналогично традиционным функциям, ориентированным на FCB, но в более аппаратном стиле. Наши программы снабжены так- же несколькими стандартными возможностями: одной — для вывода обычной информации на дисплей, другой — для сообщений об ошибках, которые пояляются на экране, даже если пользователь пе- реназначит вывод с экрана на другие устройства и т.д. Кроме того, версии DOS, начиная от 2.00 и далее, обеспечивают функции для работы со структурами, которые были введены допол- нительно в DOS для обслуживания дисков: функции для создания и уничтожения каталогов, для перехода из каталога в каталог, переме- щения файлов одного каталога в другой каталог и т.д. Есть также функции, позволяющие нашим программам работать непосредственно с устройствами компьютера, не выходя из рамок DOS. Раньше наши программы могли либо использовать очень огра- ниченные возможности, предоставляемые DOS, либо работать с уст- ройствами непосредственно, минуя DOS. Новые функции DOS, пре- доставляя новые возможности, закрывают эту брешь. Например, с помощью специальных функций программа может определить, при- соединен ли дополнительный диск (например, жесткий диск или RAM-диск), отсутствие дискеты в дисководе (для гибких дисков) или переключение с одного типа дисков на другой. Все это позволяет программам использовать компьютер для более сложных целей. Существуют также функции для работы с памятью, позволяющие нашим программам, выполняемым под управлением DOS, захваты- вать или освобождать оперативную память. Обычно каждая програм- ма, выполняемая под управлением DOS, захватывает всю компью- терную память, но эти функции позволяют использовать оперативную память более гибко. Часть функций, появившихся в DOS 2.00, — это функции, позволя- ющие программе загрузить и выполнить подпрограммы и оверлей- ные программы как самостоятельные модули, независимые от про- граммы, которая их запустила для исполнения. Большинство добавлений, которые были сделаны к DOS, появи- лись с версией 2.00, но некоторые возможности были добавлены в более поздних версиях. Версия 3.00 добавила расширенные коды ошибок, позволяющие нашим программам получить более подроб- ное объяснение того, где произошла ошибка. Основные дополнения, которые появились в DOS 3.00 и 3.10, однако, касались специальных проблем использования локальных сетей. Эти новые функции обес- печивают "закрытие" и "открытие" доступа ко всему файлу или его частям, что делает надежным и практичным для нескольких компью- теров общий доступ к одному и тому же файлу (через локальную сеть). Есть функции, относящиеся к работе в локальной сети, которые занимаются управлением и переадресацией вывода на принтер. Я упомянул только основные функции DOS, но существуют и дру- 265
гие не менее интересные и полезные. Вероятно, самыми удивитель- ными из них являются функции определения резидентных программ ("terminate-but-stay-resident"), которые позволяют программам по- мещать себя в оперативную память и оставаться там во время рабо- ты DOS и выполнения других программ. Это резидентные програм- мы, с которыми так хорошо знакомы пользователи IBM PC, такие, на- пример, как Prokey и Sidekick, и резидентные части DOS, такие как команды MODE и PRINT. Есть две функции типа "сделать программу резидентной" (stay-resident), которыми пользуются программы этого типа: старая, являющаяся частью универсальных функций DOS, и бо- лее новая и мощная, являющаяся частью функций, введенных с DOS 2.00. Какая бы функция не использовалась, она обеспечивает воз- можность для программ стать резидентными в части оперативной па- мяти, которая не будет использоваться последующими программами, выполняемыми DOS. К этой группе можно отнести и функцию DOS, которая обеспечи- вает вызов резидентной программы, сохраняя все сведения об актив- ной в данный момент программе. В гл. 17 мы обсуждали тот факт, что программы системы ROM-BIOS должны иметь возможность при- останавливаться или возобновлять свои действия. DOS работает не совсем так, если выполняется какая-либо операция, то в этот момент для программы опасно вызывать другую функцию DOS. Есть специ- альная функция, которая используется для выяснения, находится ли DOS в этом опасном состоянии. Если вы пользуетесь программой Sidekick и в какой-то момент ее работы раздался звук из динамика, то причина была именно в этом. Если мы попытаемся активизировать Sidekick в тот момент, когда DOS находится в состоянии, которое нельзя прерывать, то раздается "писк" динамика. Другая интересная функция используется для получения инфор- мации о том, на какую страну мира ориентирован данный вариант DOS (например, печатается ли знак доллара или фунта), какие знаки пунктуации используются при печати больших чисел (например, 1.234.567 или 1 234 567) и т.д. DOS может сообщать специфическую информацию о стране нашим программам. Но программы могут и сами дать задание DOS изменить код страны. Есть еще функции DOS, которые мы могли бы здесь обсудить. Но и уже рассмотренный набор дает представление о диапазоне воз- можностей функций DOS, а также о том необычном и любопытном, что встречается в работе этих функций. А сейчас мы движемся даль- ше и переходим к вопросу создания программ. ### 266
Глава 21 КАК СОЗДАЕТСЯ ПРОГРАММА Одна из самых занимательных тем, с которыми мы сталкиваем- ся, описывая семейство персональных компьютеров, — это созда- ние программ. Независимо от того, будете ли вы сами писать про- граммы или просто пользоваться ими, вам интересно будет узнать, что за всем этим стоит, понять, как именно это делается, т.е. меха- низм создания программ. Об этом и пойдет речь в данной главе. Естественно, мы дадим здесь только краткий обзор того, как именно создаются программы, чтобы вы могли получить общее представление. Для того чтобы углубить свое понимание этапов создания программ, вы можете обратиться к специальной литера- туре по программированию для ПК, включая и мою обзорную книгу " Руководство Питера Нортона по программированию для IBM PC". 21.1. Языки программирования Наши компьютеры выполняют только те инструкции, которые задаются на так называемом машинном языке. Но программисты, такие как мы с вами, не пользуются этим языком. Мы пишем про- граммы на языках программирования, которые являются инстру- ментом для создания программ, подобно тому как английский и другие разговорные языки используются писателями для создания книг. Если мы хотим понять языки программирования, то нам необ- ходимо найти аналогию с чем-то уже знакомым и знать, каким об- разом программа на языке программирования переводится в программу на машинном языке, которую может непосредственно выполнить компьютер. В этом разделе мы уделим основное вни- мание природе и характеристике языков программирования, а в разд. 21.2 мы рассмотрим, каким же образом языки программи- рования, которыми пользуется человек, переводятся на машинный язык, который понимает компьютер. Пожалуй, первое, что нам необходимо узнать о языках про- граммирования, — это отличие языка ассемблера от всех осталь- ных языков программирования (их собирательно называют языка- ми высокого уровня). Язык ассемблера — это по сути дела то же самое, что и ма- шинный язык, но в более понятной форме. Суть этого языка за- ключается в том, что программист, пользующийся им, выписывает инструкции, которые одна в одну переводятся в команды, кото- рые будет исполнять компьютер. Мы уже сталкивались с поняти- 267
ем "язык ассемблера", например, в разд.6.4, где рассмотривали программу обработки прерывания. На рис.21.1 приведена подпрограмма на языке ассемблера, которую я использую в своих собственных программах. Она вы- полняет операцию очистки буфера клавиатуры. На этом примере вы можете увидеть, как оформляется подобные подпрограммы на языке ассемблера. ; FLUSHKEY - очистка буфера ввода клавиатуры ; DOS generic PGROUP GROUP PROG PUBLIC FLUSHKEY PROG SEGMENT BYTE PUBLIC ‘PROG* ASSUME CS:PROG FLUSHKEY PROC NEAR TEST: MOV AH, 11 ; проверка состояния клавиатуры INT 33 ; вызов функции OR AL,AL ; если равно нулю JZ RETURN ; то завершить MOV AN,7 ; чтение одного байта INT 33 ; вызов функции JMP TEST RETURN: BET FLUSHKEY ENDP PROG ENDS END „ „ Рис.21.1. Программа на языке ассемблера Язык ассемблера для программиста — это эквивалент машин- ного языка, поскольку каждая собственная машинная команда со- здается на основе некоторого числа предложений на языке ассем- блера. Команды на машинном языке задаются шестнадцатерич- ными кодами, почти недоступными для понимания, тогда как сис- тема записи предложений на языке ассемблера понятна опытному программисту. Ну а все остальные, немного попрактиковавшись, смогут понять хотя бы часть из того, что написано в программе на 268
ассемблере. Например, первый активный оператор на рис. 21.1 vMOV АН, 11 дает команду компьютеру занести число 11 в регистр АН. Я вовсе не хочу, чтобы у вас создавалось впечатление, что на- учиться читать и даже писать подобные вещи слишком просто. Чтобы понять, что же такое программирование на языке ассем- блера, надо име^ть в виду, что программа на этом языке состоит из трех типов предложений. Первый из них составляет ту часть, которую мы часто и подразу- меваем под "языком ассемблера": индивидуальные команды для ЭВМ, написанные в понятной для программистов форме (такие, как MOV АН,11). Здесь каждое предложение программы пере- водится в одну команду на машинном языке. Второй тип предложений на ассемблере составляют управляю- щие инструкции, подготавливающие выполнение рабочей про- граммы. В нашем примере на рис. 21.1 все строки перед строкой MOV АН,11 (например строка ASSUME CS:PROG) это часть такой подготовки. В частности, команда ASSUME CS:PROG дает нам воз- можность понять, что произойдет с регистром CS. (О регистровой памяти см. гл.6.) Третий тип предложений на языке ассемблера позволяет авто- матизировать определенные действия. Когда последовательность команд повторяется многократно, язык ассемблера позволяет программисту заменить эту последовательность команд так назы- ваемой макрокомандой или макросом. На рис. 21.1 примеров макрокоманд нет. Однако вы заметите, что команды MOV АН, X и INT 33 используются дважды и отличаются только значением операнда команды MOV. Эти две команды можно заменить од- ним макросом, состоящим из одной строки. (Макрокоманды на языке ассемблера могут учесть различие между двумя этими ко- мандами, подставляя параметр с соответствующим значением. Они могут справиться и с более сложными задачами.) Подводя итог, можно сказать, что все три типа предложений составляют суть языка ассемблера. Подготовка программы на ассемблере — это чрезвычайно долгий и утомительный процесс. Чтобы дать вам понять, сколько же команд включается в программу (не в такую короткую, как подпрограмма на рис. 21.1), приведу такой пример. Среднего размера программа NU — центральная из сервисных программ "Утилиты Нортона" насчитывает около 20 тыс. команд машинного языка. Такие большие и сложные программы, как Lotus 1-2-3 или Framework, разработанные фирмой Ashton-Tate, могут насчитывать более 150 тыс. отдельных команд на машинном языке. Если эти программы пишутся на ассемблере, то программистам надо за- дать большое число команд, каждая из которых очень сложна и потенциально может содержать ошибку, если упущена какая-либо деталь. 269
Представьте себе: если я напишу эту книгу с орфографически- ми ошибками, это никак не отразится на ее полезности, а вот единственная маленькая ошибка в программе может свести на нет все труды. А если в программе на ассемблере насчитывается 150 тыс. или даже 20 тыс. команд (которые также называются строка- ми кодов), вероятность ошибки огромна. Языки высокого уровня (все языки программирования, кроме ассемблера) предназначены для того, чтобы избежать утомитель- ного и чреватого ошибками программирования на ассемблере. Работая с ними, ЭВМ сама выполняет максимально возможный объем работ по созданию команд на машинном языке. Языки вы- сокого уровня основаны на двух принципах. Один из них заключа- ется в том, чтобы суммировать большое число команд машинного языка в одном операторе программы. Этот принцип аналогичен принципу создания макросов в языке ассемблера, но применяется он более широко. Второй же принцип заключается в том, чтобы опустить детали, связанные с работой компьютера, но не имеющие отношения к выполняемой задаче (например, какие именно конк- ретные регистры используются в программе на машинном языке). Если мы хотим, чтобы программа выполнила сложение трех чи- сел, то она может воспользоваться одним из регистров общего назначения, таким как АХ, ВХ, СХ или DX (как мы узнали в гл. 6.), но это не имеет никакого отношения к тому, что мы пытаемся вы- полнить. С точки зрения решения задачи безразлично, какой из регистров будет выбран. Пр^раммисты, использующие язык ассемблера, должны учи- тывать такие детали, как выбор регистра для какого-либо действия и его использование. Программисты, работающие с языками вы- сокого уровня, не затрудняют себя подобными процедурами. Языки высокого уровня характеризуются тем, что каждый опера- тор программы будет заменен на большое количество команд машинного языка (что облегчает усилия программистов) и можно избежать уточнения многих ненужных деталей (не определять конкретных регистров, не уточнять используемых адресов памяти). Как язык ассемблера, так и языки высокого уровня имеют свои достоинства и недостатки. Я уже говорил о недостатках языка ас- семблера: написание программ на этом языке требует большего труда, так как для этого необходимо создание большого числа ко- манд с огромным количеством мелких деталей, в которых легко допустить ошибки. Есть и другие недостатки. Так, по сравнению с языками высокого уровня использование языка ассемблера тре- бует специальных знаний. Однако у него есть и свои преимущест- ва: программы на нем обычно короче и требуют меньших затрат времени при выполнении, потому что программисты, используя свой опыт, стараются найти наиболее эффективные способы зада- ния каждого шага, тогда как при использовании языков высокого уровня добиться такой эффективности и оптимальности удается 270
далеко не всегда. Используя язык ассемблера,мы можем задей- ствовать все возможности компьютера. Язык высокого уровня обычно не позволяет нам это сделать в полной мере. Грубо гово- ря, языки высокого уровня используют 90 % возможностей компь- ютера, а язык ассемблера — 100 %. До сих пор я говорил о языках высокого уровня как о собира- тельной категории, как будто бы они все похожи друг на друга. У них действительно есть много общего, особенно если сравнивать их с языком ассемблера, но между ними существует много важ- ных различий. Поэтому мы с вами поговорим о разнообразии язы- ков высокого уровня, останавливаясь на наиболее важных и широ- ко употребляемых языках, используемых в программировании для персональных компьютеров. Существуют в буквальном смысле слова сотни языков про- граммирования, десятки из которых используются для работы с персональными компьютерами, но мы будем говорить только о самых важных из них, чтобы дать самое общее описание всех язы- ков высокого уровня. Это языки Бейсик, Паскаль, Си и dBASE. Бей- сик более других языков приближается к универсальному языку для персональных компьютеров. По сути в каждом персональном компьютере заложена та или иная версия Бейсика, a IBM PC име- ет Бейсик, встроенный в ПЗУ. Вы уже познакомились с этим язы- ком, так как почти все примеры программ в этой книге были даны на Бейсике. Бейсик — это язык программирования не для профессионалов, а для начинающих. Он очень удобен для составления не слишком сложных программ, что является одной из основных причин выбо- ра его для примеров. Именно на Бейсике написаны две програм- мы, которыми я часто пользуюсь: программа финансового учета для моей деловой документации и моя коммуникационная про- грамма (PC-TALK). Достоинствами Бейсика является его простота, а также то, что он имеет специальные операторы, облегчающие доступ к боль- шинству специфических устройств семейства IBM PC, например для воспроизведения музыки. Большинство других языков высокого уровня не обладают воз- можностями для непосредственного доступа к устройствам персо- нального компьютера. Программисты, употребляющие эти языки в своей практике, должны применять специальные методы, как пра- вило, связанные с использованием языка ассемблера. Дальше мы остановимся на этом вопросе подробнее. У Бейсика есть и некото- рые ограничения: на выполнение программы уходит больше вре- мени по сравнению с другими языками высокого уровня, а также есть строгие ограничения размера программы и объема данных. Также, с точки зрения профессионала, Бейсик дает нам довольно примитивные средства с помощью которых трудно создать до- бротную программу. 271
Языки Паскаль и Си, напротив, очень подходят для профессий* нального программирования. Оба этих языка обладают некоторы- ми особенностями, позволяющими создавать надежные програм- мы, которые можно легко модифицировать. На рис. 21.2 и 21.3 представлены два фрагмента моих рабочих программ на Паскале и С, которые дадут вам некоторые представление об этих языках. Между нимиесть много общего, в том числе и общие структур- ные особенности, позволяющие приобретать хорошие навыки про- граммирования. Оба языка подходят профессионалам для состав- ления самых сложных программ. Паскаль предпочитают использо- вать те, кто изучал его в школе (этот язык очень распространен для обучения компьютерной грамоте, и изначально он был создан как учебный язык, а не для профессионального пользования), и те, у кого есть недорогой и очень распространенный компилятор Turbo Pascal. Язык Си используется теми программистами, которых прежде всего интересует эффективность программ на языках вы- сокого уровня, кто хочет, чтобы их программы соответствовали возможностям компьютера с той или иной операционной системой (в частности, с системой UNIX, в основном ориентированной на этот язык). Лично я пользуюсь и языком Паскаль, и языком Си. Мои попу- лярные сервисные программы "Утилиты Нортона" были написаны на Паскале, а затем переписаны на Си. Мне нравятся оба этих язы- ка. Я считаю, что сам по себе Паскаль лучше, в нем меньше воз- можностей допустить ошибку; с другой стороны, язык Си особен- но хорош для составления компактных, надежных программ, ис- пользующих возможности BIOS и DOS. Надо заметить, что в своих программах, написанных на языке Си и на Паскале, мне приходит- ся использовать подпрограммы на ассемблере для выполнения действий, которые нельзя описать на языках высокого уровня. Подпрограмма на ассемблере, показанная на рис. 21.1, входит в их число. Это демонстрирует нам важный момент в создании про- фессиональных программ: даже самые лучшие программы часто пишутся на языке высокого уровня (таком как Паскаль или Си), а язык ассемблера используется в них как простое средство для преодоления ограничений этих языков. Какой из языков программирования выбрать для составления той или иной программы, мне подсказывает личный опыт. Обычно язык выбирается исходя из прагматических соображений: какими языками уже владеет программист (или же какими языками ему легче овладеть), насколько хорошо подходит тот или иной язык для решения конкретной задачи. Личные вкусы также играют важ- ную роль в выборе языка программирования — а почему бы и нет? 272
{ Программа подсчета количества слов на языке Паскаль} program count (output, input_file); add_to_count; var ' I • end; ~ input_file : text; end; i : word; ’ end; thousands : word; report; units : word; write (’ слов. *); I ine : Istring (255); end. alpha : boolean; active : boolean; procedure report; var i f x : word; begin write (chr (13)); if thousands = 0 then write (units:7) else begin write (thousands:3); write (','); x : = units; for i := 1 to 3 do begin write (x div 100 : 1); x : = (x mod 100)*10; end; end; end; procedure add_to_count; begin units : = units 1; if units >= 1000 then begin units := units - 1000; thousands := thousands + 1; end; if (units mod 100) = 0 then report; end; begin thousands := 0; units := 0; reset (input file); while not eoT (input_file) do begin active := false; readIn (input_file, line); for i := 1 topline. len do begin if active then begin if active then begin if line [i] = ' 1 then active := false; end else if line [i] in [«a» .. 'z'f 'A' .. 'Z4 then beg i n active := true; Рис.21.2. Пример программы на языке Паскаль 273
/‘Программа рисования прямоугольника двойными линиями на языке Си*/ box () < drew = 0; dcol = 1; vdup (205,78); drew - 24; dcol = 1: vdup (205,78); for (drew =1; drow ( 24; drow++) dcol = 0; vdup (186,1); dcol = 79; vdup (186,1); drew = 0; vdup (201,1); dcol = 79; vdup (187.1); drow = 24; dcol = 0; vdup (200,1); dcol = 79; vdup (188,1); if (TEST) < if (swtehset ("X")) < int i; unsigned x; char s [40]; int si; for (i = 1; i = <24; i++) C si = 0; decint (s, &sl, i, 3); drow = i; dcol = 77; vstr (s); drow = 24; dcol = 3; x = spstart - splowest; decintO (s,x); vstr (" "); vstr (s); vstr (“ стек использован "); dcol += 2; decintO (s, pool left); vstr (" "); vstr (s); vstr (“ пул освобожден "); dcol += 2; x = pool - pooIsave; decintO (s,x); vstr .(" "); vstr (s); vstr (" пул использован "); dcol += 2; x = pooIends - poolend; decintO (s,x); vstr (" "); vstr (s); vstr (" куча использована "); Рис.21.3. Пример программы на языке Си 274
Нам осталось рассмотреть еще одну группу языков програм- мирования, которые я буду называть прикладными. Это те языки, которые являются составными частями основных прикладных про- грамм, таких как dBASE II и III, Rbase 5000, Framework (со специ- альным языком программирования Fred) и т.д. Их еще иногда на- зывают языками сверхвысокого уровня, поскольку они обладают большими возможностями, благодаря своему специализированно- му назначению (например, управление базой данных). Каждый из этих языков представляет собой собственный мир, они мало похожи друг на друга по своим характеристикам. Этим они очень отличаются от группы языков высокого уровня, у кото- рых очень много общего как в том, что они могут делать, так и в том, как именно они это делают. Пожалуй, самым распространенным и наиболее часто исполь- зуемым видом прикладного языка программирования являются языки программирования для электронных таблиц. Например, из- вестная программа Lotus 1-2-3 или SuperCalc. Электронные таблицы используют специализированные языки программирования, которые позволяют нам задавать и записывать в память команды, используемые неоднократно, — а это является сутью любого языка программирования. Язык электронных таблиц гораздо более специализирован, чем большинство языков про- граммирования: у него имеются более сильные стороны благода- ря особенностям, присущим электронным таблицам, но существу- ют и серьезные недостатки, поскольку он может действовать толь- ко в рамках электронных таблиц. Обобщенно можно сказать, что прикладные языки программи- рования делятся на две группы: одна группа, типичными предста- вителями которой являются программа Lotus 1-2-3 и другие элект- ронные таблицы, используется в узкой сфере, ограниченной ос- новной целью применения. В эту группу в основном входят час- тично программируемые прикладные программы, ограниченные режимами электронных таблиц. У другой группы, представленной языком Fred системы Framework и dBASE III, имеются более ши- рокие возможности, почти такие же, как у обычных языков про- граммирования (типа Бейсика). В этой группе находятся по сути на- стоящие языки программирования, которые одновременно могут использовать и преимущества специальных прикладных возмож- ностей (например, доступ к базе данных). Итак, мы получили некоторые представление о природе раз- личных языков программирования. Теперь нам следует рассмот- реть, как они превращаются в команды на машинном языке.
21.2. Трансляция программ ч Для того чтобы программа независимо от выбранного языка программирования могла работать, она должна быть переведена (оттранслирована) в команды на машинном языке, которые непос- редственно может выполнить компьютер. Все наши программы переводятся с языков программирования, которыми пользуются программисты, на машинный язык, которым пользуется компью- тер. Существуют три основных способа такого перевода: это ин- терпретация, трансляция с помощью языка ассемблера и компи- ляция. Нам очень важно рассмотреть основы этих способов, так как это поможет понять, что происходит в наших компьютерах, а также поможет разобраться в некоторых важных ограничениях на программы и в том, почему одни программы работают быстрее, а другие — медленнее. Интерпретация — это такой способ трансляции, при котором программы переводятся на машинный язык непосредсвенно во время выполнения программы. Все это очень похоже на синхрон- ный перевод на международных конференциях или на заседаниях ООН, когда слова оратора одновременно переводятся на другие языки. Суть того, что происходит при интерпретации программы, мож- но описать следующим образом: интерпретируемая программа (будем называть ее программой П) обрабатывается интерпретиру- ющей программой (будем называть ее интерпретатором И). Когда мы пользуемся программой П, компьютер на самом деле работа- ет с программой интерпретатором И, которая выполняет команды, обусловленные программой П. Интерпретатор И просматривает текст программы П и шаг за шагом выполняет ее команды. Таким образом, интерпретатор И шаг за шагом выполняет каждое слово программы П и делает это немедленно, как переводчики-синхро- нисты. Интерпретация — это медленный и неэффективный, но зато гибкий процесс. Медленный потому, что перевод производится одновременно с выполнением программы, что требует времени для осуществления как перевода, так и выполнения команд. Это неэффективный процесс, поскольку перевод делается многократ- но — не просто когда программа работает, но и когда повторяет- ся какой-либо шаг программы. А так как эффективность програм- мы зависит от числа повторяемых шагов (это называется выполне- нием цикла), то при интерпретации программы приходится пере- водить большое количество однообразных повторений. С другой стороны, интерпретация — процесс очень гибкий, поскольку ин- терпретируемую программу можно исправлять немедленно. У нас имеется достаточно опыта в этой области, поскольку интерпре- тируются как программы на языке Бейсик, так и почти все при- 276
кладные программы — электронные таблицы, такие как Lotus 1-2- 3, и системы управления базой данных, такие как dBASE. Следует упомянуть об одном важном техническом моменте, который касается интерпретируемой программы (см., например, программу на языке Бейсик в приложении А). Мы считаем, что компьютер выполняет именно эту программу. Но, строго говоря, это не так. С точки зрения компьютера и его операционной систе- мы (DOS) выполняемой программой является интерпретатор (Бей- сика, Lotus 1-2-3 и т.д.), а то, что мы считаем программой, служит только данными, которые обрабатываются интерпретатором. Для программы, написанной на Бейсике, рабочей программой является BASIC.COM, а наша программа, например MAZE.BAS, — это только данные для программы. Конечно, это специальные дан- ные, которые описывают те команды, которые мы хотим задать компьютеру, т.е. то, что мы считаем программой. Обычно эта техническая деталь несущественна, но иногда ее приходится учитывать. К примеру, поскольку интерпретатор Бейси- ка рассчитан на использование только 64К памяти (вспомните наше рассуждение об адресации памяти в гл.7), суммарный объем ин- терпретируемой программы на Бейсике не может превышать 64К для собственно программы (кодовой части) и данных программы. Хотя я и отметил, что программы на Бейсике, dBASE и элект- ронные таблицы интерпретируются, но это не всегда справедливо. Обычно многие варианты трансляторов с этих языков действитель- но интерпретируемого типа, но существуют и компиляторы с этих языков, к ним мы в дальнейшим еще вернемся. Как мы уже говорили, интерпретируемые программы перево- дятся "по ходу", т.е. непосредственно в процессе выполнения программы. Два других вида перевода: трансляция с помощью ассемблера (ассемблирование) и компиляция — осуществляются предварительно, чтобы компьютер затем мог выполнять програм- му на машинном языке. Мы остановимся сначала на общих чертах этих двух видов перевода, так как у них больше сходства, чем различия. Ассемблерные и компилируемые программы переводятся на машинный язык специальной программой предварительно, до того как компьютер будет их выполнять. По отношению к вашей про- грамме этот перевод является частью процесса разработки про- грамм. Это означает, что пользователю программы не нужно тра- тить время на ее трансляцию и не нужно иметь программное обеспечение для этой трансляции. Подготовленные таким образом программы уже готовы к работе, тогда как интерпретируемые программы можно использовать только при наличии программы- интерпретатора. Например, работать с программами на Бейсике можно, только имея интерпретатор Бейсика (программный файл BASIC.COM). Тем, кто создает ассемблер или компилятор для любого из
языков программирования, приходится принимать решение по по- воду того, как будут транслироваться программы. Для каждого программиста, работающего с языком высокого уровня, например с Паскалем, написанная программа это результат слияния двух компонентов: общего ядра языка, определяющего его синтаксис и структуру, и специфических особенностей реализации программы. Для языка Паскаль можно указать существенные различия между Паскаль-компилятором фирмы IBM и компилятором Турбо-Пас- каль фирмы Borland. Эти различия включают такие важные аспек- ты, как способ работы компилятора со строками символов (языко- вая особенность) и возможность создания программы на основе отдельных откомпилированных частей (особенность реализации). Именно поэтому программисты пишут программы не просто на каком-либо языке программирования, а используют конкретную реализацию этого языка программирования. Программы пишутся не на языках программирования Паскаль или Си, а на Турбо-Пас- кале или Lattice Си и т.д. Это важно знать независимо от того, бу- дете ли вы писать собственные программы или просто захотите понять, каким образом выбор языка программирования влияет на программы, которыми мы пользуемся. Большинство компиляров и ассемблеров для семейства персо- нальных компьютеров основаны на стандарте, который использует организацию DOS. Транслятор преобразует наши программы с языка, на котором они написаны, на язык машинных команд, но это еще не значит, что эта программа готова для исполнения. Хотя программа и пе- реведена на язык машинных команд, эти команды еще не полно- стью оформлены. Почему это происходит, а также дополнитель- ные меры, необходимые для полной подготовки программы к ра- боте, мы разберем в разд. 21.3. Однако не все трансляторы с языков программирования устроены подобным образом. Некото- рые из них действуют по своим собственным правилам и придер- живаются своих собственных условий относительно того, как под- готовить программу к выполнению. Самым распространенным примером такого вида трансляторов служит система программи- рования Турбо-Паскаль, в которой программа выполняется сразу же после трансляции. Преимущества этого вида трансляторов оче- видны, но у него имеется и недостаток: трансляторы этого вида специфичны и не так хорошо, как стандартные трансляторы, впи- сываются в среду существующей DOS. В первом разделе этой главы уже отмечались различия между языками высокого уровня (такими как Паскаль, Си, Бейсик и т.д.). Программа на языке ассемблера состоит из предложений, эквива- лентных командам машинного языка. Используя языки высокого уровня, программист может писать программу, состоящую из бо- лее крупных блоков, каждый из которых будет переведен в по- следовательность отдельных команд машинного языка. В соответ- 278
ствии с этим различием трансляторы с языка ассемблера называ- ются ассемблерами, а трансляторы с языков высокого уровня на- зываются компиляторами. В зависимости от нашей точки зрения это различие может быть либо важным, либо незначительным. С одной точки зрения, особой разницы между ассемблером и ком- пилятором нет, так как оба они преобразуют программу (исход- ный текст), написанную программистом, в команды машинного языка (объектный код). С другой точки зрения, компилятор выполняет очень ответст- венные и творческие задачи, решая, какие команды машинного языка будут выбраны и как будут использованы возможности компьютера (например, для чего будут назначены отдельные ре- гистры). А ассемблер, напротив, выполняет совершенно механиче- скую работу по преобразованию команд, заданных программи- стом, в их точный машинный эквивалент. С такой точки зрения, компилятор представляет собой очень сложный инструмент, у ко- торого многое зависит от качества его исполнения (один компиля- тор генерирует очень эффективный код, а другой-весьма посред- ственный), тогда как понятие качества в этом смысле слова к ас- семблеру неприменимо. Когда программист работает с ассемблером или компилято- ром, исходный текст программы вводится в транслятор, проверя- ется наличие ошибок, и затем этот исходный текст преобразуется в объектный код. файлы с объектным кодом легко опознать по расширению имени файла .OBJ. Этот объектный код пригоден к использованию непосредственно копьютером. А для программиста компилятор или ассемблер выдает сообщения об ошибках, указывающие на синтаксические ошибки в программе. Программист, работающий с языком ассемблера, использует все особенности персонального компьютера (т.е. все команды ма- шинного языка), поэтому ассемблер выдает ему большое количе- ство технической информации о результатах трансляции. Вы може- те представить себе, на что это похоже, изучив рис.21.4, на кото- ром показана распечатка оттранслированной программы на языке ассемблера с рис.21.1. На листинге ассемблерной программы программист может увидеть эквивалентную машинную програм/лу (в шестнадцатерич- ном виде). Обычно компилятор не дает программисту такого ко- личества технической информации, ведь одна из основных целей использования языков высокого уровня — это как раз желание из- бежать несущественных технических деталей. Но если програм- мист хочет узнать подробности сгенерированного машинного кода, то большинство компиляторов могут распечатать эквивалент со- зданного объектного кода на языке ассемблера. Эти распечатки объектного кода позволяют опытному программисту оценить его качество и являются очень полезными при выборе наиболее эф- 279
фективного способа написания программы. ; FLUSHKEY -очистка буфера ввода клавиатуры ; DOS generic PGROUP GROUP PROG PUBLIC FLUSHKEY 0000 PROG SEGMENT BYTE 'PROG' ASSUME CS:PROG 0000 FLUSHKEY PROC NEAR 0000 TEST: 0000 В4 0В MOV AH,11 0002 CD 21 INT 33 0004 0А СО OR AL,AL 0006 74 06 JZ RETURN 0008 В4 07 MOV AH,7 000А CD 21 INT 33 000С ЕВ F2 JMP TEST ; проверка состояния клавиатуры ; вызов функции ; если равно нулю ; тогда завершить ; чтение одного байта ; вызов функции ОООЕ RETURN: 000Е СЗ RET 000F FLUSHKEY ENDP 000F PROG ENDS END Segments and groups: Name PGROUP PROG Symbols: Name FLUSHKEY =000F RETYRN TEST Size align combine class GROUP 000F BYTE PUBLIC ’PROG1 Type Value Attr N PROC 0000 PROG Global Length L NEAR 000E PROG L NEAR 0000 PROG Warning Severe Errors Errors Рис 21.4. Листинг программы на ассемблере В зависимости от нашей точки зрения на процесс трансляции ис- ходного текста программы в объектный код мы можем рассмат- ривать компиляторы и ассемблеры как совершенно самостоятель- ные типы трансляторов либо как варианты одного типа транслято- ра. Но как бы мы их не рассматривали, по сути дела они выполня- ют задачу преобразования того, что написано программистом, в 280
то, что может выполнить компьютер..Дальше наступает заключи- тельный этап, на котором программа готовится к выполнению. К описанию этого этапа мы и переходим. 21.3 Заключительная сборка программы Одним из ключевых элементов практически всех процессов яв- ляется старое правило "разделяй и властвуй", т.е. любая задача решается легче, если она разбивается на части. Это правило дейст- вует и в программировании, поэтому в процессе разработки про- грамма разбивается на функциональные модульные части, а затем собирается в единое целое. В этом разделе речь пойдет именно о том, какие механизмы позволяют окончательно собрать програм- му и как они работают. Ядро принципа "разделяй и властвуй" применительно к про- граммированию составляют такие понятия, как подпрограммы, компоновщик и библиотеки. Как мы уже знаем, подпрограммы — это относительно незави- симые фрагменты целой программы. В рамках одной программы они выполняют определенную часть задачи, выделенную в само- стоятельный блок. Одной из основных причин появления подпрог- рамм является идея разделения задачи на подзадачи, а следова- тельно, и упрощения процесса создания программы. Если мы решили разбить программу на логические части и пре- вратить эти части в отдельные подпрограммы, то следующим ша- гом должно стать их полное удаление из основной программы. В конце концов, смысл создания подпрограмм в том и состоит, что- бы сделать программу более логичной, упорядочить ее, поделив на отдельные компоненты, т.е. подпрограммы. И если хорошая хозяйка не просто сметает ненужные вещи в угол, а убирает их, чтобы прибрать квартиру, то и мы с успехом можем поступить так же, т.е. извлечь подпрограммы из тела программы и рассматри- вать их как самостоятельные объекты. В этом и заключается идея раздельной компиляции и ассемблирования подпрограмм. Идея раздельной компиляции — это ключевое дополнение к первона- чальной идее создания подпрограмм. Поскольку мы разбиваем программу на отдельные компоненты — логические модули, то мы можем также окончательно разделить их, записывая исходные тексты (подготовленные программистом) в разные дисковые фай- лы и компилируя их (а в случае употребления языка ассемблера, транслируя с него) раздельно. В таком выделении подпрограмм есть два основных преиму- щества. Во-первых, это укорачивает и упрощает исходный текст основной программы. Во-вторых, это облегчает использование подпрограмм в любой другой программе. Если бы подпрограм- мы хранились внутри каждой программы, то для того, чтобы ис- 281
пользовать готовые подпрограммы для создания новой програм- мы, нам пришлось бы копировать их исходный текст и включать в новую программу. Выделяя подпрограммы и компилируя каждую из них в отдельности, мы делаем их доступными для любой про- граммы. Мы экономим время и усилия, компилируя подпрограм- му раз и навсегда, вместо того чтобы повторять этот процесс вся- кий раз, когда мы создаем или перерабатываем программу, в ко- торой она используется. Однако сама идея раздельного компилирования подпрограмм требует, чтобы мы нашли способ объединять различные части про- граммы (т.е. откомпилированные по отдельности подпрограммы) в единое целое. Этот способ называется компоновкой, выполняе- мой программой LINK, которая является составной частью DOS. Процесс компоновки похож на сборку моделей из детского конст- руктора, где надо совместить выступ А с пазом А. В программе, где будет использована подпрограмма X, имеется пустая, позиция помеченная X, а оттранслированная подпрограмма имеет компью- терный эквивалент выступа, также помеченный X. Задачей компо- новщика LINK является их сборка. Компоновка включает связыва- ние различных частей программы в единое целое. В предыдущем разделе мы отмечали, что компиляторы и ассемблеры осуществ- ляют генерацию машинного кода в форме, называемой объект- ным кодом, которая еще не совсем готова к работе в качестве программы. Причина этого заключается в том,что объектный код имеет необходимую для компоновки форму со всеми размечен- ными выступами и пазами. В задачу компоновщика LINK входят подборка частей объектного кода, свызывание их между собой и выдача результатов в форме, пригодной для использования ком- пьютером. Даже когда в программе нет подпрограмм, стандарт- ные компиляторы и ассемблеры DOS транслируют программы в формате объектного кода. Итак, можно сказать, что процесс создания программы распа- дается на две основные части (не говоря о том, что ее надо изна- чально написать): трансляция исходного текста в объектный код с помощью компилятора или ассемблера, а затем преобразование объектного кода в готовую программу с помощью компоновщика LINK. Следует заметить, что мы говорим о создании программ в рам- ках стандартной DOS, где используется большое число версий языков программирования. Но .например, в очень популярной си- стеме Турбо-Паскаль нет раздельной компиляции и соответствен- но не используется компоновщик. Вместо этого в системе Турбо- Паскаль (и в родственных системах) транслятор сразу генерирует исполняемый код, фактически совмещая компиляцию и компонов- ку в один процесс. Такой способ ускоряет и упрощает разработку программы, но он менее гибок, чем раздельная компиляция и по- следующая компоновка. 282
Если мы создаем большое число подпрограмм, то в скором времени наши магнитные диски будут загромождены огромным числом отдельных объектных файлов, и это будет серьезно ме- шать работе. Обычно программист разрабатывает десятки под- программ, а при создании большой программной системы или транслятора с языка программирования их количество может ис- числяться сотнями. К примеру, мои сервисные программы "Утили- ты Нортона" включают в себя приблизительно 175 подпрограмм и модулей — многовато, чтобы "уследить" за всеми ними. Решени- ем этой практической проблемы является использование библио- тек объектных модулей. Библиотека объектных модулей — это дисковый файл, который может содержать объектный код любого числа подпрограмм. После того как подпрограмма написана, про- граммист транслирует ее (с помощью компилятора или ассембле- ра) и заносит в отдельный объектный файл, а затем использует специальную программу DOS, которая называется LIB, чтобы вне- сти этот объектный код в библиотеку, добавляя к другим подпрог- раммам. Опознать файл объектной библиотеки легко по его рас- ширению LIB. Говоря о том, как создаются программы, мы рассмотрели все части этой головоломки. Теперь сложим их вместе, чтобы увидеть в действии. Я продемонстрирую небольшой пример из .своих про- грамм, иллюстрирующий основные этапы всего процесса создания программы. Мы начнем с подпрограммы FLUSHKEY на языке ассемблера, с которой вы уже познакомились в начале этой главы. После того как она была написана программистом (т.е. мной), ее исходный текст был помещен в файл FLUSHKEY.ASM. В каждом языке программирования есть свое обозначение расширения имени файла, в котором записан исходный текст. В языке ассемблера это ASM. Для трансляции программы FLUSHKEY мы воспользуемся программой MASM (макроассемб- лер) с помощью команды: MASM FLUSHKEY В результате получим обьектный файл FLUSHKEY.OBJ. Затем мы можем добавить программу FLUSHKEY к нашей обьектной библиотеке, которую я буду называть OURLIB: LIB OURLIB + FLUSHKEY DEL FLUSHKEY.OBJ Вы видите, что в строке обращения к команде LIB содержится знак " + ". Этот знак означает добавление FLUSHKEY в библиотеку OURLIB. Программа LIB может выполнять и другие операции. Вы, видимо, также заметили, что, добавив FLUSHKEY в нашу библиоте- ку, я удалил объектный файл, так как он нам больше не нужен. 283
Из этого примера видно, как необходимо работать с подпрог- раммами. А сейчас я покажу вам, как мы компилируем и компо- нуем основную программу. Рассмотрим программу NU на языке Си. Исходный текст этой программы со стандартным расширением для программ на языке Си получит название NU.C. Обычно транс- ляторы делятся на отдельные части, работающие во взаимодейст- вии друг с другом. Си-транслятор, которым я пользуюсь, работает в два этапа — МС1 и МС2. Транслировать мою программу NU мы будем следующим об- разом: MCI NU.C МС2 NU По окончании обоих этапов трансляции мы получим объектный файл NU.OBJ. Используя программу LINK, осуществим компонов- ку готовой программы. В нашем примере очевидны оба способа, которыми компоновщик может отыскать необходимые части об- щей программы. Первый способ — это использование библиотеки (в данном случае библиотеки OURLIB), а второй — это обращение к программе LINK с указанием имен дополнительных файлов, ко- торые необходимы для сборки задачи (в данном случае их будет два: объектный файл NU.OBJ и стандартный объектный файл, ис- пользуемый для всех программ на языке Си, С.OBJ). Итак, компоновка нашей программы будет выглядеть следую- щим образом: LINK С+ NU, NU, , OURLIB Для того чтобы полностью разобраться, что же здесь происхо- дит, вам нужно больше знать обо всех деталях этапов создания программ. Но даже в этой простой схеме хорошо просматривают- ся суть и все ключевые этапы процесса разработки и сборки про- грамм. Задания 1. В этой главе мы касались функций программы LIB. Для того чтобы управ- лять библиотекой, она должна уметь осуществлять много разнообразных опера- ций. Каких именно? Попробуйте составить список функций, которые, по вашему мнению, должна выполнять программа LIB. 2. Командные файлы — это ключ к комбинированию этапов процесса про- граммирования, о котором мы говорили. Попробуйте создать командный файл для трансляции программы с языка ассемблера и для помещения его в библио- теку объектных модулей. Создайте еще один командный файл для компиляции и компоновки программы. Если вы разбираетесь в логике создания командных файлов, то приспособьте их к возможным ошибкам. 284
Глава 22 ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ При рассмотрении семейства IBM PC мы коснулись лишь общих сведений, но если заглянуть поглубже, то откроются настоящие чудеса. Об этом и пойдет речь в данной главе: как проникнуть внутрь ПК, исследовать и освоить основные возможности. В этой главе мы также объясним, почему изучить инструмент для этого исследования не только интересно, но и полезно. Мы познако- мимся с двумя программами, которые помогут нам в этом. 22.1. Сервисные программы Вы даже не можете себе представить, насколько полезно уме- ние исследовать и проникать внутрь ПК. Основная причина состоит в том, чтобы подобные исследования расширяли и углубляли наши знания семейства IBM PC. Это делает нас более умелыми пользо- вателями, способными применять весь спектр возможностей ком- пьютера, не допускать возникновения дополнительных сложностей в работе, а также справляться с проблемами, если они все-таки возникают. Используя приемы непосредственной работы с компьютером, мы откроем, как организована информация на магнитных дисках, рассмотрим и структуру самого диска, и внутреннюю структуру файлов данных, с которыми работает наша программа. Мы также обнаружим много интересных сведений о том, как работают наши программы, как они управляют данными, пользуются машинной памятью, больше узнаем о других возможностях компьютера. В случае повреждения магнитных дисков или искажения данных в файле, когда программа отказывается работать с ними, мы иногда сможем использовать полученные навыки для восстановления ис- порченных данных. Это, конечно, не всегда возможно, но иногда и удается. Таким образом, независимо от того, хотите вы расширить свои познания, удовлетворить свое любопытство или просто ликвидиро- вать мелкие поломки в случае необходимости, умение разбирать- ся во врутренней информации компьютера сослужит вам добрую службу. Существует много программ, которые могут быть использова- ны как средство для наших исследований, но мы сосредоточим свое внимание только на двух из них: DOS-программа DEBUG и программа NU из моего комплекта программ ''Утилиты Нортона”. Из двух этих программ DEBUG обладает большими возможно- стями, но ею и труднее пользоваться. Как правило, так и бывает: 285
более широкие возможности программы сочетаются с более сложными приемами ее использования. Но это не единственная причина того, что работа с программой DEBUG требует опреде- ленных навыков программирования. Любая сервисная программа, начиная с Lotus 1-2-3 и кончая DEBUG и NU, предназначена для выполнения опредленной зада- чи. Программа DEBUG, например, разработана для потребностей опытных программистов, она не является самой совершенной сер- висной программой и имеет технический характер. У нее доволь- но грубая командная структура и сложный пользовательский ин- терфейс, но тем не менее она выполняет свои функции. Если программа DEBUG достаточно сложная, но обладает ши- рокими возможностями, то моя программа NU гораздо проще, но и возможностей у нее меньше. NU была задумана как наиболее простая программа для пользователей-неспециалистов. Я создал эту программу потому, что большинство сервисных программ со- здается одними программистами экстракласса для других про- граммистов экстракласса. Это вполне удовлетворяет их потребно- стям, а потребности обычных пользователей в расчет не принима- ются. Именно поэтому я хотел, чтобы моя программа NU была яс- ной и простой в использовании. Пограммы DEBUG и NU дают нам хороший пример программ- утилит с широким спектром возможностей. Конечно, существует множество других сервисных программ, и вам стоит изучить их, чтобы иметь более широкий выбор. Среди них есть такие, как TRACE-86 фирмы Morgan Computing, Professional Debug Facility, разработанная фирмой IBM, и Periscop фирмы Data Base Decisions. Это хорошие знакомые мне программы, а вы можете легко найти и другие (советую искать по таким источникам, как прекрасное из- дание PC Tech Journal). 22.2. Как работает программа DEBUG В этом разделе мы рассмотрим, что можно сделать с помо- щью программы DEBUG. DEBUG — это одна из утилит (дополни- тельных программ), включенных во все версии DOS, поэтому она находится в распоряжении каждого пользователя IBM PC. Как я уже объяснил в предыдущем разделе, DEBUG — это технический инструмент, предназначенный для нужд опытных про- граммистов, знающих микропроцессор IBM PC. Программа DEBUG предполагает также, что пользователь хорошо знаком с шестнадцатеричным кодом и сегментной организацией адресов. Пользуясь программой DEBUG, мы должны задавать команды и сегментированные адреса в шестнадцатеричном коде. Надеюсь, это не является для вас препятствием, в противном случае забудьте про DEBUG, пропустите этот раздел и перейдите 286
к следующему, в котором мы поговорим о программе NU. У программы DEBUG в действительности гораздо больше воз- можностей, чем мы сейчас увидим. Мы уже рассматривали, как действует в программе DEBUG команда U (unassemble — диас- семблировать), которую можно использовать для преобразования шестнадцатеричного кода команд машинного языка в более по- нятный формат языка ассемблера. С этой особенностью програм- мы DEBUG мы сталкивались в гл.6, рассматривая драйверы пре- рываний. У нее есть и другие возможности, позволяющие выпол- нять и обратные действия: команда A (assemble — транслировать с языка ассемблера) действует как ассемблер, преобразуя операто- ры на ассемблере в машинный код. Имеются у этой программы и средства, позволяющие проследить за выполнением каждого шага программы. Все это очень интересно, но в данной книге мы этим заниматься не будем, так как такие вопросы относятся к более уг- лубленному этапу обучения программированию. Мы с вами разберем только те команды программы DEBUG, которые позволяют заглянуть внутрь памяти компьютера. Начнем с общих данных об этой программе. Вам надо немного привыкнуть к тому, что программа DEBUG работает без особого сервиса и не очень старается приспособиться к нам. Когда мы запускаем программу с помощью простой ко- манды DEBUG, она выдает нам приглашение к вводу команд, ана- логичное приглашению DOS. Приглашение DEBUG даже короче - это просто дефис -. Когда мы видим такое приглашение на экра- не, то это означает, что программа DEBUG готова к вводу команд. Все команды имеют однобуквенную аббревиатуру. Мы начнем с команды завершения работы программы DEBUG и возврата в DOS: это команда О (сокращение от Quit — заканчивать). Одна из основных команд, которыми мы будем активно поль- зоваться, — это команда D (display — напечатать на экране). По этой команде DEBUG печатает на экране содержимое машинной памяти. Программа DEBUG показывает его в шестнадцатеричном и символьном виде. Например, команда D может показать нам следующее: 2В68:0100 66 7F 06 06 0F 00 00 00-0А 0F 00 00 7F 60 60 60 f. 2868:0110 7Е 03 03 63 ЗЕ 00 00 00-0А 0Е 00 00 1С 30 60 60 "...с>........О*1 2868:0120 7Е 63 63 63 ЗЕ 00 00 00-0А 0Е 00 00 7F 63 03 06 "ссс>......с.. 2В68:О13О ОС 18 18 18 18 00 00 00-0А 0Е 00 00 ЗЕ 63 63 63 ...........>ссс 2В68:О14О ЗЕ 63 63 63 ЗЕ 00 00 00-0А 0Е 00 00 ЗЕ 63 63 63 >ссс>......>ссс 2B68:0150 3F 03 03 06 ЗС 00 00 00-0А 0Е 00 00 00 18 18 00 ____ 2868:0160 00 00 18 18 00 00 00 00-0А 0Е 00 00 00 18 18 00 2868:0170 00 00 18 18 30 00 00 00-0А 0Е 00 00 06 ОС 18 30 ....0..........0 Эта информация состоит из трех частей: слева расположен ад- рес; в середине расположены сами данные в шестнадцатеричном 287
формате; справа находятся символы, соответствующие показан- ным шестнадцатеричным кодам. Программа DEBUG выдает в третьей части только те символьные данные, которые представля- ют собой обычные текстовые символы. В этом есть свои достоин- ства и недостатки: мы не видим все те интересные управляющие символы, которые заключены в компьютерных данных, но всегда их можем напечатать на принтере. Изображение данных в про- грамме NU, которую мы рассмотрим в разд.22.3, наоборот, вклю- чает в себя каждый символ, так что мы можем все их увидеть на экране, но не всегда сможем их распечатать на принтере). Программа DEBUG показывает любые данные, которые хранят- ся в памяти. Как мы убедились в гл.6, с помощью этой програм- мы можно заглянуть как в самое начало памяти (например, туда, где находятся векторы прерываний), так и в последние ее адреса, где хранятся подпрограммы ROM-BIOS. Мы еще остановимся на этом, а сейчас давайте посмотрим на ту область памяти, куда DEBUG загружает программы или другие данные с дисков, чтобы мы могли их анализировать. Например, если мы хотим воспользоваться программой DEBUG, чтобы просмотреть коды интерпретатора команд DOS COMMAND.COM, мы можем дать команду DEBUG загрузить COMMAND.COM в память и напечатать начало содержимого этого файла : DEBUG COMMAND.COM -D В результате мы получим следующее изображение (для удоб- ства я опустил начальную часть): 2682:1180 С4 06 56 8В F2 С7 44 01-00 0D 5Е CF 00 00 00 00 ..V...D...1. 2882:1190 0D ОА 0D ОА 54 68 65 20-49 42 4D 20 50 65 72 73 ....The I8M Pers 2882:11А0 6F 6F 61 6С 20 43 6F 6D-70 75 74 65 72 20 44 4F S..Version 3.10 2882:11 СО 28 43 29 43 6F 70 79 72-69 67 68 74 20 49 6Е 74 ernational 6usin 2682:11ЕО 65 73 73 20 4D 61 63 68-69 6Е 65 73 20 43 6F 72 ess Machines Cor 2682:11F0 70 20 31 39 38 31 2C 20-31 39 38 35 OD OA 20 20 p 1981, 1985.. По команде D (display — дисплей) на экране будет показано содержимое только 128 байтов текущей рабочей области. Для то- го чтобы нам была показана другая область памяти, нужно указать необходимый адрес следующим образом: D 1180. Если нужно по- казать содержимое больше чем 128 байтов, то к команде надо добавить букву L (lenth — длина) и указать число байтов в шест- надцатеричной системе счисления. Например, по команде D F800:0 L 300 на экране будет выведено содержимое 300 (или 768) байтов в шестнадцатеричном коде, начиная с младших адресов памяти в области ROM-BIOS. Команда D дает нам возможность исследовать машинную па- 2вг
г мять и дисковую информацию, но в программе DEBUG имеются и другие команды, которые мы можем очень эффективно исполь- зовать. Существует команда, позволяющая нам найти конкретные дан- ные, что очень Полезно для обнаружения сообщений, хранящихся внутри программ. Если мы знаем текст одного сообщения и вос- пользуемся программой DEBUG, чтобы его отыскать, то, скорее всего, мы обнаружим зону, где хранятся и другие сообщения, а они могут рассказать нам о многом. Делается это с помощью команды S (search — искать). Как и в случае с командой D, мы задаем команду поиска прописной бук- вой S, за которой идет адрес и длина области памяти, которую мы хотим исследовать. Затем мы сообщаем программе DEBUG, что нам надо найти: либо в шестнадцатеричном коде, либо как строку символов, заключенную в кавычках. Вот пример, который я сейчас поясню: S F 000:0 L FFFF "1790" Эта команда потребовалась, когда мой сосед включил свой IBM PC/AT и тот выдал ему сообщение об ошибке "1790", которое он не мог понять. Поскольку сообщение об ошибке появилось сразу после включения питания машины, стало ясно, что оно было час- тью подпрограммы самотестирования Power-On-Self-Test (POST), которая заложена в базовую систему ввода-вывода DOC. Для то- го чтобы разобраться в этом сообщении, я воспользовался про- граммой DEBUG, чтобы отыскать место расположения этого сооб- щения впамяти. С помощью указанной выше команды необходимо просмотреть всю область DOS-BIOS (начиная с адреса F000:0 на длину FFFF, т.е. все|$4К области DOS-BIOS) в поисках текста "1790". Программа DEBUG обнаружила сообщение и выда- ла на экране следующее: F000 : E3DB Таким образом, я узнал, где хранится это сообщение. Затем я воспользовался командой D, чтобы вывести на экран полный текст сообщения и область памяти вокруг него. Для этого я указал меньший адрес по отношению к тому, где было найдено сообще- ние "1790", задав команду D F000:E390. На экране появилось сле- дующее: F000:E390 72 0D 0А 31 37 38 30 2D-44 69 73 6В 20 30 20 46 r..1780-Disk 0 F F000:E3A0 61 69 6С 75 72 65 00 ОА-31 37 38 31 2D 44 69 73 ailure..1781-Dis F000:E3B0 6B 20 31 20 46 61 69 6C-75 72 65 0D 0А 31 37 38 k 1 Failure..178 F000:E3C0 32 2D 44 69 73 6B 20 43-6F 6E 74 72 6F 6C 6C 65 2-Disk Controlle F000:E30D 72 20 46 61 69 6C 75 72-65 0D 0A 31 37 39 30 2D г Failure..1790- 289 10 - 6472 >
F000:E3E0 44 69 73 6B 20 30 20 45-72 72 6F 72 0D OA 31 37 Disk 0 Error.. 17 F0001E3FO 39 31 2D 44 69 73 6B 20-31 20 45 72 72 6F 72 OD 91-Disk 1 Erroe. F000:E400 OA 32 01 04 00 00 80 00-00 00 00 00 00 31 01 11 .2 1.. Увидев полный текст этих сообщений, мой друг получил более четкое представление о том, что случилось с его компьютером. Это всего лишь один пример, который не может показать всего многообразия возможностей программы DEBUG, которыми мы пользуемся. Если вы хотите познакомиться с программой DEBUG ближе, то вы должны быть готовы к тому, что придется повозиться с некото- рыми техническими деталями, зато программа DEBUG вознаградит ваши усилия. И, хотя мы не можем останавливаться подробнее на всех тех чудесах, которые умеет делать DEBUG, я помогу вам, пе- речислив самые важные команды этой программы. Мы уже по- знакомились с командами D и S. Чтобы внести изменения в дан- ные, вам нужно познакомиться с командами Е (enter — ввести) и F (fill — запомнить). Для того чтобы считывать и записывать дан- ные, хранящиеся на магнитных дисках, вам потребуются команды L (load — загрузить) и W (write — записать). Если вы изучите ос- новы употребления этих команд, вы сможете пользоваться про- граммой DEBUG для того, чтобы проверять, изменять и исследо- вать любые данные, введенные в ваши компьютеры. Теперь перейдем к другой сервисной программе, научиться пользоваться которой будет значительно легче. 22.3. Работа с программой NU Программа NU, как и DEBUG, — это многоцелевая программа, которая может дать нам много информации о данных, хранящихся на дисках наших IBM PC. Важно подчеркнуть, что эта программа ориентирована именно на работу с дисками и не может быть ис- пользована для исследования компьютерной памяти, а также не работает с набором команд машинного языка (в отличие от про- граммы DEBUG с ее командами U и А). Однако в выдаче инфор- мации о компьютерных дисках NU не имеет себе равных. Для того чтобы пользоваться программой NU, если вы с ней еще не знакомы, вам надо просто выбирать из меню, нажимая на функциональные или цифровые клавиши. Клавиша ESC использу- ется для возвращения к предыдущему меню. Клавиши переме- щения курсора, помеченные стрелками, и клавиши перемещения страниц помогут вам работать с данными, выведенными на экран дисплея. 290
Конечно, NU, как большинство программ, имеет много воз- можностей, но самые интересные мы найдем в меню 2. Рассмотрим вид экрана при выборе позиции 2.2, который дает нам техническую информацию о любом диске (см. рис. 22.1). Menu 2.2 Display Disk Technical Information Drive C: Basic storage capacity: 20 million characters (megabytes) 17% of disk space is free Logical dimensions: Sectors are made up of 512 bytes Tracks are made up of 17 sectors per disk side There are 4 disk sides The disk space is made up of 614 cylinders Space for files is allocated in clusters of 4 sectors There are 10,405 clusters Each cluster is 2,048 bytes The disk’s root directory can hold 512 files Press any key to continue... Currently selected: No file or disk sector selected Drive C: Directory: PROGRAMS Рис.22.1. Пример технической информации о диске, выдаваемой программой NU на экран дисплея Содержимое экрана схематично представляет нам основную информацию о диске: общий объем пространства (и та часть, кото- рая доступна для пользователя), а также о его логической структу- ре (о которой мы говорили в гл. 8) — размер секторов, число секторов расположеных на дорожке и т.д. Это абсолютная инфор- мация о диске. Здесь же представлена информация, имеющая отношение к DOS, например какова величина кластера DOS (что связано с эффективностью использования диска) или какое число файлов может содержать корневой каталог диска. Выбор из меню пункта 2.2 — это универсальный способ полу- чения информации, которую можем использовать для выяснения параметров любого диска, который имеете.* в нашем распоряже- нии, включая и псевдодиски. Пользуясь им можно определить структуру любого диска. Еще более интересной, чем эта информация о диске, является техническая карта используемого дискового пространства (см.рис. 22.2). Дисковая карта представляет собой схему того, как исполь- зуется все дисковое пространство. Каждая позиция на этой карте — это маленькая порция общего объема диска. (Если дискета или диск содержит меньше чем 500 кластеров, то 291
каждый из них будет точно отображен на карте. Если имеется бо- лее 500 кластеров, то каждая позиция на карте будет соответство- вать приблизительному делению дискового пространства.) Заштрихованная часть карты отображает неиспользованное сво- бодное пространство диска, маленькие квадратики обозначают ис- пользуемое пространство. Если на диске есть испорченные зоны, то они тоже будут показаны (символом В на рис. 22.2). Menu 2.3. Map of Space Usage for the Entire Disk 17% of disk space is free Proportional Map of Disk Space ............................................................... В represents .................................................... represents space .................................................. bad in use .................................................. sectors ......................В...................B.B. ...........................................ВВ....Й-Й-.В. Press any key to continue___ Currently selected: No file or disk sector selected Drive C: Directory: PROGRAMS Рис.22.2. Пример информации о структуре диска, выдаваемой программой NU на экран дисплея Данная карта демонстрирует нам состояние всего диска, но мы можем получить и карту, на которой будет показано расположе- ние на диске любого индивидуального файла (или подкаталога, поскольку они хранятся так же, как и файлы). Такие карты индиви- дуальных файлов покажут нам, где находится файл (интересно, но, в общем, бесполезно), хранится ли он целиком в одном месте или разбросан по диску, а также дадут визуальное представление о величине файла (см. рис. 22.3). Информация о файле, показываемая при выборе позиции 2.4 меню, — это не просто карта с расположением файла, в чем вы убедитесь, рассматривая рис. 22.3. На этой карте содержится вся информация о файле, взятая из каталога, т.е. его имя, размер, да- та и время создания, а также другая информация, которую трудно получить другим способом, такая как координаты сектора и кла- стера, где хранится начало файла. 292
Menu 2.4 Display Information about a File Name: IBMBIO.COM Attributes: Read-Only Hidden System Date and time: Thursday, March 7, 1985, 1:43 pm Starting cluster number: 2 (sector number 115) Size: 9t564 bytes, occupying 5 clusters in 1 area of the disk Рис.22.3. Пример информации о структуре отдельного файла, выдаваемой программой NU на экран дисплея Если мы хотим просмотреть содержимое любого файла, запи- санного на диске, или данные сектора (как связанного, так и не связанного с каким-либо файлом), то с помощью программы NU это можно сделать, выбрав пункт 2.5 меню (см. рис. 22.4). С помощью программы NU можно получить информацию о диске в трех форматах. На рис. 22.4 приведен один из этих фор- матов: комбинация данных в шестнадцатеричном и символьном кодах, аналогичная формату программы DEBUG. Как вы видете на рис. 22.4, одни и те же данные показаны дважды: слева в шест- надцатеричном формате, справа — в символьном формате. Это позволяет нам анализировать данные в и< естественной форме (т.е. в шестнадцатеричном представлении), а также легко распоз- навать встречающиеся текстовые сообщения. Пример, который я выбрал для рис. 22.4, один из моих люби- мых, поскольку он иллюстрирует две интересные детали изучения содержимого файлов. Информация на экране дисплея из сервис- ной программы DOS Free Display показывает, что эта программа разработана фирмой IBM, и даже указывает имя автора: Р.Флэй- вин. Если вы просто используете эту программу, то даже не узна- ете, кто написал ее или какой фирмой она разработана. Это никог- да не сообщается пользователю. Здесь же мы видим это благо- даря нашему инструменту — программе NU. Я часто нахожу подобную скрытую информацию, когда загля- 293
дываю внутрь программы. Там можно найти массу интересного. Однажды я натолкнулся на приветствие женам авторов програм- мы. TREED. COM sectors 27,559-27,562 E9B7020D 0A444F53 20547265 65204469 63292043 6F707972 69676874 20496Е74 616С2042 7573696Е 65737320 4D616368 706F7261 74696F6E 20313938 340D0A62 20412Е20 466С6176 696Е2020 20524942 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6620796F 75207765 72652073 7570706F 61766520 65787465 6E74696F 6E73206F 6F727920 6E616D65 732С2074 68657265 68617665 20626565 6Е206578 616D706C 20696Е20 74686520 444F5320 6D616E75 45454420 2D2D2044 Press Enter for Cursor at offset 0, hex 0 73706C61 790D0A28 17...DOS Tree Display..( 65726E61 74696F6E c) Copyright Internation 696E6573 20436F72 al Business Machines Cor 7920526F 62657274 poration 1984..by Robert 4F0D0A1A 00770000 A. Flavin RIBO....W.. 00000000 00000000 ......................... 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000000 ........................ 00000000 00000049 ......................1 73656420 746F2068 f you were supposed to h 6E206469 72656374 ave extent ions on direct 20776F75 6C640D0A ory names, there would.. 6573206F 66206974 have been examples of it 616C210D 0A245452 in the DOS manual!..STR help EED - - D Рис.22.4. Пример отображения на экране дисплея в шестнадцатеричном формате программой NU информации, хранящейся на диске Возвращаясь к нашему примеру, мы видим в нижней части изображения на рис. 22.4 возмущенное (и с орфографическими ошибками) замечание Р. Флэйвина, который жалуется на исполь- зование расширений имен файлов в каталоге. Как ни странно, про- грамма никогда его не выдает, а здесь мы можем его прочесть. Программа NU позволяет нам внести непосредственные изме- нения в данные, записанные на дисках и выведенные на экране дисплея. Мы можем непосредственно отредактировать эти дан- ные. Все, что нам нужно сделать, — это подвести курсор к тому участку, который мы хотим изменить (все равно, изображен он в шестнадцатеричном или в символьном формате), и впечатать из- менения в существующие данные. Это делает NU и похожие на нее программы более удобным образом, чем программа DEBUG. С помощью такого инструмента становится довольно 294
удобным ставить "заплаты" на диск. Когда я упоминал об изображении данных (позиция 2.5 меню), я сказал, что существует три формата, с помощью которых NU вы- дает нам данные с диска. С одним вы уже познакомились. Другой формат — это печать файлов в чистом текстовом виде. Он похож на символьный вид в смешанном шестнадцатерично-символьном изображении, но в этом случае информация делится на строки в соответствии с тем, как они расположены в текстовых файлах (Это очень полезно, чтобы разобраться в текстовых данных.) В третьем формате, представленном на рис. 22.5, данные интерпретируются как элементы каталога. Это позволяет нам легко расшифровывать информацию подкаталога, когда мы с этим сталкиваемся. Sector 84 in root directory shown in directory format Filename Ext Size Date Time Cluster Attributes PC-TALK Sun Jul 7 85 12:02 pm 5,136 Directory PNCI Sun Jul 7 85 12:02 pm 5,282 Directory PROGRAMS Sun Jul 7 85 12:02 pm 5,714 Directory SYMPHONY Sun Jul 7 85 12:06 pm 7,798 Directory ТАРЕ Sun Jul 7 85 12:06 pm 8,500 Directory ADDRESS 640 Tue Feb 26 85 10:55am 33 EMPTY 1 Sat Jan 8 83 10:26 am 34 ENDPAGE 2 Mon May 13 85 10:39 pm 35 « INFO 4,480 Fri Jun 21 85 1:07 pm 36 MOUSE Sun Jul 7 85 9:12 pm 8,618 Directory FWSPOOL 005 73,779 Fri Jun 21 85 4:52 pm 40 APPOINT APP 651 Tue Jun 4 85 4:99 pm 77 NORTON BAK 384 Mon Jul 8 85 9:32 am 22 NORTON PRO 384 Mon Jul 8 85 9:34 am 24 SOCHA Mon Jul 8 85 4:29 pm 23 Directory WORD Tue Jul 9 85 6:58 pm 25 Directory Press Enter for help Рис.22.5. Пример отображения на экране дисплея в формате каталога программой NU информации, хранящейся на диске Любые данные, которые мы читаем с диска с помощью NU, могут быть изображены в любом из этих трех форматов. Мы мо- жем просмотреть одни и те же данные всеми тремя способами, используя все форматы. Это дает нам больше возможностей для работы с данными и делает эту работу более гибкой. Пользуясь возможностью программы NU выдавать на экран и изменять данные, мы можем добраться до любой части дисков DOS, посмотреть, что там записано, а если необходимо, то и моди- фицировать эти данные — либо просто редактируя их, либо вос- станавливая испорченные участки. Я могу привести вам из моей собственной практики пример, когда это бывает нужно. Две программы DOS, которые называются BACKUP и RESTORE, 295
используются для того, чтобы сделать резервные копии данных на гибких дисках. В ранней версии DOS программа BACKUP при записи на одну из резервных дискет неверно подставляла в имя одного из файлов шестнадцатеричный 0. Эта маленькая ошибка делала невозможным восстановление скопированных на дискеты данных, что было настоящей катастрофой. К счастью, когда это случилось со мной, я воспользовался программой NU, чтобы про- никнуть в область данных испорченной дискеты, изучил содержи- мое и обнаружил, в чем была ошибка. После этого мне осталось только заменить ошибочный шестнадцатеричный 0 на правильный символ. Эта простая и легкая работа была бы невозможна без такого инструмента для исследования и редактирования данных на диске, как программа NU. В этом случае программа NU помогла мне сохранить данные целого жесткого диска! Это прекрасный пример того, почему по- лезно иметь такой инструмент под рукой и уметь им пользоваться. Задания 1. Используя программу DEBUG, найдите в ПЗУ вашего персонального ком- пьютера сообщение об авторских правах на ROM-BIOS. Для этого выполните в программе DEBUG команду D F800:0, а затем повторяйте команду D, пока не найдете это сообщение. Если не получилось, попробуйте начать с исследования области FOOD :0. 2. Если в вашем распоряжении есть программа NU, воспользуйтесь ею, что- бы выяснить параметры всех дисков, которые вы используете. О чем говорят вам эти цифры? 3. С помощью программы NU (если она у вас есть) сделайте копию какой- либо из ваших дискет и попробуйте внести в нее изменения. Найдите корневой каталог и поменяйте имя одного из файлов, надпечатав изменение поверх ста- рого имени. Проверьте, получилось пи это у вас. 4. Используя возможность программы NU выдавать одни и те же данные как в шестнадцатеричном формате, так и в формате каталога, выведите на экран дисплея часть каталога вашего диска, а затем попробуйте найти, где именно каждая из частей каталога (имя расширения, дата и размер) записана в шест- надцатеричном представлении. Изменяя данные, записанные в шестнадцате- ричном представлении, и сравнивая, что изменилось в изображении каталога в текстовом формате, вы получите подсказку, где вы выполняете свои упражне- ния. 296
Приложение А ТЕКСТЫ ПРОГРАММ MAZE — "От СТАРТа к ФИНИШу" (Введение) 1000 'Little Maze Program, Corp. 1985 Refer Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 WHILE NOT.YET.DONE 1040 GOSUB 3000 'воспроизведение звука 1050 GOSUB 4000 'выбор расстояния 1060 GOSUB 5000 'движение 1070 GOSUB 6000 'проверка на завершение 1080 GOSUB 7000 'выбор направления 1090 WEND 1100 GOSUB 8000 'сообщение об удаче и окончание 2000 ' 2010 'подпрограмма: сделать предварительные действия 2020 ' 2030 DEFINIT A-Z 2040 KEY OFF : SCREEN0: WIDTH 80 : CLS 2050 RANDOMIZE TIME 2060 NOT.YET.DONE = 1 2070 BOX.FOREGROUND = 0 : BOX.BACKGROUND = 7 2080 CURRENT.ROW = 1 : CURRENT.COL = 1 2090 MASSAGES = 'СТАРТ ' : GOSUB 2500 2100 CURRENT.ROW = 22 : CURRENT.COL = 68 2110 MASSAGES = 'ФИНИШ!' : GOSUB 2500 2120 CURRENT.ROW = 2 : CURRENT.COL = 10 : DIRECTION = 1 2130 SOUND.TIME = 100 : PLAY "MB” : SOUND.CANCEL = 1 2140 SOUND.BASE = 50 ,2150 LOCATE 2,9,0 : PRINT CHR$(204); 2160 COLOR 7,0 : MOVING.CHARACTER = 205 . 2170 RETURN 2500 ' 2510 'Подпрограмма: рисование рамки для сообщения 2520 ' 2530 COLOR BOX.FOREGROUND,BOX.BACKGROUND 2540 LOCATE CURRENT.ROW, CURRENT.COL 2550 PRINT CHR$(201);STRIHG$(LEN(MASSEGE$),205);CHR$(187); 2560 LOCATE CURRENT.ROW + 1, CURRENT.COL 2570 PRINT CHR$(186);MASSEGE$; CHR$(186); 2580 LOCATE CURRENT.ROW + 2, CURRENT.COL 2590 PRINT CHR$(200);STRIHG$(LEN(MASSEGE$),205);CHR$(188); 2600 RETURN 3000 ' ‘ ЗОЮ 'Подпрограмма воспроизведения звука 3020 ' 3030 IF SOUND.CANCEL THEN SOUND 100,0 'отмена предыдущего 3040 SOUND SOUND.BASE+ 750.RND,SOUND.TIME 3050 RETURN 4000 ' 4010 'Подпрограмма выбора расстояния 4020 ' 4030 IF DIRECTION _____ - 1 THEN LIMIT = 78 - CURRENT.COL 4040 IF DIRECTION = 2 THEN LIMIT = CURRENT.COL - 2 297 11 - 6472
4050 IF DIRECTION = 3 THEN LIMIT = CURRENT.ROW - 2 4060 IF DIRECTION = 4 THEN LIMIT = 23 - CURRENT.ROW 4070 IF LIMIT < 1 THEN LIMIT = 1 4080 DISTANCE = INT (RND . (LIMIT + 1) ) 4090 RETURN 5000 ' 5010 'Подпрограмма движения 5020 ’ 5030 FOR I = 1 TO DISTANCE 5040 LOCATE CURRENT.ROW, CURRENT.COL 5050 PRINT CHR$(MOVING.CHARACTER); 5060 GOSUB 5500 5070 NEXT 5080 RETURN 5500 ' 5510 'Подпрограмма изменения местоположения 5520 ' 5530 IF DIRECTION = 1 THEN CURRENT.COL = CURRENT.COL + 1 5540 IF DIRECTION = 2 THEN CURRENT.COL = CURRENT.COL - 1 5550 IF DIRECTION = 3 THEN CURRENT.ROW = CURRENT.ROW - 1 5560 IF DIRECTION = 4 THEN CURRENT.ROW = CURRENT.ROW + 1 5570 LOCATE CURRENT.ROW, CURRENT.COL 5580 RETURN 6000 ' 6010 'Подпрограмма проверки на завершение 6020 ' 6030 IF CURRENT.ROW < 22 THEN RETURN 6040 IF CURRENT.COL < 68 THEN RETURN 6050 NOT.YET.DONE = 0 6060 RETURN 7000 ' 7010 'Подпрограмма выбора направления и поворота 7020 ' 7030 RIGHT.TURN = INT (RND « 2 ) 7040 RIGHT.TURN = 1 - RIGHT.TURN 7050 IF DIRECTION = 1 THEN NEW.DIRECTION = 3 + RIGHT.TURN 7060 IF DIRECTION = 2 THEN NEW.DIRECTION = 4 - RIGHT.TURN 7070 IF DIRECTION = 3 THEN NEW.DIRECTION = 2 - RIGHT.TURN 7080 IF DIRECTION = 4 THEN NEW.DIRECTION = 1 + RIGHT.TURN 7090 IF NEW.DIRECTION = 1 THEN CURRENT.COL>75 THEN GOTO 7040 7100 IF NEW.DIRECTION = 2 THEN CURRENT.COL< 5 THEN GOTO 7040 7110 IF NEW.DIRECTION = 3 THEN CURRENT.ROW< 5 THEN GOTO 7040 7120 IF NEW.DIRECTION = 4 THEN CURRENT.ROW>20 THEN GOTO 7040 7130 IF DIRECTION = 1 AND RIGHT.TURN = 0 THEN TURN.CHAR = 188 7140 IF DIRECTION = 1 AND RIGHT.TURN = 1 THEN TURN.CHAR = 187 7150 IF DIRECTION = 2 AND RIGHT.TURN = 0 THEN TURN.CHAR = 201 7160 IF DIRECTION = 2 AND RIGHT.TURN = 1 THEN TURN.CHAR = 200 7170 IF DIRECTION = 3 AND RIGHT.TURN = 0 THEN TURN.CHAR = 187 7180 IF DIRECTION = 3 AND RIGHT.TURN = 1 THEN TURN.CHAR = 201 7190 IF DIRECTION = 4 AND RIGHT.TURN = 0 THEN TURN.CHAR = 200 7200 IF DIRECTION =4 AND RIGHT.TURN = 1 THEN TURN.CHAR = 188 7210 PRINT CHR$(TURN.CHR); 7220 IF DIRECTION < 3 THEN MOVING.CHARACTER = 205 7230 IF DIRECTION > 2 THEN MOVING.CHARACTER = 186 7240 GOSUB 5500 7250 RETURN 8000 ' 8010 'Сообщения об удаче и окончании 8020 ' 8030 SOUND 100,0 8040 CURRENT.ROW = 22 : CURRENT.COL = 66 298
8050 MASSAGES = 'Окончание программы 8060 SOUND.TIME = 2 : PLAY "MR 8070 SOUND.BASE = 1000: SOUND.CANCEL = 0 8080 FOR I = 1 TO 10 8090 BOX.FOREGROUND = 7 : BOX.BACKGROUND = 0 8100 GOSUB 2500 8110 GOSUB 3000 8120 BOX.FOREGROUND = 0 : BOX.BACKGROUND = 7 8130 GOSUB 2500 8140 GOSUB 3000 8150 NEXT 8160 BOX.FOREGROUND = 28: BOX.BACKGROUND = 15 8170 GOSUB 2500 8180 LOCATE 12,25 : COLOR 7,0 : SOUND 100,0 8190 PRINT ’’Нажмите любую клавишу для возврата в DOS..."; 8200 WHILE INKEY$ = : WEND 8210 SYSTEM HEXTABLE — генерация арифметических таблиц в шестнадцатеричном коде (гл.З) 1000 'Hex Arithmetic Tables, Corp. 1985 Peter Norton 1010 1020 FOR TYPE = I TO 2 1030 GOSUB 2000 'title 1040 FOR I = 0 TO 15 1050 FOR J = 0 TO 15 1060 GOSUB 3000 'вычисление значения 1070 NEXT J 1080 NEXT I 1090 GOSUB 4000 пауза 1010 NEXT TYPE 1110 SYSTEM 2000 ' 2010 ‘Заголовок таблицы 2020 ' 2030 KEY OFF : SCREEN 0: WIDTH 80 : CLS 2040 LOCATE 3,20 : COLOR 1 + 8 2050 PRINT ’’Hex"; 2060 IF TYPE = 1 THEN PRINT "Сложение"; 2070 IF TYPE = 2 THEN PRINT "Умножение 2080 PRINT " Таблица”; 2090 COLOR 7 + 8 2100 LOCATE 5,20 2110 FOR I = OTO 15 2120 PRINT HEX$(I); " ’’; 2130 NEXT I 2180 COLOR 7 2190 RETURN 3000 ' ЗОЮ 'Вычисление значения 3020 ' 3030 IF TYPE = 1 THEN X = I + J 3040 IF TYPE - 2 THEN X = I - J 3050 SHOWS = HEX$ (X) 3070 COL^= A 3 + 18 + (3-LEN(SHOW$)) 3080 LOCATE ROW,COL 3090 PRINT SHOWS; 3100 RETURN 299
4000 ’ 4010 'Пауза 4020 ' 4030 LOCATE 25,20 : COLOR 1 4050 COLOR*73MMMTe лк>^ю клавишУ Дпя продолжения...*’; 4060 WHILE INKEYS = ** " : WEND 4070 RETURN ALL-CHAR — печать всех символов IBM PC (гл.4) 1000 'Show All Characters, Corp. 1985 Peter Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 FOR CHAR.VALUE = 0 TO 255 1040 GOSUB 3000 'печать символа 1050 NEXT CHAR.VALUE 1060 GOSUB 4000 'завершение программы 2000 ' 2010 Подпрограмма: сделать предварительные действия 2020 ' 2030 DEFINT A-Z 2040 KEY OFF : SCREEN 0 WIDTH 80 : CLS 2050 LOCATE 3,25 : COLOR 1 2060 PRINT "Полный набор символов IBM PC"; 2070 VIDIO.SEGMENT = 0 2080 DEF SEG = &H40 : VIDIO.MODE = PEEK (&H49) 2090 IF VIDIO.MODE = 7 THE VIDIO.SEGMENT = &HB000 2100 IF VIDIO.MODE < 4 THE VIDIO.SEGMENT = &HB800 2110 IF VIDIO.MODE < >0 THE RETURN 2120 LOCATE 12,25 2130 PRINT "Ошибка: недопустимый видеорежим!"; 2140 GOSUB 4000 3000 ' ЗОЮ 'Подпрограмма : печать символа 3020 ' 3030 ROW = CHAR.VALUE MOD 16 + 5 3040 COL = (CHAR.VALUE \ 16) « 3 + 16 3050 SCREEN.OFFSET = ROW 160 + COL « 2 3060 DEF SEG = VIDEO.SEGMENT 3070 POKE SCREEN.OFFSET, CHAR.VALUE 3080 RETURN 4000 ' 4010 'Конец 4020 ' 4030 LOCATE 24,24 : COLOR 1 4040 PRINT "Нажмите любую клавишу для возврата в DOS..."; 4050 WHILE INKEYS = ” " : WEND 4060 SYSTEM REF-CHAR — Символы с соответствующими кодами (гл.4) 1000 'Character & Reference, Corp. 1985 Peter Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 FOR CHAR.VALUE = 0 TO 255 1040 GOSUB 3000 'напечатать символ 300 1090 NEXT CHAR.VALUE 1100 SYSTEM 2000 ' 2010 'Подпрограмма: сделать предварительные действия 2020 ' 2030 DEFINT A-Z 2040 KEY OFF : SCREEN 0 : WIDTH 80 2050 VIDIO.SEGMENT = 0 2060 DEF SEG = &H40 : VIDIO.MODE = PEEK (&H49) 2070 IF VIDIO.MODE = 7 THE VIDIO.SEGMENT = &HB000 2080 IF VIDIO.MODE < 4 THE VIDIO.SEGMENT = &HB800 2090 IF VIDIO.MODE < >0 THE RETURN 2100 LOCATE 12,25 2110 PRINT "Ошибка: недопустимый видеорежим!"; 2120 GOSUB 4000 : SYSTEM 3000 ' ЗОЮ 'Подпрограмма: печать символа 3020 ' 3030 IF CHAR.VALUE MOD 128 < 0 THEN GOTO 3080 3040 COLOR:7 CLS : COLOR 1 3050 LOCATE 3,25 : PRINT "Набор символов"; 3060 IF CHAR.VALUE = 0 THEN PRINT "1-й"; ELSE PRINT "2-й"; 3070 PRINT "Половина"; 3080 COLOR 7 3090 RELATIVE.CHAR = CHAR.VALUE MOD 128 3100 ROW = RELATIVE.CHAR MOD 16 3110 COL = (RELATIVE.CHAR \ 16) - 10 3120 SCREEN.OFFSET = ROW - 160 + COL + 814 3130 DEF SEG = VIDIP.SEGMENT 3140 POKE SCREEN.OFFSET, CHAR.VALUE 3150 LOCATE ROW + 6, COL + 1 3160 PRINT USING ”###"; CHAR.VALUE; 3170 PRINT " "; 3180 IF CHAR.VALUE < 16 THEN PRINT "0"; 3190 PRINT HEXS (CHAR.VALUE); 3200 IF CHAR.VALUE MOD 128 = 127 THEN GOTO 4000 3210 RETURN 4000 ' 4010 'Пауза 4020 ' 4030 LOCATE 24,27 : COLOR 1 4040 PRINT "Нажмите любую клавишу для продолжения..."; 4050 WHILE INKEYS = " " : WEND 4060 RETURN BOXES - Символы псевдографики для рисования рамок (гл.4) 1000 'Draw Line Boxes, Corp. 1985 Peter Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 FOR EXPANDED = 0 TO 1 1040 --------” 1050 1060 1070 1080 1090 1100 RESTORE FOR BOX-TYPE = 1 ТО 4 GOSUB 3000 ввод символов псевдографики GOSUB 4000 'печать заголовка IF EXPAND = 0 THEN GOSUB 5000 'рисование прямоугольника IF EXPAND = 1 THEN GOSUB 6000 'рисование прямоугольника NEXT BOX.TYPE 301
1110 GOSUB 2000 'пауза 1120 NEXT EXPANDED 1130 SYSTEM 2000 * 2020 -^°АПРогРамма: сДвлать предварительные действия 2030 DEFINT A-Z 2040 DIM CODES (6,6) 2050 KEY OFF : SCREEN 0 : WIDTH 80 2060 RETURN 3000 ; 3020 -^B°A опРеДеленнь,х символов псевдографики 3030 READ TITLE.STRING.$ 3040 FOR ROW = 1 TO 5 3050 FOR COL = 1 TO 5 3060 READ CODES (ROW,COL) 3070 NEXT COL 3080 NEXT ROW 3090 RETURN 4000 ' 4010 'Печать заголовка 4020 ' 4030 IF BOX.TYPE = 1 THEN BASE.ROW = 1 : BASE.COL= 5 4040 IF BOX.TYPE =2 THEN BASE.ROW = 1 : BASE.COL = 45 4050 IF BOX.TYPE = 3 THEN BASE.ROW= 13 : BASE.COL= 5 4060 IF BOX.TYPE = 4 THEN BASE.ROW= 13 : BASE.COL = 45 4070 LOCATE BASE.ROW, BASE.COL 4080 COLOR 9 4090 PRINT TITLE.STRING.$ 4100 COLOR 7 4110 RETURN 5000 ' 5010 'Рисование прямоугольника - сплошной 5020 ' 5030 SHOW.ROW = BASE.ROW 5040 FOR ROW = I TO 5 5050 TIMES = 1 5060 IF ROW = 2 OR ROW = 4 THEN TIMES = 3 5070 FOR I = 1 TO TIMES 5080 SHOW.ROW = SHOW.ROW + 1 5090 LOCATE SHOW.ROW, BASE.COL+ 4 5100 PRINT CHR$(CODES(ROW, 1 )); 5110 FOR J = 1 TO 9 5120 PRINT CHR$(CODES(ROW,2)); 5130 NEXT J 5140 PRINT CHR$(CODES(ROW,3)); 5150 FOR J = 1 TO 9 5160 PRINT CHR$(CODES(ROW,4)); 5170 NEXT J 5180 PRINT CHR$(CODES(ROW,5)); 5190 NEXT I 5200 NEXT ROW 5210 RETURN 6000 ' 6010 'Рисование прямоугольника - расширенный 6020 ' 6030 SHOW.ROW = BASE.ROW 6040 FOR ROW = 1 TO 5 6050 FOR TIMES = 1 TO 2 6060 SHOW.ROW = SHOW.ROW + 1 302
6070 LOCATE SHOW.ROW, BASE.COL + 3 6080 IF TIMES = 1 THEN GOSUB 6200 6090 IF TIMES = 1 THEN GOSUB 6400 6100 NEXT TIMES 6110 NEXT ROW 6120 RETURN 6200 ' 6210 'нарисованные линии 6220 ' 6230 PRINT " 6240 PRINT CHR$(CODES(ROW,1)); 6250 PRINT " "; 6260 PRINT CHR$(CODES(ROW,2)); 6270 PRINT " "; 6280 PRINT CHR$(CODES(ROW,3)); 6290 PRINT " "; 6300 PRINT CHR$(CODES(ROW,4)); 6310 PRINT" "; 6320 PRINT CHR$(CODES(ROW,5)); 6330 RETURN 6400 ' 6410 'печать числовых кодов 6420 ' 6430 FOR COL = 1 TO 5 6440 X = CODES.(ROW,COL) 6450 IF X = 32 THEN PRINT " 6460 IF X < > 32 THEN PRINT USING "### "; X; 6470 NEXT COL 6480 RETURN 7000 ' 7010 'Пауза 7020 ' 7030 LOCATE 25,1 7040 PRINT "Нажмите любую клавишу для продолжения...",* 7050 WHILE INKEY$ = " " : WEND 7060 RETURN . 8000 ' 8010 'Данные для рисования рамок 8020' 8100 DATA "Все виды двойных линий"; 8110 DATA 201, 205, 203, 205, 187 8120 DATA 186, 32, 186, 32, 186 8130 DATA 204, 205, 206, 205, 185 8140 DATA 186, 32, 186, 32, 186 8150 DATA 200, 205, 202, 205, 188 8200 DATA "Все виды одинарных линий"; 8210 DATA 218, 196, 8220 DATA 179, 32, 8230 DATA 195, 196, 8240 DATA 179, 32, 8250 DATA 192, 196, 8300 DATA "Двойные 8310 DATA 214, 196, 8320 DATA 186, 32, 8330 DATA 199, 196, 8340 DATA 186, 32, 8350 DATA 211, 196, 8400 DATA "Двойные 8410 DATA 213, 205, 8420 DATA 179, 32, 8430 DATA 198, 205, 8440 DATA 179, 32, 194, 196, 191 179, 32, 179 197, 196, 180 179, 32, 179 193, 196, 217 вертикальные линии"; 210, 196, 183 186, 32, 186 215, 196, 182 186, 32, 186 208, 196, 189 горизонтальные линии"; 209, 205, 184 179, 32, 179 216, 205, 181 179, 32, 179 303
8450 DATA 212, 205, 207, 205, 190 MSG-HUNT — Поиск сообщений в ROM-BIOS (гл.7) 1000 'ROM-BIOS Message Hunt, Corp. 1985 Peter Norton 1020 GOSUB 2000 'сделать предварительные действия 1030 WHILE OFFSET < = 65535 1040 GOSUB 3000 'поиск текста сообщений 1050 OFFSET = OFFSET + 1 1060 WEND 1070 GOSUB 5000 'завершение программы 2000 ' 2020 'Г*РогРамма: сД®лать предварительные действия 2030 KEY OFF : SCREEN 0: WIDTH 80 : CLS 2040 LOCATE 2,1 : COLOR 7 2050 PRINT "Просмотр текста BIOS для выявления сообщений" 2060 PRINT 2070 OFFSEY . 0 2080 DEF SEG = &HF000 2090 RETURN 3000 ' ЗОЮ 'Подпрограмма: поиск текста сообщения 3020 ' 3030 MESSAGE.$ = " 3040 COLOR 7 3050 PRINT "Поиск c F000:"; 3060 PRINT HEX! (OFFSET); 3070 LOCATE, 1 3080 BYTE = PEEK (OFFSET) 3090 WHYLE ((BYTE» = ASC(" "))AND(BYTE < = ASC("Z"))) 3100 MESSAGE.$ = MESSAGE.$ + 1 3110 OFFSET = OFFSET + 1 3120 BYTE = PEEK (OFFSET) 3130 IF LEN (MESSAGE.$) » 100 THEN RETURN 3140 WEND 3150 IF LEN (MESSAGE.!) » 4 THEN GO TO 4000 3160 RETURN 4000 ' 4010 'Печать найденного сообщения 4020 ’ 4030 COLOR 7 4040 PRINT "At FOOO:"; 4050 PRINT HEX! (OFFSET); 4060 PRINT "Найдено сообщение: "; 4070 COLOR 1 4080 PRINT MESSAGE.!; 4090 COLOR 7 4100 PRINT 4110 RETURN 5000 ' 5010 'Завершение программы 5020 ' 5030 COLOR 1 5040 PRINT , 5050 PRINT "Нажмите любую клавишу для возврата в DOS... *; 5060 WHILE INKEY! = " " : WEND 304
5070 SYSTEM VID-MODE — Демонстрация видеорежимов (гл.11) 1000 "Experiment with Video Modes, Corp. 1985 Peter Norton 1010 " 1020 'следующий шаг необходим только для PCjr 1030 ON ERROR GOTO 1130 : CLEAR 32763 1040 GOSUB 2000 'сделать предварительные действия 1050 FOR MODE = 0 TO 10 1060 GOSUB 3000 описать режим 1070 GOSUB 9000 'пауза 1080 GOSUB 5000 'установить режим 1090 GOSUB 7000 'проверить результаты 1100 GOSUB 9000 'пауза 1110 NEXT MODE 1120 SYSTEM 'окончание программы 1130 RESUME NEXT 2000 ' 2010 'Подпрограмма: сделать предварительные действия 2020 ' 2030 KEY OFF : SCREEN 0: WIDTH 80 : CLS 2040 LOCATE 2,10 : COLOR 7 2050 PRINT "Демонстрация видеорежимов" 2060 PRINT 2070 PRINT "Первоначально установлен видеорежим: "; 2080 DEF SEG = 0 2090 PINT PEEK (&H449) 2100 PRINT 2110 RETURN 3000 ' ЗОЮ 'Описать режим для дальнейшей его установки 3020 ' 3030 PRINT "Пытаемся переключиться в режим ";МООЕ;"который" 3040 ON MODE + 1 GOTO 4000,4010,4020,4030,4040,4050,4060,4070,4080,4090,4100 3050 RETURN 4000 PRINT "цветной, текстовой, 40-колонный, без цвета" 4005 RETURN 4010 PRINT "цветной, текстовой, 40-колонный, с цветом" 4015 RETURN 4020 PRINT ""цветной, текстовой, 80-колонный, с цветом" 4025 RETURN 4030 PRINT ""цветной, текстовой, 80-колонныГ, без цвета" 4035 RETURN 4040 PRINT "цветной, графический, среднего разрешения, с цветом" 4045 RETURN 4050 PRINT "цветной, графический, среднего разрешения, без цвета" 4055 RETURN 4060 PRINT "цветной, графический, высокого разрешения, два цвета" 4065 RETURN 4070 PRINT "стандартный монохромный" 4075 RETURN 4080 PRINT "PCjr, графический, низкого разрешения, с цветом" 4085 RETURN 4090 PRINT "PCjr, графический, среднего разрешения, с цветом" 4095 RETURN 4100 PRINT "PCjr, графический, высокого разрешения, с цветом" 4105 RETURN 305
5000 * 5010 'Пытаемся установить режим 5020 ' 5030 ON ERROR GOTO 5060 5040 ON MODE ♦ 1 GOTO 6000,6010,6020,6030,6040,6050,6060,6070,6080,6090,6100 5050 RETURN 5060 RESUME 5050 6000 SCREEN 0,0 : WIDTH 40 6010 SCREEN 0,1 : WIDTH 40 : RETURN 6020 SCREEN 0,0 : WIDTH 80 : RETURN 6030 SCREEN 0,1 : WIDTH 80 : RETURN 6040 SCREEN 0,0 : RETURN 6050 SCREEN 0,1 : RETURN 6060 SCREEN 2 : RETURN 6070 SCREEN 0 : RETURN 6080 SCREEN 3 : RETURN 6090 SCREEN 5 : RETURN 6100 SCREEN 6 : RETURN 7000 ' 7010 'Проверка активного режима 7030 CURRENT.MODE = PEEK (&H449) 7040 PRINT "Текущий режим"; CURRENT.MODE 7050 PRINT "Который , 7060 IF MODE < > CURRENT.MODE THEN PRINT "NOT"; 7070 PRINT "требуемый режим" 7080 RETURN 9000 ' 9010 'Пауза 9020 ' 9030 PRINT 9040 PRINT "Нажмите любую клавишу для продолжения..."; 9050 WHILE INKEYS = " " : WEND 9060 PRINT : PRINT 9070 RETURN COLORTXT - Демонстрация всех цветов в текстовом режиме (гл. 12) 1000 'CLOR-TXT Show Text Colors, Corp. 1985 Peter Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 FOR ATTRIBUTE = 0 TO 255 1040 GOSUB 3000 'показать атрибут 1050 NEXT ATTRIBUTE 1060 SYSTEM 2000 ' 2010 Подпрограмма: сделать предварительные действия 2020 * 2030 DEFINT A-Z 2040 KEY OFF : SCREEN 0 ; WIDTH 80 2050 VIDIO.SEGMENT = 0 2060 DEF SEG = &H40 : VIDIO.MODE = PEEK (&H49) 2070 IF VIDIO.MODE = 7 THE VIDIO.SEGMENT = &HB000 2080 IF VIDIO.MODE < 4 THE VIDIO.SEGMENT = &HB800 2090 IF VIDIO.MODE < > 0 THE RETURN 2100 LOCATE 12,25 2110 PRINT "Ошибка: недопустимый видеорежим!" 306
2120 GOSUB 4000 : SYSTEM 3000 ' ЗОЮ 'Подпрограмма: показать каждый атрибут 3020 ’ 3030 IF ATTRIBUTE MOD 128 > 0 THEN GOTO 3080 3040 COLOR:7 CLS : COLOR 1 3050 LOCATE 3,25 : PRINT "Атрибуты текстового цветного режима"; 3060 IF ATTRIBUTE = 0 THEN PRINT "l-й"; ELSE PRINT "2-й"; 3070 PRINT "Половина”; 3080 COLOR 7 3090 RELATIVE.CHAR = ATTRIBUTE MOD 128 3100 ROW = RELATIVE.CHAR MOD 16 3110 COL = (RELATIVE.CHAR \ 16) - 10 3120 SCREEN.OFFSET = ROW. 160 + COL + 814 3130 DEF SEG = VIDIP.SEGMENT 3140 POKE SCREEN.OFFSET, 88 "буква X 3150 POKE SCREEN.OFFSET+ 1, ATTRIBUTE 3160 LOCATE ROW+ 6, COL+ 1 3170 PRINT USING "###"; ATTRIBUTE ; 3180 PRINT " 3190 IF ATTRIBUTE < 16 THEN PRINT "0"; 3200 PRINT HEX$ (ATTRIBUTE); 3210 IF ATTRIBUTE MOD 128 = 127 THEN GOTO 4000 3220 RETURN 4000 ' 4010 'Пауза 4020 ' 4030 LOCATE 24,27 : COLOR 1 4040 PRINT "Нажмите любую клавишу для продолжения ..."; 4050 WHILE INKEY$ = " " : WEND 4060 RETURN GRAPHTXT — текстовые символы в графических режимах (гл. 13) 1000 'GRAF-TXT Graphics Characters, Corp. 1985 Peter Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 FOR CHAR.CODE = 0 TO 255 1040 GOSUB 3000 'показать символ 1050 NEXT CHAR.CODE 1060 GOSUB 4000 1070 SYSTEM 2000 ' 2010 'Подпрограмма: сделать предварительные действия 2020' 2030 DEFINT A-Z 2040 KEY OFF : SCREEN 0,1 : WIDTH 80 2050 PAUSE = 0 2060 VIDIO.SEGMENT = 0 # 2070 DEF SEG = &H40 : VIDIO.MODE = PEEK (&H49) 2080 IF VIDIO.MODE = 7 THE VIDIO.SEGMENT = &HB000 2090 IF VIDIO.MODE < 4 THE VIDIO.SEGMENT = &HB800 2100 IF VIDIO.MODE <>0 THE RETURN 2110 LOCATE 12,25 2120 PRINT "Ошибка: недопустимый видеорежим!' 2130 GOSUB 4000 : SYSTEM 3000 ' 307
ЗОЮ 'Подпрограмма показать символ 3020 * 3030 CLS 3040 LOCATE 2,5 3050 PRINT "Рисование текстовых символов в графическом режиме" 3060 LOCATE 5,5 3070 PRINT "Для символа с кодом"; CHAR.CODE 3080 LOCATE 6,5 3090 PRINT "Символ" 3100 DEFSEG = VIDIO.SEGMENT 3110 POKE 828, CHAR.CODE 3120 DEF SEG = &HF000 3130 FOR SCAN.LINE = 0 TO 7 3140 BIT.CODE = PEEK (&HFA6E + SCAN.LINE + CHAR.CODE » 8) 3150 LOCATE 8 + SC AN.LINE,5 3160 FOR BITS = 1 TO 8 3170 IF BIT.CODE < 128 THEN SHOW$ = " " ELSE SHOWS = "XX” 3180 PRINT SHOWS; 3190 IF BIT.CODE > 127 THEN BIT.CODE - 128 3200 BIT.CODE = BIT.CODE " 2 3210 NEXT BITS 3220 NEXT SCAN.LINE 3230 LOCATE 18,5 3240 WHILE INKEY$ < > = " " : WEND 'очистка буфера клавиши 3250 PRINT "Нажмит любую клавишу для останова..."; 3260 FOR WAIT.A.SECOND = 1 ТО 2 3270 OLD.TIMES = TIMES 3280 WHILE OLD.TIMES = TIMES : WEND 3290 NEXT WAIT.A.SECOND 3300 IF INKEYS = "" THEN RETURN 3310 LOCATE 18,5 3320 PRINT "Сейчас нажмите любую клавишу для ПРОДОЛЖЕНИЯ ..."; 3330 WHILE INKEYS = " " : WEND 3340 RETURN 4000 * 4010 'Пауза 4020 ' 4030 LOCATE 18,5 4040 PRINT "Нажмите любую клавишу для возвращения в DOS..."; 4050 WHILE INKEYS = " " : WEND 4060 RETURN COLOR-4 — Демонстрация цветного графического режима (гл. 13) 1000 'Color-4: Demonstrate Mode 4, Corp. 1985 Peter Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 GOSUB 3000 этап I 1040 GOSUB 4000 этап 2 1050 GOSUB 5000 'этап 3 1060 GOSUB 6000 'этап 4 1070 SYSTEM 2000 ' 2010 'Подпрограмма сделать предварительные действия 2020 ' 2030 DEFINT A-Z 2040 KEY OFF : SCREEN 0,1 : WIDTH 40 2050 DEF SEG = &H40 : VIDIO.MODE = PEEK (&H49) 2060 IF VIDIO.MODE = 7 THE GOTO 2230 308
2070 LOCATE 3 2080 PRINT "Color-4: демонстрация 4-цветного режима" 2090 PRINT 2100 PRINT 2110 PRINT "Эта программа выполняется в четыре этапа" 2120 PRINT 2130 PRINT "Этап 1: показ предопределенной палитры цветов" 2140 PRINT 2150 PRINT "Этап 2: показ выбранного цвета" 2160 PRINT 2170 PRINT "Этап 3: высвечивание и гашение" 2180 PRINT 2190 PRINT "Этап 4: изменение палитры" 2200 PRINT 2210 GOSUB 7000 2220 RETURN 2230 PRINT "Эта программа не работает в монохромном режиме" 2240 GOSUB 7000 2250 SYSTEM 3000 ' ЗОЮ 'Этап 1 - показ предопределенной палитры цветов 3020 ' 3030 SCREEN 1,0 3040 COLOR 1,0 : CLS 3050 FOR C.NUM = 0 TO 3 3060 LOCATE 5 + C.NUM . 5, 1 + C.NUM « 5 3070 PRINT "Color"; C.NUM 3080 CIRCLE (90 + 60-C.NUM.45 + 30-C.NUM),40,C.NUM 3090 PAINT (90 + 60-C.NUM.45 + 30«C.NUM),C.NUM 3100 NEXT C.NUM 3110 FOR TIMES = 1 TO 10 3120 FOR PAL.NUM = OTO I 3130 COLOR .PAL.NUM 3140 LOCATE 2,10 3150 РР1НТ"Показывается палитра”; PAL.NUM 3160 NOW$ = TIMES 3170 WHILE TIMES = NOW$ : WEND 3180 NEXT PAL.NUM 3190 NEXT TIMES 3200 LOCATE 22 3210 GOSUB 7000 4000 ' 4010 'Этап 2 - показ выбранного цвета 4020 ' 4030 SCREEN 1,0 : CLS 4040 COLOR 0,1 4050 -------------- *е 4060 4070 4080 4090 4100 _______ 4110 NEXT COLOR.NUM FOR COLOR.NUM = 0 TO 15 LOCATE 3 + COLOR.NUM, 2 + COLOR.NUM COLOR .COLOR.NUM РР1НТ"Выбранный цвет"; COLOR.NUM NOW$ = TIMES WHILE TIMES = NOW$ : WEND 4120 COLOR 0 4130 LOCATE 22 4140 GOSUB 7000 4150 RETURN 5000 ' 5010 'Этап 3 - высвечивание и гашение 5020 ' 5030 SCREEN 1,0 5040 CLS 5050 COLOR 4,1 309
PAINT (1,1), 1 CIRCLE ( 80, 50),20,0 CIRCLE ( 80,150),20,0 CIRCLE (240, 50),20,0 CIRCLE (240,150),20,0 PAINT ( 80, 50),0 PAINT ( 80,150),0 PAINT (240, 50),0 PAINT (240,150),0 5060 5070 5080 5090 5100 5110 5120 5130 5140 5150 LOCATE 13,8 5160 PRINT "Высвечивание и гашение!" 5170 FOR I = 1 TO 50 5180 COLOR 3 + I MOD 2 5190 FOR J = 1 TO 250 : NEXT J 5200 NEXT I 5210 LOCATE 22 5220 GOSUB 7000 5230 RETURN 6000 ' 6010 'Этап 4 - изменение палитры 6020 ' 6030 SCREEN 1,0 : CLS 6040 COLOR 0,0 6050 CIRCLE (160,100),80,3 6060 PAINT (160,100),3 6070 CIRCLE (160,100),60,2 6080 PAINT (160,100),2 6090 CIRCLE (160,100),40,1 6100 PAINT (160,100),1 6110 CIRCLE (160,100),20,0 6120 PAINT (160,100),0 6130 LOCATE 13,17 6140 PRINT "Бум!" 6150 FOR I = 1 TO 100 6160 COLOR ,I MOD 2 6170 FOR J = 1 TO 50 : NEXT J 6180 NEXT I 6190 LOCATE 22 6200 GOSUB 7000 6210 RETURN 7000 ' 7010 Пауза 7020 ' 7030 PRINT 7040 PRINT "Нажмите любую клавишу для продолжения 7050 WHILE INKEY$ = " " : WEND 7060 RETURN KEY-BITS — Печать управляющих битов клавиатуры (гл.14) 1000 KEY-BITS Keyboard control bits, Copr. 1985 Peter Norton 1010 ' 1020 GOSUB 2000 'сделать предварительные действия 1030 WHILE CONTINUING 1040 GOSUB 3000 'показать данные 1050 WEND 2000 ' 2010 'Подпрограмма сделать предварительные действия 310
(16) = "Insert состояние" = "Caps Lock состояние" = "Num Lock состояние" = "Scroll Lock состояние" = "Alt нажата" = "Ctrl нажата" = "Левая клавиша Shift нажата" = "Правая клавиша Shift нажата" = "Ins нажата" = "Caps Lock нажата" = "Num Lock нажата" = "Scroll Lock нажата" = "Hold состояние активно" = "PCjr состояние: клавиши щелкают' = "(не используется)" = "(не используется)” 0 i' 2 । 3 i1 4 । 5' ' 6 / 7 8> ' 9'i 10) '111 12» 13i 14 15 16 2020 ' 2030 KEY OFF : SCREEN 0,1 : WIDTH 80 2040 CONTINUING = 1 : LOCATE „0 2050 DIM MSG.$ (16) 2060 MSG.S 7080 MSG.S 2080 MSG.S 2090 MSG.! I 2100 MSG.S 2110 MSG.!» 2120 MSG.!i 2130 msg.j; 2140 MSG.!; 2150 MSG.!; 2160 msg.;; 2170 MSG.:; 2180 MSG.!; 2190 MSG.!» 2200 msg.;; 2210 msg.:; 2220 CLS 2230 LOCATE 1,5 2240 PRINT "Печать управляющих битов; нажмите Enter для останова1 2250 LOCATE 3,5 2260 PRINT "Смотри изменения в действии, нажми эти клавиши:"; 2270 LOCATE 4.7 2280 PRINT "Обе клавиши, Ctrl, Alt, "; 2290 PRINT "Caps Lock, NumLock, ScroIlLock, Ins"; 2300 FOR I = 1 TO 16 2310----- --------- 2320 2330 2340 2350 NEXT I 2360 FOR J = 1 TO 8 2370 LOCATE 15, 5 + J>2 2380 PRINT CHR$ (179) 2390 NEXT J 2400 RETURN FOR J = 1 TO I LOCATE 24 - I - l\9, 5 + J-2 + J\9 PRINT CHR$(179) NEXT J 3000 ' ЗОЮ 'Подпрограмма: показать данные о состоянии 3020' 3030 DEF SEG = 0 3040 BITS = PEEK (&H417) « 256 + PEEK (&H418) 3050 FOR BIT = 1 TO 16 3060 3070 3080 3090 3100 3110 3120 3130 3140 NEXT BIT 3150 WHILE CONTINUING 3160 END.TESTS = INKEYS 3170 IF END.TESTS = (“ 3180 IF END.TESTS = ' ... 3190 WEND STATES = "0" IF BITS » = 32768 THEN STATES = "1" : BITS = BITS - 32768 BITS = BITS " 2 LOCATE 6,5 + BIT « 2 + BIT\9 PRINT STATES; LOCATE 24 - BIT - BIT\9,5 + BIT « 2 + BIT\9 PRINT CHR$(192); ">"; MSG.$ (BIT); IF STATES = "0" THEN PRINT "off"; ELSE PRINT " ON "; IF END.TESTS = CHR$(13) THEN SYSTEM IF END.TESTS = "" THEN RETURN 311
Mi • V - . V. . .'П . Приложение Б СЛОВАРЬ ТЕРМИНОВ Данный словарь терминов предназначен для краткого озна- комления читателей с основной, наиболее часто встречающейся компьютерной терминологией. Вы можете пользоваться этим сло- варем двумя способами — либо читать его весь, либо просматри- вать и находить интересующий термин, а затем уже читать кон- текст, в котором он употребляется. Б.1. Числа и система счисления ЭВМ работает только с двоичными числами. Это числа, состоя- щие из нулей и единиц (0 и 1). Двоичные разряды для краткости называются битами. Независимо от того, какую задачу выполняет компьютер, он всегда работает с битами. Даже знаки алфавита и десятичные числа представляются в двоичном виде. Но писать большое число битов, например 01010100111010101, неудобно, поэтому были разработаны более краткие системы счислений. Самой распространенной из них является шестнадцате- ричная система счисления, т.е. система счисления с основнанием 16. Шестнадцатеричные цифры имеют 16 значений: от 0 до 15; они записываются цифрами от 0 до 9, затем идет буква А (обозначает число 10), буква В (обозначает 11) и далее от С до F (со значения- ми от 12 до 15). Каждая шестнадцатеричная цифра соответствует комбинации четырех двоичных, т.е. 4 битам. (Другая система счисления, кото- рая редко используется в работе с компьютерами, называется восьмеричной и имеет цифры от 0 до 7, каждой из которых соот- ветствует 3 бита.) Биты, которыми пользуется компьютер, сгруппированы в более крупные единицы. Группа из 8 битов называется байтом. Посколь- ку шестнадцатеричная цифра кодируется 4 битами, то одним бай- том кодируются две шестнадцатеричные цифры (шестнадцатерич- ные цифры иногда называют полубайтами). Байт можно использо- вать для хранения 28 значений, т.е. 256 различных значений. Зна- чения могут интерпретироваться как числа или как символы (такие, например, как буквы алфавита). Один байт кодирует один символ, поэтому термины байт и символ иногда бывают взаимозаменяе- мыми. Буквы алфавита и десять цифр называются алфавитно-циф- ровыми символами, хотя иногда , этот термин используется более свободно и подразумевает любые текстовые данные. Когда байт кодирует символы, то необходимо иметь таблицу кодов, определяющую, какое цифровое значение будет соответ- 312
ствовать тому или иному символу. Самым распространенным яв- ляется Американский стандартный код для обмена информацией (ASCII). Прописная буква A ASCII имеет код 65 (в шестнадцатеричном представлении-41), буква В имеет код 66, и т.д. В код ASCII вклю- чены коды букв, чисел, знаков пунктуации и специальные управ- ляющие коды. В стандарте ASCII имеется только 128 различных кодов, для кодирования которых достаточно 7 битов. Символы ASCII почти всегда кодируются 8-разрядным байтом. 256 комби- нациями битов одного байта можно задать не только 128 кодов ASCII, но и еще 128 дополнительных кодов. Дополнительные 128 кодов иногда называют расширением таблицы ASCII. Коды ASCII стандартные, а расширение ASCII для различных компьютеров разное. Традиционно основные большие копьютеры фирмы IBM не ис- пользуют код ASCII для обозначения символов. Вместо этого они пользуются кодом EBCDIC (Расширенным двоично-десятичным кодом обмена информацией). Работая с нашими IBM PC, мы стал- киваемся с кодом EBCDIC только в особых случаях, например при работе с данными, которые были переданы с большой ЭВМ фир- мы IBM, или в немногочисленных программах, которые использу- ют код EBCDIC, в таких, например, как некоторые версии програм- мы подготовки текстов Display Write, разработанной фирмой IBM. ASCII данные или ASCII файл — это данные, состоящие скорее из текста, т.е. букв алфавита, знаков пунктуации и т.д., чем из чи- сел или других данных. Иногда термином ASCII пользуются для обозначения любых текстовых данных. Строго говоря, ASCII файл содержит не только коды ASCII для букв, пробелов, знаков пунк- туациии и т.д., но и стандартные коды ASCII, предназначенные для форматирования, такие как возврат каретки и конец файла. Когда байт используется для обозначения числа, то его 256 раз- личных значений могут интерпретироваться либо как положитель- ные числа от 0 до 255, либо как положительные и отрицательные числа от -128 до 127, которые обычно называются числами без знака (от 0 до 255) и числами со знаком (от -128 до 127). Для работы с большими числами несколько байтов используют- ся как единое целое, называемое обычно словом. У термина сло- во есть разные значения, но чаще всего имеются в виду 2 байта (16 бит) или 4 байта (32 бита). Применительно к персональным компьютерам, таким как IBM PC, слово обычно означает двухбай- товое (16-битовое) число. Двухбайтовое слово имеет 216 различных значений. Они могут использоваться в качестве чисел без знака, от 0 до 65535, либо в качестве чисел со знаком, от -32768 до 32767. Вы будете часто встречать эти специфические числа при рассмотрении ограничений ваших программ (таких как количество записей в базе данных). Для некоторых задач целые числа не всегда подходят. Когда
нам нужны дробные числа или широкий диапозон чисел, то ис- пользуется другой вид компьютерной арифметики - арифметика с плавающей запятой. Числа с плавающей запятой обычно представ- ляют собой приближенные неточные значения. Обычно нам до- ступно несколько форматов чисел с плавающей запятой, что дает различные степени точности: распространенными терминами для обозначения этого факта является термин одинарная точность и термин двойная точность. Числа с плавающей запятой иногда на- зываются действительными числами. Исходя из природы компьютерной арифметики и системы счис- ления элементы данных часто нумеруются, начиная с нуля для первого элемента, который называется нулевым начальным адре- сом. Счет начинается с нуля обычно в том случае, когда опреде- ляется ячейка памяти, относящаяся к какой-либо точке отсчета. Точка отсчета может называться по-разному, в том числе базовым адресом или начальным адресом. Относительное положение ча- ще всего называется смещением. Начиная с любого базового по- ложения в памяти, первый байт имеет нулевое смещение, а сле- дующий — единичное смещение и т.д. Б.2. Основные сведения о компьютерах Все механические и электронные части компьютерной системы называются аппаратными средствами. Программы, которые ис- пользует ЭВМ, называются программными средствами. Одно из ключевых понятий в компьютере — это память. Ком- пьютерная память состоит из большого числа ячеек, каждая из ко- торых имеет адрес и может хранить какое-то значение. Для боль- шинства компьютеров, включая и семейство IBM PC, ячейкой явля- ется байт, для других — слово. Адреса ячеек обозначаются числами. Значения, хранящиеся в каждой ячейке, могут быть найдены (т.е. считаны) или изменены (записаны). Когда программа считывает или записывает значения, она должна знать адрес ячейки памяти. Память некоторых компьютеров организована крупными мо- дульными блоками, которые часто называют страницами памяти. IBM PC не пользуется страницами памяти, но для удобства адреса- ции его память делится на группы из 16 байтов, называемые пара- графами (термин, выбранный, чтобы обозначить меньшее деле- ние, чем страница). Механизм адресации памяти в IBM PC исполь- зует две компоненты: сегментное значение, которое кратно грани- це параграфа, и относительное значение, которое указывает на байт, расположенный в заданном смещении относительно сегмен- та. Эти два значения, сегмент и смещение, необходимы для указа- ния полного адреса. Вместе они иногда называются адресным век- тором или просто вектором. 314
Объем компьютерной памяти обычно задается блоками по 1024 единицы, поскольку это круглое число в двоичном виде и почти круглое в десятичной системе счисления. Значение 1024 записыва- ется как К (сокращение от кило): 64К это 64 блока по 1024 едини- цы, т.е. 65536 единиц. Когда речь идет об общем объеме памяти, то под К почти всегда подразумевают 1024 байта, т.е. килобайт. Когда же говорят о полупроводниковых микросхемах, К обозначает 1024 бита. Иног- да в журнальных статьях пишут о микросхемах с объемом памяти в 16 Кбит (что равно 2 Кбайтам) или 64 Кбит (что равно 8 Кбайтам). Компьютер способен выполнять различные операции со значе- ниями, хранящимися в его памяти. Примерами подобных опера- ций могут служить арифметические действия (сложение и вычита- ние) и перемещение содержимого одной ячейки в другую. Вы- полнение операции задается командой или оператором. Последовательность компьютерных команд, выполняемых ПК для достижения определенной цели, называется программой. Программы также называют кодом. Та часть компьютера, которая интерпретирует программы и вы- полняет команды, называется процессором. Малые по, размеру процессоры, в частности те, которые состоят их одной интеграль- ной схемы, называются микропроцессорами. Создание персональ- ных компьютеров стало возможным именно благодаря развитию микропроцессоров. Строго говоря, компьютер - это машина, ко- торая включает в себя и процессор, и другие части, но иногда компьютером называют только его процессорную часть. Компьютерная память используется для хранения как данных, так и программ. Для памяти нет никакой разницы между данными и программами, а для процессора программой могут быть только те хранящиеся в памяти значения, которые представляют собой допустимые команды. Для того чтобы выполнить программу и чтобы обратиться к данным, используемым в программе, процес- сор считывает информацию из памяти и записывает информацию в нее. В своей работе компьютер используе? специализированную па- мять небольшого объема, которая не адресуется. Этот участок па- мяти называется регистровой памятью. Регистры делают более эффективным выполнение арифметических действий и помогают управлять адресами. Большинство современных компьютеров, в том числе и IBM PC, используют стек для хранения информации о состоянии. Данные помещаются в стек и извлекаются из его вершины по принципу "последним вошел-первым вышел". Когда компьютер использует общую магистраль передачи дан- ных (группу электрических соединений) между своими компонен- тами, то такой метод называется методом использования общей шины или магистрали. 315
Память и процессор являются внутренними компонентами ком- пьютера, а его многочисленные внешние компоненты называются обычно периферийными устройствами или периферией. Большая часть периферийных устройств соединяется с компьютером через вспомогательные электронные линии связи, которые называются адаптером. Для сопряжения с компьютером сложных перифе- рийных устройств, таких как дисковод, в состав адаптера включа- ются специальные логические каналы связи, совокупность которых называется контроллером.Часто контроллер сам по себе является специализированным компьютером. Периферийные устройства очень разнообразны, но все их мож- но разделить на несколько категорий. Периферийные запоминаю- щие устройства предназначены для хранения программ и данных, которые можно ввести в оперативную память компьютера. При- мерами периферийных запоминающих устройств могут служить флоппи-диски, кассеты магнитофонов и жесткие или несъемные диски, обладающие большим объемом для хранения данных. Другие периферийные устройства используются для взаимо- действия с человеком. Устройство, обеспечивающее взаимодейст- вие между человеком и ЭВМ, обычно называется терминалом. Терминал чаще всего состоит из клавиатуры (как у пишущей ма- шинки) и экрана (похожего на экран телевизора), который называ- ется дисплеем на электронно-лучевой трубке (ЭЛТ). Вместо экра- на дисплея может использоваться какое-нибудь печатающее уст- ройство или принтер. Экран дисплея часто называется монитором или просто дисплеем. Цветной дисплей может принимать цветные сигналы в комбинированной форме, которую называют составной (композитной), или разделяя их на красные, зеленые и синие цве- товые компоненты (RGB-сигналы). У больших компьютеров может быть много терминалов, а не- большие персональные компьютеры обычно работают только с одним терминалом, который может быть встроен прямо в компь- ютерную систему. Именно один терминал и делает персональный компьютер по-настоящему персональным. Другими видами периферийных устройств являются телефон- ные линии связи. Телефоны и компьютеры соединяются через та- кие технические компоненты, как модемы или асинхронные адап- теры. Эти термины широко используются для обозначения всей линии связи компьютер-телефон, которая называется коммуника- цией. Наиболее распространенным видом стандартных коммуни- каций является стандартный последовательный интерфейс, работа- ющий в соответствии с протоколом RS-232. Скорость передачи данных по коммуникационной связи измеряется в бодах (1 бод = 1 бит/с). Для того чтобы передать 1 байт в секунду, необходимо передать примерно 10 битов в секунду (включая биты данных и накладные расходы, т.е. контрольные биты). Для персональных компьютеров наиболее распространенными 316
являются скорости передачи данных в 300 и 1200 бод, при которых можно передать около 30 или 120 символов в секунду. Примени- тельно к персональным компьютерам связь RS-232 называется также последовательной связью или последовательным портом, поскольку данные передаются по 1 биту. С помощью параллель- ной связи можно передать одновременно больше 1 бита инфор- мации (обычно 8 бит): в этом режиме работает, например, адап- тер печатающего устройства IBM PC. Компьютерные печатающие устройства имеют много разновид- ностей. Наиболее распространенными для класса IBM PC являются матричные печатающие устройства, которые рисуют изображение с помощью отдельных точек. Высококачественные печатающие устройства обеспечивают ка- чество печати, не уступающее машинописному тексту. Большинст- во высококачественных принтеров имеют шрифтоносители в виде плоского диска типа "ромашка" или в виде большого наперстка. Существуют и другие печатающие технологии, например струйная печать (когда чернила выдавливаются струей на страницу), термо- печать (используемая в устройстве QuiefwrHer фирмы IBM) и ла- зерная печать (сходная с фотопечатью). Интерфейс — это связь между двумя элементами компьютер- ной системы. Этот термин используется как для обозначения связи между аппаратными и программными средствами,- так и для обозначения связи между пользователем и компьютером. Большая часть устройств, которые можно соединить с компью- тером, называется устройствами ввода-вывода. Элементарные физические компоненты, из которых состоит компьютер, называются микросхемами. Микросхемы крепятся на платах и соединяются электрическими линиями с другими компо- нентами. Основная плата называется системной. Пространство для добавочных плат называется участками расширения, куда помеща- ются платы памяти, дисковые платы, платы асинхронной связи (те- лефонные связи) и другие платы расширения или, как их еще на- зывают, периферийные платы. Работая в интерактивном (диалоговом) режиме, микропроцес- сор использует три вида средств: средства доступа к памяти, пре- рывания и порты. Порты имеют номера или адреса и используют- ся для передачи данных на периферийные устройства или приема их с периферийных устройств. Прерывания используются для при- влечения внимания компьютера. Существует три вида прерываний (хотя обрабатываются они аналогично). Внешнее прерывание исхо- дит от внешнего устройства (например, дисковода). Внутренее прерывание вызывается исключительно логической ситуацией (на- пример, делением на нуль). Программное прерывание вызывает- ся программой для выполнения сервисной процедуры. Програм- мное прерывание может заменить вызов подпрограммы. Для считывания данных из памяти либо записи данных в память исполь- 317
зуются средства доступа к памяти. Компьютерная память бывает разных видов. Обычная память, из которой можно считывать данные и в которую можно писать данные, называется памятью прямого доступа. Память, из которой данные можно только считывать, называется постоянным запоми- нающим устройством (ПЗУ). Памятью можно пользоваться, на- пример, для хранения данных, которые вводятся с экрана дисп- лея. Если дисплей использует машинную память для хранения своей информации, то эта ее часть называется дисплейной па- мятью. Б.З. Программы и языки программирования Последовательность компьютерных команд называеся про- граммой. Относительно независимые части программы называют- ся подпрограммами. Подпрограммы могут быть процедурами, если они только выполняют какие-либо действия, или функциями, если они в результате выдают значение (например, "открой дверь" — это процедура, а "скажи, как тебя зовут" — это функ- ция). Многие программы используют параметры для того, чтобы точ- но указать, какую задачу надо выполнить. Например, для под- программы извлечения квадратного корня нужен параметр, зада- ющий конкретное число. Многие подпрограммы сообщают о ре- зультате выполнения задачи с помощью кода возврата. Компьютеры выполняют программы, составленные только на детализированном машинном языке. Однако это не означает, что нет других способов задания программ. Если в машинной про- грамме коды операций и операнды заменены символическими именами (такими как ADD или MOVE), то подобный язык про- граммирования называется языком ассемблера (а часто просто ас- семблером, макроассемблером и символьным ассемблером). Язык ассемблера называется языком низкого уровня, посколь- ку программы на ассемблере по форме близки к машинному языку. Другие виды языков программирования более абстрактны, и каждый оператор, написанный программистом на каком-либо из этих языков, задает большое количество машинных команд. Такие языки называются языками высокого уровня; к ним относятся Бей- сик, Паскаль, Фортран, Кобол, Си, ПЛ/1 и Форт. Программы, транслирующие текст программы на языке высокого уровня в текст на машинном языке, называются компиляторами. Транслято- ры для языков низкого уровня называются ассемблерами. Особой разницы между компилятором и ассемблером нет — оба они пе- реводят язык программирования, используюмый людьми, в ма- шинный язык. Текст программы, подготовленной программистом, называется 318
исходным текстом. После трансляции (с помощью ассемблера или компилятора) исходный текст преобразуется в объектный код. Объектный код почти совсем готов к использованию, но ему необ- ходимо пройти через небольшую трансформацию, которую осу- ществляет компоновщик или редактор связей, чтобы превратить этот код в загрузочный модуль, являющийся законченной, готовой к работе программой. Работа над поиском и исправлением оши- бок называется отладкой. Существует много способов достижения цели с помощью ма- шинной программы. Схема, формула или метод, который исполь- зуется программой, называется алгоритмом. Для большого числа задач (даже для такой простой, как расположение данных в алфа- витном порядке) эффективность разных алгоритмов существенно отличается, поэтому продолжается поиск более современных спо- собов решения задач, поиск новых алгоритмов их решения. Программа работает с символическими именами, которые на- зываются переменными. В действительности переменная — это на- звание места, где хранится какая-либо информация. Данные мож- но пересылать как внутрь переменной, так и брать из нее, а ее на- значение состоит в том, чтобы обеспечить этот механизм. Пере- менные обычно имеют фиксированный тип, указывающий, какие данные /Логут в них содержаться. Например, переменная может быть целочисленной, одинарной или двойной точности с плаваю- щей запятой или строкой (последовательностью текстовых симво- лов). В программе особым типом переменной является файл. Его можно записывать на диск или на другое устройство, либо просто выводить на экран дисплея. Б.4. Функции человека при решении задач на компьютере Работая с ПК, вы можете самостоятельно выполнить все необ- ходимые действия при решении задачи. Однако в традиционных, крупных компьютерных системах существует разделение труда, определяющее различные функции человека, работающего с компьютером. Пользователям персональных компьютеров эти термины не всегда понятны. Пользователь или конечный пользователь — это тот, для кого выполняет задачу компьютер. Системный аналитик или просто аналитик определяет детали той работы, которую необходимо выполнить пользователю, а так- же общую стратегию решения задачи. Программист детализирует общую стратегию, выработанную аналитиком, и определяет тактические подходы и методы, кото- рые будут использованы при решении задачи. Обычно это вклю- 319
чает в себя и непосредственное написание (и тестирование) про- граммы. Однако иногда эта часть работы выпадает на долю про- граммиста-кодировщика. Кодировщик превращает детализированные методы, разрабо- танные программистом, собственно в программы. Оператор вводит программу в компьютер для выполнения и получения необходимых пользователю результатов. Б.5. Организация данных Для компьютера данные состоят из битов и байтов. Для про- граммистов существуют традиционные логические единицы дан- ных. Набор однотипных совокупностей данных представляет собой файл (например, файл списка подписчиков). Единица информации, содержащейся в файле, называется записью. В файле списка под- писчиков записью будет вся информация, связанная с одним ад- ресом. Внутри записи существуют поля, т.е. однотипная информа- ция. Например, почтовый индекс является полем в записи адреса внутри файла списка подписчиков. Записи, которые программа считывает или пишет, называются логическими. Логические записи размещаются в физических запи- сях на носителе данных. Физические данные непосредственно за- писываются на дискету или считываются с нее. Программа распоз- нает логические записи, когда операционная система устанавливает соответствие между логическими и физическими записями. Физи- ческая запись на дискете называется сектором. Термины база данных и управление базой данных так широко используются и ими так злоупотребляют, что точного значения они уже не имеют. Если имеются обширные, сложные данные, зани- мающие большое число файлов, то их можно называть базой дан- ных. Система управления базой данных - это программа (сама по себе большая и сложная), которая управляет и организует базу данных. Управление базой данных очень большого объема недо- ступно для персонального компьютера. Б.6. Диски Данные, записанные на дисках, хранятся в секторах, которые можно считывать или записывать по отдельности. Для семейства IBM PC сектор стандартного размера содержит 512 байт. Секторы являются физическими записями на диске — единицами, которые можно считывать или записывать. Дорожка диска (трек) — это группа секторов, которые составляют круговую дорожку на диске. На обычных дискетах дорожка разбита на 8 или 9 секторов, жест- кие диски, т.е. диски с высокой емкостью, имеют 15 секторов на каждой дорожке. Если диск имеет больше одной активной по- 320
верхности, то группа дорожек разных поверхностей, находящихся на одинаковом расстоянии от центра,- называется цилиндром. Для считывания секторов, находящихся в одном цилиндре, не требует- ся перемещать головку считывания-записи. Перемещение головок с одной дорожки на другую или с одного цилиндра на другой на- зывается подводом и установкой головок и осуществляется отно- сительно медленно. Дискеты бывают односторонними и двухсторонними, в зависи- мости от того, на скольких сторонах ведется запись. Существуют также дискеты для записи с удвоенной плотностью, такие как обычные дискеты для персональных компьютеров, и гибкие диски для записи с учетверенной плотностью (диски для записи с оди- нарной плотностью уже устарели). На дискете с удвоенной плот- ностью записи помещается 40 дорожек, а на дискете для записи с учетверенной плотностью — 80, что удваивает объем памяти. Обычно для обоих видов дискет число секторов, записанных на каждой дорожке, одинаково. На дискетах с высокой плотностью расположено такое же число дорожек, как на дискетах для записи с учетверенной плотностью, но число секторов на одну дорожку увеличилось в них с 8-9 до 15. Для дискеты необходимо иметь таблицу файлов, называемую каталогом. Чтобы следить за использованием пространства диске- ты, применяют таблицу размещения файлов (FAT). Первый сектор каждой дискеты отводится под первую часть программы запуска операционной системы, которая называется программой начальной загрузки или самозагрузки. Таким образом, на каждой дискете в секторах хранится 4 вида различной информации - программа са- мозагрузки, таблица размещения файлов, каталог файлов и дан- ные, хранящиеся в файлах. Дискета —- это гибкий диск, который еще называют флоппи-ди- ском. Жесткий диск — это жесткая, негнущаяся пластина. Жест- кая форма позволяет добиться более точной записи данных, а со- ответственно и более высокой плотности записи и емкости инфор- мации. Те жесткие диски, которые используются при работе с со- временными ПК, разработаны с помощью так называемой винче- стерской технологии, поэтому они еще называются винчестерски- ми дисками. Поскольку жесткие диски несъемные (в отличие от дискет), фирма IBM называет их фиксированными. Существует также и кассетный диск (кертридж), который встав- ляется и вынимается так же легко, как дискета. Б.7. Операционная система Операционная система — это программа, осуществляющая планирование и управление действиями компьютера. Операцион- ные системы очень сложны и состоят из большого КОЛИЧёе1Ьо Элс- 321
ментов. Одним из них является BIOS — базовая система ввода-вывода. BIOS отвечает за все детали операций по вводу и выводу, включая решение задачи соответствия программных логических записей физическим записям периферийных устройств. Говоря более кон- кретно, BIOS содержит программы, соответсвующие специфиче- ским особенностям каждого из периферийных устройств. Эти про- граммы называются драйверами внешних устройств или просто драйверами. Обычно операционная система организуется иерархически по уровням предоставляемых услуг. На самом нижнем уровне нахо- дятся драйверы, изолирующие остальную часть операционной сис- темы от внешних устройств и берущие на себя выполнение задачи взаимодействия с ними. На следующем уровне устанавливается соответствие между логическими и физическими данными. На бо- лее высоких уровнях обеспечиваются основные функции, такие как прием выводимых из программы данных и размещение их в фай- ле. Кроме управления внешними устройствами и данными опера- ционная система должна управлять программами, включая их за- грузку, настройку (т.е. приведение внутренних адресов в соответ- ствие с их точным положением в памяти) и восстановление после обнаружения ошибок с помощью программ обработки ошибок. Другим элементом операционной системы является командный процессор, который принимает и выполняет команды, заданные пользователем. Команды обычно состоят из запроса о выполнении какой-либо сервисной программы. 322
Приложение В КОМПЬЮТЕРНАЯ ПРОДУКЦИЯ И ТОРГОВЫЕ ЗНАКИ В этой книге упомянуто много видов компьютерной продукции, большинство наименований которой имеет торговые знаки. Ниже приводится список этой про- дукции с указанием призводящей ее фирмы, владельцев торговой марки, а если эта продукция не так доступна, то указывается, каким образом можно связаться с производящими ее фирмами. Возглавляет список, конечно, фирма IBM. IBM — это зарегистрированный торговый знак корпорации International Buisiness Machines Corporation. Большинство видов продукции фирмы IBM можно купить в магазине, торг- ующем по лицензии фирмы IBM Personal Computers, включая магазины "IBM Product Center”, принадлежащие самой корпорации, магазины Computer Land и многие другие. Фирма IBM также продает серии недорогих программ для пер- сональных компьютеров под названием "Personally Developed Software”. Чтобы получить каталог программ или заказать программы, пишите по адресу: Personaly Developed Software, P.O., box 3280, Wallingford, CT, 06494 или 1-800-IBM-PCSW. Фирма IBM выпускает также продукцию с такими торговыми марками, как IBM Personal Computer, Personal Computer AT, PCjr, Top View, Displaywrite, Professional Debug Facility, WordProof и Quietwriters. Compaq — это торговая марка, a Deskpro-286 — это торговое наименование продукции фирмы Compaq Computer Corporation. Data General/One — это торговая марка фирмы Data General Hercules — это торговая марка фирмы Hercules Computer Technology. Фирма Microsoft Corporation имеет зарегистрированные торговые знаки Microsoft и XENIX и торговые марки Multiplan и Word. Periscope (замечательный отладчик для программного обеспечения персо- нальных компьютеров) — это торговая марка фирмы Data Base Decision*, 14 Bonnie Lane, Atlanta, GA 30328,которая публикует также издание "Peeks and Pokes”, упоминаемое в приложение Г. СР/М и СР/М-86 — это торговые марки фирмы Digital Research UCSD p-System — торговая марка университета Л5’*"Ьорнии (of the University of California). Bernoulli Box (замечательный кассетный попужестки4 диск) - это торговая марка фирмы lOMega Corporation, 1821 West 4000 South, Roy UT 84067. Trace-86 и Advanced Trace-86, программные средства трассировки, яв- ляются продукцией фирмы Morgan Computing, 10400 N. Central Expressway, Suite 210, Dallas, TX 75231. dBASE II, dBASE III, Framework и Fred (язык программирования системы Framework) — это торговые марки фирмы Ashton-Tate. Sidekick, Turbo Pascal и Superkey — это торговые марки фирмы Borland International. Prokey — торговая марка Rosesoft. 323
Lotus, 1-2-3 и Symphony — это торговые марки фирмы Lotus Development Corporation. Volkswriter — это торговая марка фирмы Lifetree Software Inc. Multimate — это торговая марка фирмы Multimate International. Фирма Intel Corporation имеет зарегистрированный торговый знак Intel и торг- овую марку Above Board. ₽C-Talk III — это продукция Headlands Press, P.O. Box 862, Tiburon, CA 94920. WordStar — это торговая марка фирмы Micropro. MCI Mail и MCI — это зарегистрированные торговые знаки фирмы MCI. CompuServe — это торговая марка фирмы CompuServe Incorporated. The Norton Utilities — это торговая марка Питера Нортона. Приложение Г ИСТОЧНИКИ ИНФОРМАЦИИ Эта книга рассчитана на то, чтобы помочь вам понять, что такое семейство IBM PC. Чтобы не закапывать вас под грудой фактов, я опустил многие детали. Ниже приводятся некоторые источники, которыми вы можете воспользоваться, чтобы пополнить свои знания об этом семействе ЭВМ. Изначальным источником большей части информации о семействе персо- нальных компьютеров может послужить серия "Технические руководства" ("Technical References"), издаваемые фирмой IBM. Фирма выпустила также отдельные руководства по модели IBM PC, изна- чальной модели ПК, по ПК типов XT, PCjr, АТ. Существует также "Техническое руководство" по средствам и адаптерам ПК класса IBM PC. Вы можете подпи- саться на периодические приложения к этим справочникам, содержащие самые последние данные. Существует и "Техническое руководство" по DOS, а также некоторые специальные справочники, например по сети PC Network. Для того чтобы углубить свои знания по программированию для ПК, обрати- тесь к "Руководству Питера Нортона по программированию для персональных компьютеров фирмы IBM" (The Peter Norton Programmer's Juide to the IBM PC.— Microsoft Press, 1985). В книге С. П.Морза "Процессор 8086 — пособие для начинающих" (The 8086 Primer by Stepheh P.Morse;Hayden,1980) вы найдете отличное и простое описание микропроцессора 8086 для персональных компьютеров. В поисках более под- робной информации обратитесь к пособию "Книга о процессоре 8086", написан- ному Р. Ректором и Дж. Алекси ("The 8086 Book by Russell Rector and Jeorge Alexy, Osborne/McGraw-Hill, 1980) Фирма Intel, производящая микросхемы, выпускает серию справочников, в которых вы найдете полные данные о процессоре 80286 АТ. Справочники "Introduction to the iAPX 286", "iAPX 286 Programmer's reference Manual", "iAPX 286 Operating Systems Writer's Guide" можно выписать по адресу: Intel Corporation, Literature Department, 3065 Bowers Ave, Santa Clara, CA 95051. Сведения о высокоскоростных сопроцессорах класса 87 семейства PC вы найдете в книге Р. Стартца "Процессор 8087: Прикладные программы и про- граммирование" (8087 Applications and Programming by Startz; Brady, 1983) Тем, кто интересуется программированием на языке ассемблера, советую прочитать книгу Л. Скэнлона "Язык ассемблера и ПК класса IBM PC и XT" ("IBM PC & XT Assembly Language" by Leo.Dj. Scanlon. Brady,1985) или замечательную книку "Сафари по ассемблеру , написанную очень талантливым программистом (и моим хорошим другом) Дж.Сока ("Assemby Language Safari" by John Socha —Brady, 1984) Информацию о специальных методах программирования вы найдете в книге "Игры, графика и озвучивание для ПК класса IBM PC", написанной Д. Стрикленд, Д. Рокуэллом и К. Боуэром ("James< Jraphics and Sound for IBM PC" by Dorothy 324
Strickland, Dennis Rockwell and Kevin Bower. Brady, 1983) Другие полезные источники: "Expanding Your IBM PC", Bil. Alvernaz (Brady, 1985); "A Comprehensive Guide to the IBM PC", Geoge Markowsky (Prentice-Hall, 1984); "Interfacing the IBM Perconal Computer", Lewis C.Eggebrecht (Howrad W Sams, Еще од:;о остоумное и полезное издание по персональным компьютерам: "Peeks and Pokes", написанное Б. Солтером ("Pees and Pokes" by Brett Salter. При- обрести его можно по адресу: Data Base Decisions, 14 Bonnie Lane, Atlanta, GA Существует большое число периодических изданий, которые служат отлич- ным источником информации по ПК. Наиболее общие вопросы освещаются в журналах : "PC Magazine" (где я веду постоянную крлонку информации) и "PC World". Техническую информацию вы найдете в журнале "PC Tech Journal". Цен- ные советы программистам вы найдете в журнале "Dr. Dobb's Journal" или в от- личном, но сравнительно мало известном журнале "Programmer's Journal" (P.O. Box 30160, Eugene, OR, 97403) И наконец, существует журнал "PC Week" (в кото- ром также есть моя постоянная колонка), отвечающий потребностям пользова- телей в крупных организациях. Это журнал, доступный только для ограниченного круга подписчиков. (Для получения подробных сведений о нем пишите по адре- су: PC Week, Ziff Davis, 1 Park Ave, New Jork, NY, 10016.) Список работ, переведенных на русский язык 1. Нортон П. Персональный компьютер фирмы IBM и операционная система MS DOS: Пер. с англ. — М.: Радио и связь, 1991. — 352с. 2. Скэнлон Л.Д. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера: Пер. с англ. — М. Радио и связь, 1989. — 336с. Дополнительный список литературы 1. Бентли Д. Жемчужины творчества программистов: Пер. с англ. — М.: Радио и связь, 1990. — 224с. 2. Геворкян Г.Х. Семенов В.Н. Бейсик — это просто. — М.: Радио и связь, 1989. — 144с. 3. Дьяконов В.П. Применение персональных ЭВМ и программирование на языке Бейсик. — М.: Радио и связь, 1989. — 288с. 4. Поддубная Л.М., Шальгин В.Ф. Мне нравится Паскаль — М.: Радио и связь, 1991. — 224с. 5. Радер Дж. , Миллсап К. Бейсик для персонального компьютера фирмы IBM: Пер. с англ. — М.: Радио и связь, 1991. — 408с. 6. Расстригин Л.Д С компьютером наедине. — М.: Радио и связь, 1990. — 224с. 7. Свириденко С.С. Современные информационные технологии. — М.: Радио и связь, 1989. — 304с. 325
Оглавление Предисловие редактора перевода.....................................5 Об авторе..........................................................6 Введение...........................................................7 Глава 1. Генеалогическое дерево.................................. Ц 1.1. Немного семейной истории................................... 11 1.2. Семейство IBM PC.............................................14 1.3. Семейство микропроцессоров 8086..............................17 Глава 2. Основы: что такое компьютер..............................22 2.1. Мой компьютер. Модель........................................22 2.2. Устройство компьютера........................................24 Глава 3. Данные!................................................. 30 3.1. Биты, байты и символы.........................................30 3.2. Изучаем шестнадцатеричную систему............................34 3.3. Стандартные числа............................................38 3.4. "Длинные" числа..............................................41 3.5. Представление строк символов.................................44 1*лава 4. Набор символов IBM PC...................................46 4.1. Знакомство с набором символов................................46 4.2. Стандартные символы кода ASCII...............................49 4.3. Управляющие символы кода ASCII................................51 4.4. Набор специальных символов....................................55 Глава 5. Аппаратные средства IBM PC...............................60 5.1. Принципиальная схема IBM PC..................................60 5.2. Дополнительные средства и адаптеры...........................65 5.3. Ключевые микросхемы..........................................70 Глава 6. Мозг машины: микропроцессоры.............................74 6.1. Возможности микропроцессора..................................74 6.1. Математические сопроцессоры..................................72 6.3. Вспомогательные средства: память, порты, регистры и стеки....83 6.4. Прерывания: основная движущая сила...........................87 6.5. Особенности микропроцессора Intel 286..............93 Глава 7. Память компьютера........................................97 7.1. Знакомства с памятью.........................................97 7.2. Адресация памяти........................................... 99 7.3. Организация памяти ПК.......................................104 7.4. Увеличение объема памяти....................................111 7.5. Банки памяти и расширенная память...........................114 Глава 8. Диски: основные положения...............................118 8.1. Основные панятия............................................118 8.2. Виды дисков.................................................122 Глава 9. Диски:рассматриваем дисковою операционную систему.......129 9.1. Знакомство с дисками DOS....................................129 9.2. Структура диска DOS.........................................134 9.3. Сведения о форматах файла...................................138 9.4. Текстовые файлы.............................................139 Глава 10. Диски: особенности.....................................144 10.1. Разделы жестких дисков.....................................144 10.2. Подробная структура диска..................................149 10.3. Нестандартные форматы для защиты от копирования............156 Глава 11. Видеосистема IBM PC: Обзор технических и программных возможностей.......................................159 11.1. Как работает экран...........................................159 326
11.2. Обзор видеорежимов..........................................162 11.3. Изучение видеорежимов..................................... 170 Глава 12. Текстовые видеорежимы.....................................173 12.1. Обзор текстовых режимов.....................................173 12.2. Особенности текстовых режимов...............................177 12.3. Примеры текстовых режимов...................................183 Глава 13. Графические видеорежимы...................................188 13.1. Обзор графических режимов...................................188 13.2. Путешествие по графическим режимам..........................192 13.3. Особенности графических режимов.............................199 Глава 14. Клавиатура............................................ 203 14.1. Основные операции.......................................... 203 14.2. Способы работы с клавиатурой................................211 Глава 15. Прочие аппаратные средства..............................215 15.1. Принтеры: параллельный порт.................................215 15.2. Линии связи: последовательный порт..........................217 15.3. Звук........................................................220 15.4. Дополнительные устройства ПК................................224 Глава 16. ROM-BIOS: основные положения............................229 16.1. Что стоит за термином BIOS?.................................229 16.2. Как работает ROM-BIOS.......................................230 Глава 17. ROM-BIOS: подробности...................................236 17.1. Принципы работы........................,....................236 17.2. Функции BIOS................................................238 Глава 18. Роль DOS................................................246 18.1. Общие сведения о DOS............................... :......246 18.2. История и концепция DOS.....................................248 18.3. Драйверы внешних устройств..................................251 18.4. Визуальные командные процессоры.............................252 Глава 19. Работа с DOS........................................... 255 19.1. Выполненеие команд..........................................255 19.2. Выполнение командных файлов.................................258 Глава 20. DOS и программы.........................................260 20.1. Назначение и функции DOS....................................260 20.2. Обзор функций DOS...........................................261 Глава 21. Как создается программа.................................267 21.1. Языки программирования......................................267 21.2. Трансляция программ.........................................276 21.3. Заключительная сборка програамы.............................281 Глава 22. Дополнительные сведения.................................285 22.1. Сервисные программы.........................................285 22.2. Как работает программа DEBUG................................286 22.3. Работа с программой NU..................................... 290 Приложение А. Тексты программ..............•......................297 Приложение Б. Словарь терминов....................................312 Приложение В. Компьютерная продукция и торговые знаки.............323 Приложение Г. Источники информации................................324 327
Производственное издание НОРТОН Питер ПРОГРАММНО-АППАРАТНАЯ ОРГАНИЗАЦИЯ IBM PC Заведующий редакцией Ю. Г. И в а ш о в Редактор Л. Ю. Камочкина Художественный редактор В. В. Алексеев Технический редактор А. Н. Золотарева ИБ №2025 Подписано в печать 05.12.90. Формат 60 X 88/16. Бумага офсетная № 2. Гарнитура универе. Печать офсетная. Усл.печ.л. 20.58 Усл.кр.-отт 20.82 УЧ.-ИЗД.Л. 21.78. Изл 22840. Зак- №6472 Издательство "Радио и связь”. 101000 Москва, Почтамт, а/я 693 Ордена Октябрьской Революции и ордена Трудового Красного Знамени МПО ’Первая Образцовая типография” Министерства печати и массовой информации РСФСР. 113054, Москва, Валовая, 28.