Команда базовый адрес
При выполнении команды адрес данных вычисляется как сумма содержимого регистра базы и смещения. Но смещение вычислено транслятором относительно базового адреса, указанного оператором USING. Поэтому при выполнении команды базовый адрес, относительно которого вычислено смещение, должен находиться в указанном регистре базы. О правильной и своевременной загрузке всех регистров базы, используемых в программе, обязан позаботиться программист. Он должен в своей программе записать команды, которые при выполнении программы помещают в ^ регистры базы те самые базовые адреса, которые указывались в операторе USING. Команды, устанавливающие содержимое регистров базы, должны выполняться ранее, чем команды, использующие неявные адреса, базируемые этими регистрами базы.
При трансляции никаких ошибок не будет обнаружено, потому что транслятор не анализирует, имеются ли в программе машинные команды, которые загружают базовые адреса в регистры базы. В процессе выполнения программы адреса будут вычисляться как сумма содержимого регистра базы 3 и смещения. Но в данной программе отсутствуют машинные команды, которые помещают в регистр 3 необходимый базовый адрес. При выполнении программы регистр 3 будет содержать некоторое произвольное значение, не равное базовому адресу. Поэтому программа будет обращаться не к тем областям памяти, к которым необходимо. Для того чтобы программа выполнялась правильно, необходимо загрузить регистр базы 3 значением, указанным в операторе USING. Обычно регистры загружаются с помощью машинной команды L. Но команда L в поле операндов должна содержать адрес памяти. Этот адрес тоже должен быть представлен в виде регистра базы и смещения, а регистр базы еще не подготовлен. Значит, команда L не сможет выполняться правильно. Такая ситуация всегда возникает, когда нужно загрузить базовый адрес в регистр базы в самых первых командах выполняемой программы. Эту задачу можно решить, используя команду BALR.