Cтраница 1
![]() |
Организация статической памяти. [1] |
Вектор переходов помещается во внутреннюю статическую область, которая является ч астью программы. Однако в MULTICS из-за того, что 1) все процедуры чистые ( не изменяют сами себя) и 2) один и тот же сегмент может иметь разный номер внутри адресного пространства пользователя, мы не можем иметь внутреннюю статическую область частью чистой программы. Поэтому указатели в MULTICS содержатся в отдельном сегменте, называемом сегментом связи. [2]
Во-вторых, вектор переходов увеличивает размер объектной программы. Наконец, BSS-загрузчик работает с программными сегментами, но не облегчает доступ к сегментам данных, которые могут совместно использоваться несколькими подпрограммами. [3]
Адресные поля вектора переходов заполняются фактическими адрееами, в которые загружаются подпрограммы. [4]
Метод заключается в использовании вектора перехода при редактировании связей для каждой процедуры, вызываемой процедурой из другого модуля. [5]
Загрузчик загружает сначала в оперативную память вектор переходов и текст основной программы. После этого он загружает каждую подпрограмму, упомянутую в векторе переходов. [6]
Вместо непосредственного вызова процедуры вызывается процедура вектора перехода, которая реализуется с помощью единственной операции, подобной операции GOTO в PL / M и команде безусловного перехода в языке ассемблера. Эта операция вызывает выполнение фактической процедуры так, как если бы она вызывалась не - посредственно. Векторы перехода размещаются в отдельном модуле, называемом модулем вектора перехода, так что при конвертировании программ из описания на языке проектирования в язык программирования процедуры вектора перехода остаются сгруппированными вместе. Если имя модуля вектора перехода предшествует имени модуля процедуры в команда редактирования связей ( link), это означает, что векторы переходов разместятся в ячейках ППЗУ с меньшими значениями адресов. В результате независимо от того, как будут модифицированы сами процедуры, связи между вызывающими процедурами из других модулей и векторами переходов меняться не будут. [7]
По формуле С, 1 - С вычисляются компоненты вектора доделочных переходов. [8]
![]() |
Способ организации связей при вызове процедур с помощью вектора перехода. [9] |
Наконец, после того, как будет выполнен последний шаг, каждый комбинированный вектор перехода и модуль процедур могут быть прожжены в предназначенном для этого ППЗУ. [10]
Однако многие микрокомпьютерные языки высокого уровня позволяют пользователю реализовать связи с помощью вектора перехода программным путем. Если необходимо, это может быть также реализовано в программах на языке ассемблера. Для реализации каждой процедуры вектора перехода используется операция PL / M GOTO, которая эквивалентна команде безусловного перехода в языке ассемблера, а также процедура описания. Следует отметить, что процедурам векторов переходов назначены имена, а самим процедурам-набор вторичных имен. Вторичные имена описаны в модуле векторов переходов как внешние метки, так как PL / M не позволяет использовать в операции GOTO обращение к имени процедуры. Последовательность шагов при вызове процедуры STOP TIMER показана на рисунке стрелками. [11]
Входные и выходные параметры, передаваемые между процедурами PL / M, не должны описываться в описании процедуры вектора перехода. Они должны описываться там, где используются, а именно в описании действительных процедур. Компилятор PL / M затем будет передавать эти параметры между вызывающей процедурой и фактически вызываемой процедурой в соответствии с необходимостью. [12]
Загрузчик загружает сначала в оперативную память вектор переходов и текст основной программы. После этого он загружает каждую подпрограмму, упомянутую в векторе переходов. [13]
Вместо непосредственного вызова процедуры вызывается процедура вектора перехода, которая реализуется с помощью единственной операции, подобной операции GOTO в PL / M и команде безусловного перехода в языке ассемблера. Эта операция вызывает выполнение фактической процедуры так, как если бы она вызывалась не - посредственно. Векторы перехода размещаются в отдельном модуле, называемом модулем вектора перехода, так что при конвертировании программ из описания на языке проектирования в язык программирования процедуры вектора перехода остаются сгруппированными вместе. Если имя модуля вектора перехода предшествует имени модуля процедуры в команда редактирования связей ( link), это означает, что векторы переходов разместятся в ячейках ППЗУ с меньшими значениями адресов. В результате независимо от того, как будут модифицированы сами процедуры, связи между вызывающими процедурами из других модулей и векторами переходов меняться не будут. [14]
В первых четырех строках нашего примера определяются символы, которые будут использованы в программе на языке ассемблера; это делает программу более удобочитаемой и дает возможность легко менять обозначение битов и портов в аппаратуре без существенных изменений в программе. Например, маска состояния печатающего устройства равна 80Н, если мы предполагаем, что СЗР байта состояния консоли равен 1, когда печатающее устройство готово к работе. Эти четыре ячейки указывают вектор переходов, а именно переходов извне в программу что будет в дальнейшем объяснено подробно. [15]