Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика и ВТ Брукшир.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.07 Mб
Скачать

2.2.3Арифметико-логические команды

В эту группу входят команды, которые предписывают устройству управления активизировать арифметико-логическое устройство. К этой категории команд относится шаг 3. Как можно понять из его названия, арифметико-логическое устройство выполняет не только простые арифметические операции. К некоторым дополнительным операциям относятся логические операции AND, OR и XOR, которые мы обсуждали в главе 1 и будем рассматривать более подробно в этой главе. Эти операции часто используются для того, чтобы манипулировать отдельными битами регистра, не затрагивая остальных. Другие операции, доступные в большинстве арифметико-логических устройств, позволяют сдвигать содержимое регистра вправо или влево. Они называются операциями сдвига (SHIFT) или циклического сдвига (ROTATE) в зависимости то того, удаляются ли биты, находящиеся на конце регистра, в направлении которого происходит сдвиг, или используются для заполнения пространства на другом его конце.

2.2.4Команды управления

В эту группу входят команды, которые управляют выполнением программы, а не манипулируют данными. К этой категории команд относится шаг 5, хотя он и является слишком простым примером. Эта группа включает наиболее интересные машинные команды, такие как команды перехода (JUMP) или ветвления (BRANCH), которые предписывают устройству управления выполнять не следующую инструкцию, а какую-нибудь другую. Команды перехода разделяются на команды безусловного и условного перехода. Примером первых может быть инструкция «перейти к шагу 5», примером второй — «если полученное значение равно 0, тогда перейти к шагу 5». Различие заключается в том, что условный переход осуществляется только тогда, когда выполняется условие. Рассмотрим в качестве примера алгоритм деления двух чисел, в котором шаг 3 является условным переходом, исключающим возможность деления на ноль.

2.2.5Деление двух значений, хранящихся в памяти

Шаг 1. Загрузить в регистр значение из памяти.

Шаг 2. Загрузить в другой регистр другое значение из памяти.

Шаг 3. Если второе значение равно нулю, перейти к шагу 6.

Шаг 4. Разделить содержание первого регистра на содержание второго регистра и поместить результат в третий регистр.

Шаг 5. Сохранить содержание третьего регистра в памяти.

Шаг 6. Стоп.

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

Рассмотрим, как закодированы команды в типичной машине, описанной в приложении В и представленной на рис. 2.2. Она имеет 16 регистров общего назначения и 256 ячеек памяти, каждая емкостью восемь битов. Мы маркировали регистры значениями от 0 до 15, а ячейкам памяти присвоили адреса со значениями от О до 255. Затем мы представили эти метки и адреса в двоичной системе счисления и сжали получившийся код при помощи шестнадцатеричного представления. Следовательно, в нашей машине регистры маркированы значениями от 0 до F, а адреса ячеек памяти имеют значения от 00 до FF.

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

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

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

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

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

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

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

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

Таблица

2.1. Алгоритм сложения двух чисел, хранящихся в оперативной памяти, закодированный командами типичной машины, описанной в приложении В

Команда

Описание команды

156С

Загрузить в регистр 5 двоичный код, находящийся в ячейке памяти с адресом 6С.

166D

Загрузить в регистр 6 двоичный код, находящийся в ячейке памяти с адресом 6D.

5056

Сложить содержимое регистров 5 и 6 как двоичные дополнительные коды и сохранить результат в регистре 0.

306Е

Сохранить содержимое регистра 0 в ячейке памяти с адресом 6Е.

СООО

Останов.