§ 34. Представление информации в памяти ЭВМ, принцип программного управления
Вы уже хорошо усвоили, что вся информация, вводимая в ЭВМ и возникающая в ходе ее работы, хранится в памяти машины. Как устроена память? Ее можно представлять себе как длинную страницу, состоящую из отдельных строк. Каждая такая строка называется ячейкой памяти и, в свою очередь, разделяется на разряды. Содержимым любого разряда может быть либо 0, либо 1. Значит, в любую ячейку памяти записывается некоторый набор нулей и единиц - машинное слово. (Вы помните, что информация внутри ЭВМ хранится и перерабатывается в двоичной форме.) Все ячейки памяти занумерованы. Номер ячейки называют ее адресом.
Наличие у каждой ячейки адреса позволяет отличать ячейки друг от друга, обращаться к любой ячейке, чтобы записать в нее новую информацию или извлечь ту информацию, которая в ней хранится. Нужно помнить, что при считывании хранящегося в ячейке машинного слова содержимое ячейки не изменяется. А при записи в ячейку информации прежнее содержимое ячейки исчезает (стирается).
Вы, наверно, вспомнили: похожим образом выполняется присваивание переменной нового значения. Сходство здесь не только внешнее. На каждую переменную в памяти ЭВМ отводится определенное количество ячеек; присваивание переменной нового значения - это запись в эти ячейки новой информации (соответствующего набора нулей и единиц).
Все ЭВМ работают в принципе одинаково. Для наглядности мы будем рассматривать совсем маленькую микромикромикро-ЭВМ, которую назовем КРОХА. В памяти этой машины всего восемь ячеек, в каждой из которых по двенадцать разрядов. Когда бы вы ни заглянули в память ЭВМ, в ее ячейках хранятся наборы нулей и единиц. Ниже показана память машины КРОХА в один из моментов времени. Слева от ячеек записаны их адреса (в двоичной системе счисления). Поскольку ячеек мало, то для записи адреса достаточно трех двоичных разрядов.
Каждому видно, что числа, которые можно записывать в ячейки памяти ЭВМ КРОХА, имеют не более 12 двоичных разрядов, т. е. не превосходят 212 - 1 = 4095 (см. задачу 1, в к § 33).
Создатели любой ЭВМ наделяют ее умением выполнять ряд элементарных операций (команд) - сложений, умножений и т. д. Но арифмометры или, скажем, арифметические калькуляторы тоже способны выполнять эти элементарные операции. Чем же тогда ЭВМ отличается от арифмометра? Вы, конечно, сразу ответите на этот вопрос. Главное отличие - в том, что ЭВМ можно заставить выполнить без участия человека не только одну команду, но и длинную последовательность команд (программу). В этом и состоит один из основных принципов работы ЭВМ - принцип программного управления.
Каждая команда кодируется некоторой последовательностью из 12 нулей и единиц и помещается, как и число, в одной ячейке оперативной памяти. Команда состоит из двух частей: кодовой (3 разряда) и адресной (9 разрядов). Кодовая часть команды указывает, какое действие должно быть выполнено, а адресная определяет расположение в памяти компьютера исходных данных и результата. Общий вид команды машины КРОХА таков:
К А1А2А3,
где К - код действия, а А1, А2, A3 - адреса ячеек памяти (на каждый адрес отводится по три разряда). Для выполнения команд служит специальное арифметико-логическое устройство. Оно состоит из двух особых ячеек - счетчика команд и регистра команд, а также сумматора. При выполнении КРОХОЙ программы в счетчик команд последовательно заносятся номера ячеек, где содержатся исполняемые команды, сами команды помещаются в регистр команд, а в сумматоре происходят арифметические действия. Сумматор также имеет свою ячейку - для промежуточных результатов вычислений. Отметим, что команды первых ЭВМ имели похожий вид и выполнялись аналогично (в современных ЭВМ команда может занимать несколько ячеек памяти). Вот некоторые из команд ЭВМ КРОХА:
000 А1А2А3 - переписать содержимое ячейки с адресом A1 в ячейку с адресом А3 (на выполнение этой команды содержимое ячейки А2 не влияет);
001 А1А2А3 - сложить числа из ячеек, имеющих адреса A1 и А2, а результат записать в ячейку с адресом А3;
011 А1А2А3 - найти модуль разности чисел из ячеек с адресами A1 и А2, а результат записать в ячейку с адресом А3;
101 A1A2A3 - перемножить числа из ячеек с адресами A1 и А2, а результат записать в ячейку с адресом А3;
111 A1A2A3 - остановиться и напечатать содержимое ячеек с адресами А1, А2 и А3.
Для примера разберем, как выполняется команда
101 111 011 110.
По этой команде КРОХА извлечет из ячейки памяти с адресом 111 содержащееся там число и перепишет его в ячейку сумматора. Затем КРОХА умножит содержимое ячейки сумматора на число, хранящееся в ячейке с адресом 011, а результат запишет в ячейку сумматора. После этого содержимое ячейки сумматора будет переписано в ячейку с номером 110.
Конечно, при выполнении этой (или какой-нибудь другой) команды может получиться число, большее, чем 4095 (наибольшее число, вмещающееся в ячейку машины КРОХА). В этом случае КРОХА отказывается продолжать работу и выдает сообщение об ошибке.
Как видите, одна и та же последовательность нулей и единиц, хранимая в ячейке памяти, может рассматриваться ЭВМ и как число, и как команда. Это еще один важный принцип работы ЭВМ - принцип хранимой программы.
КРОХА начинает работу с выполнения команды, записанной в ячейке с адресом 000. Выполнив ее, она переходит к следующей команде и т. д. до тех пор, пока не встретит команду "Остановиться" или такую команду, которую она не сможет выполнить.
Если запустить ЭВМ КРОХА, память которой заполнена как показано на странице 235, то выполнятся команды, записанные в ячейках с адресами 000, 001 и 010. Разберитесь самостоятельно, как будет выполняться эта программа. Что будет записано в памяти ЭВМ после выполнения этой программы?
Язык команд КРОХИ сильно отличается, скажем, от Бейсика. Сразу видно: команды Бейсика универсальнее и записываются на естественном (английском) языке. Но главное - в том, что программирование на Бейсике практически освобождает от забот по распределению памяти ЭВМ: машина сама определяет, где в ее памяти будет располагаться программа, а где - данные. Программирование в машинных командах - совсем другое дело. Прежде чем приступать к написанию программы, программист должен спланировать распределение памяти. Не забывайте этого, когда будете решать задачи к данному параграфу.
Как же ЭВМ понимает программы, написанные на языке Бейсик, если, как вы теперь знаете, она умеет выполнять лишь самые простые команды? Дело в том, что при выполнении программы, записанной на языке программирования, в памяти ЭВМ все время (незримо для нас) присутствует программа-переводчик. Эта программа синхронно переводит каждую команду языка Бейсик на язык машинных команд. Программа-переводчик очень сложна: в ней десятки тысяч машинных команд. Но польза этой программы намного превосходит затраты на ее создание. Представьте себе, насколько больше сил и времени требовалось бы потратить на написание в машинных командах тех программ, которые вы писали на языке Бейсик!
Программы-переводчики (их называют трансляторами) вместе с другими полезными программами, написанными на машинном языке, входят в так называемое программное обеспечение всех современных компьютеров. Как правило, оно включает базы данных, электронные таблицы, редакторы текстов, другие пакеты прикладных программ. Наличие хорошего программного обеспечения позволяет успешно использовать ЭВМ в своей повседневной работе различным специалистам (в том числе и школьникам), не являющимся программистами-профессионалами.
Вопросы
1. Что такое ячейка памяти?
2. Что такое адрес ячейки памяти?
3. Что происходит с содержимым ячейки памяти при записи и считывании информации?
4. В чем заключается принцип программного управления работой ЭВМ?
5. В чем состоит принцип хранимой программы?
6. Для чего предназначены счетчик команд и регистр команд?
7. Для чего предназначен сумматор?
8. В чем главное отличие программирования в машинных командах от программирования на алгоритмическом языке (например, Бейсике)?
9. Зачем нужно и из чего состоит программное обеспечение ЭВМ?
Задания для самостоятельного выполнения
1. Опишите, как выполняет ЭВМ КРОХА команду
011 101010 101.
2. Память ЭВМ КРОХА заполнена следующим образом:
Как будет выполняться программа?
3. Составьте для ЭВМ КРОХА программу определения:
а°) периметра прямоугольника (по длинам сторон);
б) объема прямоугольного параллелепипеда (по длинам ребер);
в*) половины полной поверхности прямоугольного параллелепипеда (по длинам ребер);
г) пути, пройденного телом при равноускоренном движении (исходные данные - начальная скорость, время движения и половина ускорения).
4°. Наделим машину КРОХА еще одной командой:
110 A1A2A3 - если содержимое ячейки А1 больше содержимого ячейки A2, то перейти к выполнению команды, записанной в ячейку с адресом A3, иначе перейти к выполнению следующей команды.
Напишите для ЭВМ КРОХА программу нахождения наибольшего из двух чисел, записанных в ячейках ее памяти.