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