Just yesterday I wrote some Assembler code to improve a system function. It's always fun to get some Assembler statements to work.
I know, high level languages, such as Java, C, PL/I and COBOL, are much more productive. But sometimes, if your code is very close to the hardware and if you want to use new instructions, Assembler is the best language to get things done. We do not have the z/VSE compilers, that support the usage for some system interfaces and you can't use high level languages for Supervisor implementations, except an internal PL/I like language. That is if you want to use system services, e.g. to allocate and access 64 bit virtual storage (IARV64 services), you need small Assembler pieces to use 64 bit virtual storage. z/VSE's high level languages do not support 64 bit programming. There are many more services, where it's easier to write a little Assembler program.
Nowadays it's not easy to find Assembler skills. Most junior developers don't want to go into this basic coding. However, I made the experience in our team, even after some
reservation at the beginning new z/VSE team members started with Assembler - and after some development items they now love Assembler.
In z/VSE we use the High Level Assembler (HLASM) books and the z/Architecture Principles of Operation (POP). These books are the base for Assembler programming.
The HLASM books are here.
The latest POP is here, or you may download it from our documentation page. The z/Architecture Reference Summary is here.
If you want to see a large chunk of Assembler code, you may want to install the z/VSE generation feature and generate a Supervisor listing.
There are also high level system and Assembler compilers from vendors.