Since the construct pre-dated long-displacement, it's quite possible that 
it means very little with respect to long displacement. Or perhaps, for 
long displacement, the "end" is to some extent ignored (although it might 
be used to select from among multiple choices).

I think that the main reason the construct was introduced was so that the 
coder could make it clear which register to use when there might be 
overlap if the entire 4K range was in play.

For example,

USING *,RegA
USING *+1000,RegB

Produces ambiguity when referencing anything in the offset range 1000 
through 4095, which can result in
** ASMA303W Multiple address resolutions may result from this USING and 
the USING on statement number ...

As opposed to
USING (*,*+1000),RegA
USING *+1000,RegB

Has anyone not been burned (in particular, prior to that warning message) 
by having coded 
USING *,RegA
USING *+4096,RegB
...
* Failed to "DROP" 
* Some place where RegA,RegB does not have the right value
BASR  RegC,0
USING *,RegC
... Some reference that happened to be closer to RegA+x'1000' (i.e, RegB) 
than to RegC so that the assembler used RegB as the base reg


Peter Relson
z/OS Core Technology Design

Reply via email to