Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплект Информатика / Курс лекций.doc
Скачиваний:
128
Добавлен:
22.05.2015
Размер:
4.8 Mб
Скачать

2 Пример машинного языка

Рассмотрим, как закодированы команды гипотетической машины, представленной на рис. 1.

Рисунок 1 – Архитектура гипотетической машины

Архитектура машины. Гипотетическая машина имеет 16 регистров общего назначения. Длина каждого регистра равна одному байту (восьми битам). Память рассматриваемой машины состоит из 256 ячеек, каждая емкостью восемь битов. Мы маркировали регистры значениями от 0 до 15, а ячейкам памяти присвоили адреса со значениями от 0 до 255. Затем мы представили эти метки и адреса в двоичной системе счисления и сжали получившийся код при помощи шестнадцатеричного представления. Следовательно, в нашей машине регистры маркированы значениями от 0 до F, а адреса ячеек памяти имеют значения от 00 до FF.

Предполагается, что числа с плавающей запятой хранятся в следующем формате:

Рисунок 2 – Формат хранения чисел с плавающей запятой

Машинный язык. Длина каждой машинной команды равна двум байтам. Первые четыре бита содержат код операции, последние 12 битов образуют поле операндов. В приведенной ниже таблице перечислены и кратко описаны команды, показанные в шестнадцатеричном представлении. Буквы R, S и Т используются для указания в поле операндов позиции шестнадцатеричных цифр, являющихся идентификаторами регистров, которые меняются в зависимости от конкретной команды. Буквы X и Y используются для указания в поле операндов позиций тех шестнадцатеричных цифр, которые не являются идентификаторами регистров.

Закодированная машинная команда состоит обычно из двух частей: поля кода операции (op-code field) и поля операнда (operand field). Набор битов, расположенный в поле кода операции, обозначает, какая из элементарных операций, таких как операции сохранения, сдвига, XOR или перехода, запрашивается командой. Набор битов, находящийся в поле операнда, содержит подробные сведения об объектах, участвующих в операции, определенной кодом операции. Например, в случае команды сохранения в поле операнда содержится информация о том, в каком регистре находятся данные, которые нужно сохранить, и какая ячейка памяти должна получить эти данные.

Весь язык нашей машины (приложение В) состоит из 12 основных команд, каждая из которых представлена 16-битовым кодом, записанным четырьмя шестнадцатеричными цифрами (рис. 3).

Рисунок 3 – Структура машинной команды

Код операции каждой команды состоит из первых четырех битов или, что то же самое, из первой шестнадцатеричной цифры. Обратите внимание (см. приложение В) на то, что коды операций представлены шестнадцатеричными цифрами от 1 до С. В частности, как можно увидеть в таблице приложения, команда, начинающаяся с цифры 3, является командой сохранения, команда, начинающаяся с шестнадцатеричной цифры А, является командой циклического сдвига.

Поле операнда каждой команды в нашей машине состоит из трех шестнадцатеричных цифр (12 битов) и в каждом случае (кроме команды останова, которая не нуждается в дальнейшем уточнении) поясняет команду, представленную кодом операции. Например (рис. 4), если первая шестнадцатеричная цифра команды — 3 (код операции сохранения), то следующая за ней цифра обозначает, данные из какого регистр нужно сохранить, а две другие, — какая ячейка памяти должна получить эти данные. Следовательно, команда 35А7 содержит следующие инструкции: «сохранить двоичный код, находящийся в регистре 5, в ячейке памяти с адресом А7».

Рисунок 4 – Декодирование команды 35А7

Рассмотрим другой пример. Код операции 7 говорит о том, что нужно выполнить операцию OR над двумя регистрами (мы позже рассмотрим, что означает операция OR над двумя регистрами, сейчас нас просто интересует, как закодированы команды). В этом случае следующая шестнадцатеричная цифра указывает, куда нужно поместить результат, а остальные две цифры в поле операнда означают, над какими двумя регистрами нужно выполнить операцию OR. Значит, команда 70С5 содержит такие инструкции: «выполнить операцию ИЛИ над содержанием регистра С и регистра 5 и сохранить результат в регистре 0».

Существует тонкое различие между двумя командами загрузки. Код операции 1 относится к команде, которая загружает в регистр содержимое ячейки памяти, а код операции 2 относится к команде, загружающей в регистр некоторое значение. Различие состоит в том, что поле операнда первой команды содержит адрес ячейки памяти, в то время как поле операнда второй команды содержит двоичный код, который нужно загрузить.

Обратите внимание на то, что в машине находятся две команды сложения: одна для сложения чисел в двоичном дополнительном коде, а вторая для сложения чисел в представлении с плавающей точкой. Это различие является следствием того, что сложение чисел в двоичном дополнительном коде и с плавающей точкой требуют различных действий арифметико-логического устройства.

В завершение приведeм закодированную последовательность команд программы сложения двух чисел (см. табл. 1). При этом мы предполагаем, что складываемые значения хранятся в виде двоичного дополнительного кода в ячейках памяти с адресами 6С и 6D, а сумму следует поместить в ячейку с адресом 6Е.

Таблица 1 – Расшифровка последовательности команд

№ шага

Содержание операции

Команда

Шаг 1

Взять значение из ячейки памяти и поместить его в регистр

156C

Шаг 2

Взять другое значение из другой ячейки памяти и поместить его в другой регистр

166D

Шаг 3

Активировать схему сложения, на входе которой будут данные из регистров, описанных в шагах 1 и 2 и задав еще один регистр в качестве выходного, предназначенного для размещения результата

5056

Шаг 4

Сохранить результат операции в основной памяти

306E

Шаг 5

Стоп

C000