- •15 Принципы построения и функционирования эвм на примере базовой эвм
- •1. Назначение и структура базовой эвм
- •2. Кодирование программ и система команд
- •3. Арифметические операции
- •4. Управление вычислительным процессом, сдвиги и логические операции
- •5. Подпрограммы и параметры
- •6. Основные стадии выполнения команды
2. Кодирование программ и система команд
Все операции в ЭВМ выполняются над электрическими сигналами, закодированными двоичной цифрой 0 или 1. Поэтому перед занесением в память данные и команды должны быть вручную или аппаратно преобразованы в двоичную форму. Однако при написании программы команды могут быть записаны в любой другой форме (например, мнемонической, как в табл. 1). В общем случае программа может кодироваться четырьмя способами: в двоичной, восьмеричной, шестнадцатеричной и символической или мнемонической форме.
Двоичная форма команды. Эта форма является единственной, которую понимает машина. Каждой ЭВМ присуща система команд в двоичном коде, которая понятна ей. Регистр команд, куда помещается команда из памяти, связан электрическими цепями с устройством управления ЭВМ, где производится декодирование команды и инициируются сигналы по реализации команды. В табл. 2 приведено содержимое части памяти ЭВМ, где хранятся программа и данные для суммирования двух чисел из примера параграфа 2.1. Левый столбец — это адреса ячеек в двоичной форме. Правый столбец представляет содержимое ячеек в двоичной форме. Адрес имеет 11 разрядов (память ЭВМ состоит из 2048 = 211 ячеек), а каждая из ячеек — по 16 разрядов. Для удобства чтения двоичных чисел и их перевода в шестнадцатеричную систему они разбиты на тетрады.
Восьмеричное и шестнадцатеричное кодирование. Из предыдущего примера ясно, что записывать программу в двоичном коде очень неудобно и утомительно, если учесть, что средняя по сложности программа состоит из нескольких сотен или тысяч нулей и единиц. Для сокращения записи целесообразно использовать систему счисления с основанием 23 = 8 или 24 = 16. Выбор для кодирования команд той или иной системы счисления в основном связан с форматом команд ЭВМ. В нашем случае удобнее шестнадцатеричная система, так как большинство полей в командах базовой ЭВМ (см. рис. 3) равно или кратно 4. В табл. 3 приведена та же программа, что и в табл. 1 и 2, только закодированная в шестнадцатеричной системе. Для программиста такое кодирование более удобно, чем двоичное.
Таблица 2 Таблица 3
Пример двоичного кодирования Пример шестнадцатеричного кодирования
содержимого памяти содержимого памяти

Мнемоническое (символическое) кодирование. Шестнадцатеричное (или восьмеричное) кодирование имеет очевидное преимущество перед двоичным. Однако для длинных программ и оно неудобно. Программист должен выучить наизусть шестнадцатеричные коды всех команд, использующихся в машине (в некоторых ЭВМ их более сотни). Чтобы упростить процесс написания, отладки и чтения программы, предложен мнемонический или символический код: каждая команда представляется простым двух-, трех- или четырехбуквенным мнемоническим символом. Мнемонические символы значительно легче связать с машинными операциями, так как их можно выбирать таким образом, чтобы они напоминали название команды. Большинство мнемонических кодов — это сокращения английских названий команд: SUB от SUBtract (вычесть), BR от Branch (перейти), BPL от Branch if Plus (перейти по положительному числу) и т. п. Намного легче запомнить, что инвертирование аккумулятора (CoMplement Accumulator) кодируется СМА, чем запомнить двоичный код 1111010000000000 или даже его шестнадцатеричный эквивалент F400. Пример символического кодирования программы был приведен в параграфе 1 (см. табл. 1).
Хотя символическое кодирование очень удобно для программиста, оно не может быть понято машиной. Единственным языком, понятным машине, является язык двоичных кодов. Следовательно, необходимо транслировать символическую программу в ее двоичный эквивалент. Это можно сделать вручную, используя таблицы соответствия (вида табл. 4). На практике трансляция осуществляется специальной машинной программой.
Классификация команд. ЭВМ способна понимать и выполнять определенный набор команд. При составлении программы программист ограничен этими командами. Количество и тип команд изменяются в зависимости от возможностей и назначения ЭВМ.
В зависимости от того, к каким блокам машины обращается команда или на какие блоки она ссылается, команды можно разделить на три группы: обращения к памяти (адресные команды); обращения к регистрам (регистровые или безадресные); ввода-вывода.
Команды обращения к памяти предписывают машине производить действия с содержимым ячейки памяти, адрес которой указан в адресной части команды. Например, команда ADD 20 из табл. 2.1 является командой обращения к памяти. Она предписывает машине обращение по адресу 20 и использование содержимого этой ячейки в качестве первого операнда. Второй операнд находится в аккумуляторе. Эти два операнда суммируются.
Безадресные команды выполняют различные действия без ссылок на ячейку памяти. Например, команда CLA из табл. 1 предписывает машине очистить аккумулятор. Эта команда имеет дело с операндом, расположенным в конкретном месте — в аккумуляторе. Другой пример безадресной команды — команда HLT из табл. 1.
Команды ввода-вывода осуществляют обмен данными между ЭВМ и внешними устройствами. В них задаются адрес (название) устройства ввода-вывода и код той операции, которую должно выполнить это устройство (приказ на ввод-вывод).
В табл. 4 дан перечень команд базовой ЭВМ. Подробно действия, выполняемые машиной по этим командам, рассмотрены в следующих параграфах. Поясним одно из описаний: (СК) + 1 => СК в командах ISZ и TSF. После выполнения этой операции счетчик команд будет указывать не на следующую команду программы, а на команду, расположенную за ней. Это произойдет потому, что после выборки команды ISZ или TSF содержимое счетчика команд уже было увеличеноавтоматически на единицу.
Существует и другой способ разделения команд на группы. Он основан на учете функций, выполняемых командой. Можно выделить восемь типов команд: пересылок или обмена, арифметические, логические, сдвигов, переходов, обращения к подпрограмме, управления и ввода-вывода.
Форматы команд и способы адресации. Ранее рассматривались различные форматы (структуры) команд. Разработчики базовой ЭВМ выбрали три формата 16-битовых (однословных) команд с 4-битовым кодом операций (рис. 4).

Таблица 4.Система
команд базовой ЭВМ
С помощью 4-битового числа можно закодировать не более чем 24=16 различныхопераций. Разработчики отвели два кода (1110 и 1111) на команды ввода-вывода и безадресные команды, а так как в этих командах либо используется меньшая по длине адресная часть (8-битовый адрес устройства ввода-вывода на рис. 4, в), либо эта часть вообще отсутствует (рис. 4, б), то появилась возможность иметь до 24= 16 команд ввода-вывода (4-битовый приказ на ввод-вывод) и до 212 = 4096 безадресных команд (12-битовое расширение кода операции).
В
командах обращения к памяти на адрес
отведено 11 бит, что позволяет осуществить
прямое
адресование
всех 2048 (2м)
ячеек памяти базовой ЭВМ. Однако
встречаются приложения, когда в команде
целесообразнее размещать не сам адрес
операнда (результата или перехода), а
его указатель, т. е. адрес ячейки памяти,
в которой сохраняется адрес операнда
(результата или перехода). Такое косвенное
адресование упрощает
построение циклических программ,
организацию работы с подпрограммами,
а также создает условия для расширения
адресуемого пространства (косвенное
адресование 16-битовых ячеек базовой
ЭВМ позволяет ей иметь память объемом
до 216
= 65536 слов).
Для указания вида адресации в командах используется бит с номером 11 (рис. 4, а), в который при прямой адресации следует записывать 0, а при косвенной— 1. В мнемонических изображениях команд для указания косвенной адресации операнд помещается в скобки. Так, на рис. 5 команда ADD 25 или 4025 указывает, что из ячейки 25 должно быть взято число (53), которое нужно сложить с содержимым аккумулятора. Команда же ADD (25) или 4825 указывает, что из ячейки 25 должен быть взят адрес ячейки (53), в которой хранится число (47), которое и нужно сложить с содержимым аккумулятора. («А это веселая птица-синица, которая ловко ворует пшеницу, которая в темном чулане хранится в доме, который построил Джек.» Похоже?).
