Все остальное — процессор, который также называется центральным процессорным устройством (ЦПУ). В обычной речи процессор иногда называют мозгом компьютера, но я не хотел бы использовать этот термин, поскольку собранное нами устройство совершенно не похоже на мозг. В наши дни часто употребляется слово «микропроцессор» — процессор, который благодаря использованию технологии, которую я опишу в главе 18, отличается очень малыми размерами. К тому, что мы собрали из реле в этой главе, вряд ли применима приставка «микро-».
Созданный нами процессор является 8-битным. Ширина аккумулятора и большинства каналов данных составляет 8 бит. Шестнадцатибитное значение подается только на адресный вход массива RAM. Если бы значение адреса было 8-битным, то вместо 65 536 байт можно было бы адресовать только 256 байт памяти, что было бы значительным ограничением.
Процессор состоит из нескольких компонентов. Я уже упомянул аккумулятор, который представляет собой просто защелку, позволяющую хранить число внутри процессора. Восьмибитный инвертор и 8-битный сумматор нашего компьютера вместе образуют арифметико-логическое устройство (АЛУ). Наше АЛУ выполняет только арифметические операции, в частности сложение и вычитание. В более сложных компьютерах АЛУ может производить такие логические функции, как И, ИЛИ и исключающее ИЛИ. Шестнадцатибитный счетчик называется счетчиком команд.
Собранный нами компьютер состоит из реле, проводов, переключателей и лампочек. Все это — аппаратное обеспечение (hardware, или хард) компьютера. Напротив, содержащиеся в памяти коды команд и числа называются программным обеспечением (software, или софт).
Когда мы говорим о компьютерах, термин «программное обеспечение» практически идентичен термину «компьютерная программа» (или просто «программа»). Написание программного обеспечения называется программированием. Именно этим я занимался, когда определял серию команд, позволяющих нашему компьютеру перемножить два числа.
Как правило, в компьютерных программах мы можем различать код (который относится к самим командам) и данные, то есть числа, которыми манипулирует код. Иногда это различие не так очевидно. Например, команда «Остановить» в описанной выше последовательности выступала еще и в качестве числа –1.
Компьютерное программирование иногда называют написанием кода, или кодированием. От программиста вы можете услышать фразы типа: «Я потратил свои каникулы на кодирование», «Я писал код до семи утра». Иногда компьютерных программистов называют кодерами, хотя кому-то этот термин может показаться уничижительным. Такие программисты, возможно, предпочтут, чтобы их называли программными инженерами.
Коды команд, на которые реагирует процессор (например, 10h и 11h, соответствующие командам «Загрузить» и «Сохранить»), называются машинными кодами, или машинным языком. В данном случае термин «язык» используется потому, что он напоминает устный или письменный человеческий язык в том смысле, что машина его «понимает» и реагирует на него.
Для обозначения команд, выполняемых нашей машиной, я использовал довольно длинные фразы вроде «Сложить с переносом». Как правило, команды — это короткие мнемонические коды, написанные заглавными буквами. Мнемокоды могут состоять всего из двух или трех букв. Далее перечислены возможные мнемокоды для команд, распознаваемых нашим компьютером.
Операция
Код
Мнемокод
Загрузить
10h
LOD
Сохранить
11h
STO
Сложить
20h
ADD
Вычесть
21h
SUB
Сложить с переносом
22h
ADC
Вычесть с заимствованием
23h
SBB
Перейти
30h
JMP
Перейти, если 0
31h
JZ
Перейти, если перенос
32h
JC
Перейти, если не 0
33h
JNZ
Перейти, если не перенос
34h
JNC
Остановить
FFh
HLT
Эти мнемокоды особенно полезны, когда используются в сочетании с другими сокращенными обозначениями. Например, вместо длинной команды «Загрузить байт из ячейки 1003h в аккумулятор» можем написать следующее.
LOD A,[1003h]
Обозначения A и [1003h] справа от мнемокода называются аргументами, которые определяют, что конкретно происходит при выполнении команды «Загрузить». При записи аргументов место назначения указывается слева (А — аккумулятор), а источник — справа. Квадратные скобки означают, что в аккумулятор нужно загрузить не число 1003h, а значение, хранящееся в ячейке памяти по адресу 1003h.
Аналогично команду «Сложить байт из ячейки 001Eh со значением в аккумуляторе» можно сократить до такого выражения.
ADD A, [001Eh]
А команду «Сохранить содержимое аккумулятора по адресу 1003h» — до выражения следующего вида.
STO [1003h], A