Зигуненко Станислав Николаевич - Я познаю мир. Компьютеры и интернет стр 10.

Шрифт
Фон

А пока давайте вернемся снова в недра нашего компьютера и посмотрим, что в нем происходит по мере поступления данных и команд.

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

Так получается потому, что машинная логика в значительной мере отличается от нашей, человеческой: машине гораздо легче иметь дело просто с числами, причем записанными в двоичной системе исчисления, нежели с какими–то другими понятиями.

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

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

И это еще не все. Каждая команда, попадающая в регистр команд, состоит, в свою очередь, из двух частей – операции и операнда.

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

Пусть в нашем конкретном случае операция обозначена числом 10, а операнд – числом 0647. Операция 10 в перечне команд, допустим, означает «загрузить». Тогда вся команда в переводе с машинного языка может означать: «Считать число, хранящееся в ячейке памяти под номером 0647 и загрузить», то есть записать его в регистр–накопитель. Операция 11 может означать «прибавить». Тогда команда, скажем, типа 11.0885 означает: «Прибавь число, хранящееся в ячейке 0885, к содержимому регистра–накопителя и оставь полученную сумму в регистре–накопителе». Команда 12 может означать «запомнить». И тогда 12.2936 будет означать: «Содержимое регистра–накопителя надо записать в ячейку 2936». При этом все, что хранилось в этой ячейке прежде, стирается навсегда.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке