Cтраница 4
Динамическое распределение памяти с помощью базовых регистров, описанное выше, имеет определенные недостатки, особенно проявляющиеся в системах с распределением оперативной памяти. [46]
Ассемблер отмечает в специальной таблице базовых регистров номер общего регистра R и заносит в нее значение выражения V. С этого момента Ассемблер считает, что OP ( R) можно использовать в качестве базового регистра и что при выполнении программы в младших 24-двоичных разрядах OP ( R) будет содержаться двоичное представление значения V. [47]
Таблица базовых регистров содержит номера базовых регистров и базовые адреса, объявленные операторами USING. Эта таблица состоит из двух частей: в одной части хранятся номера базовых регистров и базовые адреса для перемещаемых неявных адресов, а в другой - для абсолютных. [48]
В качестве базы используется содержимое базового регистра ВХ или ВР, в качестве индекса index - содержимое одного из индексных регистров SI или DI. Смещение кодируется непосредственно в команде и интерпретируется как целое со знаком. В зависимости от значения смещение disp может быть как 8 - так и 16-разрядным. [49]
Модификация адреса по индексным или базовым регистрам в большинстве автокодов обозначается номером или именем регистра и размещается после операнда. Например, в автокоде IBM номер регистра указывается в круглых скобках. При модификации по нескольким регистрам они перечисляются обычно через запятую. Такой способ указания модификации не дает возможности контролировать загрузку регистров и разрушение их информации, поскольку отсутствуют имена величин, засылаемых на регистр. Для этой цели в автокоде ЯУЗА модификации можно указывать именем модифицирующей величины, а при наличии нескольких регистров комбинировать имя регистра с его номером. [50]
Значения адресов, представленных в базовом регистре, суть переменные - они вьг-шсляются по ходу выполнения программ операционной системой и программой пользователя. Такой принцип адресации операндов позволяет распределить основную память для програ. [51]
Следует подчеркнуть, что выделенные программистом базовые регистры должны обеспечивать возможность базирования любого адреса в команде. Если же в процессе трансляции при обработке какого-либо символического адреса а транслятор не сможет найти в регистрах, указанных в команде USING, подходящей базы ( так чтобы смещение адреса а относительно этой базы было меньше, чем 4096), то будет зафиксирована ошибка и трансляция программы не будет завершена. [52]
Единственный операнд этого оператора указывает на отменяемый базовый регистр, а вместе с этим становится недоступной и связанная с указанным регистром базовая точка. Переназначение базового регистра также отменяет ранее приписанную к нему базу. [53]
Для адресов, составляемых с помощью базовых регистров ( разд. [54]