Выбрать главу

Чтобы иметь некоторую свободу передвижения, во. многих машинных языках предусмотрены команды «перехода» и «условного перехода». Если код команды перехода, например, 15, то команда 15.0073 будет означать: «Продолжай выполнять программу, начиная с ячейки 0073». При этом мы можем поставить и некое условие перехода к данной ячейке. Например, команда 16 может означать в переводе на наш обычный язык: «Переход по указанному адресу может быть осуществлен лишь в том случае, если в накопителе нуль». В противном случае перехода не произойдет, машина будет продолжать выполнение команд по тому порядку, как они записаны в программе. Все эти команды, которые мы только что описали, сами по себе довольно примитивны. Но, составляя из них длинные логические цепочки, можно заставить машину выполнить и самую сложную операцию.

Закодированные в виде числа команды образуют машинные коды. Мы в своих примерах брали эти коды чисто условно. На практике же системы этих кодов составляют тот или иной машинный язык. И они отличаются друг от друга примерно так же, как английский отличается от немецкого. Из одних и тех же букв латинского алфавита составляются слова, иногда они даже очень похожи внешне, но смысл этих слов в различных языках может быть различен. Для каждого народа удобен свой язык, так и машинные языки приспосабливаются к нуждам той или иной конкретной модели ЭВМ. Для какой–то удобнее работать при помощи языка «Бейсик», а для другой подходит только «Паскаль».

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

Но и при переходе от языка буквенных выражений к языку цифр, т. е. языку машинных кодов, перевод понятий человеческой логики в логику машинную еще не закончен. Как мы уже говорили, машине оказалось удобнее работать с двоичной системой исчисления, машинные же коды составлены в десятичной. Так машина может еще раз осуществить перевод, записав привычные нам цифры вот таким образом: 1=1, 2=10, 3=11, 4=100 и т. д.

Один двоичный разряд (0 или 1) называется битом; бит содержит наименьшее возможное количество информации. Обычный размер машинного регистра – 16 двоичных разрядов. Наибольшее число, которое может быть в нем записано, – 16 единиц подряд, что в переводе на десятичную систему исчисления означает 65535.

Переход на двоичную систему делает запись любых чисел значительно длиннее, чем в десятичной. Но зато в этом случае достаточно для запоминания числа всего двух состояний электрической схемы – «включено» и «выключено». (В противном случае пришлось бы составлять ячейки из схем, имеющих 10 различных состояний, а это привело бы к значительному усложнению устройств как самих схем, так и всей ЭВМ в целом.)

Два же состояния в электрических цепях могут быть выполнены весьма просто и различными методами. Это может быть и релейная схема, и ламповая, и транзисторная... Последнее время подобные схемы стали выполнять по несколько десятков тысяч одним махом – так появились интегральные схемы. Более подробно обо всех этих технологических тонкостях мы поговорим в следующей главе. А пока давайте разберемся в логике работы таких электрических ключей.

Странная логика

В их основе лежит логическое исчисление, созданное еще в 50–е годы XIX столетия английским математиком Джорджем Булем. Согласно разработанным им правилам, каждому из высказываний приписывают одно из двух возможных значений: «истинно» или «ложно». Кроме того, имеются три связки: «И», «ИЛИ» и «НЕ». Их достаточно, чтобы строить описания нашего мира, скажем, такого типа: «Сегодня я пойду играть в футбол, ЕСЛИ по телевизору не будут показывать мультиков И будет подходящая погода».

Аналогично обстоит дело со связкой «ИЛИ» для высказываний, например, такого рода: «В нашей команде будет хороший вратарь, ЕСЛИ придут играть Витя ИЛИ Вова». Конечно, на футбольное поле могут прийти и оба, и связка «ИЛИ» принимает во внимание и такую возможность. И наконец, проиллюстрируем возможности связки «НЕ»: «Мы, конечно, начнем играть сразу, ЕСЛИ поле НЕ будет занято другими командами».

Схема, поясняющая действие электронных логических ключей

Все эти высказывания можно без особого труда реализовать с помощью электронных схем. Для этого договоримся интерпретировать истинное высказывание как положение «включено» или «1» и соответственно ложное высказывание будет интерпретироваться как «выключено» или «О».

В таком случае высказывание «И» соответствует двум ключам, соединенным последовательно. На приведенной схеме лампочка загорится, ЕСЛИ будет включен ключ А, и ключ В.

Связка «ИЛИ» соответствует параллельному включению тех же ключей. Здесь лампочка загорится лишь в том случае, если включен или ключ А, или ключ В, или оба вместе.

Наконец, связку «НЕ» можно реализовать, создав контакт для ключа таким образом, что его нормальное положение будет при замкнутой цепи и горящей лампочке. И как только на схему будет подан сигнал, аналогичный тому, который в предыдущих случаях приводит к замыканию цепи, в данном случае цепь будет размыкаться.

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

Как поджарить яичницу?

«Ну и вопрос, – скажете вы. – Это же все знают. Надо взять яйца, поставить сковородку на огонь, положить на нее масла... И вообще, какое отношение имеет яичница к теме нашего разговора?»

Сама яичница, может быть, и никакого. А вот процесс ее приготовления – самое непосредственное. Взгляните на схему. Видите, столь простая кулинарная операция при полном перечислении возможных вариантов представляет собой довольно длинное и разветвленное описание последовательности действий. То есть, говоря профессиональным языком, перед вами блок–схема программы приготовления яичницы. Именно такая программа понадобилась бы, если бы вы поручили эту операцию некому роботу–повару под управлением ЭВМ.

Электронная же вычислительная машина, о которой мы ведем речь в этой книге, согласно широко распространенному определению представляет собой «универсальное программируемое устройство для автоматической обработки информации». Возможно, вы с этим определением уже знакомились на уроках информатики в школе. Но, как говорится, повторение мать учения. Не вредно, наверное, по–вторить его еще раз, растолковав для верности два определения.

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