Таким образом, получается, что вся работа ЭВМ организована по циклам, каждый из которых состоит из двух частей. Первая половина цикла называется вызовом, и на этом этапе происходит вызов, считывание очередной команды из памяти. Вторая половина – исполнение, и в этот момент исполняется полученная команда. Каждый цикл обычно занимает порядка миллионной доли секунды; последние годы появляются машины, быстродействие которых измеряется уже миллиардами и триллионами операций в секунду.
И это еще не все. Каждая команда, попадающая в регистр команд, состоит, в свою очередь, из двух частей – операции и операнда.
Если провести аналогию с командами, которые отдает в армии командир своим подчиненным, то операцию и операнд можно рассматривать как сказуемое и дополнение в обычном предложении. Ведь в языке команд очень широко распространено повелительное наклонение, а подлежащее в них очень часто опускается, например: «Равняйсь! Смирно!..»
Пусть в нашем конкретном случае операция обозначена числом 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.