Д. Кнут - Искусство программирования том 1 (1119450), страница 34
Текст из файла (страница 34)
С помощью четырех соседних байтов можно выразить числа от 0 до 16 777 215. С помощью пяти соседних байтов можно выразить числа от О до 1 073 741 823. Мазппнное слово состоит из пяти байтов н знака. Знак может принимать только два значения: и+и и "— ". Регистры. В компьютере И1Х всего девять регистров (рис. 13).
Регистр А (аккумулятор) содержит 5 байт и знак. Регистр Х (расширение аккумулятора) тон е содержит 5 байт и знак В регистрах 1 (индексных регистрах) П, 12, 13, 14, 15 и 16 содержится по два байта и знак. Регистр 1 (адрес перехода) содержит два байта; его знак — всегда ч+".
Для обозначения регистра компьютера И1Х будем использовать в качестве приставки к имени регистра строчную букву иг'. Таким образом, и«Ав обозначает "регистр А", 1'егистр А имеет много применений, особенно часто он используется при выполнении арифметических действий и операций над данными. Регистр Х используется " Приблизительно с 1975 гада слово "байт" стало обозначать последовательность, состоящую ровно из восьми двоичных цифр, что позволяет представлять числа от 0 до 255 Позтому размера байтов реальных компьютеров больше, чем размеры байтов гипотетической машины М1Х И в самом деле, старомодные байты компьютера М1Х только чуть-чуть больше, чем половина байта реального компьютера Говоря о байтах применительно к М1Х, мы будем придерживаться прежнего значения етого глава, вновь возвращаясь к тем дням, когда понятие байта еще не было так стандартизовано Регистр А Регистр Х Регистр 11 114 1! 5 О ° ° Флаг (Е ) Инлнкатор пеРеполнения Я © срявнения Регистр 12 Регистр 13 Регистр 14 Регистр 15 Регистр 16 Регистр 1 533 3 рй$ а ь Магнитные ленты Диски и барабаны 1!О Ш "° 1!7 1!8 .
° ° !Л4 Б!5 Шб Ш7 1!!8 Ш9 Рис. 13, Компьютер И11. для расширения вправо регистра А и вместе с гА — для хранения 10 байт произведения или делимого. Он может применяться и для хранения информации, сдвинутой вправо из гА, Индексные регистры г11, г12, г?3, г14, г15 и г16 используются, главным образом, как счетчики и для ссылок на различные адреса памяти. В регистре Я всегда хранится адрес команды, которая следует за последней операцией "перехода"; этот регистр используется, главным образом, для вызова подпрограмм. Помимо регистров, компьютер И1Х содержит следующие элементы: триггер переполнения (один бит, который может принимать значение "нуль" или "единица"); флаг сравнения (принимающий одно из трех значений. ЬЕ88 (меньше), ЕЦОАЬ (равно) и ОЕЕАТЕЕ (больше)); память (4 000 слов, каждое из которых состоит из 5 байт и знака); устройсглва ввода-вывода (перфокарты, ленты, диски и т.
д.), Структура машинного слова. 5 байт и знак, из которых состоит машинное слово, нумеруются следующим образом: (2) Большинство команд таковы, что программист может при желании использовать только часть слова. В подобных случаях можно задать нестандартную "спецификацию поля". При этом допустимо использовать поля, которые являются соседними в машинном слове; они обозначаются в виде (Ь В), где Ь вЂ” номер левой, а  — номер правой части поля. Приведем примеры спецификации полей: (О:0)г только знак; (О: 2): знак и первые два байта; (О: 5): целое слово; это самая распространенная спецификация поля; (1:5): все слово, кроме знака; (4:4): только четвертый байт; (4:5): два младших значащих байта.
Использование спецификации поля несколько меняется от команды к команде; при рассмотрении каждой команды мы поговорим об этом более подробно. На самом деле каждая спецификация поля (Ь:В) представляется внутри компьютера одним числом — 8Ь + В; заметим, что это число легко помещается в одном байте Формат команды. Машинные слова, используемые как команды, имеют следующий формат: (3) Крайний байт справа, С,— это код операции, который указывает, какая операция должна быть выполнена.
Например, С = 8 определяет операцию ЬОАе, "загрузить регистр А". Байт г определяет модификацию кода операции. Обычно это спецификация поля (Ь:В) = 8Ь+ В. Например, если С = 8 и г = 11, то операцией будет "загрузить в регистр А поле (1:3)е Иногда г используется для других целей Например, для команд ввода-вывода г — это номер соответствующего входного или выходного устройства. 1,РА — сокращеиие от "1оао гве А генмег" — Прим иерее Форма записи.
Чтобы сделать команды более читабельными, для обозначения команды типа (3) будет использоваться следующая форма записи: (4) ОР АОРЯЕЯЯ,1(Е) . Здесь ОР— символическое имя кода операции (часть С) команды, АОРЯЕЯЯ вЂ” часть ~АА, 1 и Іпо 1 и Р соответственно. Если 1 равно нулю, то запись ",1" опускается. Если Р— стандаргпная Р- спецификация для данной команды, то запись "(Г)" использовать не нужно. Практически для всех команд стандартной Р-спецификацией является (О:5), что соответствует целому слову. Если же стандартной является другая спецификация Р, то она будет упомянута особо при описании конкретной команды Например, команда загрузки числа в аккумулятор называется ЕРА и ее код операции — 8.
Имеем следующее. Условное представление Реальное представление команды в цифровом виде ЕРА 2000,2(0:3) ЕОА 2000,2(1."3) 1,РА 2000(1:3) ЕРА 2000 ЕОА -2000,4 (5) Команда 5ЕОА 2000,2(0: 3)" читается следующим образом: "Загрузить в регистр А содержимое ячейки 2000 с индексом 2, поле "нуль-три". Левая часть команды, хАА, определяет адрес. (Обратите внимание, что знак является частью адреса.) Поле 1, которое следует за адресом, — это спецификация индекса, которую можно применять для модификации фактического адреса. Если 1 = О, то адрес хАА используется без изменений. В противном случае в поле 1 должно содержаться число 1 от 1 до 6, и тогда содержимое индексного регистра В алгебраически добавляется к ~АА перед выполнением команды.
Полученный результат используется как адрес. Процесс индексирования выполняется для каждой команды. Обозначим буквой "М" адрес, получаемый после каждой операции индексирования. (Если после добавления содержимого индексного регистра к адресу ~АА получается результат, который не помещается в двух байтах, то значение М будет неопределенным.) Для большинства команд М указывает на ячейку памяти. Термины "ячейка памяти" и "адрес ячейки памяти" в этой книге почти всегда являются эквивалентными.
Предполагается, что имеется 4 000 ячеек памяти с номерами от 0 до 3 999 Поэтому адрес каждой ячейки можно представить с помощью двух байтов. Для каждой команды, в которой М обозначает ячейку памяти, должно выполняться неравенство 0 < М ( 3999. В этом случае запись СОЯЕЕНТЯ(М) будет обозначать величину, которая хранится в ячейке с адресом М. Для некоторых команд "адрес" М имеет несколько иной смысл; он может даже быть отрицательным.
Так, например, одна команда добавляет М к индексному регистру и при этом принимается во внимание знак М. Для представления цифрового содержимого слова М1Х будем использовать клеточную запись, как было сделано выше. Обратите внимание, что в слове + 2000 2 3 8 число +2000 занимает два соседних байта и знак.
Заметим, что реальное содержимое байта (1:1) и байта (2: 2) будет меняться при переходе от одного компьютера М1Х к другому, так как меняется размер байта. В следующем примере подобной записи 10000 3000 представлено слово, состоящее из двух полей. В первом поле, содержащем три байта и знак, находится число — 10000, а во втором поле, размером два байта, — число 3000. Когда слово разбито на несколько полей (т. е. содержит более одного поля), говорят„ что оно "упаковано". Описания команд.
В замечаниях, следующих за записью (3) (см. выше), были определены величины М, Е и С для любого слова, используемого в качестве команды. А теперь определим действия, соответствующие каждой команде. Команды загрузки ° 1.РА (!оас! А — загрузить А). С = 8; Г = псле. Заданное поле СОМТЕМТЯ(М) заменяет предыдущее содержимое регистра А. Во всех операциях, в которых в качестве входного значения используется частичное поле, знак учитывается, если он является частью этого поля; в противном случае берется знак "+".
По мере загрузки поле сдвигается в правую часть регистра. Примеры. Если à — стандартная спецификация поля (О:5), то все содержимое ячейки М копируется в гА. Если Р— спецификация (1:5), то абсолютное значение СОМТЕМТБ (М) загружается со знаком "+". Если в М содержится команда и Š— это спецификация (О:2), поле и~АА" загружается как 0 0 0 А А Предположим, в ячейке с адресом 2000 содержится слово (6) 80 3 Б 4 тогда, загружая различные частичные поля, получим следующие результаты.