Cтраница 2
В табл. 15.5 приведены структура и содержание области сохранения вызывающего модуля. Регистр 15 загружается адресом входа в вызываемый модуль, а регистр 14 - адресом возврата из вызываемого модуля. Один из адресов предусматривается для результата, формируемого вызываемым модулем. [16]
Заметим, что содержимое регистра 13 в области сохранения вызывающего модуля не запоминается, поскольку единственное назначение этого регистра состоит в передаче адреса области сохранения вызываемому модулю. Поэтому содержимое регистра 13 запоминается. Таким образом, вторые слова областей сохранения образуют цепочку ( список), с помощью которой можно просмотреть области сохранения, задействованные при выполнении последовательности модулей, что может оказаться полезным при отладке. [17]
Когда функции четко разделены, число индикаторов, передаваемых в вызывающий модуль, должно быть сравнительно невелико. [18]
Область сохранения - область памяти, которая используется для сохранения общих регистров вызывающего модуля. Область сохранения имеет стандартный формат, состоящий из 18 слов, выравненных на границе слова. Слово 1 используется программами, написанными на языке PL / I. Слово 3 - адрес последующей области сохранения, для последней он равен нулю. [19]
Вызываемый модуль производит перезапись содержимого регистров в слова 4 - 18 области сохранения вызывающего модуля и приступает к исполнению. При написании программы на языке Ассемблера эти действия должен предусмотреть программист. Если же программа пишется на языке высокого уровня, их выполняет компилятор. [20]
Вызываемый модуль производит перезапись содержимого регистров в слова 4 - 18 области сохранения вызывающего модуля и приступает к исполнению. После исполнения вызываемый модуль загружает в регистр 13 адрес области сохранения вызывающего модуля ( второе слово), а в регистры 14, 15, 0 - 12 переписывав. При написании программы на языке Ассемблера эти действия должен предусмотреть программист. Если же программа пишется на языке высокого уровня, их выполняет компилятор. [21]
Вызываемый модуль производит перезапись содержимого регистров в слова 4 - 18 области сохранения вызывающего модуля и приступает к исполнению. При написании программы на языке Ассемблера эти действия должен предусмотреть программист. Если же программа пишется на языке высокого уровня, их выполняет компилятор. [22]
Иногда при передаче управления из одного модуля в другой не требуется возвращать управление вызывающему модулю. В этом случае адрес возврата в управляющую программу нужно передать модулю, который возвратит управление управляющей программе ОС. [23]
Первым действием программного модуля должно быть сохранение общих регистров в области сохранения, переданной вызывающим модулем. Первоначально вызывающим модулем является управляющая программа ОС ЕС. Содержимое регистров связен должно сохраняться в любом случае, так как их содержимое может быть изменено системными макрокомандами, в которых тоже соблюдаются системные соглашения. [24]
Таким образом, регистр 15 содержит адрес входа в вызываемый модуль, а регистр 14 - адрес возврата в вызывающий модуль. [25]
Информация, находящаяся в регистрах вызывающего модуля при вызове, должна быть сохранена на период выполнения вызываемого модуля и восстановлена при возврате управления в вызывающий модуль. Сохранение регистров может осуществлять как вызывающий, так и вызываемый модуль, однако принятое соглашение должно соблюдаться при всех вызовах модулей. [26]
Необходимо отличать внешнюю спецификацию модуля от другой документации, такой, как описание логики модуля, так как логика модуля может изменяться без воздействия вызывающих модулей, а изменение внешних спецификаций модуля обычно приводит к изменениям в вызывающих модулях. Внешняя спецификация модуля может принимать ряд физических форм в зависимости от включения шести перечисленных выше категорий. [27]
Важно отделить внешние спецификации модуля от другой документации ( например, описания его логики), потому что изменение логики может никак не повлиять на вызывающие модули, а изменение внешних спецификаций обычно требует изменить вызывающие модули. [28]
Важно отделить внешние спецификации модуля от другой документации ( например, описания его логики), потому что изменение логики может никак не повлиять на вызывающие модули, а изменение внешних спецификаций обычно требует изменить вызывающие модули. [29]
В задачу модуля-связки входит: установление среды языка, на котором написан вызываемый модуль, построение для него нового списка параметров, вызов требуемой подпрограммы или функции, восстановление старого списка параметров, возврат управления в вызывающий модуль. [30]