Файл: Каган Б.М. Цифровые вычислительные машины и системы учеб. пособие.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.04.2024

Просмотров: 278

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

требовала бы не меньших усилий, чем решение задачи вручную, без вычислительной машины.

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

Возможность машин с хранимой программой обраба­ тывать команды точно так же, как и данные, позволяет предложить другой, более эффективный путь организа­ ции циклического исполнения программ. Для этих це­ лей вместо замены данных достаточно изменять адреса операндов. Эта процедура получила название модифика­ ции адресов или переадресации. Однако модификация адресов чисто программными способами может потребо­ вать весьма большого числа дополнительных команд, осуществляющих арифметические и логические опера­ ции над адресными частями команд. Операции над адре­ сами могут в значительной степени усложнить про­ грамму, увеличивая ее длину и затраты машинного вре­ мени, бесполезные с точки зрения реализации алгоритма решаемой задачи. Естественно поэтому попытаться воз­ ложить указанные вспомогательные функции на аппара­ туру, которая автоматически выполняла бы модифика­ цию адресов по указанию программы. Автоматическая модификация адресов составляет основное содержание индексации.

Для выполнения индексации в машину вводят так называемые индексные регистры’. Содержимое индекс­ ного регистра (триггерного регистра или ячейки памяти) складывается с адресной частью команды для получения исполнительного адреса, по которому и производится фактическое обращение к памяти. После модификации адреса содержимое адресной части команды, хранимой

1 Наименование индексных регистров связано с тем, что пер­ воначально они предназначались для хранения индекса і текущего элемента массива а< (і=1, 2, 3, ..., п ). Хотя назначение индексных регистров по сравнению с первоначальным значительно расшири­ лось, термин сохранился и в настоящее время может считаться установившимся.

309



в памяти, остается, как правило, неизменным. Следова­ тельно, одна и та же команда с одной и той же адресной частью может использоваться при соответствующих из­ менениях содержимого индексного регистра для форми­ рования различных исполнительных адресов.

Необходимость модификации адреса данной команды должна быть каким-либо образом указана. Обычно для этой цели в команде отводят определенное количество разрядов; записанное в них двоичное число определяет номер индексного регистра. Если число, хранящееся в разрядах команды, указывающих индексацию, равно ну­ лю, это обычно означает, что адрес данной команды не модифицируется. Способ указания индексации внутри самой команды может быть назван внутренней индекса­ цией, а индексные регистры, определенные таким спо­ собом,— внутренними индексными регистрами. Посколь­ ку число разрядов в команде, которое целесообразно вы­ делить для указания индексации, обычно ограничено, количество внутренних индексных регистров невелико.

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

Для того чтобы наиболее полно использовать возмож­ ности, предоставляемые индексацией, необходимо ввести в состав команд машины специальные команды, которые осуществляют ряд операций над содержимым индексных регистров. В литературе этот набор операций часто име­ нуется индексной арифметикой.

Существует большое разнообразие операций индекс­ ной арифметики для различных типов машин. Однако, отвлекаясь от деталей, специфичных для конкретных

310


структур машин, можно выделить три основные катего­ рии операций: засылка, изменение и проверка.

Засылка представляет собой установку начального значения индексного регистра, производимую перед на­ чалом цикла программы, управляемого этим регистром. Типичная команда засылки для внутреннего индексного регистра имеет одноадресный формат и состоит из адрес­ ной части, указывающей, откуда берется начальное зна­ чение индексного регистра, и разрядов, составляющих указатель номера этого регистра. Для команды засылки при предварительной индексации необходим в общем случае двухадресный формат, содержащий адреса ячеек, откуда берется и куда засылается начальное значение. Помимо прямой адресации иногда используется непо­ средственная адресация, когда в команде указывается не адрес ячейки, хранящей начальное значение, а непосред­ ственно само начальное значение. В этом случае эконо­ мятся как место в памяти, так и затраты времени на за­ сылку, однако становится затруднительным использовать в качестве начального значения величину, полученную в результате предыдущих вычислений.

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

Обычно цикл программы должен быть выполнен определенное заранее заданное количество раз. Для под­ счета количества повторений цикла часто используется также индексный регистр (тот же, что и для модифика­ ции адресов, или другой), а для определения того, что требуемое число повторений произведено, вводится опе­ рация проверки. Команда, осуществляющая проверку индексного регистра, аналогична по своему действию

311


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

При сравнении с пределом содержимое индексного регистра, выполняющего модификацию адреса, сравни­ вается с некоторым числом, называемым пределом. Ус­ ловный переход происходит либо по признаку: содержи­ мое индексного регистра больше предела, либо по при­ знаку: содержимое индексного регистра меньше предела. Команда проверки должна указывать номер (или ад­ рес) индексного регистра, адрес (либо непосредственную величину) предела и адрес перехода.

При подсчете в индексный регистр, служащий счет­ чиком, записывается при засылке требуемое количество повторений и после каждого цикла из содержимого ре­ гистра вычитается единица. Команда проверки осуществ­ ляет условный переход при равенстве индексного регист­ ра нулю и должна содержать, таким образом, номер ин­ дексного регистра и адрес перехода. Подсчет можно представить себе как частный случай сравнения с преде­ лом, при котором предел равен нулю, а приращение ин­ дексного регистра — счетчика равно 1.

При подсчете требуется меньшая длина команды, чем при сравнении с пределом, однако не всегда возможно использовать один и тот же индексный регистр и для модификации адресов, и для подсчета числа повторений. В таких случаях для организации программного цикла требуются два индексных регистра,

В целях сокращения длины команд проверки часто используют подразумеваемую адресацию. Например, подразумевается, что предел или счетчик имеет фикси­ рованное расположение относительно индексного регист­ ра, производящего модификацию адресов (в следующем индексном регистре или ячейке памяти). Другой путь сокращения длины команды заключается в подразуме­ ваемой адресации перехода. Например, команда про­ верки строится таким образом, что при выполнении ус­ ловий перехода совершается скачок через следующую команду, при невыполнении условий перехода выполня­ ется следующая команда.

Сокращение длины команд индексной арифметики путем использования подразумеваемых операндов и ад-

312