К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 15
Текст из файла (страница 15)
Как рассказывалось в главе 1, процессор содержит небольшое количество регистров, вмещающих по одному слову. Эти регистры служат либо источниками, либо приемниками данных, пересылаемых в память и из памяти. Пересылаемый байт обычно располагается в младшей (крайней справа) позиции в регистре. Подробности аппаратной реализации указанных операций описываются в главах 5 и 6.
В данной же главе мы рассмотрим их с точки зрения системы команд компьютера, то есть сконцентрируем внимание на принципах логической обработки инструкций и операндов. А о конкретных аппаратных компонентах, в том числе о регистрах процессора„мы будем упоминать лишь постольку, поскольку это будет необходимо для понимания процесса выполнения машинных команд и программ. 2.4. Команды и последовательности команд Задачи, выполняемые компьютерной программой, состоят из последовательности небольших шагов, таких как сложение двух чисел, проверка определенного условия, чтение символа с клавиатуры или вывод такового на экран. Следовательно, компьютер должен поддерживать команды для выполнения следующих четырех типов операций: + пересылка данных между памятью и регистрами процессора; + арифметические и логические операции с данными; + управление последовательностью выполнения программ и их команд; + операции ввода-вывода. 2.4. Команды и последовательности команд 61 Мы начнем со знакомства с командами первых двух типов.
Но прежде чем приступать к их анализу, вам следует ознакомиться со специальной нотацией, используемой для описания операций с регистрами, 2.4.1. Нотация для описания операций с регистрами Нам необходим способ для описания операций пересылки информации из одного места в компьютере в другое. Приемниками и источниками информации могут быть память, регистры процессора и регистры подсистемы ввода-вывода. Как правило, мы будем идентифицировать место хранения информации символическим именем, представляющим его аппаратный двоичный адрес. Например, именами для адресов в памяти могут быть 1.0С, РАТАСЕ, А, ч'АВ2; регистры процессора могут иметь имена КО, Кб, а регистры ввода-вывода — имена ПАТА?1ч, ОПТБТАТПЯ и т. д. Данные, хранящиеся по указанному адресу, обозначаются именем этого адреса, заключенным в квадратные скобки.
Таким образом, выражение К1 +- [ЕОС] обозначает„что содержимое памяти по адресу ЕОС пересылается в регистр процессора К1. В качестве еще одного примера рассмотрим операцию, которая складывает содержимое регистров К1 и К2 и помещает полученный результат в регистр ВЗ. Это действие записывается так: КЗ+- [К11 + [К21 Данный тип записи называется КТХ (Кей1зСег Тгапз1ег Хоьа11оп — нотация регистровых передач). Обратите внимание, что в правой части выражения КТХ всегда стоит значение, а в левой — имя того места в памяти, куда его следует поместить, заменив старое содержимое. 2.4.2. Нотация языка ассемблера Для представления машинных команд и программ нам потребуется другой тип нотации. Для этой цели мы будем использовать формат языка ассемблера.
Например, команда, выполняющая первую из укаэанных в предыдущем разделе операций, то есть пересылку данных из памяти в регистр процессора К1 по адресу 1.0С, записывается так: Моче 1.0С, К1 После выполнения этой команды содержимое памяти по адресу 1.0С остается неизменным, а старое содержимое регистра К1 перезаписывается. Во втором примере мы складывали два числа, содержащихся в регистрах процессора К1 и К2, и помещали результат в регистр ВЗ. На языке ассемблера эта операция записывается так: АгЫ К1,К2,КЗ 62 Глава 2.
Машинные команды и программы 2.4.3. Базовые типы команд Сложение двух чисел относится к числу фундаментальных операций любого компьютера. Инструкция С - А+ В в программе на языке высокого уровня — это команда компьютеру сложить текущие значения двух переменных, А и В, и присвоить их сумму третьей переменной, С. При компиляции программы, содержащей эту инструкцию, переменным А, В и С назначаются конкретные адреса памяти.
Содержимое памяти по этим адресам представляет значения трех переменных. Поэтому приведенная выше инструкция на языке высокого уровня требует выполнения компьютером следующего действия; С +- ~А1 + 1В1 Для выполнения этого действия содержимое памяти по адресам А и В должно быть переслано в процессор, где будет вычислена сумма. Полученная сумма должна быть отправлена обратно в память н записана по адресу С. Для начала давайте предположим, что зто действие выполняется посредством одной машинной команды.
Эта команда содержит адреса трех операндов: А, В н С. Символически такую трехадресную команду можно представить как АгЫ А,В,С Операнды А и В называются исходными операндами, а С вЂ” операндом назначения или результирующим операндом. В общем случае команда этого типа имеет такой формат: Операция Источник1,Источник2,МестоНазначения Если для указания адреса одного операнда в памяти необходимо я бит, в закодированной форме данной инструкции для адресов должно быть отведено Зй бит и еще сколько-то бит для кода самой операции Абб. В случае современного процессора с 32-разрядным адресным пространством трехадресная команда слишком громоздка для одного слова разумной длины.
Поэтому для представления команд такого типа обычно используется формат длиной в несколько слов. Для выполнения этой же задачи в качестве альтернативы можно использовать несколько более простых команд, с одним-двумя операндами. Предположим, что процессором поддерживаются двухадресные команды в виде: Операция Источник,МестоНазначения Команда АгЫ такого типа АгЫ АВ будет выполнять операцию В +- 1А1 -ь ~В1. После вычисления суммы результат будет переслан обратно в память и сохранен по адресу В с заменой исходных данных, 2.4.
Команды и последовательности команд 63 хранившихся по этому адресу. Это означает, что В является и исходным, и результирующим операндом команды. Для решения нашей задачи двухадресной команды недостаточно. Потребуется еще одна двухадресная команда, которая копирует значение из одного места памяти в другое. Вот она: Моче В,С Эта команда выполняет операцию С +- (В1, оставляя содержимое памяти по адресу В неизменным. Слово Моче, означающее «перемещение», использовано здесь не совсем точно; более уместно было бы назвать эту команду Сору (копирование). Однако именно это, первое, название команды давно закрепилось в компьютерном мире. Операция С « — (А) + (В) может быть выполнена с помощью двух команд: Моче В,С АИ АС Во всех приведенных выше командах первыми задаются исходные операнды, после них — операнд назначения.
Этот порядок характерен для выражений на языке ассемблера, используемых в машинных командах многих компьютеров. Но существует достаточно много компьютеров, в которых порядок операндов обратный. Примеры обоих способов построения команд будут рассмотрены в главе 3. К сожалению, единого соглашения, принятого всеми производителями, не существует. Даже в языке ассемблера одного компьютера могут использоваться команды с разным порядком операндов. В настоящей главе исходные операнды всегда будут задаваться первыми. Итак, мы определили двух- и трехадресные команды.
Но даже двухадресные команды далеко не всегда помещаются в одно слово памяти. Можно, конечно, использовать команды, имеющие по одному операнду. Когда потребуется второй операнд, как в случае команды А<Ы, неявно будет предполагаться, что он находится в конкретном известном месте. Обычно в качестве такого «оговоренного» места служит регистр процессора, называемый сумматором (ассипш)агог). Таким образом, одноадресная команда АсЫ А означает следующее: добавить содержимое памяти по адресу А к содержимому сумматора и поместить результат в сумматор.
Давайте введем еще две одноадресные команды ).оаб А и Згоге А Команда Есаул копирует в сумматор содержимое памяти по адресу А, а команда осоге копирует содержимое сумматора в память по адресу А. Используя три 64 Глава 2. Машинные команды и программы одноадресные команды, операцию С +- ~А1 + ~В] можно выполнить следующим образом: Воат А АсЫ В 3гоге С Обратите внимание, что в зависимости от типа команды ее операнд может служить либо источником данных, либо их приемником. Например, в команде Боге адрес А определяет приемник данных, а источником является сумматор. А в команде арпад, напротив, задается источник данных, а приемником является сумматор. В некоторых старых компьютерах сумматор был единственным регистром.
В современных компьютерах регистров общего назначения обычно довольно много — от 8 до 32, а иногда и больше. Доступ к данным в этих регистрах осуществляется намного быстрее, чем доступ к памяти, поскольку, как уже было сказано, регистры располагаются внутри процессора. А поскольку количество регистров обычно невелико, для того чтобы указать, какой именно регистр участвует в операции, достаточно всего нескольких битов. Так, для задания одного из 32 регистров нужно 5 бит.
Это гораздо меньше того количества битов, которое необходимо для задания адреса в памяти. А поскольку регистры позволяют быстрее обрабатывать результаты и применять более короткие команды, они широко используются для временного хранения обрабатываемых данных. Пусть Кг — зто регистр общего назначения.