Mostly correct.

You represented bit 31 incorrectly, and you have too many nibbles.  It should 
be xxxxxxxx_8xxxxxxx.  Bit 31 can be on in virtual addresses above 
xxxxxxx1_00000000 (e.g.,12345678_9ABCDEF0), but any addresses between 
00000000_7FFFFFFF and 00000001_00000000 will cause a program interrupt.  IARV64 
will return only valid addresses when asked to get new storage above the bar.

The main reason for disallowing bit 31 within the 2G range from 
00000000_7FFFFFFF to 00000001_00000000 was not that it was used as a flag bit, 
but rather that it is used by the hardware to signal 31-bit addressing for 
addresses between 00000000 and 7FFFFFFF when the CPU is running in 31-bit 
addressing mode.

z/OS is the only operating system produced by IBM that I know of that enforces 
this rule.  The invalid range is not invalid under VM, VS1 (if it still 
exists), DOS/VS (or whatever it is called now), TPF, etc.

Bill Fairchild
Rocket Software

-----Original Message-----
From: IBM Mainframe Assembler List [mailto:assembler-l...@listserv.uga.edu] On 
Behalf Of Tony Thigpen
Sent: Thursday, December 09, 2010 6:20 AM
To: ASSEMBLER-LIST@LISTSERV.UGA.EDU
Subject: z/OS IARV64

I need to verify my understanding of 64 bit storage in z/OS. I thought I
understood the "bar", but my understanding has been called into question
by someone that should know so I need to verify what I think I know.

It was my understanding that addresses with bit 31 "on" (xxxxxxxx
xxxxxxxx 1xxxxxxx xxxxxxxx) are considered invalid. This was imposed due
to the convention of using the high-bit of a (32 bit) register as a
flag. So, we can use storage below the 2 GB line or above the 4 GB line,
but not between them.

Secondly, if using IARV64, you will never receive storage that includes
this 'invalid' area.

Did I have it wrong?

--

Tony Thigpen

Reply via email to