Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PDP-11.doc
Скачиваний:
10
Добавлен:
26.08.2019
Размер:
1.99 Mб
Скачать

PDP-11

ASSEMBLER LANGUAGE

PROGRAMMING

AND MACHINE ORGANIZATION

Michael Singer

Stanford University

JOHN WILEY & SONS

NEW YORK • CHICHESTER • BRISBANE •

TORONTO • SINGAPORE

1980

МАТЕМАТИЧЕСКОЕ

ОБЕСПЕЧЕНИЕ

ЭВМ

М.Сингер

МИНИ-ЭВМ PDP-11:

ПРОГРАММИРОВАНИЕ

НА ЯЗЫКЕ АССЕМБЛЕРА

И ОРГАНИЗАЦИЯ МАШИНЫ

Перевод с английского

А.Ю. Каргашина и

А.С. Миркотан

под редакцией

Ю.М. Баяковского

МОСКВА «МИР» 1984

ББК 22.19

С 38

УДК 681.3

Сингер М.

С38 Мини-ЭВМ PDP-11: Программирование на языке ассемблера и организация машины: Пер. с англ.— M.: Мир, 1984.—272 с., ил.

Книга американского специалиста представляет собой подробное учебное пособие по программированию на языке ассемблера для машины PDP-11, послужившей прототипом для отечественных мини-ЭВМ СМ-3, СМ-4 и др. Рассмотрены такие вопросы, как ввод-вывод, механизм прерываний, управление памятью. Книга содержит многочисленные примеры и упражнения.

Для всех, кто работает с мини-ЭВМ.

С

2405000000-424

164-84, ч. 1

ББК

22.19

041 (01)-84

518

Редакция литературы по математическим наукам

© 1980 by John Wiley & Sons, Inc. All Rights Reserved. Authorized translation from English language edition published by John Wiley & Sons, Inc.

© Перевод на русский язык, «Мир», 1984

Предисловие редактора перевода

Может показаться, что эта книга переносит нас лет на 25 назад, во вторую половину 50-х годов, когда только начали появляться языки высокого уровня, а о языках очень высокого уровня не было еще и речи, когда программист прекрасно ориентировался в архитектуре своей машины, наизусть знал все ее коды команд и когда восьмеричной системе счисления прочили блестящее будущее. Иллюзия подкрепляется тем, что совсем недавно в центре внимания была идея концентрации в одной установке больших вычислительных мощностей и их коммунальное потребление в режиме разделения времени. И вот все неожиданно и быстро изменилось: на первом плане оказались изолированные сначала мини-, затем микро- и, наконец, персональные ЭВМ.

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

В книге М. Сингера подробно и полно изложены сведения, необходимые при программировании на языке ассемблера и полезные при программировании на языках высокого уровня. Более того, речь в книге идет о машине PDP-11, которая очень распространена в мире и которая послужила прототипом для многих других машин, в частности отечественных.

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

Книгу перевели А.С. Миркотан (предисловие, гл. 1 и 2) и А.Ю. Каргашин (гл. 3, 4 и приложения).

Ю. Баяковский

Предисловие автора

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

Книга целиком посвящена одной из самых популярных и гибких малых ЭВМ PDP-11, созданной фирмой Digital Equipment Corporation (DEC). Электронная и концептуальная база, вообще говоря, одинакова для всех вычислительных машин, поэтому наше изложение с относительно небольшими изменениями применимо и к другим ЭВМ. Однако мы не собираемся выкинуть на прилавки книжных магазинов еще одно общее руководство по устройству вычислительных машин. Программирование — это набор практических навыков, опирающихся на теоретические знания, но они превращаются в подлинное мастерство лишь в результате постоянного применения на практике. Поскольку новичков, сидящих за терминалами, гораздо больше интересуют конкретные особенности вычислительных машин, а не их структурное сходство, мы считаем, что первое знакомство с машинами должно начинаться с определенной ЭВМ.

Книга построена таким образом, чтобы как можно быстрее научить читателя писать законченные, хотя и достаточно тривиальные, программы. Поэтому с самого начала необходим доступ к PDP-11. Больше никаких условий не ставится; более того, мы не требуем предварительных теоретических знаний или опыта работы на ЭВМ. И начинающие программисты, и квалифицированные пользователи ЭВМ PDP-11 могут читать эту книгу, не прибегая к другим источникам. Она может также служить дополнительным пособием для обычного первого или второго курса программирования.

Работу вычислительной машины, как и деятельность общества, невозможно познать, не постигнув правил и тонкостей ее языка. Язык ЭВМ — это ее машинный код; вычислительная машина не «понимает» ничего другого и будет воспринимать инструкции таких языков высокого уровня, как Бейсик, Кобол, Фортран и Паскаль, лишь в том случае, если они переведены на машинный язык. Программа перевода, называемая компилятором, сама может быть написана на языке высокого уровня. Но на каком-то этапе ЭВМ необходимо растолковать «смысл» операторов языка высокого уровня, воспользовавшись машинным кодом. Таким образом, если мы хотим познать радость наиболее полного общения с PDP-11, нужно понимать ее машинный код. Даже язык ассемблера PDP-11, который, в сущности, не что иное, как набор команд машинного кода, представленных в доступном для чтения формате, образует барьер между пользователем и машиной. Однако этот барьер не так велик, и программирующий на языке ассемблера имеет в своем распоряжении все средства ЭВМ PDP-11; правда, чтобы в полной мере ими воспользоваться, нужно иметь четкое представление о всех деталях машинного кода.

Даже тот, кто обычно не программирует на языке ассемблера, выиграет от более близкого знакомства с работой ЭВМ: никогда нельзя быть уверенным, что язык ассемблера вам ни разу не потребуется. Универсальные языки высокого уровня не отражают особенностей конкретной машины, а как раз эти особенности и могут понадобиться в определенной задаче.

Кроме того, в ряде случаев язык ассемблера может оказаться более эффективным. На малой ЭВМ компилятор с языка высокого уровня не может быть большим, и потому в нем не предусматриваются средства оптимизации, без которых невозможно получить наиболее эффективный код. Таким образом, растет время выполнения программ, а следовательно, и стоимость. Некоторые считают, что это соображение устарело. Выдвигается та точка зрения, что неэффективный метод или алгоритм расточительнее, чем неэффективное кодирование, и что большая ценность времени программиста по сравнению с машинным временем оправдывает даже использование неэффективных алгоритмов. Можно согласиться с тем, что время программиста важнее времени машины, однако у человека оно может уйти и на то, чтобы ждать, пока выполнится плохая программа, написанная другим программистом. Иными словами, если вместо рационального использования трех ЭВМ неэффективно работают четыре, то жизненные ресурсы человека расходуются впустую. Нельзя не признать, что неуклюже закодированный хороший алгоритм, как правило, приводит к лучшим результатам, чем примитивный алгоритм, на который потратил силы самый опытный программист. Однако это всего лишь интуитивные доводы. Чтобы взвесить все эти точки зрения, нужно провести подробный анализ показателя стоимость — эффективность. Ясно, что достоверный анализ может быть проведен только программистом, в совершенстве изучившим все тонкости своего ремесла; попытки повысить эффективность программы никогда не оправдывают затраченных усилий, если человек не представляет, как это можно сделать.

Хотя книга и не посвящена разработке алгоритмов (фактически термин «алгоритм» не используется за пределами предисловия), тем не менее мы всегда оперируем положениями истинно структурного подхода к программированию. Так, мы не поддались искушению построить книгу на основе демонстрации своих собственных любимых и весьма длинных программ. Вместо этого текст изобилует примерами программ целого ряда небольших характерных задач. Глава 3, ключевая для этой книги, посвящена тем средствам PDP-11, которые позволяют строить законченные программы из отдельных блоков, или модулей. По возможности мы старались избегать абстрактных рассуждений, однако тщательно следили за тем, чтобы все изложение пронизывали наиболее важные понятия теории программирования.

Глава 1 знакомит читателя с вычислительной системой. Операционная система затрагивается в той степени, в какой это необходимо для достижения основной цели — заставить работать простую программу. Наше стремление к тому, чтобы из практики постепенно рождалась теория, требует от обучающихся возможности экспериментировать и, в частности, приводит к такой непоследовательности, как описание вывода под управлением монитора на ранних этапах изложения. Полное объяснение механизма обращений к монитору, естественно, отнесено дальше. Пользователи такой PDP-11, которая не имеет операционной системы, могут, чтобы начать работать, читать §4.1 параллельно с гл. 1; предвидя такую возможность, мы построили этот параграф так, чтобы он мало опирался на более ранние главы.

В гл. 2 широкий диапазон команд языка ассемблера демонстрируется на примерах решения задач. Мы вводим только те команды, которые могут быть тотчас же использованы, поэтому многие команды появляются в книге позже. Тем не менее вся книга охватывает полный набор команд языка ассемблера PDP-11.

На протяжении всей книги наше отношение к операционной системе остается противоречивым. Строго говоря, эта система представляет собой просто набор программ и не имеет ничего общего с машиной как таковой. С другой стороны, среди программ имеются чрезвычайно полезные (как, например, ассемблеры и редакторы), и все они настолько тесно координируют свои действия с работой машины, что поистине могут рассматриваться как ее часть. Поэтому многие аспекты применения PDP-11 описываются как при условии, что операционная система существует, так и при условии, что ее нет. Особенно это касается гл. 4, где мы обсуждаем ввод и вывод для внешних запоминающих устройств в обеих ситуациях. В эту главу также входят ввод-вывод с терминала, прерывания и управление памятью.

В книге два приложения. Приложение А содержит описание ODT — средства отладки, имеющегося в операционной системе PDP-11. Его можно читать параллельно с основным текстом; начинать следует при изучении гл. 2.

В приложении Б вводится целая арифметика с повышенной точностью и арифметика с плавающей точкой для PDP-11. Повышенная точность представляет собой обычное требование для мини-ЭВМ с малой длиной слова; приведенные фрагменты подпрограмм докажут это.

Книга насыщена упражнениями, хотя бы часть которых нужно выполнять перед тем, как двигаться дальше. Большинство упражнений являются простыми проверками на понимание, несмотря на то что они весьма различаются по времени, которое затрачивается на решение. Символом «звездочка» * отмечены чуть более сложные задачи.

Многие коллеги оказали поддержку, поделились советами и ценной информацией, доступной узкому кругу; среди них Джон Бенедикт из Ross Systems Inc., Стив Кэллис из DEC и Тэд Панофски из Artificial Intelligence Laboratory, Станфордский университет. Постоянно ощущалась поддержка и одобрение сотрудников издательства John Wiley & Sons.

Майкл Сингер

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]