Вентиляция типы. Вентиляторы DECOR. , Языковой Центр Helvetia: медицинский перевод. Медицинские вопросы?
Настройка модулей по месту

Организация подпрограмм (модулей), описанная в предыдущих разделах, выглядит довольно стройной. Но у нее есть существенный недостаток — каждый модуль рассчитан на то, что он занимает определенное место в памяти. Современные библиотеки стандартных подпрограмм (не считая подпрограмм, разрабатываемых лишь для включения в состав одной или немногих программ) насчитывают, как правило, сотни модулей. Их общий объем намного превышает объем оперативной памяти. Если даже учесть, что каждая программа использует во время своей работы лишь небольшую часть библиотеки и что использование некоторых комбинаций модулей в одной программе очень маловероятно, то и тогда оказывается практически невозможным выбрать для каждого модуля свое неизменное место в памяти, на которое не претендовал бы ни один из совместно работающих с ним модулей.
Отсюда возникает задача —- научиться располагать модули в произвольном месте памяти. Такая постановка задачи еще слишком расплывчата. Будем для определенности считать, что модуль вместе со своими константами, заготовками и рабочими ячейками (такими, которые он не делит с другими модулями) составлен, исходя из предположения, что он занимает в памяти массив ячеек с начальным (наименьшим) адресом аш и конечным (наибольшим) адресом ак. Здесь а№ и ак не обязательно обозначают адрес входа в модуль и выхода из него. Пусть этот модуль требуется фактически разместить, начиная с ячейки с адресом Ьп. Ясно, что при этом любой адрес ячейки, входящей в состав модуля (такой адрес называется внутренним адресом модуля), должен получить приращение S = Ьп — ан. Как распознать такие адреса? Можно просмотреть все слова, из которых состоит модуль, прочесть их как коды команд, выделить по очереди каждый из трех адресов команды, и если этот адрес А удовлетворяет неравенству аи ^ А ^ак, считать, что он относится к интересующей нас категории, и соответственно изменить его. В действительности при этом можно пропустить некоторые адреса, которые следовало бы откорректировать, и испортить некоторые коды, которые должны остаться неизменными. Например, может оказаться, что адрес А < ан, но он снабжен признаком модификации и во время выполнения команды, содержащей этот адрес, значение индекс-регистра удовлетворяет неравенствам ан — A Я <; ак — А (иначе, ан ^ А' = А + И ^ ак). Такой адрес А может иметь отношение к нашему массиву и его следовало бы откорректировать. Еще более вероятен другой случай, например, когда среди слов модуля содержится код некоторой числовой константы и группа разрядов этого кода, занимающая место одного из адресов, изображает, число из диапазона ан -т* ак.