Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УММ / Тема 2 / Тема 2 Лекция 2 / Тема 2 Лекция 2.docx
Скачиваний:
50
Добавлен:
16.03.2016
Размер:
4 Мб
Скачать

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), которое и нужно сложить с содержимым аккумулятора. («А это веселая птица-синица, которая ловко ворует пшеницу, которая в темном чулане хранится в доме, который построил Джек.» Похоже?).

Соседние файлы в папке Тема 2 Лекция 2